Top.Mail.Ru

[Руководство по Java для L2J] Шаг 1: Введение в классы и методы на примере L2j_Mobius

[Скопировать ссылку]
Astraliya Опубликовано 2024-10-16 21:14:10 | Показать все сообщения |Режим чтения Распечатать Назад Вперед

Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!

Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
4 L7 `+ P3 I1 p# z0 V1 P1 Q2 V( _5 S, l' C

+ k: n+ }& H- {7 h1 L- ^Шаг 1: Введение в классы и методы на примере L2j_Mobius
6 M( D2 D1 J, P% s0 l5 b5 wС статьёй можно ознакомится в разделе Обучение > Читать
. Q. u8 `$ I" w8 S6 m* i7 |' `1 n$ j/ j' f0 T5 K& m4 ]
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.+ n" f; _/ f) T& D6 y
5 i  b8 n! L. m/ E% m* R/ c7 m& C
Обсуждаем:
' H' f) C7 F' L$ D
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    # q' f. d/ E' g/ N" m# ^* d  O0 f
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!9 ?2 B9 X$ o1 p1 ?, Z

" Z& p! j7 g. l$ N% q

7 E5 a. ^# I9 O. w& p0 ?0 nИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!$ f$ J" y7 B  _7 D5 X

/ D1 ~  Y- q) p+ l/ {
6 B7 Q: O! ?$ a1 F# K
/ f$ j5 e5 a& y% }" [
3 O  {2 I8 P+ @. r" D/ _' C0 i' {( k: F6 u. k  W

Сообщений в теме:6

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?5 }- ^0 M7 h0 M- `. Q
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17; g* L0 w7 U: F
Почему мы используем ключевое слово this для ссылки на п ...
  a7 E  E. {8 U+ Y  a
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
! d9 n& T0 |2 I5 G. u  GПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.8 ?3 C& k: g3 f
+ C1 A1 e& r: E2 {' V
Вот пример:5 e( r4 W+ L& \$ @/ J
  1. public class Player {
    4 O! ?' P/ D% D  k
  2.     private String name;
    - o) ^" y' A8 Y6 V
  3. 5 g% g# B% q( _& i
  4.     // Конструктор3 j8 y7 M8 j9 R' w  I, x) o9 F
  5.     public Player(String name) {4 s& P& \! h, K  ^
  6.         this.name = name; // Используем this для указания на поле класса" n/ P/ [( R" a8 _
  7.     }, t5 Y9 A, F9 g; `1 ~5 `: P  D7 W$ s& m
  8. + `5 R8 v  r  a6 B9 w
  9.     // Геттер для имени3 J4 y+ I0 k, h) [
  10.     public String getName() {6 [+ F  b6 l9 s. z, K/ P
  11.         return this.name; // Используем this для обращения к полю класса+ c# f9 U# e% A5 G0 z, j% S* j
  12.     }6 h. d3 h( f' {9 c& X
  13. }
    0 y) ?  X) F0 Y# C+ _  n
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
/ J8 Q) j- A/ \' z- x) U3 I+ G' _3 x) z4 H6 d6 R( \* n" q* X
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    3 J5 L! ~; y) M
& r$ {  x5 i# L- V6 g
Пример передачи this:
8 {5 T: g+ W7 h4 }' V3 \# f) c5 _
  1. public class Game {
    # B; n( D3 L2 Y1 m& q, `; B
  2.     public void start(Player player) {  a$ x0 ]  p' g
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    6 P, N, j, \! _( @6 l* J
  4.     }, `* V$ q4 R. v: i
  5. }& y  D4 Z- o- r/ d% w' [1 z2 G
  6. * Q4 K  |' }" w5 w5 d1 g1 D* z( L
  7. public class Player {
    / e3 }% v+ K  u
  8.     private String name;
    / ?. \$ Y5 ~* d: D) c5 I: J
  9. 3 {8 ~" n# A2 g
  10.     public Player(String name) {
    0 [3 X, D$ m9 v4 r" Y
  11.         this.name = name;
    5 \8 g$ S# l# d7 n8 y
  12.     }
    - {5 I4 J. U1 ^4 |  v- L
  13. " u/ T+ a8 b* i9 S
  14.     public void joinGame(Game game) {
    3 D+ I' a, R. T' Z2 B: A1 n: v
  15.         game.start(this); // Передаем текущий объект Player) E  K6 B) v8 q7 e- E
  16.     }% q9 G% I0 d, Y2 [
  17. }. J7 _# k, X# L- m" g
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.8 z$ F# a1 g2 Y" a4 z


+ F/ @8 h/ p3 i' ?0 J# ]) m3 q7 ~Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
0 F+ U! f' f% X2 O; ?) ]' |! ^
% s* f" @1 i" R& i* I) P3 m
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
+ P3 s1 B/ n8 r4 j2 g. VКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 9 t. V2 [* g) P6 o) X
Mike123 опубликовал в 2024-10-17 20:05
3 a+ q% v# `& G, b  jДобрый день!
& i$ B, I  @1 e" x$ g- x( x: |Как создаются и вызываются методы в Java? Мо ...

' i4 m7 e' B# GПривет, Mike 123! ?) h5 t. a5 e0 @! Z1 y6 `
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
) m' R/ e7 ?( p" f0 [
0 Y9 e5 r( z) l2 `Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.) H2 [/ U9 V. [% K& b! ?8 {. V
5 T) Z' K$ L5 q: B) I% d
- X- u( N- P$ ^
Как создаются методы в Java?4 P( ~0 L1 B' N/ j

- k( E. L- w* E/ w2 e4 `) Y7 gМетоды в Java создаются внутри классов. Вот базовый шаблон метода:" ?$ z: _' O' ^0 o# I
( _2 H1 L+ o$ _! x; k6 E7 Y# [* H- @; R
  1. public returnType methodName(parameters) {- p) H+ G9 g: ^% V8 V$ W9 B- m
  2.     // код метода) j2 h2 {( _8 V7 h# l
  3.     return value;
    - D9 G$ c* I* ]% f* N
  4. }3 o" j" A1 d- i- Z% L- L3 _
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).$ V* C2 F% D2 k, T3 Y

