Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 # c1 M) e( `7 i; C. Q
8 a+ `, \# A  V
+ Y* `/ U, V  u
Шаг 1: Введение в классы и методы на примере L2j_Mobius
5 C7 ]4 k3 ]2 x5 TС статьёй можно ознакомится в разделе Обучение > Читать) `, z3 `- ^. j6 l4 w% ^9 u7 O

& f' s7 X4 M6 h" tДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.9 q: e" v/ W5 n2 J

+ s! {) R1 w* G8 R7 T1 _  z$ aОбсуждаем:+ i9 |5 E: D4 e" z7 s2 J8 t
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.# J! V" G6 v  u2 w4 {) L) V) M
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
$ D+ j( c: p8 s1 y# [0 I; T( h
; R+ _: V. t! t) A

) f# w  U; |5 _# s# y3 k" vИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!% k. T' @; }' i  O# h$ ]2 w3 \, g* X

6 F- N/ ?) L5 n/ V; J( C6 d: N: ]9 ~; R2 ^- K$ {4 t

* Q, ?$ j0 l- ]& H8 w& {6 r& ^; k; r1 |- ~

: q; u9 r  F; Z7 ~

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
2 x3 _2 F. i+ d# J6 r0 g9 k
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17  a; f) t* J& R8 y, P
Почему мы используем ключевое слово this для ссылки на п ...

& B' I. B9 Y* Z# u* E% \Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса." s! k, i: i" i  E
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.  B' P1 m" y6 h4 K" }7 g, n

) [7 d: E  j) d+ @- e7 F. xВот пример:3 S0 o" r) e9 ~9 n) K6 h; X
  1. public class Player {
    & l+ |& b8 B  j) W- F! M+ b& Y
  2.     private String name;
    . Z& P4 _$ d9 P2 Y! X5 i
  3. : R% }0 p7 r+ r6 f8 A( x
  4.     // Конструктор- h7 ]; R  W/ Z3 B+ _: C7 M
  5.     public Player(String name) {
    4 A- K  i  E/ @5 i! c$ k
  6.         this.name = name; // Используем this для указания на поле класса  a5 \5 U3 ^/ v4 W4 z' |
  7.     }8 w7 y% b# t% S6 D3 j0 V- O
  8.   r/ h* `# s( v9 x9 `
  9.     // Геттер для имени
    / E3 x3 D6 \0 n- i% }
  10.     public String getName() {
    ) x% I% d" T; Y9 m  x
  11.         return this.name; // Используем this для обращения к полю класса
    1 H  u* ?( y# \
  12.     }  M: T( W/ H6 q4 A
  13. }9 J9 J1 L% {% m; o0 y" q
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
* u# L9 ]! a0 D# F8 `: k6 r: r6 d) |7 C9 O3 m" K; b
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.: `* ~& w3 M+ d2 v

/ T$ P7 p5 u1 l/ M2 b. AПример передачи this:
! Q) q: J% i% L
  1. public class Game {
    % G0 u" u; X( w9 @6 o
  2.     public void start(Player player) {2 @4 @$ ?; E$ A7 a7 [. {
  3.         System.out.println("Игра началась с игроком: " + player.getName());
      N* A: w0 `' e' o
  4.     }
    / o, F2 `0 M; C- t, X
  5. }
    5 Y  D( Q4 j: b$ @% @
  6. ( N/ E) q8 n( u/ V
  7. public class Player {: y2 s+ [+ \( M0 P7 F+ i
  8.     private String name;& e8 y! _3 T! N) v2 W: I* O

  9. 8 z& p9 O! E4 o1 }' R, b8 s
  10.     public Player(String name) {& u: I3 o+ Q  S" [3 h& ?
  11.         this.name = name;
      r& Z2 p; p4 B/ n" v1 `& A$ w
  12.     }+ f0 d2 p' [) x
  13.   g: r. w6 ?& Y. Q
  14.     public void joinGame(Game game) {) v- N* q9 F: E4 _/ l8 Z) Z
  15.         game.start(this); // Передаем текущий объект Player
    9 f6 W' Q9 g) h( s
  16.     }
    % \1 z' c. {  D" U0 n  _4 y$ a
  17. }$ {$ S- X1 g, i9 X
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java./ R7 l+ O7 H+ |& G3 \. A1 D

% u( @- m  G  ^  z
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
$ v/ O. m# A+ R6 T! P7 ?' r. c0 e
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! % d, t  j  r- N
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
, W- [3 N9 ?. N, D  j+ i
Mike123 опубликовал в 2024-10-17 20:054 k4 x; R* K# f0 j: y$ ]
Добрый день! 4 J7 r- o) L4 V4 _/ H: a
Как создаются и вызываются методы в Java? Мо ...
# ~8 |6 s+ D2 x
Привет, Mike 123! ?0 I6 o6 O5 ]7 r' P, p# C
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.) U* Z% \7 _7 X6 r% f" U- ]
* p! o4 A) \1 O+ Q& x; W- ^6 c$ y
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
: w! c# n1 ~  N5 }) D  K7 e! U) T; a1 o& x+ u0 D& v
' N' ^1 ]- q' |' B& c  C
Как создаются методы в Java?: q7 r0 F1 _2 k( z4 F

1 {2 ^% Q- Y5 w1 r- I* m% {Методы в Java создаются внутри классов. Вот базовый шаблон метода:/ a  z; Y) X3 @2 Y: V- P3 \) l$ |

4 q/ j/ P6 v: J- B) d. e0 z8 q
  1. public returnType methodName(parameters) {
    1 D9 C2 |: Z" _1 p
  2.     // код метода5 M3 q. \+ m! H! Y
  3.     return value;
    5 U3 {" r; I/ F9 A4 Q
  4. }, g' Z$ a* g; ]& Y
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    4 @" k6 @8 q1 C+ [: g
3 J5 F/ R2 L$ s/ E/ x( ^# q
Теперь перейдём к примеру.
" o+ G% |" Z4 M3 u, `
& e) r4 Q! W, _) RПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
" h$ u0 j9 o1 K* u$ X; b8 p1 w
  1. public void attack(Npc target) {  // public void атака(Npc цель)1 Z5 M) c) J' D( H) `9 l% D
  2.     // Вызов метода атаки NPC
    2 D8 {; m! g( l6 I3 |
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());' l$ r- A; f. b) C$ m' m9 q% j
  4. }7 |% c+ K1 p- r
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).: c2 ]1 v& U: e0 c# [% O; e
. T7 h6 A9 Z& t) D3 F8 y0 p8 ]

