Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
! t) V! j6 g3 o5 |
  W9 X9 ?7 a& C9 w. Y$ a. L9 {. Z3 r' y: m3 F
Шаг 1: Введение в классы и методы на примере L2j_Mobius3 @! M9 p8 e' ?8 z
С статьёй можно ознакомится в разделе Обучение > Читать
3 f2 `& ^2 ~3 R# j; i
% P5 U' R% Z2 eДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.5 `9 |4 z% M) Y( `! J
1 S: f- k0 e# k  `* u- r) c
Обсуждаем:. ~. X' J0 k3 {
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    $ h2 K) C0 x# ^# }
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
5 n1 F& u- j( C& I7 I7 m. G- L0 V, w$ N, }3 Z+ }5 m$ \

. \2 d+ A" T* B5 v0 |% M
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
" [4 n5 A5 M  z- y; f
+ q  c$ d4 b8 ^/ ^4 q$ W) R& i2 }4 t, [% P1 c( U: t
1 y, j+ W  v% R2 ]. B5 F
- j- N4 Y- e: y% o8 L

: T; b  D& ]' P3 @8 q

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?9 [" ^0 l( \1 y( H1 F2 O6 E# U
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:172 F0 f" ^  ~9 P2 [5 ^5 L6 z; u
Почему мы используем ключевое слово this для ссылки на п ...

( Y* X( _; |9 n  }Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
0 J" ^( p' O6 q3 D- p* MПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
/ e3 U, L1 C. ^% l1 I+ Q) B" R2 u( e0 M
Вот пример:
2 c7 c( C6 Q) s
  1. public class Player {7 l- \' F5 I2 X" d: b  K
  2.     private String name;: h' f. a3 b  f; G6 x

  3. 2 G8 z6 h2 e7 @, J
  4.     // Конструктор6 K; O- X1 H$ B. w/ o$ u
  5.     public Player(String name) {7 X. P+ f. W$ D
  6.         this.name = name; // Используем this для указания на поле класса4 |- \, ^7 R) A+ \! u. U
  7.     }+ E2 `, \5 ~' c
  8. 2 ^& m& a; j5 `
  9.     // Геттер для имени
    $ ^9 e. A7 w4 O8 }, x& b  o# ^
  10.     public String getName() {
    9 K( I& M3 q) U
  11.         return this.name; // Используем this для обращения к полю класса& m; U- B9 f0 @; H! i
  12.     }
    ) d: U- `: o; J. Q# \
  13. }
    7 {' \% \  ]+ U9 ?; O! k
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
8 s. m) R/ l% k8 D
& r2 y) c& i! I" y1 x% L: lКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    / L& Z1 |8 V& o. ?2 t
3 `* ^& c4 y; f! N. d% p
Пример передачи this:/ b6 t/ L, i2 Z0 x6 P+ B, r% h: P6 J
  1. public class Game {
    / ]. H' V' ]& J
  2.     public void start(Player player) {# E( ?: U8 F- R+ I* W
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    2 Q! u% e0 ^5 w5 d! d' Z
  4.     }# V2 Z, [5 [6 {2 e- a0 h
  5. }
    ; L7 x/ z" C" b: I+ ?, O1 ~

  6. # ~4 e& k1 m: t# b9 Z
  7. public class Player {, S( O6 S6 z0 h$ \
  8.     private String name;4 x: p1 E2 {2 V% c

  9. * g& e- f; s  j4 {4 ]2 Y
  10.     public Player(String name) {, S) U! a, g: o" B. E( s
  11.         this.name = name;" O1 C4 ~3 S: {
  12.     }
    & a/ S- J7 M; c- C6 I$ Z
  13. 4 `( v2 ~- A9 x% @0 p# Y
  14.     public void joinGame(Game game) {, ]1 ^4 O! |5 B9 @# }8 L
  15.         game.start(this); // Передаем текущий объект Player
    3 Z# M% r* D, e( f1 H9 h; O  E
  16.     }- h) c$ k. S: H0 \
  17. }. J+ b3 R% l) k6 {' N& v
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java./ m8 U# Z1 @3 U- z1 v4 P+ Y* E


' L5 M" v! Y' l0 i# cПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?8 C' ?: ?3 {2 \4 c( v

5 q. j# X$ B/ `' V3 x3 ~* x
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
! L0 ?; Q+ }2 X! sКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
8 l; [9 c! w0 G: x8 c, o5 J$ h
Mike123 опубликовал в 2024-10-17 20:05" ]6 @5 h: J1 d6 c: o
Добрый день! , t: \) U7 Y; t- v  z
Как создаются и вызываются методы в Java? Мо ...
4 R# R. E2 g: J$ J3 j  L
Привет, Mike 123! ?
9 U7 _; ?4 l, E* K% C0 D; @Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
$ }" V6 ^/ i/ b" |' m
" ~( n( k* u. V/ u5 sДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
$ F' L' {' `- d6 e$ }
! M' a+ i1 C' ?% C: A% M% p, X( V
# f* ?  q, k) b9 P9 rКак создаются методы в Java?) `  Q: r. A. Y$ C7 E! ?  l; N

3 l; U  F3 U, yМетоды в Java создаются внутри классов. Вот базовый шаблон метода:/ A! _, `* R6 K0 H3 G0 O

' m+ Q0 Z" G. s+ _1 j7 I. p7 g
  1. public returnType methodName(parameters) {8 v6 K, J; w# Q
  2.     // код метода
    7 H/ \5 w2 W$ C. J  e( k
  3.     return value;
    1 v+ c* P% d4 P  {+ @5 X0 O2 k
  4. }
    / e! o+ j9 i( U" z8 W0 _
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).3 u  U2 h. W+ ^1 F/ M
$ h/ I4 Z. _; v: a* L3 ^
Теперь перейдём к примеру.
; c& m1 D- Q1 j0 @/ Y! j0 s
$ X! q! r7 V% ~& L/ y/ r5 H5 s( rПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
- c  E4 ~( C# ^8 B9 V' x
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    + P$ v; x$ K4 u5 G$ T
  2.     // Вызов метода атаки NPC  T, V$ U! l; `  X% |
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    , g( I1 H) p7 u, K( \; c. l2 @
  4. }
    / ^- a" Y3 t/ T$ @: w
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
! B3 s  T3 _2 N3 X# R
+ r$ q0 m4 Z& x. U+ B
! T2 j9 r, O: L$ X1 H, n1 u8 I: B7 aКласс Npc.java — вызов метода
6 _& L- X3 V0 ?; A% l0 N
; ?2 e; V5 |: m1 v% x) w
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    . g$ k" U! x5 g* b
  2.     // Логика получения урона NPC
    + U4 K8 P& f# A! A7 v) ^
  3.     this.health -= damage;  // это.здоровье -= урон;
    ' E, ?- w; y, E: T9 N; V& |
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    $ ^5 ~. L% X. N
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());) z/ i6 ^6 _5 r" a4 R
  6.     * @5 T6 F2 }  m
  7.     // Проверка на смерть NPC
    ) Z! c9 a3 @; H; G( g$ y3 ?
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0); ^, A9 j6 k9 R) h+ }6 _5 V/ A* d. O, O
  9.         this.die();  // это.умереть();+ h9 [8 S3 m5 O: L" h
  10.     }
    ( e, Z" S' A) c
  11. }4 _/ L8 U" O" k( R8 A# m! J
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    - H4 q3 q8 j$ `( g
Пример взаимодействия (с переводом)
2 |9 v/ ~5 G+ R# ^0 y
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    2 c9 F( {* F1 j% B
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    7 V& Y& J( q' r6 s1 T8 c  L% I  f( `
  3. ; J3 d! d$ v9 g# H4 O3 C
  4. // Игрок атакует гоблина% ]9 ~3 j3 |  F" I* W# |
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    # [; s; y- t9 a7 k1 Q' n
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
. o. d$ s' q: V  z( C
/ P( V( }: m+ I+ ]- T2 t. z" j
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.; _0 C5 `2 w+ D2 ~! {- C
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
) y# o; G7 B" R5 [* G6 f- l9 R4 s+ m* d7 x2 T
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
0 g, ^5 n9 l; O( M/ zПривет, Астралия! Огромное спасибо за твои разъяснения ...

  l* i  L  G- p1 f) {Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
2 W4 i, N8 A' f  Y. v! F6 [3 n% v3 y1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример& B; e$ ?2 R2 P9 U7 I) d
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    6 t- s7 V2 F) m9 a) t0 m" E
  \4 P$ @: G9 p: s) l
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    ; M3 @$ j9 R4 y4 ?' b
  2.     // Логика взаимодействия игрока с NPC4 G9 Q) ^+ z# N* V5 ]0 z
  3. }
      Z# W7 ]  Z* w# ~
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:) w1 o1 k2 y  s2 [( M6 L% n

1 u2 ?3 u3 s0 G) i
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    # ]9 c5 p6 \$ U$ @7 r; q) l7 s& Q/ y# z
  2.     // Логика перемещения NPC0 @3 d6 c7 ]" H9 Q% {+ V$ P/ t: g
  3. }
    & q# t% Z: [8 a8 V/ T" N
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:1 z& I' h' e$ `8 c5 Z  s4 _
) r& U. l6 U+ `: _9 g+ S
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример8 F5 Q3 ^: ^. o* s
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    9 c6 U( H% }; Z" W! b
  2.     this.health -= damage;  // NPC теряет здоровье
    * ?7 p. @5 R! i( t  I
  3.    
    " r  |. z% Q* \& L. j/ s: o
  4.     if (this.health <= 0) {
    " K. f7 \5 M8 _$ z" _- _
  5.         die();  // Если здоровье упало до 0, NPC умирает0 H, A- T! E  H' Y% U( w  K
  6.     }
    / {( y2 G" Z0 |" L- n/ m2 ?
  7. }0 o% V/ w$ R& w; [+ u$ n( B. r
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример' ~& [$ d, p2 j  F$ c  x" C
7 Y/ C& S; _1 W: v
  1. public void die() {  // public void умереть()
    * `/ v- f# ]5 u8 F  y
  2.     // Логика смерти NPC6 x( r& Z1 \$ ]6 [- Y& z4 T
  3. }
    1 i6 F; ?& P: ~% c/ c/ C
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:1 Z! \4 Z# w; n
0 s# @' ]6 D$ X8 J

