Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 " ^1 U) @. {# t; t4 _

9 H' I+ b! Q: o, i: u( u
( t8 \7 @( ?7 P0 y: _Шаг 1: Введение в классы и методы на примере L2j_Mobius) B4 F0 e' C2 ]9 }
С статьёй можно ознакомится в разделе Обучение > Читать3 K: a$ x, Q, n9 k" E  ^/ g

: Y2 j5 ~% m* Z* k, M6 wДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
0 k2 L. `& t4 W& \& A6 O/ }
( e3 }' N5 m9 b6 dОбсуждаем:
5 d* t3 |" b2 }1 L4 J/ }% y" |
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    ; L8 O' @3 w+ O  p* l
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!2 \# O. Z  r, [9 m+ _! y; O: V

. ^! ], O8 [% p, S9 }

' ?. {7 Q9 t: h' f# oИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!7 O! }5 z% H+ E/ u
. D5 G/ `! w7 p  T2 z$ D" }
/ I% \% P$ j1 _6 y2 w8 s1 g
6 S. s! J8 w' I+ ?% Q6 N% \
6 Q2 W& k2 X  W/ S' M$ V

* O& L& q: Y7 }- p, Y2 x: g

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
  k0 b9 k3 u; Q" _5 ^0 y
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
3 d" ?. s, d1 B. A2 G7 FПочему мы используем ключевое слово this для ссылки на п ...

. y0 q' n( v/ _9 |Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
, l5 Y: N& v5 I8 o( ^2 U8 C  CПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
6 _# _' z% `# p' X. U! n8 |' ^5 S" W- n4 l
Вот пример:8 b+ @4 ]7 k( j
  1. public class Player {
    $ q$ H/ b0 Z$ X. {$ |( k5 |& }) _& f* }
  2.     private String name;3 f+ J- I& ?& C/ b" g8 O6 s
  3. 5 g7 k* e! R; y4 d! f
  4.     // Конструктор- j$ i/ H- h+ K4 n4 X
  5.     public Player(String name) {: J# T7 }5 r/ ^8 I" o8 X. \5 ^9 `
  6.         this.name = name; // Используем this для указания на поле класса
    3 G1 e$ r; Q9 Z  n
  7.     }4 {& r( D; t2 d. z- j! F  _
  8. 5 h1 c1 Y/ C' K2 T+ e( i) [% {% U
  9.     // Геттер для имени
    ) L  B$ J: m& r
  10.     public String getName() {
    ( K4 V' F: Z8 W5 l" Y* u, V  Y' e1 E
  11.         return this.name; // Используем this для обращения к полю класса1 |5 [$ h9 c5 e6 ~  x% t9 X
  12.     }
    8 u1 k- r* [6 G! q
  13. }( s" `9 A! _2 s1 U& B
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.. G9 w; R' T* T

- h7 [3 o) a* G& r/ N4 d" iКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.. i# [' r+ t( ?
" e1 T4 I' a5 f. C# Q+ d5 E' B
Пример передачи this:. J* U+ H1 ]# y, u0 ]% m# l* k
  1. public class Game {0 Y* U1 ]0 D" A5 a! x
  2.     public void start(Player player) {/ o! j' `- b. d( T0 z- s
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    7 O1 O2 {3 j  v. S
  4.     }
    ; c0 S# Z* s4 D8 X+ C
  5. }; a) G* `% w7 A  z: A" [
  6. 3 |2 M5 s" t* r
  7. public class Player {" ~! P" }/ o! ~9 V' y8 `
  8.     private String name;
    * e/ w; X8 E. T$ j3 c" }
  9. ' R. B* W  B4 Q
  10.     public Player(String name) {! L# I9 G. E% f; K6 Z
  11.         this.name = name;, X, H+ V$ ]; r. `, Z
  12.     }  W5 I5 Y# F' q( K4 _

  13. ) f0 G6 z0 s' @: K, U+ Z
  14.     public void joinGame(Game game) {$ t# Z& T6 ~% C  _* u2 X
  15.         game.start(this); // Передаем текущий объект Player2 F) l6 a, A/ v. m
  16.     }
    1 J: Z3 N  Q+ `7 ^* |5 p
  17. }. F" A+ H' o4 A1 l. ^. Z1 Z
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
9 g5 U' z- p9 w
7 O$ n( g5 }4 Q9 S2 [, c* }
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
) n% E$ `8 R% T: n& o+ u9 M8 ~
. I$ y' d3 d! ?/ O8 t
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
2 _' V6 r: ~. fКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 * o4 G( P# {/ B: _* J' r
Mike123 опубликовал в 2024-10-17 20:05! M. d$ c, u1 C
Добрый день!
. c" _4 K) H! e5 x( p" c5 HКак создаются и вызываются методы в Java? Мо ...

% j5 R0 r* N& _: J" i  aПривет, Mike 123! ?- Y. U+ O6 |9 A5 b2 L0 Y$ i
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
( Z& e2 L6 A8 A0 [! U2 n" P" k9 \5 D  g
: J! M* ?( q9 L9 w1 JДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
4 @" ~8 `, ^8 Y) K7 k* B1 v9 U) ~# i

