Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
9 I6 C7 [) s. E5 x  Z5 M
8 I; h# P" ~: ]6 b+ d  x: q+ s+ l+ _# q. L
Шаг 1: Введение в классы и методы на примере L2j_Mobius
0 E' }, d+ {4 ?( KС статьёй можно ознакомится в разделе Обучение > Читать
) r, T+ U6 f- z: H
5 ^0 A2 m9 h' YДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.% Q  s! i( z% ?$ I5 v
( |" ]8 R$ a# H. F
Обсуждаем:' [- C, y  R3 g3 i, y
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    9 O7 s4 u% b7 D2 t7 ^& S, i8 _
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
: {: g! A* B5 ?# i! m+ Q1 Z. g7 I
' X+ L  n1 \. @. N) U( z, c+ m
6 M' b& f& V$ }  ~' O1 `
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
1 M2 E& c1 @( j8 O4 E+ B* T. [& \7 Y" b. T  l( w' y
/ i' x' i9 [# c4 Y
) t; i5 K- Z) C+ w/ p' u

4 t; V+ P6 r& b2 `% u+ z% h2 X
) E9 N% h2 c6 O5 y% V$ L6 \% E0 `& f

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
7 ]- M0 Q# \( V1 o
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:171 c- T5 U0 g$ e$ J6 Z5 _
Почему мы используем ключевое слово this для ссылки на п ...

# {" \1 B- `/ _5 y/ m2 E* DКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.+ o  i  J5 l8 X9 P: j" b! ?# d
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
: w8 [4 I" D: S3 C0 f& `: V- P5 }4 T1 S
Вот пример:
2 @5 P5 w. q2 c# q
  1. public class Player {
    # v8 C7 E9 r8 b% d9 _: j
  2.     private String name;
    , U. m/ |* l, t' E$ N' j" y
  3. 4 D: T5 `+ _3 n7 K
  4.     // Конструктор/ c1 J  h7 Y' G. b0 k+ D) C
  5.     public Player(String name) {9 c! o, W9 b/ d/ k: f7 }' V
  6.         this.name = name; // Используем this для указания на поле класса- W: ]. r7 r: u# j. l
  7.     }9 w8 K# I6 L) \1 W& g! _6 m9 C
  8. * T$ ?* Z; v! u1 W5 R
  9.     // Геттер для имени1 J' Y' u0 [. {6 m9 L! u! I& P. P: h
  10.     public String getName() {) W: c* V' w+ ~* k, R
  11.         return this.name; // Используем this для обращения к полю класса
    * d8 y, W9 [  A' v" i+ M: m/ z
  12.     }
      E; p0 Z0 V% k7 T
  13. }
    ) i9 P. Z/ I9 r* B/ d4 t
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
6 ?4 Q; u* }/ U' U; E: e
: X6 l9 M- e% c- \  D' U4 SКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    / ~5 ]6 p" A0 Q# i; v5 C
! a3 U1 C: u# c' ^% r* ^
Пример передачи this:
9 c2 `: h' C+ t
  1. public class Game {
    - @4 M8 S4 S3 x" ]+ Q
  2.     public void start(Player player) {2 z. |- r7 D$ V9 D; F; E; ]
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    8 k2 m1 q* ?! }/ g0 S0 h
  4.     }
    $ F1 Z. V  J% o
  5. }
    0 A& }& z: l' `
  6. 4 t( Y- h2 @, V) L8 U. B$ d( }
  7. public class Player {" e9 s4 B6 Y& r3 X# Q! N3 L! [5 P6 R
  8.     private String name;6 h0 h, m2 P) ]" O! k

  9. 0 ^8 C; b/ h% |5 P% i1 R1 j
  10.     public Player(String name) {9 G, T% V) \3 m
  11.         this.name = name;# I* \: V9 E8 Y2 K
  12.     }. |& G6 j! C0 n3 A/ _4 P* k/ U

  13. # y/ A2 Y) Y8 g7 K! l' V
  14.     public void joinGame(Game game) {; p& x: D  t5 v0 E+ g; r
  15.         game.start(this); // Передаем текущий объект Player( B8 p, s+ a& n* @8 Z, r0 H
  16.     }
    % ^0 n1 v, x2 n  J" Q
  17. }
    3 M  d: q. U- m
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
& Q- Y* Z) l0 I! O