( h9 V9 e5 M" WКласс Npc.java — вызов метода
$ Z8 o$ F" ?% d: ?, o
( l% [1 O+ n3 T3 i
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)7 z2 ~9 y; s; u& w' A. ^6 S2 Q
  2.     // Логика получения урона NPC# g) x% z% Q& R6 L: {0 F
  3.     this.health -= damage;  // это.здоровье -= урон;* ?. u9 j2 u' ~5 s- F9 ~# y
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  0 l. s( O- P7 l3 P6 {' P
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());' Z- j. B: c; a& K& |6 h: T: ~' a
  6.    
    . W3 A5 u- l# a
  7.     // Проверка на смерть NPC) t0 |5 k! \1 y# Z
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)" k- v1 P, A9 Z& B6 b8 P' S
  9.         this.die();  // это.умереть();
    2 u% @/ N" t' m1 d9 t+ R7 v
  10.     }4 Y" U" `# m4 V: w
  11. }: @5 i- K5 S4 y2 B+ i7 P3 j4 a
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    ( |/ ]$ ?! L; ^3 h! b
Пример взаимодействия (с переводом)
! T  h" \# Z3 _
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    ) a5 |9 D! m: w
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    # K  U1 v$ O. ]0 i7 s3 d
  3. 8 d7 q6 A% H" p1 m
  4. // Игрок атакует гоблина) `  j8 t4 g- x; I; }6 p  V
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    3 G" y0 R  @! Y; V
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
: \9 t% m1 @$ ]. q" x( n/ \
0 E4 S7 ^- w' F* ]
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.5 y9 T: p& J9 q
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
9 X. A3 ~8 X% L; j, I& \
% M2 A4 w. r, t* h0 y, h
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
# y1 u4 z9 R) ?3 w. aПривет, Астралия! Огромное спасибо за твои разъяснения ...

8 i+ A2 O( a+ ?$ c) FОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.1 X6 ~3 C3 V, v' J5 h
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    7 ~: p& Y* l" r# ~7 \
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:5 W6 T2 [' E- g, J* b2 T! Q

