Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 % p' u6 O% Q# P. J
) u; J8 p% A" E" A' O

$ k# O8 e) }, ]; g" \0 p1 Y) g" hШаг 1: Введение в классы и методы на примере L2j_Mobius
0 y) M! M9 l2 p: i& n, qС статьёй можно ознакомится в разделе Обучение > Читать$ [0 h) Y) |/ Z
: U3 M% |' {+ h) s  x; N
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.8 C$ m. G9 A4 H
/ B' y3 n# F- ^% @' I
Обсуждаем:
9 R% b& Q% }5 I/ {- l
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.9 h4 y$ _  i0 @; U3 i2 c
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!! T1 U8 \2 i) j! d9 H# v

, [4 Q- y9 y: `4 K2 W

0 X, m2 L9 `3 S8 ?И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
; {% w! w3 j- _; i! D( H) i
. D6 Y& j! T* q6 E+ Z6 E$ Y/ M
! |# }' p; `. i- U# @/ u, L
  K" N) H3 g& Y7 d# f" f% O- n
% G- B* G% v- ~% i4 n6 X0 m, V" L- p9 u7 g

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?( O- o* J& a1 E# N; \  h' \- B
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
# N! `* n& S, ^0 a& S0 D$ R) GПочему мы используем ключевое слово this для ссылки на п ...

. I. S8 O6 w2 |7 _Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.. R2 X+ U1 U2 V$ a: J' S
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
6 ]+ E' v* \' ?3 m0 v
1 O4 W$ g: P: ~2 r3 f: eВот пример:
$ F  U, B3 ]. E7 U" W
  1. public class Player {5 a/ v3 F. r; t/ X
  2.     private String name;% D% Q3 {1 W9 g# J
  3. 4 Y/ W  t- K$ g2 ~! @7 @
  4.     // Конструктор& \8 {" d6 s/ j8 N% I1 ~
  5.     public Player(String name) {% I/ N$ f/ c/ T3 U
  6.         this.name = name; // Используем this для указания на поле класса
    1 K/ T/ j) p8 b) K' I
  7.     }* c' P/ h" k: r) w

  8. + R0 `2 B$ V/ I# E6 H) M" T$ S
  9.     // Геттер для имени4 t  ?! X3 C2 d- F" _. E0 Y  r
  10.     public String getName() {2 o& v' k" ?/ Q
  11.         return this.name; // Используем this для обращения к полю класса/ ]. P; x0 X. E) f; J0 s4 b
  12.     }% ^0 I6 R. ~! V$ L, a; p
  13. }  y, r$ R( U  n; Q! y
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.! N( t! a* o6 v! J

5 u9 _) I, F7 Q: O* GКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    , Q( r0 I$ Z! U& s5 O, h6 V9 o
8 N/ i/ C0 F  ~- \7 h4 o
Пример передачи this:
  e+ f+ |* q* |$ X' |) j: o! [. D* h
  1. public class Game {
    - T  y/ d2 x& A) k9 }8 F2 k
  2.     public void start(Player player) {$ k! [: d' F" [) g
  3.         System.out.println("Игра началась с игроком: " + player.getName());* y, m- e( K" k  k: s
  4.     }
    0 Q- N" P4 f0 V
  5. }
    0 P, `! L( C0 Z5 Y  x- Y/ f
  6. 2 v0 J4 y$ I: |+ C; i
  7. public class Player {. Q! U* X6 I) z* r$ ]  b
  8.     private String name;
    " z# m% @2 n7 |3 d% _

  9. ! m! a' P4 a0 R% h0 S: y8 H
  10.     public Player(String name) {/ g6 c# k- z- \
  11.         this.name = name;
    2 {% a9 C  Z. s  j  |
  12.     }+ `' L5 \' a  A# Y" Y" O

  13. - O/ @% g2 e: @* r) u7 o
  14.     public void joinGame(Game game) {
    0 R9 i- s* ^" S9 A
  15.         game.start(this); // Передаем текущий объект Player. u3 Q$ J; C5 o, F
  16.     }
    $ r% _" ]9 C, ^# C
  17. }
    ' Y' J) C5 F/ f
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.( W1 a$ V/ z- s. H( O% n% Z


7 k& }0 K* X7 R" }2 FПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?& S/ E2 d# ?' T" D0 F& F. ?

6 U) C6 S1 e$ }0 ~. y6 _" |/ K
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
& \# w9 G5 f0 o# t! ^+ e/ xКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 , B, m; x) x  f+ \+ T' p* V2 p
Mike123 опубликовал в 2024-10-17 20:053 r: X* }6 ^  _
Добрый день! : v/ O' s( \4 j7 B
Как создаются и вызываются методы в Java? Мо ...
: Y" G' X0 E9 ~
Привет, Mike 123! ?. C# k7 |1 T; g& K  L5 ^* b
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
* v2 a3 l! `$ ~( P
9 g2 t- J5 N( d0 W4 r# h% _5 B0 eДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.* L$ d* I; m. d$ q5 [& O/ R) f
; u. m+ v7 _& \; _* m
  r* V1 R) M: P+ [3 J  u
Как создаются методы в Java?* L, `9 H5 b; @$ s1 f

8 H7 b2 w/ x1 j* \Методы в Java создаются внутри классов. Вот базовый шаблон метода:
6 K0 T, P- T, s6 z* d; L
. T7 y) X- D& T- Q8 p' S3 ~; c
  1. public returnType methodName(parameters) {2 A5 k# a+ G0 v
  2.     // код метода  [6 o1 }/ H; \
  3.     return value;, m/ Z6 P1 e& g3 c2 }7 o/ ~( \
  4. }
    * s, N4 l7 w  |" Z5 Y1 M/ r0 e
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    / M& t" I, _" n0 b0 r: l
' y9 D; |7 o6 M. u$ ~5 Q
Теперь перейдём к примеру.* r: s# g# h, z% x* E- `% s
% k2 Y2 g. Z0 N! B# Z" @/ \
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода; i4 y) k6 y0 O+ G
  1. public void attack(Npc target) {  // public void атака(Npc цель)) S( s) L# d. o) U
  2.     // Вызов метода атаки NPC1 O1 R- T( `+ i. h0 \  s& Q
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    7 w. v+ q! i! N+ P
  4. }
    2 K$ A1 f! I8 s- W8 R' s- r
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
6 b1 K3 V: j1 j
6 a' f2 J6 @7 C4 c5 O, y7 R. S5 `; j4 V: F( r0 m
Класс Npc.java — вызов метода
4 d2 [5 r3 R9 u  ^8 I5 d
1 y! I5 r/ x9 E6 _2 ^
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    $ R8 P# b  F( c: X4 M0 O2 L! Z
  2.     // Логика получения урона NPC% t1 A* t2 ]; H: s# I, i
  3.     this.health -= damage;  // это.здоровье -= урон;
    ' m. \% W0 v! t( c0 X
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    ) i& v- M, J) z! j, v- z/ e
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());; V0 [+ \3 S' ~+ V. C
  6.    
    6 y# r% B" q' N* J6 n+ M% Q& ]# _
  7.     // Проверка на смерть NPC
    * ~7 i7 y; I3 E
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)$ y: }3 `0 E3 n# n8 ]8 Y. N
  9.         this.die();  // это.умереть();. }. Z5 P3 S2 q2 N0 r9 r
  10.     }
    8 u6 `# X) J( l, s' p8 u8 G  T
  11. }" u7 b8 y( L: Q6 ]2 D
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    # k; ~" `! F* M% \7 N$ J' M
Пример взаимодействия (с переводом)
. d8 ^/ D, C, j' C( A
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");, E2 P  P% I# P) M8 X: u
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");, }; f* v1 E( Z! k- p; @. t% Q0 ?
  3. 7 W" X1 o# A3 ]! }
  4. // Игрок атакует гоблина
    8 c4 W; c* ^4 I2 m& j# u
  5. player.attack(goblin);  // игрок.атаковать(гоблин);! C( n2 }5 C) ~
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. ; p$ i: a1 h! ?3 S

