Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
- Q/ C1 V! P% F" d, T: @" c3 h/ ~& ?: D* t  X- z$ b8 D. n1 z( K

4 ]5 [! n0 v) E* ^$ k, JШаг 1: Введение в классы и методы на примере L2j_Mobius
. a7 y/ j. a$ r" {С статьёй можно ознакомится в разделе Обучение > Читать2 T# u+ F5 I" x

, {: a: @+ v  `  w! A. d2 MДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями." q* K+ N" O0 r, _. D2 {  B4 ^
7 P  _" W# a8 q- V2 c2 f6 D
Обсуждаем:: k  q0 F3 i( v$ O1 `: T3 [9 g
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.3 S6 H8 A4 y. N" F# o. Y1 }5 e% l
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!- O. q  q) o8 E! Y7 k; t

9 d) K. p' B  m& p

+ K, T' z( f2 @9 V  z+ pИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
3 k- _! X3 p- W) G- J
5 {) ?( [4 _, V* y8 I) ]6 y0 }- [( o0 \) g
6 j7 u2 S. C  G8 k7 J/ h
1 ^1 Z$ k3 X3 {' C2 B

0 t2 E* H# J% m9 r2 {1 n- h' B

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
% R- v3 ~6 O$ D- q& F
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17% b3 V8 D! S4 u9 J/ h. i( v
Почему мы используем ключевое слово this для ссылки на п ...
8 b8 f# r! ]; n( X0 L" a
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.0 j4 }! \0 H; j$ J4 v
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.( n2 [6 X  q1 U) W4 U: [
9 u+ V9 l# a: Z6 L0 k
Вот пример:
1 I, c7 A* I% P- A0 w  R. x0 J
  1. public class Player {
    ) ~( K9 k& L0 z: V  O
  2.     private String name;
    ( B0 Y! _$ p4 `, g5 p5 W0 |

  3. # X. p$ R- J1 h/ W
  4.     // Конструктор4 r$ y- t, k) H
  5.     public Player(String name) {
    6 V" V. w6 W# h# i- M: C. E" w9 [
  6.         this.name = name; // Используем this для указания на поле класса5 w2 r# C( `/ m0 v  b) w
  7.     }4 P6 f0 {) j4 v3 O" r0 |

  8. . X8 \# H: L& L. [* _4 l
  9.     // Геттер для имени. F) ?. w9 e+ F" C$ P) c) m
  10.     public String getName() {$ a% S7 A0 o4 D; ~/ X! g8 d3 q; Q
  11.         return this.name; // Используем this для обращения к полю класса
    9 @1 c" q9 Y8 U9 O5 o2 D0 F/ h
  12.     }
    ( y5 o  J, V' n: l4 q: }
  13. }
      g" K0 i8 o2 G
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
. k5 V0 P$ A# j7 W9 g
( h9 @1 f5 g+ q4 T: c" qКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.5 L9 B8 f: q* A! V% ^; V9 ^8 p

2 K  i8 O: N0 e  D) RПример передачи this:1 K& [! K* @( o1 G6 ?% }
  1. public class Game {
    " q# M; }7 E, W  s$ `7 z
  2.     public void start(Player player) {$ b/ Z7 V: ~4 i. a- n
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    7 w- A6 Z5 M) D" N# q
  4.     }
    , G, a; B1 j) K3 B
  5. }4 G* t2 u$ h8 ~0 i, U) j1 y' t5 m4 f
  6. 7 m) |6 b; e1 m, U  W7 G0 Y" b$ H
  7. public class Player {
    * k9 r; c2 _- W6 J% V: G9 o! ^
  8.     private String name;
    % o: _$ @& |$ b0 b" C
  9. 5 `* f  f6 [& N0 `9 y# O5 f2 }
  10.     public Player(String name) {
    + D& N0 d9 B0 B6 F( X: Q
  11.         this.name = name;$ E2 g% ?! `0 x5 e- S
  12.     }
    1 a# a1 L& Q( S1 Z

  13. 4 ?, G2 {3 O  G, B8 w
  14.     public void joinGame(Game game) {; B/ |5 }1 O1 M& G: p$ X: K7 o
  15.         game.start(this); // Передаем текущий объект Player) g& }/ k# ?, \( @9 z, S+ z
  16.     }
    " W# e0 q+ J# p3 n9 [  y
  17. }
    5 o! a  }; v* b! R7 `" l2 G6 l: ?; o
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.3 p4 L5 L+ g- b! c/ B3 _7 x

9 _" L8 y/ B7 Q" ]( Q
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?7 x# F8 G; Y: n& a! l% W

- S0 w0 l7 A! R+ @* T; A( y6 h' n* v
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
$ E* r5 V; i0 E4 m9 K# @Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 # B" @0 z* i+ e: q) ^7 U
Mike123 опубликовал в 2024-10-17 20:05& z% S$ r) A0 u. |) n
Добрый день! 7 y# Q' d) D0 d: G
Как создаются и вызываются методы в Java? Мо ...

+ p5 p4 C$ b& N. _( HПривет, Mike 123! ?
* T$ I  d; e1 {6 m4 IОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
. F7 j+ I  z/ `6 ^1 }# h- c# w. g$ `5 u3 s
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.2 H6 e( H' v7 b( S2 r

' v8 |! e, p2 o6 {9 S1 V% n1 w
- E" ^% Y/ i7 R4 IКак создаются методы в Java?
) p% X; s- |" r5 ~
2 h8 d) I7 p1 {Методы в Java создаются внутри классов. Вот базовый шаблон метода:
/ z# a0 @9 u! X# o# ^1 Q2 d
* z, s7 _9 ]% U. O) F* g6 f
  1. public returnType methodName(parameters) {
    : D) ~) i4 C: e; L5 _8 v3 P! N8 W! v5 n/ B
  2.     // код метода7 o( f9 k# \' _" v- _1 r
  3.     return value;8 x' q8 K- Q6 C& M5 P
  4. }3 ^! N& \. t' [
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).# y) Z* x& W- D' Q: ]  [
) H  \. f( e" z# a# W4 q
Теперь перейдём к примеру.
1 P3 Z; S2 a7 f; Y: m  C+ @% k' K; X7 `. a: ]7 o$ J
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода/ |8 J' g4 i- L3 @1 T
  1. public void attack(Npc target) {  // public void атака(Npc цель)* T& j  i+ c2 C& g' l- {& k
  2.     // Вызов метода атаки NPC
    ( x' q, I' S! V% @' N, o
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    5 T, ]1 m* f$ I6 O# q( f. O6 e
  4. }, {, l4 _$ ?" \# S* F
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
3 `: X; {! G7 d) U0 i! m
1 |0 ~0 p+ u- V3 o! E7 y$ z/ U) G" ]8 V) L" z$ V' ^
Класс Npc.java — вызов метода
& v# m" K4 b0 ~) L( `3 N. s: n' @1 @- b1 z8 G
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    ) Y9 ~$ ^; Y& W- }' O: H
  2.     // Логика получения урона NPC5 k6 J6 m7 ~, \; w
  3.     this.health -= damage;  // это.здоровье -= урон;
    8 v. p! s& r5 A6 W; E- A4 E
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    - V6 Z. c8 ?% T9 x! ~& B) s* X: u
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    ( p- g+ U8 T' u- n
  6.    
    " z; J5 h0 s7 i1 W: f  I
  7.     // Проверка на смерть NPC
    0 E% T6 U5 R' i- _7 t. \- y
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    + [6 D! l5 w/ T! g
  9.         this.die();  // это.умереть();" Y* @. |4 l8 T7 p; {0 {$ o
  10.     }  T. |) h0 z4 T! e0 {9 E7 ^6 ^2 V
  11. }7 t4 r$ t0 T! n; m7 s
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    - ^: e& n7 ~2 o( v& g1 d9 e# a
Пример взаимодействия (с переводом)
8 v, Y3 v! f; g1 Z7 ~1 E: [# N
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");6 T) i, v" c! @9 U2 k1 [+ s7 N
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    # V$ M% C+ E' g

  3. 8 j( c$ [$ N7 V7 k1 [
  4. // Игрок атакует гоблина# E* L6 f" \; _' O+ [4 i
  5. player.attack(goblin);  // игрок.атаковать(гоблин);' ?0 z& D: C' V/ c% N1 {  X
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
# _& Y$ ^$ Y8 j3 Q% z  H) ?2 a" T) M1 }/ g: E  C% `
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.( J6 {+ w8 {' x/ q( Y
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!  n. G" C5 _9 A5 j. D' Q
- Z" C4 _5 K; F
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
$ N+ o! \% Q6 o4 e9 R0 BПривет, Астралия! Огромное спасибо за твои разъяснения ...

9 u/ Z7 }$ \: _, \2 x  P% FОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
! Y6 `+ F/ W9 X2 @: Y  E; w1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример  V, U" R) m) V- g; C$ y( S
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:4 k9 H7 Z0 A5 j  k1 i" i. Z
# \' s3 V  S7 |1 b; Q6 L6 Y# K
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок). S' q- _- u7 b8 K
  2.     // Логика взаимодействия игрока с NPC
    , n9 h' g4 g6 H* v9 S
  3. }5 {5 p$ D/ j' a& K1 c. {% \
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:5 h" t8 H; d9 [" V

* X- O+ k3 c% A3 ]8 M0 u' h7 m
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    4 U0 }/ t8 Z4 O* b* Z
  2.     // Логика перемещения NPC
    9 [. O/ _) |) ~  J9 }5 H; A( o
  3. }
    / M( b8 S; p( I/ r# N+ J" Q
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    1 H7 l& [; I0 B, {

, k( g1 Z9 p/ n; A
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    . A9 I2 z; Z. S: H0 S: c
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    0 N( C; U8 r0 s1 X& ~* b9 K
  2.     this.health -= damage;  // NPC теряет здоровье5 [5 K% z5 i- K$ J# [$ ~
  3.    
    5 q  A; I7 D+ u+ S! c+ y
  4.     if (this.health <= 0) {+ |3 @4 x- M1 e5 S6 R' H$ G
  5.         die();  // Если здоровье упало до 0, NPC умирает
    3 S+ D6 \  j* q& Z$ M6 g0 H9 G
  6.     }) N# u2 [- e: q1 B% N
  7. }6 `6 ]- y% |: Z! c' @
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    % z5 c1 z; E% i0 u; P
0 Q& @) k$ V# n
  1. public void die() {  // public void умереть()& ]( P& C4 B- M- @6 @& H
  2.     // Логика смерти NPC+ ?8 H; q  P9 ~! d9 d  w
  3. }1 ?. p, m& p  D3 q3 i
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:; n- P: O  V+ ]$ F
! x4 P, ?3 P0 a: L4 g# ?$ }

8 b, k1 d; A' c+ D. F
  1. public boolean isDead() {  // public boolean мертв()9 @1 m# |% `1 W4 C2 Q
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    4 L* C8 o; }8 \6 m0 ~
  3. }* g- B" T4 U3 j, h( }( M0 L
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример$ @) r* S( b" d# e+ D" \+ b$ D8 V
4 R% x/ m8 M/ t9 t+ R+ g5 W
  1. public void heal(int amount) {  // public void вылечить(int количество)
    $ Z1 F' J4 ^! g( R
  2.     this.health += amount;  // Увеличиваем здоровье) [$ m: N$ ~" T( Q3 i- D
  3.    
    1 F+ h3 u! m* L- _
  4.     if (this.health > this.maxHealth) {6 A- w* L. k$ K- x3 B# A' z) I4 U
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального6 S1 x" v+ \1 S* Y
  6.     }
    % W" T" a* u6 P9 q
  7. }  P1 N- H7 l+ D/ J+ m
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    ( n5 ]2 `5 n! ]; @- W/ M
' u& k; m9 ~. L$ j" @
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)* f' T8 I5 Q8 K
  2.     // Логика применения скилла NPC! Z: z0 p4 A) D
  3. }% a9 O6 ^7 J8 A
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    . j% g* m4 A  Y

3 @* u) n9 N& T) Y/ S6 s- u

  1. - q8 C; O. b% m, @& n
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    % |7 J) O9 l. {$ ]/ A6 `
  3.     // Логика взаимодействия с NPC
    9 q- r! v( i8 H# w
  4. }
    ' {7 f, Q/ _: u
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    8 P2 W' o9 p5 E
3 U$ [1 j2 r' f" q+ h/ \
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)" L2 ]7 b5 W1 c, R
  2.     // Логика открытия окна диалога
    - [2 H  p' \8 f: O2 p5 z" f
  3. }/ M1 _" F  ~* E9 \
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.5 B' }) g0 z0 [8 D6 E; X$ @
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!' M- O6 x: [4 F8 c* [$ X5 k
: c; [+ y0 C1 {6 r2 v
+ e3 ~- [4 b; w  @* r6 H7 |; r

5 g0 R: c! `4 J. V
1 d% M- c; m" X
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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