& _' h) Z" p. h2 G. v5 ?: @" MКак создаются методы в Java?' L* Z4 t' E7 k. X/ G, B( f

, b/ _# C7 u4 w; S& ]- G3 FМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
) j4 |, E+ r; h/ R! |$ e, H1 }% i! H! Y$ {0 |3 T9 i
  1. public returnType methodName(parameters) {
    ) F9 B# d: h1 p& ~# ]
  2.     // код метода
    # f: c7 r" A9 S) P; P
  3.     return value;, M+ j/ A4 w+ [9 H4 ?0 c* w" g" v
  4. }( D; Q9 H" C6 u2 J
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    2 ~' D) R9 @0 p+ h- \; z
3 |% W0 @/ M2 y7 L; O4 D
Теперь перейдём к примеру.# @8 @- H! K& s5 j
( F8 R3 Q. O* Y  M- `1 g2 C" _, u/ }
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода1 N1 L# a9 @; O4 k: b
  1. public void attack(Npc target) {  // public void атака(Npc цель)  E* ?  N" ~& e5 W( K0 z
  2.     // Вызов метода атаки NPC
    $ N0 Y: n- @& R: ]( T
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    2 {( v5 ]5 L$ B7 y) c: N" J: ?
  4. }
    0 w/ K( L- w3 H! M- u$ W
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
3 [7 y; B' C# `+ e7 r" [) q+ n1 f
: H6 B4 u+ Y7 P
% B( T$ V) N8 d' s: g8 iКласс Npc.java — вызов метода7 c8 P9 d3 V% e- u' x$ c* T5 f
0 |6 P6 V5 |. o( {7 Y2 N3 }
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)  V5 ^# T- Y! n, g1 C
  2.     // Логика получения урона NPC9 ~( v) ~9 g' w. u& I! D
  3.     this.health -= damage;  // это.здоровье -= урон;
    , _2 ]  `/ T2 W2 ]4 u
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  6 ?, r$ v4 m- }* Z6 @% C
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    $ ?8 b+ S6 {. h, l/ c+ U7 y
  6.    
    % F  K. r/ f; O; E  h! @
  7.     // Проверка на смерть NPC
    0 X& J4 `4 `' N
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)1 f: [2 t6 M* U/ f; p  k
  9.         this.die();  // это.умереть();
    - m: ~- u0 _- _0 Q# u7 j
  10.     }
    : b3 M+ m; ]$ f, G* K
  11. }/ G$ \" z" l- b& ~* m1 e
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).- ]7 o! K4 f# v
Пример взаимодействия (с переводом)3 T8 j  t1 X  ^1 e# j( W! T
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    4 A0 I5 {+ ?/ x( S! Y
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");; G' p1 M1 A! V

  3. / F5 Y! l' H7 \, H$ @5 t
  4. // Игрок атакует гоблина
      U: L7 P5 |7 a* w. T; n/ L4 c- Y
  5. player.attack(goblin);  // игрок.атаковать(гоблин);4 X: l: f4 B  u0 f; f. Q
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. ! a0 T% O5 K4 |8 O9 I2 t
+ N# [% n# t9 p
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
; }+ l, _9 ]9 W6 A+ g3 T4 B5 T% pУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
* P; I! q# d) o8 Q4 a2 Q& a) B$ w2 Z( P: L8 @) x
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
3 e0 D7 J2 F, AПривет, Астралия! Огромное спасибо за твои разъяснения ...

+ v8 w7 A6 P  d* j# V/ BОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
/ c; A1 v1 G0 b( {; t1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    1 b3 n7 C+ h( N. ?: {, v
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:* q6 m0 Y4 f) g1 P5 T7 m

1 C8 i3 s! b6 N4 S. E* `
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    6 m  B8 c9 p- u
  2.     // Логика взаимодействия игрока с NPC$ _- i0 |; I, ^8 j, Y' w$ u7 {. L
  3. }+ q- R/ `& I! Y% G6 \, ?
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    : W- E! m/ @# q- ?& |

$ e0 O; ?& r: }
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)5 ]- r, D0 W6 Y* P& J: i; A0 K
  2.     // Логика перемещения NPC; T8 C& U/ u: k0 o0 y- s# E
  3. }
    ; y1 {! j5 h: V$ @
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:4 \. c8 n. v1 s( C2 o1 L

: M- W& h6 v. Z' z: H
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    8 ?' \, m" r8 P2 i* d
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)+ f) p: z& U, M% E- u
  2.     this.health -= damage;  // NPC теряет здоровье
    9 h7 _4 L/ w/ l' l
  3.     9 X9 F0 r2 s2 u% m; B) C5 Q
  4.     if (this.health <= 0) {4 Q  Q5 b' A. K: l6 L8 U! G: u
  5.         die();  // Если здоровье упало до 0, NPC умирает
    - ~+ A- }3 U/ I1 |9 ^
  6.     }6 x- H, h- d: ^4 h
  7. }$ I2 r4 y2 [7 t  h
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример- K3 {0 O* ]& U
/ y( m0 r* ]! Y# D" `! X: }9 o
  1. public void die() {  // public void умереть()3 G) m( B. t" g
  2.     // Логика смерти NPC; o# j# C. F, t0 l# V& w( i
  3. }
    1 K# ?; o* Y- @! H5 k/ s  l! _
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    " S1 y6 w/ [$ y