2 j1 ?- b, w! s, f) |0 B# y# WТеперь перейдём к примеру.
6 o; c* u2 n  t. W* S4 ?3 K) Y+ r5 E: m9 `# G
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
2 [. m9 v- c1 Q9 p* ?% @
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    2 G) s+ H0 [& T4 w7 D- b( x
  2.     // Вызов метода атаки NPC
    & j+ C0 ^! u( Y$ C8 z: H
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    ) S! l' G/ `1 d( m6 U9 ?# n8 T
  4. }
    ' ], y* \" k8 P
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
' l4 s) B; }( D! j
8 Q3 E* U4 K& r# b  i' Z
. _# }6 v' d) Q$ u, n  DКласс Npc.java — вызов метода, g* t8 {8 M3 |0 ?+ t# f/ B
9 N: ^# z: u" {9 y' u" [
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    6 r& B1 z& Y+ U! U: H( h% q4 U
  2.     // Логика получения урона NPC
    ( z+ r$ E; ]3 E: z; M
  3.     this.health -= damage;  // это.здоровье -= урон;
    # x7 }6 Y& A9 w* e3 U# }8 d
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());    k4 U3 V" K# C6 M- R
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    # u$ \5 ^, n' B) z% c# N( k- |% L
  6.    
    % i- N3 i1 K, f
  7.     // Проверка на смерть NPC+ A( B6 g  i' e9 x
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)& K* i' m( t* m6 ]9 T- s( X
  9.         this.die();  // это.умереть();0 K% y; T' ?/ J8 l, I2 W
  10.     }0 ]: l/ m+ G( \( @
  11. }7 i& m- [# A! H# j3 J% W, x
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).# {2 _+ N5 a( K! T5 \! j8 r- l8 r
Пример взаимодействия (с переводом)8 Y2 A) j7 O6 {* X: V' z
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    * x4 [5 i- C. v" {( m5 h* D- t- o& Q
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");7 s* Q3 p3 i( ~& t: E" A5 f
  3. , A( o- k' z8 e/ R9 x7 S
  4. // Игрок атакует гоблина
    ) x) O$ \  Y1 z  n: e% D
  5. player.attack(goblin);  // игрок.атаковать(гоблин);0 }0 B7 a( I7 Z/ C1 H
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. - P# E& @$ S! E% W9 P% P6 _
% M/ o3 j4 ]% M0 J- o/ K9 j
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
4 u* B1 X* E, k$ M& L5 NУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
; F" p& _! L# |& ~4 b. a
/ W/ l9 |- G. o
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30  k" _! P( {7 A( V0 U
Привет, Астралия! Огромное спасибо за твои разъяснения ...
6 U( `" ~4 ~. P3 g: K
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
0 l3 ~# |, a# b4 S, `+ [3 `1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    # x$ Q4 ]& g1 `$ |, _. E% O# S4 _
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    2 s9 z! }9 t9 }9 e6 g  F

