Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
, j  z. U1 t- {; s
7 }$ G( P. a0 J0 w/ D7 j1 {( ^2 V5 t5 X& F
Шаг 1: Введение в классы и методы на примере L2j_Mobius  |6 X  E: S4 ?8 Z
С статьёй можно ознакомится в разделе Обучение > Читать
4 s' Q" I: A& m
. l  v, s, x' f2 l2 SДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
. o2 V8 X. U& b9 @7 v3 F+ Z. P% q# C( b2 B
Обсуждаем:& X, m7 v  F  ]4 F
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius./ `: d! C9 \# T# R
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!: ]( q  p! N7 ^" ~5 ^9 b% H. K4 ^

. s$ ?8 C  z+ g: q& B. i7 R
/ s/ p. |+ h3 Q7 y. j2 n$ Z2 E
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
" `5 G9 c8 ?- C+ N) G- d+ H! Q, i! D2 B! f" N, K, \

: p& h# L" _5 I9 a* [% Q3 c5 h/ U) H" G) j
/ m- {# K; o2 s' }9 b5 R

# i% [7 y, u# R: n* z* k- H

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?* [+ K( G4 ~8 A; p0 q) n% T
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
  g- g; f8 @0 PПочему мы используем ключевое слово this для ссылки на п ...
' D- D; o0 N5 L" |- O2 i
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.% F* b" e8 E% [; [
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
! k0 Y4 v7 l3 H* |+ Y& f
  }6 o7 D& u1 x0 |- P$ [% A: A, \. IВот пример:
1 w- l) H- r) h; M8 g9 a0 {( F, K
  1. public class Player {
    . \6 W& T$ H( b+ g5 R8 u) N  j
  2.     private String name;5 s  H9 S6 u+ I; R2 B0 x
  3. & |2 O2 x0 w9 H: z6 k9 s$ k* [  L
  4.     // Конструктор3 J& k$ l) x- S" U$ Q
  5.     public Player(String name) {9 D" H5 M7 N$ j8 d
  6.         this.name = name; // Используем this для указания на поле класса
    / f8 a: `# |- i% u2 [% a8 [0 Y$ B
  7.     }* C: f' p% G, p0 }
  8.   }0 y. Z8 S1 @% d
  9.     // Геттер для имени, k6 g- ~0 u/ n/ D
  10.     public String getName() {
    $ G8 H3 ?( w8 R* @3 i: N) C
  11.         return this.name; // Используем this для обращения к полю класса3 ]0 P5 Z/ W. V5 I" ^8 X# B2 t
  12.     }
    / m4 u0 P* k2 o. r
  13. }! i( P3 b9 e* [+ d% v
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
% E  i+ ]/ e( o1 k. Y; W" ^( D9 U! [* I) u2 h+ m& p# l9 g4 K6 n, i
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    / @7 W9 |4 F/ X% s. A5 ~
: q* X  o7 L( B4 p' M1 h; i
Пример передачи this:
5 X6 S6 d8 V( j' u: ]7 H
  1. public class Game {
    % D* M' O- e/ E% U; h
  2.     public void start(Player player) {3 A  `- O+ D1 H+ H9 A
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    2 t  N% x/ r3 _5 l+ L) G7 v$ F
  4.     }" b- p  |1 H/ o+ _2 |
  5. }
    - t# c% b. X2 `  p4 A

  6. + n. M5 L$ K6 t3 V; o
  7. public class Player {
    , }# F( |7 i4 z" T; S
  8.     private String name;5 V/ j5 ]* M8 b# P" _
  9. . a  B, ~4 F/ d' r; s0 p
  10.     public Player(String name) {, D5 {, l$ e4 [; M
  11.         this.name = name;
    $ [% e$ N7 ^1 r4 w+ ~9 {  H
  12.     }
    7 \: _+ g8 s& ^3 n, {0 ~$ \
  13. 6 G1 x( U$ d$ D" C4 c( B
  14.     public void joinGame(Game game) {* `3 s% }" y* q$ }" y# X/ J
  15.         game.start(this); // Передаем текущий объект Player
    ( j7 r0 @, X3 D- u
  16.     }5 X: m8 m% a  w0 t
  17. }
    ; i- }6 [( J- d, b/ B: e
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.5 I! d  c2 n+ A% q% u+ `& j5 @


  |$ z" r- }9 a) U- Q7 K7 o2 p; BПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
: s# S$ @+ |9 e% i( N4 S4 e+ V, W$ p: s' s5 o$ `
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! * G* q  |+ c) h4 s6 M
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
4 d8 J  w' }) K5 K5 P; r4 y
Mike123 опубликовал в 2024-10-17 20:05
% c3 l& v3 I5 YДобрый день!
! T: |* }- J& o3 z1 ZКак создаются и вызываются методы в Java? Мо ...

& \- B' F9 R: p# N8 oПривет, Mike 123! ?
( t4 y4 r% {7 @5 ~Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.& I7 }* g1 s- J

  j3 X4 [# J2 T; R; E, e  PДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
! F7 p9 k& c% \# |7 _9 o% t1 P1 Q  N

7 V% Q/ B- C* M4 ~2 HКак создаются методы в Java?
* U9 l% |8 E9 Z, D' M% _( ~+ x1 `" M  L' ^' G" T* B
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
# G, {" a0 L" m2 d* F) Y! ]5 j+ Q3 p; r0 H* s& p# n7 s) {
  1. public returnType methodName(parameters) {
    7 v- Y! v1 Y+ X' A% h0 j
  2.     // код метода
    + Y3 b4 W# V) ]8 W
  3.     return value;5 m3 p, h4 x3 l8 R# ]
  4. }; j& Q- c* F+ @  |/ E
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    ; y" V: Z. z, `7 n. X% o& O
5 R7 a6 c% `- O. X, G. |. e7 ]
Теперь перейдём к примеру.% V' |6 i1 X" U7 Q

. J, A: L8 ?( u0 GПример на основе L2J_Mobius с переводомКласс Player.java — создание метода4 l2 ]7 k. o9 q% c5 B1 |- H
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    ; [) {; |# U5 c& g
  2.     // Вызов метода атаки NPC
    . o( t# G! p/ j
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    0 Y, G+ x) i+ o. ]
  4. }
    & l" w- o2 A3 v' I4 c' R; W& M
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
' D+ @" k) R2 b8 b9 J
: Q3 S, R- E* v2 B( s6 T6 o! y: R: ], ?) F
Класс Npc.java — вызов метода
/ r( o" Y  E1 W" @/ J4 J1 F7 }7 f. M+ R& B% X
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)/ [! K. x1 j! Y8 z' Z
  2.     // Логика получения урона NPC
    4 Y' S2 Y7 E3 ?3 O2 _3 Q. A: b3 `
  3.     this.health -= damage;  // это.здоровье -= урон;
    % P$ }& d+ o- @* u  J  Y
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  5 J# d6 R0 t+ c' d& ]+ d
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    , T: ]) d6 V) j, G& W6 k2 T& l
  6.    
    % |3 l) x- k1 b2 ?7 |* K! E
  7.     // Проверка на смерть NPC9 u. v8 |% G; `- b- N
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    2 g) A4 {# @$ v' b
  9.         this.die();  // это.умереть();  M* r. {6 b0 f- T* v0 B$ q
  10.     }2 k% N3 a1 `! D" y  X" K' |
  11. }
    0 `8 M' ?* w4 d9 x4 _
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    $ c4 R" t$ P* Z& M, V0 n
Пример взаимодействия (с переводом): w  L7 S' d6 Y% g) }
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    - F7 y* l! n8 K5 H' W/ @
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");1 j' q: w+ j( l. e$ S1 S

  3. / A, @! z3 \  P  J
  4. // Игрок атакует гоблина+ v+ ?; }( w9 |/ U, s
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    8 f2 Y0 c5 ?6 ?0 z1 Q
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 3 g" _: o% i' D

4 n. ?$ @4 M- T+ h
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.& D* o0 b: H* V9 V
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
$ W2 S6 ?5 G$ w
( {2 r: f4 L7 d; j: m5 d
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
+ d& l: f: ?+ h2 i% OПривет, Астралия! Огромное спасибо за твои разъяснения ...

* v1 U7 m2 n8 G+ U. g; ^6 x9 ?3 ]Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.! m& y1 @" x; i
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример* M4 R6 |$ f6 D- f/ [* {
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:! R2 h1 A1 b) b7 ~! Y* b3 ]: x, B
  x. \+ R+ V, X, }  G8 q
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    7 _$ c# d3 w5 I7 l7 K9 L
  2.     // Логика взаимодействия игрока с NPC" Z) B  N8 j; F. L3 p8 U1 t; p9 ^* K
  3. }. J0 j" [' l) T8 Q1 A% a5 N
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:3 f8 _# w: D# N3 @' _
* h9 J9 |# m7 S. L  Q7 i
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)  L" C+ E$ i3 n
  2.     // Логика перемещения NPC
      t" e, A- }7 W$ v4 F
  3. }
    / I5 |# w" O& A7 [4 o7 N
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:/ b  A0 C* o1 v; Z  ?7 \* j3 z
0 [* V2 `3 l7 ?* ^: |
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    2 j& R  W0 Y! L/ H
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
      l; \' |  d4 `& G! L) ^. t
  2.     this.health -= damage;  // NPC теряет здоровье9 r1 A2 l* E+ j, P: S3 J
  3.    
    0 [7 r) F. Y& ]6 j. r
  4.     if (this.health <= 0) {$ {: Q  u( ]+ G6 A
  5.         die();  // Если здоровье упало до 0, NPC умирает& I4 {1 @* c. H5 [
  6.     }# ], |( d/ Y" B( K: K! F9 a! Q
  7. }/ m1 K& o& D- N4 V$ R; e
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    1 T5 V) \( c9 ?4 J" \+ M

( Q" R2 m: J; R, A" a
  1. public void die() {  // public void умереть()+ t% l+ K0 H0 M5 V5 u2 p/ \( Y
  2.     // Логика смерти NPC
    ; p( G# Y$ g9 t+ W
  3. }. i" j4 t# w$ ?' a* V5 @1 d8 |
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    / Q4 o: g9 D& W) @/ N& ?

: j, G2 p! e( t% y5 q- K4 T% Q0 |8 _6 f& F
  1. public boolean isDead() {  // public boolean мертв()! U1 q1 o; a/ T' V
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    $ v2 _  B7 w( C) ]% e
  3. }2 H) R) n4 e: n3 ?
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример( a# K* v1 w, i1 y

* |6 a$ ~+ r2 e* K8 |6 f
  1. public void heal(int amount) {  // public void вылечить(int количество)& s: x  N7 D' y' K1 M
  2.     this.health += amount;  // Увеличиваем здоровье/ S7 m6 [. r! o) H  W
  3.    
    % X+ h5 u; W# A* ~( W. l
  4.     if (this.health > this.maxHealth) {5 f/ N( l$ L, m7 N# {5 p% w
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    & b3 C& w& ~. B. e  t0 A1 X
  6.     }1 V: G$ ^$ _9 f0 x/ L' ~
  7. }
    : Z7 b# m3 h8 |# K0 ^+ M" j( k
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:' V2 W( F9 y8 p7 B( J
; D8 e" c0 y* S, F* p! ?9 R$ C
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)9 W0 \0 A! H, L' {+ X2 g& S- n
  2.     // Логика применения скилла NPC; F' b1 p" O, z+ s- b1 l6 C
  3. }# @. [4 x( f' e4 }2 f
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    ( B8 r4 I5 K  ?6 J3 t, K
; ?* ]& a2 s0 D/ V: e% `
  1. + f/ k: S9 n) {) ^6 }9 P8 c  L
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    . t) X5 N) `' r5 t: S; S) Z; c4 x
  3.     // Логика взаимодействия с NPC
    . f' W* ^8 G! \3 j) W  f
  4. }8 D" o. k, a+ i" M. g
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    5 r; h6 V3 P) z* \. c: ?( F+ m
  `* |9 Y4 A' u5 v. v* V
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)& N; v" i( C; A" b% M0 U
  2.     // Логика открытия окна диалога: t6 s! `/ j, P
  3. }, E: V6 J; a1 S! @% [* E4 _
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.0 g/ X6 c1 [7 A$ F, t3 X( D
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
% ?2 z; g( i1 |3 ?6 A
0 R; j$ N5 [8 ~( P' ], g/ x/ X3 {" X

# E, s6 S1 y5 a9 t+ x( d" z
  U9 X7 n$ J6 V" d6 l$ Y% L- G
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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