5 n" O! ], a1 j$ x/ W% ~2 i7 D
  D8 }& w- c2 _
  1. public boolean isDead() {  // public boolean мертв()3 R6 t; `7 k% _9 M, @; r0 f
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    ( H* \' o6 ?: O
  3. }7 n5 y' h# c6 ^4 J1 L8 O* \' I
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    ) Z* e1 F! n) W

: N3 ?( _& {$ Y4 ^
  1. public void heal(int amount) {  // public void вылечить(int количество)
    - o; F% |$ Y$ f  ^2 m
  2.     this.health += amount;  // Увеличиваем здоровье
    8 v/ }7 H4 [# }' G. Y
  3.    
    ( Z9 d! n* s  ]8 ^' k+ W) r& y
  4.     if (this.health > this.maxHealth) {5 l% L6 Z( o" Q  j: H# g2 O! s
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального  ^' Z$ l8 Y8 V5 [* r, _8 O
  6.     }
    5 C! t7 o; L/ E8 A: Y: ?& `
  7. }
    " L' y  x; {+ X8 u% W% l
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    8 g$ m6 d. q8 ]9 o

; g! C! Q0 x" N! l, u" J$ _, J
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)5 t+ U# e% U- P" ?# n8 O
  2.     // Логика применения скилла NPC
    5 L, D$ N  D/ i0 I& `7 |1 T8 y
  3. }
    7 G+ L- ?. u7 a- q! n, G3 C# [. ~
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:4 Y/ r& k7 ~* ]' N

( j; W/ E0 f$ C+ y
  1. ! I; |8 A8 h- x. c4 g
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)% M! }6 q+ p. \: ]
  3.     // Логика взаимодействия с NPC* r7 Y/ M- d7 m1 h, b4 B$ Q" u
  4. }1 ]/ n/ ?$ G$ ?+ C
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:  m" c8 s  ]* N% f

. G/ C9 Q) e, O/ j5 X
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)6 v) S$ K) F. W% p1 B  H
  2.     // Логика открытия окна диалога
    9 e$ \& o( d9 r5 k3 b8 @- [! x
  3. }: o6 R/ a' Q0 B' n
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
8 w7 Y2 z1 {, v9 FЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
4 h% ?! i3 x' u! u1 \: Z! s3 i  }  D0 K" O- L
' y+ x& ~; Q( ]  G

/ I# P$ |+ c4 B9 h/ ?3 i# N
0 F4 w: m/ D" R1 \0 I% O# T) m
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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