6 n& B' r. Z' h& H/ [" @  ?0 N
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
; |9 C: a* {# s, ]7 A# }У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
) N* d- I4 P; k5 G# e" d2 {+ p! _( p  F) }4 C6 E
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
  W( a; k. N& X2 o8 p/ C- j; `Привет, Астралия! Огромное спасибо за твои разъяснения ...
2 i, H# M" M* ~$ i
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.& p; Z/ L: D9 f: L
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример0 ]) v" A4 z  i
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    8 C* @- H" q: f( Z7 a$ R

  i; X' E( @  C& Q, n. f3 Q" x$ a
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)$ R# x2 h, a3 h) R
  2.     // Логика взаимодействия игрока с NPC+ Z4 ?+ d1 {+ k$ U* j2 D3 A
  3. }
    4 [5 L% U8 f0 }* {( d2 s
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:2 x! {$ H* U. f; X

" y+ x& H* A: [9 X  m: t
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)& A2 w7 p3 Z8 z
  2.     // Логика перемещения NPC
    " V6 W8 i2 g' O+ x+ ?
  3. }3 L: m# ^1 I5 W' L. p
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:# ]8 D1 H6 i# p$ _9 {; V5 [: v" N
5 x. G, Y$ Y& Z* ]* G
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    ) }) ^; T6 y1 Y: v3 H  [
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)! D/ r# E7 K' s& \3 l
  2.     this.health -= damage;  // NPC теряет здоровье  h% S! w9 r4 r; m# A# \0 g
  3.     * M% d, N! [  s0 S9 J: v
  4.     if (this.health <= 0) {8 M* C% f" y6 C) O* a/ j% g$ S
  5.         die();  // Если здоровье упало до 0, NPC умирает
    3 N, J7 G+ G% x/ |2 B) S, t& Q6 g6 A
  6.     }
    " @. q* A" o9 G6 f' l
  7. }" w. r7 y+ B8 W7 l+ U" n
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    " h+ I% m1 I# K) r5 A# N

  }" j+ U8 y6 D
  1. public void die() {  // public void умереть()7 c, C# N) c+ \7 ]
  2.     // Логика смерти NPC$ ]1 J' u4 Q( U
  3. }! D4 ^; F8 Q% J
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    0 ^) t; p  {$ b) O
" }# D. N8 o) w) T! O8 d
0 e6 u# Q$ k8 `4 r8 K/ C
  1. public boolean isDead() {  // public boolean мертв()7 }* ^2 {% D0 L. d) o2 f* Z; O  {
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    9 F# w+ Y# X5 c6 [0 x& V8 L/ t; D
  3. }9 v: V& m/ Z6 I$ Y- l+ P
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример/ X# {' B; P- Z6 @. X

4 z' L$ O) d. E2 v& Q
  1. public void heal(int amount) {  // public void вылечить(int количество)7 s: K8 T  {) l
  2.     this.health += amount;  // Увеличиваем здоровье
    & a- k/ E; j* K( ?3 P
  3.    
      b7 B2 {8 U! t0 Q
  4.     if (this.health > this.maxHealth) {; z" n% w* H7 B
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального/ J+ s4 Y% ]4 e$ x" @0 S# [
  6.     }
      k  W0 ?' l6 W
  7. }  C" ?2 B' D3 }  Q7 {5 ~! W+ U
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:, L6 j. \  b. d3 v/ B6 l! \: A% B
9 |0 V; x) L, @" [! x- y7 [# t
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)4 E/ I! d" \# E7 ^, ~4 H- A
  2.     // Логика применения скилла NPC
    1 i- k7 N! ^5 m- P
  3. }
    ' E( T5 x! O# x* ]  K! A! J
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    7 z8 W& \" g$ W! j6 {: A

5 D; }. V2 ?/ ^5 ]& _* X. q
  1. . x* i* }  ^) f0 }* d4 }) v8 @/ Q
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)0 z' z% M. Y* E# {
  3.     // Логика взаимодействия с NPC% R3 [7 R7 C- v
  4. }% J- p. j2 G/ @2 Y& }3 I! ^* y
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    - N# R7 y- X4 i+ ~7 f7 M) z+ ?

8 ~+ U. @  w  S0 }! H0 V/ {0 m
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    , K  M; r6 _+ G$ p, H
  2.     // Логика открытия окна диалога# |9 O7 l3 S+ W& r8 h
  3. }
    - C8 U. S; `$ Z4 F( w5 E
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
3 K: w( L7 q$ P5 ]) a; NЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!0 o5 I6 k& V8 c8 L3 q$ `9 n5 f
  N: ]% ?7 E' M, N2 ^% q
( k: p# `8 P- v/ ^4 K: o
* y; s* l9 R6 f/ m3 _- v8 C) n
& [& k8 H* ]. B& M6 M! M. j
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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