* @- G& G: C9 I4 l! |! X% j
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)+ F3 O; `" O  h+ L, w0 X% p4 _
  2.     // Логика взаимодействия игрока с NPC
    0 V2 L* Q3 V2 b  l; S1 U6 B/ p
  3. }
    ( I0 W( R# H# d! Q% C; \8 r# H+ x
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:# y. H) n. q! i  g1 ]$ E! x. l9 h/ c
7 J# q" o- o6 G3 P* B; J. I$ u
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    # V' J% W- }' }) t$ [  y
  2.     // Логика перемещения NPC' q/ X9 g4 ]$ \# Y
  3. }7 [/ M/ e) z1 u/ E7 U! l& D
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    6 t! @, r+ t. [: S( I+ A  S

6 u0 f6 _8 k  X
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    4 K* C) s9 ]# p1 n! a7 \* Q5 n2 p, x( P1 G
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    , P0 a: U6 O1 s, P
  2.     this.health -= damage;  // NPC теряет здоровье2 r) E1 t& w5 ]. r' v& |1 d
  3.     2 P& o% j, `* K& f' `4 B
  4.     if (this.health <= 0) {
    % R+ b" _* q2 ]0 ~' C
  5.         die();  // Если здоровье упало до 0, NPC умирает
    * k1 D/ Q6 k4 J/ k8 D' H* _
  6.     }$ _. B: n9 n4 h9 I6 V5 L
  7. }
    ' l8 |: Z. r. _4 A
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    # f: N2 w3 ~  ~8 p+ [: T

6 i9 \; D; v4 |9 M& ^! r$ B
  1. public void die() {  // public void умереть()& s& b5 S" M! \
  2.     // Логика смерти NPC9 t3 t; S. e, Q3 k3 v! _3 W
  3. }: M( `$ z" B  j6 [, @1 S  A
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    6 x+ a( F* V" l  b  [/ T

5 L$ k! c- S3 C/ `- e: k7 ^7 B: _$ U  G% h. _6 r
  1. public boolean isDead() {  // public boolean мертв(). g8 i6 w8 s2 M7 D3 F
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 09 w( J+ `8 n' [. i/ r% ~8 H
  3. }
    - n, D# T9 T& Q& w, p/ V2 e
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    # h) W3 a9 ?+ h: w* O* {

2 @' L  m  e5 B* {7 Y' i; g* e
  1. public void heal(int amount) {  // public void вылечить(int количество)
    & v- H- D: v9 w3 m7 _; c$ }( T' v
  2.     this.health += amount;  // Увеличиваем здоровье
    ' M. x1 S- }! Z8 [$ [/ U; C
  3.    
    & B3 z. W; j; T5 O+ O4 }
  4.     if (this.health > this.maxHealth) {
    8 p$ C' t* B* a3 }
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    ' H' o5 U: N7 F8 H
  6.     }8 V8 C" t; B2 Y+ t/ @
  7. }' f" I- P* ?; [8 \6 i
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:* e+ W$ L( @) b

4 d5 d) D7 N2 I" D
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)/ @' z8 _9 o- A  I8 p' [
  2.     // Логика применения скилла NPC
    * y3 Q! z- L9 m! R& g. n
  3. }
    - _7 I* w* S6 {# e2 a9 I; X# w
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    " m5 B. B# a1 E$ ?
$ j$ z8 x3 F3 _0 r
  1. 4 g8 ]; G3 B' I( R* f  a+ x
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    , j* h; X7 |0 G2 _" E
  3.     // Логика взаимодействия с NPC, ?9 L" C& H" Q2 |2 j  @3 t
  4. }
    & s# R& m8 Y( U: @  j! t) L/ q' l
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:+ ?, P: n; w1 E0 ]: L2 h7 s, T

. u( e; r/ y: E0 m' m) ]0 e
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    - N) I0 J! q* w# q1 ~9 H: D
  2.     // Логика открытия окна диалога
      d- |8 Z- D& G$ _
  3. }- l$ [- K- ?2 m* H# S7 H7 O4 V7 a
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
  ^5 }& \3 A+ Y0 AЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
+ Z; _/ ]+ _" i9 ?4 U, Y9 x  d
( g5 S0 ]+ s0 ^1 ^' S% \) j4 B  q, Y( u: x9 t  r4 }! s* S

) m: G- S% s: ?' o4 ]6 t# Y" |- ~4 V
3 M) k. \+ ]0 o0 M8 F
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

Правил начисления баллов

  • Выдающийся вклад

    Прилагайте постоянные усилия для процветания форума в течение длительного времени или много раз выдвигайте конструктивные предложения.
  • Авторитет сайта

    Участники, внесшие выдающийся вклад в работу форума

подписок0

подписчиков0

постов9

Опубликовать
Сектор творческих людей
Горячая линия

638638758

С понедельника по воскресенье с 9:00 до 23:00

Обратной связь

admin@artace.ru Онлайн

QR-код

Powered by Discuz! X3.5© 2001-2021 Comsenz Inc.