Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
4 V) E3 i% `+ G/ D, `+ V' ?8 ^0 W
+ H; u# h7 n) \
' ^7 P4 D: u) o- Q+ A" _Шаг 1: Введение в классы и методы на примере L2j_Mobius
6 E9 y( |% J4 _+ Z" H0 rС статьёй можно ознакомится в разделе Обучение > Читать
& {" f: U8 l+ n8 ~# S" Q
( B  w/ `" y2 v! S9 m- {: e1 ZДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.! J% N9 K! d; m- t6 q

9 V4 D' U- t$ I2 IОбсуждаем:2 W1 ~4 b) l8 w) G9 e4 k1 J9 B2 k% W
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.1 U7 w. K% N% ]) c
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
0 r2 `4 r4 t& q& R( B( x  {: C

2 ^4 P$ u1 h& v7 L. U7 X# D  K! Y
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!6 C: F! W3 U( v) x

) Z9 f* g9 H# X) @3 M# `0 ~# m, o3 }/ P1 Z2 }
/ o6 H& d7 q1 ~& u; M
, m% Q. a8 ], s5 M' r4 M
' W' f7 t& F2 h, s

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?' ^+ ~0 k& \8 u6 l" L
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
2 t5 a/ s- B; OПочему мы используем ключевое слово this для ссылки на п ...
* }0 u0 ?' @2 x1 j
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
& L9 g4 P1 I9 x. C3 vПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.! _# T5 h- \, j9 r1 `7 V) `1 H/ C
; C+ Z7 q* R( W2 Q
Вот пример:
4 F7 S8 R9 J: U9 R8 o) [
  1. public class Player {
    ) I  y( Y6 }- Z% I; n
  2.     private String name;) {; H8 }! }6 Z2 y
  3. 3 s+ i& U7 W( i* e) Z1 _
  4.     // Конструктор& b. p. |1 N  `4 {
  5.     public Player(String name) {7 p6 Q; n: n- n* u
  6.         this.name = name; // Используем this для указания на поле класса+ W5 Y4 M8 ]1 J8 n# `3 A
  7.     }) u' G: z- m. Z# g2 h/ L

  8. : k. g3 i5 n) Q% L$ O: J
  9.     // Геттер для имени' T9 i+ Y, }$ a  \- i, U
  10.     public String getName() {( f; |& W# r% j  e
  11.         return this.name; // Используем this для обращения к полю класса. a% u3 g5 v! x
  12.     }
    & _7 a1 Y" i* T- |" x% @$ w8 N
  13. }
    4 i" N, r8 f: O1 ?* W/ s: z
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.$ z2 z) @/ d9 ]2 _6 W
% i2 {. S5 R: ]
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    ) W+ }/ [$ p6 t7 C5 \$ X+ }
2 ?$ y# H' }4 P/ j
Пример передачи this:' _( `. g; I# @% v
  1. public class Game {
    2 ?. n( S& p0 A2 ?8 F8 J
  2.     public void start(Player player) {
      y: z* O6 i( Q) [4 c
  3.         System.out.println("Игра началась с игроком: " + player.getName());# p0 u3 \, ~) k- r9 M$ O9 O
  4.     }
    * x! U- L* l  H$ \6 X
  5. }
    & M- w2 s" F! \2 Y- A$ j9 ]

  6. ' q: p1 w4 Q  k
  7. public class Player {
    1 {' _' ?1 }- p& {- M
  8.     private String name;1 C0 Q  R6 r4 V, Z7 g

  9. ' P7 a' L+ A5 @7 K5 l, ]) |
  10.     public Player(String name) {
    9 \/ I/ G% p' g* O6 b
  11.         this.name = name;6 [4 B  p' P' H* E. y1 F/ T
  12.     }9 \2 F" K) ?' W* }$ |

  13. + B& i3 s. K7 c1 \% [
  14.     public void joinGame(Game game) {
    7 W0 ~( E& _5 B2 N+ }
  15.         game.start(this); // Передаем текущий объект Player7 K! K# C  a3 x! c' V* G( k- y
  16.     }$ |1 t2 Z- O, W- Z2 P/ y$ t
  17. }
    4 _2 l; v  h: y9 R; n
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
# J4 i$ L9 h5 o' ?* q( x
3 N) J4 `( c* M: U! o# B  J
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
# M7 L1 J( h! O
3 |% O# i  \6 o) X( ]
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! 0 O+ Y  t5 [# c0 ^) @6 e
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
! ^' b- ~. J6 u  k
Mike123 опубликовал в 2024-10-17 20:05
) @  V8 l: U2 y; sДобрый день! 8 {/ J$ k" X8 p7 }
Как создаются и вызываются методы в Java? Мо ...
7 `+ S* e3 r/ h; `: F- e
Привет, Mike 123! ?: x$ K- B# W2 B/ m9 }' Q  ~
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
; ]) I, Q7 t9 W% N, T" P9 `6 K& q  ]7 J. x* c) M0 X+ G6 s
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией./ W# K* S/ B8 A

