Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
' C! _7 `8 W4 H1 x/ r
9 O, _+ W$ ]; R
  d! z' W# r8 RШаг 1: Введение в классы и методы на примере L2j_Mobius
- x; `% ]5 \0 C, ?7 A$ HС статьёй можно ознакомится в разделе Обучение > Читать; W7 J; H' r/ u+ W& M" |# h
4 \! G7 n5 c. g5 }
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.9 o3 _  @$ p& b) J6 i& F
* X8 b7 m( X! ^: T' |8 @
Обсуждаем:/ U* ^7 j7 A: S7 Z
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    0 p) E0 Y4 V; ?& W# Q
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!' n( f: ]% x$ F

1 x! K. X. J; t& G$ K0 Y

; G' g7 g0 p2 I0 k+ R  V/ }3 _' EИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
$ @7 ?* {, ]: u6 u5 y# r6 n, x% P. b- ^; M! K- S5 @
( z0 y: L0 k3 a2 D

! |; Z! Y% y9 ^4 \. E+ V. d3 s1 f! l
- B: S* f, o) K5 Z

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
1 x8 d( O  L, c7 o! V
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
  w; `- S" G( j- U! EПочему мы используем ключевое слово this для ссылки на п ...
8 H$ ~4 D) n8 |+ b
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.0 ]* s/ b7 W, P: q( H# S0 r
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
  R/ R8 r# g: u
4 C0 l. X* K# ~0 |Вот пример:. `& U$ X. C; Q2 [  |; S
  1. public class Player {
    1 L% ^+ M# F% |+ s
  2.     private String name;0 T$ f/ o8 o( w4 Y8 k$ g, H2 P

  3. 7 N2 ^% c2 x3 ~" Z& ^5 {7 e
  4.     // Конструктор5 c  i/ y: D) H; x* ?# T) y* J
  5.     public Player(String name) {8 B9 u9 `! h  F0 t) w: ]7 l7 y
  6.         this.name = name; // Используем this для указания на поле класса/ a/ c7 i- a" n
  7.     }6 G1 j. Q$ g% Z7 G" L
  8. 4 {; L% j0 R2 i  c, T
  9.     // Геттер для имени
    3 ^+ r, b+ i) G1 u. o( e
  10.     public String getName() {0 A2 g8 h- Z* S1 m2 ]
  11.         return this.name; // Используем this для обращения к полю класса
    8 g3 w; i/ F: }" r4 P
  12.     }! B; K# n- L9 f
  13. }
    5 d# W; O0 L/ @6 W+ g& z( Q: k8 C: n
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.% r% U4 R3 z, S" k( v* X/ |

' G5 H3 z( L& ]7 t" o$ H/ GКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.: U* `( k* E: K1 m$ L' M) ?! G

3 x% j9 r& M( ^$ {1 pПример передачи this:( R3 [, i( X( n! \0 t2 o
  1. public class Game {% }7 R- t, u* x$ g
  2.     public void start(Player player) {9 d& A. n$ E3 h' G" ?
  3.         System.out.println("Игра началась с игроком: " + player.getName());3 ]" S# k5 k7 g) R; ]& o
  4.     }
    ! [# i. S+ |4 V+ t0 N' _0 Y
  5. }
      l1 T# H0 b  q, E- Y& q0 W

  6. 0 K+ j- f& p+ S, \: [
  7. public class Player {
    ; m* p+ Q# o- r% X& O" b
  8.     private String name;
    - h; i; }1 K/ q

  9. 6 @% V! q7 o5 S  }, n4 c/ j
  10.     public Player(String name) {* Z' Z# Y1 `( `" J* _1 `
  11.         this.name = name;" E5 n+ s) \3 o; N. |6 J/ b+ ~! B
  12.     }! K% i: W6 b6 k  P. g+ t% o, P3 @

  13. 3 X) N. p4 I- Q2 c. S. q2 C; @
  14.     public void joinGame(Game game) {! e+ G  G# q; n. J+ ?+ P1 H
  15.         game.start(this); // Передаем текущий объект Player1 n2 a  [- \; g0 l
  16.     }& J5 E/ w! F! |3 E# I' c; p, \# M
  17. }
    7 ?! I7 o/ D) N) _: R
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
$ s/ f; \* i7 }/ S, g1 [) h' L

/ m7 k7 V0 {/ m9 o+ J% oПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?: F6 T$ A4 E  u1 c. K( j7 J! V) i
! {3 {. t3 o  u) i5 j
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! " V2 N, @3 {! a. l, i( e
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
  v/ H4 @* U' O  `" @
Mike123 опубликовал в 2024-10-17 20:05: v% ?+ N6 ~% f) M3 s
Добрый день!
# |9 m( }/ _/ B. PКак создаются и вызываются методы в Java? Мо ...

7 V* \  @) Y0 X! k0 e: aПривет, Mike 123! ?8 W- H# }; X3 Y
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.0 F! p+ I4 V0 }& X( z: A) D

* f; w5 u* R! ]  v; GДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.( S% c" [- H# H2 g5 y, W
3 a9 ^7 |) D0 ^* A: k, F

: `' q% _$ q; x, V7 `& _: p* K0 yКак создаются методы в Java?1 G1 O+ E( ^% h, `0 C3 K

9 x. J) r6 Q* L3 @; bМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
6 y! R/ Z: ]4 b
2 t' N, A$ i9 ~! Y  N9 s8 X
  1. public returnType methodName(parameters) {3 M7 M; U3 `& \* Q; T! v- T9 l
  2.     // код метода* X3 \3 `" H0 Z
  3.     return value;2 R0 ?: ~6 P% N* z2 a
  4. }5 u; C) e* b$ ]
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    8 Z! F5 o+ _! L: H

$ _' b. d4 V, G" R4 AТеперь перейдём к примеру.
' j: P: i9 [, S
2 U" u: M6 [; E4 w1 V5 qПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
" j) |3 x# T7 P
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    1 m7 l/ w/ m' n9 e
  2.     // Вызов метода атаки NPC
    ( B* k  K" ?6 F* _
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());4 C3 V" W6 a0 V+ @& Q% v! a; `
  4. }: A# l% i! x4 v
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
1 K+ W6 ], b* v6 Y' x0 W- ]
7 A( R4 [! k/ s. o2 Y" C1 g" h0 T  Q- L$ c" Z. Q0 k
Класс Npc.java — вызов метода
7 F4 u% b8 d9 A/ g
, {( V7 i  b3 z" D, M# \8 t
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)# j. n7 b# L, t
  2.     // Логика получения урона NPC$ D/ L1 Z$ M1 ^( t
  3.     this.health -= damage;  // это.здоровье -= урон;
    3 j8 n: c8 l4 K6 ^
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    ; ?, c6 h1 e! o, j& L6 I" s6 s* G
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());6 u7 C6 _: L# ^0 V- [
  6.    
    ; }) M9 I' b6 N6 `$ r" S' w
  7.     // Проверка на смерть NPC* o" j7 ^! ]2 C" B* x/ X
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)4 o" f2 B! C9 x% }
  9.         this.die();  // это.умереть();  [- h) b: h6 \1 Q9 {7 ^
  10.     }
      i7 s. G' [/ D; U3 m0 p
  11. }
      K+ b+ |. b# r( }
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).6 J# ]0 e% t+ B+ B$ X
Пример взаимодействия (с переводом)1 F& e! m4 ?6 B  k
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");  y+ J- u2 r) F. c
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");4 F6 @. y2 y2 P# K+ E) x

  3. 9 k5 P) e, H9 n( Y/ i, o, F; A
  4. // Игрок атакует гоблина
    2 S/ w* x* W- z4 I+ E* S! ~
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    9 Q2 j" y; G; N: {4 V8 y5 c0 v
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
  ], W8 b, j! v