" ^9 O+ F; n9 C5 C+ A
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)8 Q, B4 D/ d1 g; D+ w
  2.     // Логика взаимодействия игрока с NPC
    $ s1 I: a1 k3 i" d+ d) B
  3. }( Y. b* h3 S* g) i
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:/ r" Z' h8 V+ o% N' U
( m- _) i9 _* Q5 B7 j
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)6 v, Z6 y/ U8 a% c3 ?5 }% `
  2.     // Логика перемещения NPC
    / W1 s) t3 ^& ?6 d6 Y
  3. }
    " t2 [6 {' t) l4 \# T9 _
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:4 k6 V$ P8 ^- {3 O5 \# z; N
* `& ^& p* [- N
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример3 `" t1 _7 f4 f: h; s! E
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)5 p$ |) k9 E8 h' h" _
  2.     this.health -= damage;  // NPC теряет здоровье
    : X% E& t+ d' n" {; \. A2 ~
  3.     : V  m- m3 b0 g) g! G; z
  4.     if (this.health <= 0) {- h4 p6 W0 v" U! y* V$ Z
  5.         die();  // Если здоровье упало до 0, NPC умирает
    & r* Y7 K! X7 T1 s
  6.     }
    3 [5 D, K+ z- f9 y2 |. w% {- K) H7 p' F
  7. }
    / c% b% F) A" M/ h
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример2 K4 C& @8 U3 B2 `4 k& y2 q1 c4 j

9 I" d6 X( `& t& Q
  1. public void die() {  // public void умереть()
      X: g6 n/ X* a! G
  2.     // Логика смерти NPC
    $ s* k5 f9 a, g; g6 r+ P* ?; A
  3. }
    ) [( ?+ u6 p+ R' F
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    : k' U% Y/ Q* C2 ^2 D3 i- ]! ]

, ^' a* x: z0 k1 H6 K8 ]" x
( o% U6 Y1 L/ L+ F$ q5 g
  1. public boolean isDead() {  // public boolean мертв()
    , ~2 z" A8 g! z
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0% g3 k1 C2 m- g7 G+ Y
  3. }( M0 [9 }' K$ ]9 N
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример" s- ?4 a  F: W7 s( g. |, c+ |

  t: z$ |$ P9 V
  1. public void heal(int amount) {  // public void вылечить(int количество). b9 b# n4 C1 R! f  E% i
  2.     this.health += amount;  // Увеличиваем здоровье
    * D6 Q  X- R" E* |) n2 V* s
  3.    
    8 W* m/ j' o2 ^, _2 K3 f5 V) y
  4.     if (this.health > this.maxHealth) {
    ( T. Q) {. B! ?! l+ q4 j4 P- n
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального4 i3 ]' O  u; H/ F: g0 u* p
  6.     }$ D/ ]8 ]; S1 Q: Z& J. a
  7. }
    - y! ~- |( t4 N+ A) m1 m1 w
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:6 q0 q0 X4 f) b7 M) ^
' D- N, D; r, @1 F9 X" P
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл); W4 S3 R2 p, W- Z' N3 L0 b
  2.     // Логика применения скилла NPC: E* n8 V! G- w6 l4 K: U! {' ]$ m! r
  3. }
    ' l6 P2 a  F8 K
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:5 `4 ?6 O. y' V+ {6 M) y

: j( a' ]9 p8 K2 O

  1. ( T  ^' u/ G7 j* D( N. H
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
      W$ `$ ^2 ?' W: _3 G; {
  3.     // Логика взаимодействия с NPC3 S  \" n: O8 @4 \9 \. Q% q8 |
  4. }
    ( H! e8 ?* S* i1 a) n
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    8 w# u+ _. O, c* i
4 d3 m- C( ^# q" y# ?# K
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    $ p5 i+ n, A2 u" Y, K
  2.     // Логика открытия окна диалога# b5 T* J6 _2 g9 p& L" y( N
  3. }! A7 F3 y+ S6 l
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.* x# r& y0 Z& a/ G4 M
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
; A  d5 Q! `1 M: I& Y4 ~1 N. N1 i2 p& R( L* Z$ \

% u, n* z/ x% m# D/ N0 A( ]/ M
  @& s/ [( u8 j$ D6 x/ \/ c1 t9 C( r+ [  ~* Y5 F2 M7 r
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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