1 P, O  Z6 S5 u5 p0 AПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
/ D" V* [% x" M+ C! I4 G- Z6 |, M. a4 b4 `
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
/ f# \3 G0 g, ~, ]; [$ XКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 ! ]  [; o' {8 b2 k1 u* z, L9 U
Mike123 опубликовал в 2024-10-17 20:05% N$ j. V& m) s: Z5 L
Добрый день! ! F, l- t: J( }' ^& ?
Как создаются и вызываются методы в Java? Мо ...
& k: j4 F- a8 \
Привет, Mike 123! ?
9 w  p+ y  Y7 o4 J" [% pОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.: z( a! ~/ G% i/ i
- v1 r9 L/ L3 j- A0 O! {( k
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.2 l4 k& u3 v2 S9 n

$ s/ u" i( m' }" Q* u8 M- }/ L
$ `) [  ]! q/ C, C( E# dКак создаются методы в Java?
/ Y+ K% u1 t3 V1 z  w6 f3 g
, i0 v' k, c3 ~9 J/ s0 t' cМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
0 V# _( r' `% x! {" B: k" `2 `! @) N
. s) ]; [% c0 T: w" X/ Q1 ~
  1. public returnType methodName(parameters) {
    + b& u0 `8 K( V4 Z& M
  2.     // код метода( g' T+ W1 G. q# M! F5 a" N# |
  3.     return value;
      k. R! c% [2 A" ]
  4. }, S2 G7 x9 A0 k' |
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).  t+ O+ Z0 h: \( ~2 v" Q
/ Z* Q, Y* \. H8 t7 U
Теперь перейдём к примеру.
0 d# b  U4 [/ q8 b' @  L, U* o- x+ b& N+ a. ]
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода- n, F6 M* z, m
  1. public void attack(Npc target) {  // public void атака(Npc цель)( b7 g- Z# a3 _
  2.     // Вызов метода атаки NPC7 u1 L2 r8 d0 B9 t" Z
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    8 z# H: I- N2 U( |8 H
  4. }
    2 \6 D5 D/ s5 u) W9 z
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).; u  G  `6 v! N: ]2 s

' w/ f4 I9 I% ?6 f& [! c0 R% l* k* x
Класс Npc.java — вызов метода' B0 `( d2 S# a8 T( |8 a* S

! Y( X4 J/ m: h% g6 @/ t& j
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)+ C# Z- i6 P5 L
  2.     // Логика получения урона NPC; ?  D  J5 c8 B0 j/ S
  3.     this.health -= damage;  // это.здоровье -= урон;
    : P) Z; R' A  L( K1 z2 E' \
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  4 E4 n4 r8 w, q" b% w5 D
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());/ @" C$ m- w* o* S7 n! m# B
  6.    
    5 P# }' x1 }) ?% {" i
  7.     // Проверка на смерть NPC9 M/ r- D+ W& q7 X0 v" X& `
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    ( n5 Q( v! J( F3 f
  9.         this.die();  // это.умереть();) A. n1 z. k' K) ]( g
  10.     }
    2 O% j) ^$ ?( I9 e5 [4 _# Y( D
  11. }
    0 u, e+ n5 Z! d
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    * ~* `2 U2 |6 E- g
Пример взаимодействия (с переводом)
  x: N' j  O4 C8 u, f% b
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");6 H% u& ]* i7 i
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");) |9 t2 m+ ^3 Y3 l! i' ]
  3. $ s& ]5 ]* b" w9 E+ w. j' x- p
  4. // Игрок атакует гоблина5 n* p9 ]6 K8 H6 N. o& g+ c4 Y; k
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    " A/ V6 ?* P/ Y3 f
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
  T  y) w5 W. O" D+ r' o5 @6 R* M! c- y% Q
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.6 Y) o( I/ e, D4 p3 q+ E. \
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
& H; i0 H6 |# q6 \$ K
( g1 @) l- J2 p; \
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
) A! N0 L) z5 t: N- \% H1 T' NПривет, Астралия! Огромное спасибо за твои разъяснения ...
7 r6 a& h' y4 L
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.9 h1 J& J# y9 O' d, r/ A  i3 ~" f
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    & v2 V6 y% z6 W( ~8 w, N
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    + n6 A% k3 g3 ]  S$ J. \9 R+ G+ ?" N. K
0 R7 ?6 ^' T6 P  I& v
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    3 z  R/ b" h* ?0 i
  2.     // Логика взаимодействия игрока с NPC, F: E1 m0 X1 U3 t8 {9 H5 r
  3. }
    * L' P7 f6 l0 V8 f$ \# F
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:4 b1 A! n$ x3 B0 ]0 u, B

. _0 i+ a: Q- _7 p: x" ^
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    * r" E% C1 ~% F( \& F( g
  2.     // Логика перемещения NPC
    4 f+ S6 }+ e  u" W, C
  3. }
    $ l8 S$ P) g- d* `$ o  o8 m
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:, c' ~6 O. C% Z

' ]6 S/ Z( @; a3 h
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример2 ^1 `. l5 z4 a' K
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)2 D0 _! Q- J% s" `( w+ W
  2.     this.health -= damage;  // NPC теряет здоровье; f5 H+ ^3 R) W/ h  v
  3.    
    6 }2 u5 i0 p! k) r5 o2 D
  4.     if (this.health <= 0) {' l9 _! x5 H9 k1 E/ M" u% F1 A
  5.         die();  // Если здоровье упало до 0, NPC умирает
    ; @% B# ~) b7 |& k. U
  6.     }$ R2 c, Q1 ?- ]
  7. }) Q! J( Z4 {9 d7 b+ |
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример. _2 d( X! Q2 l
' k2 z5 h" C% P& w' |
  1. public void die() {  // public void умереть()+ {2 d5 N5 w7 H! w3 F
  2.     // Логика смерти NPC2 P9 u9 r6 ]7 o  Y' C8 X' a* K
  3. }0 B  d( f0 r3 f, @) q5 T
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:7 _: M7 l, L2 N/ ]6 I  a

* s$ `3 c! w) G# c# U9 u5 Y# b8 U
" s' Y8 D: W8 `9 K
  1. public boolean isDead() {  // public boolean мертв()! k% h4 f: O/ x  v7 |- ~' |2 r
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    ' b$ Q9 L. L1 x/ ]  Y, ?5 H
  3. }) o& z: T- }% `' W9 B7 f6 W1 M
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример) x7 ]9 R5 J) y

3 a2 ]6 p- i* e9 Q
  1. public void heal(int amount) {  // public void вылечить(int количество)9 [; I6 k" _) S2 `5 B& n
  2.     this.health += amount;  // Увеличиваем здоровье
    ) C0 z6 a$ H; e+ ~( \: H* T
  3.     9 n0 ?5 n3 E7 v: O
  4.     if (this.health > this.maxHealth) {
    7 B2 G! P+ U+ Z, _5 Z
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального+ c( W" l' @# e* `  Q" c% E* _: E
  6.     }
    . _4 P! I  l% S; w0 T$ T
  7. }
    / {, A  m8 S8 A6 j8 V
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:. B/ W' V% }' c8 Z4 D
. N- F5 W' K) Q' {' K4 P& `
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)" g- Y& g" [1 n; c
  2.     // Логика применения скилла NPC
    8 I" ~! c( K. u' \5 n
  3. }" ^1 s/ ^. |$ c6 ]: |8 X( f
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    9 R) p' ?4 ?5 v: Y  A; P% o* v- p
& w  w) }4 v$ Q
  1. , ]% W1 c4 C* N7 P* ]
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)8 {8 Z2 A) U( D
  3.     // Логика взаимодействия с NPC) J4 R5 }  P+ H6 C- ]4 q
  4. }
    2 z0 O1 F; t. M$ g: ]: e
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    9 x, r! ~: l$ m2 `$ T
& {# s, w- `0 }8 l4 Q! C
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    . P4 C9 w; [0 p' I* F
  2.     // Логика открытия окна диалога  i: i' k8 y4 }# s' j7 N  b
  3. }
    - S; Y. I+ ~/ f/ m9 m0 s
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
" K+ w1 p6 `/ y7 Q$ a$ tЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!* g& V3 i1 |5 I- y* m$ d  r/ O

' w! Y2 T0 f( ^2 R  F3 F" Y4 Q5 \3 r* c2 I
5 E" ]; y5 z3 p4 d- Q7 U* g% A

  @6 ]" g4 H) ~0 c* j7 S% s- N. D4 K
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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