0 M5 P, [- Y% Z- N+ s
  1. public boolean isDead() {  // public boolean мертв()3 O( F1 w. L" U# b$ [
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0+ j7 n" w+ R# D' @
  3. }! V* t# q* i6 F+ L
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример3 ^& [: B5 H9 {/ r; l( n
, e% k8 B* j$ A' k9 l& a% r
  1. public void heal(int amount) {  // public void вылечить(int количество)
    0 N) D/ a1 z3 c; {* Y$ x
  2.     this.health += amount;  // Увеличиваем здоровье
    5 l$ R5 A5 \; q+ ]/ U6 t
  3.    
    : |: a; a4 Z7 O, V. k# i) l) b
  4.     if (this.health > this.maxHealth) {
    1 K6 I6 I1 t: f7 H3 W+ ^) y
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    . `2 T  X7 I8 `# _7 J% G
  6.     }
    , x6 R. Y. e  C3 o9 t, |2 g
  7. }$ Z, l' g0 b# t* y, q( L6 C
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    $ {$ a4 [8 O. |- z1 J" J+ ]; i

, O  B% \1 K/ D  v2 p' p0 @  |
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)5 n$ c1 V/ @- [- Q" i8 Y
  2.     // Логика применения скилла NPC% i, P( T" g; p. r! i
  3. }! m' f4 O# a* w+ [
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:5 B- p, Q! R- y) e

# X/ f% S! s. m2 M4 J5 g
  1.   K4 r" g( j' e2 K, Z3 X, s3 X
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    * v7 S( k5 E9 w) D! ]; T, z  \$ h
  3.     // Логика взаимодействия с NPC
    & `( a: L9 `' m% I
  4. }
    2 H( i, B& v. q8 ?+ ~  T; ?# j9 ?
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:( E+ G" N/ o" M8 ]

3 j! A8 l; [. H) y
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)8 a. S# G7 @$ a* C$ Z
  2.     // Логика открытия окна диалога
    # h6 L' c: b: g- d5 k1 h6 M$ G
  3. }1 p( N7 l2 `& c) R# o' z8 N
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
+ n, s2 I" q3 s" f1 D8 \Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
$ e4 p" [5 R; {# Z1 g
/ g5 v' R7 T) r# s% w: S* z+ k& Q3 u* c' b4 \( W5 a: U5 k: I4 J
$ T9 X7 A3 h' n0 q5 [4 x

- T/ V( G9 L0 l! r% Z
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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