2 W2 K/ j, e& h5 ~5 ~; z5 q& ]% x$ `# q$ j! U/ [
Как создаются методы в Java?/ n4 T7 ?' u7 c7 A& E
$ V. M, A) @0 o+ Y$ b
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
0 X' H* R8 t+ }5 g$ H. z$ e/ N, \! C, \! V: C* p5 A
  1. public returnType methodName(parameters) {
    & m- x) k! p$ I% q3 f6 s2 F# T8 l" a
  2.     // код метода4 m7 }/ E0 k5 M. i
  3.     return value;
    2 m( [9 E+ S/ O/ z- [9 b
  4. }+ i7 O- q3 P1 ?4 X' Y  S
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    / Z0 m- j+ m( u1 y
- u; e+ o# ?1 G# r/ i$ B; h6 o' A
Теперь перейдём к примеру.
) v3 l- F0 b6 x' h! \8 r) Y# b; J+ {6 x' D/ H9 T
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
) F8 d6 A# m/ k: |
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    $ b, `) ~* D9 h* U  X& Z4 G
  2.     // Вызов метода атаки NPC
    1 K0 q6 ?9 e, r) C/ o1 h; @6 L0 V2 G
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    0 f5 f# D- i# f. A$ x0 s: W7 _
  4. }
    5 ?% i2 X3 d' v5 @" z, i
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).7 i1 G& f) j/ a
" G, W- n9 G3 U( U4 ]

( }% k" H! G4 w$ o' E, V$ ^Класс Npc.java — вызов метода% \+ b5 `! @( r) g1 |