. c! p: L; t# G- ^7 A5 C+ o- O
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
9 e; M- z' ^) T0 y- P* fУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!, ^: V$ s) z) N1 y! r
8 `- ?$ N  Q# w
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30: y5 g8 [6 ~7 P* }4 z4 x$ C
Привет, Астралия! Огромное спасибо за твои разъяснения ...

8 p' G" N& r/ HОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.( a" }* W( |' Q6 e: ^! `7 b+ P
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример5 P$ j0 }& q: O
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:5 F; |- m' S* r8 G. y

2 e/ C; c4 s% ]- n  G- o' M
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок): ?# s* j4 x1 h" ^( ?2 P
  2.     // Логика взаимодействия игрока с NPC; M9 Y' o" @8 W, Y. `9 }, S
  3. }
    ! o8 U8 w6 r. A  y% Y- q  l
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:9 p8 Z4 W+ i5 J, t  v
+ C4 N7 R( @0 j  g  Y/ Z' \" k
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    ; E$ L- s8 ~' ?2 x; G! k0 z
  2.     // Логика перемещения NPC
    - V0 @2 I) B8 U. Y1 e, h' `5 Z8 H
  3. }5 W( I( j% L3 Q6 _* c# l$ t
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:4 s6 j7 K5 @) {! d* \

" T3 O7 r* D5 A" `* i# x* n
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример0 z% u! y  n2 [
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    ; B$ x2 I" d! Q7 L8 ^
  2.     this.health -= damage;  // NPC теряет здоровье- }% e0 u& a/ H2 f
  3.     : Y2 W8 v& p& B" P; A% h4 I
  4.     if (this.health <= 0) {
    8 e0 c" Z& H  U$ [
  5.         die();  // Если здоровье упало до 0, NPC умирает# H# F2 X0 }$ J' A9 h
  6.     }% Q0 _. o  s0 M1 x' S# F0 o. G" g
  7. }7 h$ U/ w5 L5 H9 @, f
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример. L- {8 u+ ~+ M$ |( ]. v

3 i! Q$ p! S/ A3 h" d
  1. public void die() {  // public void умереть()
    2 v/ K' W/ U- X3 n: Y
  2.     // Логика смерти NPC
    : K) c/ O3 S4 v  y8 U
  3. }
    5 W7 |& z/ \. S- ]8 A; f; s7 J: ~* s
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    3 K8 N1 P' ^/ a7 K0 @! d6 w% D  x3 T
3 N) q% t9 n. ?3 @7 x
- W+ T6 g: h. V+ a, u3 V$ n  S
  1. public boolean isDead() {  // public boolean мертв()
    , {$ H- h, r+ n
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    6 w- e( n' `6 P6 ]
  3. }  R1 v  A7 K! T  z9 f: g
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример% r6 b7 a& [3 O. W
1 n! B* C( b3 F
  1. public void heal(int amount) {  // public void вылечить(int количество)' s9 i1 K1 Q0 z/ [
  2.     this.health += amount;  // Увеличиваем здоровье, X3 A& I2 d, F; x
  3.    
    ' u: \8 l5 a3 X7 |, O' h
  4.     if (this.health > this.maxHealth) {# ^( O; D2 v1 T! ~3 Q! n2 j: X: S" F
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    4 K: k, B6 n1 @; p3 [
  6.     }) W7 k7 J; I0 \1 \
  7. }% S! e7 U% M' y2 W1 A% Q3 Z) \
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:. _" Z; a7 d2 V# q7 D
1 G4 z* L' c9 K% w3 c3 Q
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)5 A2 L( }' k) ^) F8 _6 G# Y$ ~
  2.     // Логика применения скилла NPC
    . W  ]# b6 L. i" I
  3. }6 }5 d/ d& V. y, `: |
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:' r" ^2 F7 ^9 v- f

. _( v+ ~: A% z9 z8 }
  1. 2 P7 C( R. |+ `$ z# Q2 K+ m5 B
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)9 S; p, d9 O0 u% k2 C% B7 z4 [
  3.     // Логика взаимодействия с NPC6 D3 w6 F, V* z
  4. }1 P" I8 s% b- s! n3 a5 s- }
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:) K, |1 g' g" R! {4 ?, z
- ~4 L! t- `; R. U. {! ?
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    - _. d/ u6 i& T3 A1 b* L
  2.     // Логика открытия окна диалога
    , Z+ u+ r, l) y& T3 b4 A. m( _
  3. }( v: U, f: e& S' M' \
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.+ {+ I/ t2 B% J: q5 x$ t
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!- h- d* L1 a+ y' R) _8 |, _
2 ?. t0 J" r6 R* j8 i  `
+ M: X9 w4 G9 M
1 e. |" N$ y/ |/ W+ Z, O- Z

$ K, f8 W4 Q" F& Y
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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