9 |+ o5 M* [0 b! d: m; p
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)$ c) h: x' o0 {6 _1 v* ?
  2.     // Логика получения урона NPC6 X7 l' f3 L% r
  3.     this.health -= damage;  // это.здоровье -= урон;
    7 {' H3 x: z0 i0 n( q& z1 [
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  ' c4 w6 C9 E  \% O1 z
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    2 I8 }' k: {) Y" Y  T. @% \6 r
  6.     * f5 s; c, t3 _2 f! `" @4 L
  7.     // Проверка на смерть NPC
    4 z" T/ ^+ C6 J# V) o
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)- H/ ^- o! b7 b$ \8 r# S8 u* |9 l
  9.         this.die();  // это.умереть();
    2 k  ]# G. ]' g& w2 W4 a8 Z6 s
  10.     }
    8 |0 R  p4 ], U5 b& n& s( @. S  l
  11. }5 P# c# \+ {& Y
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    % F- s8 y& R) h
Пример взаимодействия (с переводом)
. `2 H/ y# s+ ]3 D" t3 b  m
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");  M0 Q/ h' k% r& p' O
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");# g( r0 m5 g9 O- x

  3. ' v8 i' f4 H  U1 ^) G
  4. // Игрок атакует гоблина4 C! X+ t/ V2 b6 d" d
  5. player.attack(goblin);  // игрок.атаковать(гоблин);3 ?- t' L0 C( Q4 e
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
. ^! J1 ]( L  i, |& U$ I
" X+ u2 E5 x0 N5 p8 `$ Q" i3 z( f
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
' p  J1 y2 u+ i9 S# B( [. \У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!9 j$ M! h! ?, u
' l. z8 C0 p0 e( V* {) \7 K2 _
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
3 s7 w0 r1 S& \5 I( U  F! }Привет, Астралия! Огромное спасибо за твои разъяснения ...
4 g- |; r0 L( ~5 q; a8 Q, u
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
  d# _1 W3 e$ K- G7 j# A1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример2 `+ G) E0 e  p# C. _
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:& u) v# d, a8 z7 B( B' R

8 y- b, b5 j! \# z* f8 k& v- E
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    0 U0 R, _$ y# M+ l1 z5 `
  2.     // Логика взаимодействия игрока с NPC7 L6 S$ \3 _5 t+ R2 }! i2 v4 G8 F7 M8 Z
  3. }
    , |+ r1 ?3 a0 ]* {$ \5 T
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:8 l4 K6 h( e9 `; `' e# }

1 A8 W4 I0 o/ t- c
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z). L1 s1 k) i& [
  2.     // Логика перемещения NPC
    9 T( v, w" V: K+ T# {' `- m8 w
  3. }
    # }8 _: ?, h% [! s& j% P
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:1 s/ x/ O" c& P1 [( Y- l7 ~; X
+ x. Q; F; @! N0 [* F$ d
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример. O6 ~, Q- f& U- Q3 o2 b
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)6 W7 y4 _9 _" J; {
  2.     this.health -= damage;  // NPC теряет здоровье
    8 l8 V# g0 ?& m7 S4 L4 H
  3.    
    5 S9 C! i) o# S
  4.     if (this.health <= 0) {
    ! e' z% Z9 j: u2 X, k1 O) k
  5.         die();  // Если здоровье упало до 0, NPC умирает
    " X) d' C1 @* w  p/ {( e/ V
  6.     }
    ( i" d* Y, y: v/ c, ]
  7. }0 ?# ^6 n# R4 g% i2 }, J! x0 Z' L
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример! e- A2 ^5 Y: `$ T  P) q6 v
$ t" j2 i" M2 e
  1. public void die() {  // public void умереть()- l0 [) W* ~: g6 K
  2.     // Логика смерти NPC
    ! T- ]4 w3 h' x; w; Q- u
  3. }8 f! l( r9 q" O* j, y6 O
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:1 C; {1 L/ W" v: d. M

2 W$ \* M, }' X% W( S. ?) [
, {) Y- O* L* j- M3 a3 C
  1. public boolean isDead() {  // public boolean мертв()
    ) \9 B' w: z6 y2 V
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    1 [" J6 w0 Y% m# n
  3. }! _& y8 [" u5 g8 ]" G
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример; Q! f7 R' N- a% k4 M9 w

) I0 A8 w- k, m. i# S  R& ~
  1. public void heal(int amount) {  // public void вылечить(int количество)( F2 f; O. ^* W7 k
  2.     this.health += amount;  // Увеличиваем здоровье' E$ E4 h8 e, w; o" }
  3.       ~+ C5 i: [& t* i3 f# W+ @
  4.     if (this.health > this.maxHealth) {
    9 A' ?/ V6 F# a: ]0 [: a* l% |
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального1 w+ Y3 Y) {  b8 N* U
  6.     }. D, l8 F3 B% e6 f* h
  7. }
    8 L3 z) C$ |' x/ u
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:+ s' P" i. ^: i5 N6 x/ _# y
9 |- |! I3 Y$ @6 D# {' ~
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)% B) v* @: \, ^% Y5 N" y
  2.     // Логика применения скилла NPC( X# Q7 m6 Y/ R- k$ f1 N
  3. }
    + O' A2 }$ X: b! y' |
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:5 z6 z! Z$ g9 }( |

% q% w1 ]3 `9 a7 ]+ A5 c* R' m2 |

  1. , G6 P* }! P- }* Z- P, t
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    ) o8 t9 E* g4 T7 P7 L
  3.     // Логика взаимодействия с NPC
    % M0 n; [+ r7 C8 N% ~/ W" j8 I
  4. }9 b4 a" i( ]' A% G
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:4 H: o7 B. x$ ^5 T
8 m3 Q' X: X9 g/ O4 u5 Z
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
      L! X1 N7 x& g+ \' [, I! u  W
  2.     // Логика открытия окна диалога, r" w0 s' j7 j- t9 k
  3. }! w9 ]/ M) N# s* [
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.) l5 I2 j) c1 h; O: E7 ^! [% I
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!1 q( Q5 l& L* v2 @  x! N, m; h/ j1 v

* T, y5 e" I% W$ b  D
% z" D" {0 k- z& p. u; K3 T7 d  w6 v
$ I4 R5 ?; e9 L6 R
: D* r/ _! P( C0 y
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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