Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
. L' p! T2 s$ P$ k5 K* O/ b  j4 i9 `  m1 _0 p
/ u0 V1 M2 e6 K
Шаг 1: Введение в классы и методы на примере L2j_Mobius
( L3 k) `) k& R# F7 `С статьёй можно ознакомится в разделе Обучение > Читать7 C9 A' M4 y8 a; _9 ]2 ]
) {$ ^* Z6 \1 {; p
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
( O8 c) k( a( q$ L# \% s
4 U6 ~; K* y1 C  ], ZОбсуждаем:' g8 X$ P2 e1 A* O+ }3 L' n- k
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.; K; D% |6 U( r* [) S' m
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
( G7 m) I9 b+ ]* \& p+ N; v  \$ n8 Y7 b0 B+ s

- M4 a8 F+ g6 K, Q  l8 G
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! 😄 Но мы вместе разберемся!
: t( e9 C: m& m: e5 B9 H) |  L
) c- G+ q& G# W
+ Q0 g8 Q% v0 h" j+ `8 j+ n: B4 W! y9 O; e
7 h" e9 N0 ^* f. j( E3 `

# @) T% `3 U% i; x

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
' j' t# W: J0 n% U2 M1 q
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17! \' V- N7 R6 {" z- {8 P6 M
Почему мы используем ключевое слово this для ссылки на п ...
1 ?( q* P! w% q# t/ [
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
' y2 s8 o2 l: @) h3 X. uПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса." ^1 t5 }5 @3 g) K
. {0 m4 p. n7 Z. ~+ o# \& ]
Вот пример:
# N* ]$ E' h. Y2 m
  1. public class Player {& Y/ i9 v2 h" D6 J, ^' _% H
  2.     private String name;/ [! M3 V+ t; b" S
  3. # y" R: e0 s* @: d% B' O6 z
  4.     // Конструктор
    & J1 N- f! e1 h- A9 n! U/ D
  5.     public Player(String name) {
    ( z2 o% _+ Y9 ?0 K( \; E7 Y; p
  6.         this.name = name; // Используем this для указания на поле класса2 B- L( w, {2 ?+ Q
  7.     }
    " J6 y4 _, j2 q3 f
  8. 6 |) B8 L$ I& S4 Z; p
  9.     // Геттер для имени0 F! e' Q& Y7 n$ ]) N
  10.     public String getName() {% P' {# o. d2 M* `7 S$ t
  11.         return this.name; // Используем this для обращения к полю класса" e1 ]' q7 ]( [* A0 y  _1 c
  12.     }" T" T2 Q1 U/ |3 ~, Y2 B
  13. }) r& n: H- H) |" \6 i; C, R  Z( F
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.; u" C9 s) }, Y8 T! w1 @
' q6 a2 ~- E0 F/ i& y
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    0 q* C# S. V! B/ v

% k! t7 s5 G) K5 U9 gПример передачи this:8 Q5 R# f2 r8 l) C- [$ I
  1. public class Game {
    4 @5 Y( ^5 O5 x5 I
  2.     public void start(Player player) {
    6 N/ r& J' k" b, O. F3 e$ {
  3.         System.out.println("Игра началась с игроком: " + player.getName());. [9 Z. q& i, f7 ?2 Y
  4.     }% e; Z! A9 \+ j$ p9 N
  5. }/ p+ Z* S! C0 w8 H

  6. 4 K' B# M; @9 z- [0 \
  7. public class Player {
    1 _+ q/ b! U- x9 ?
  8.     private String name;: E: |  p+ v: x' d) O5 Q
  9. ' s; H4 V& U; f
  10.     public Player(String name) {
    . K1 T* w: e1 e4 z+ e9 p
  11.         this.name = name;
    5 e: f$ t: X5 |
  12.     }& h4 r! Y# V  o0 V) C6 ]

  13. " j. Y1 G; }" l! o. A+ C4 q
  14.     public void joinGame(Game game) {
    ) O* k0 C& D7 Z* `! v0 U
  15.         game.start(this); // Передаем текущий объект Player0 k9 W, Y$ l8 o3 q' [
  16.     }
    ; ]/ D+ D% \( [' Z
  17. }- A% [. L& u2 I" e- g, \, g( S
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
5 d: Y$ s8 H3 |

  x# r1 Y; \1 a9 P3 C# EПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! 😄+ v' A# Z$ `  C( ^; [/ y

& d5 `4 p8 Y" u9 e- r3 Z" _" ~* l
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
& y0 k! K. |& j& t4 r; _Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
, }# f" ~) K: E. U0 ^
Mike123 опубликовал в 2024-10-17 20:05
- }' n# W# c- g6 u" y: t+ RДобрый день!
- N4 j$ l4 Y+ Q5 {# MКак создаются и вызываются методы в Java? Мо ...

! z$ K8 N# l# h$ n" i# SПривет, Mike 123! 👋
2 g, P& X$ ~! C  H4 F- h' ]2 M3 S5 RОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.: O3 M  E5 N2 j1 U* f% ]
- A4 {( F; b  q7 M; z4 }
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
$ r0 z3 `4 ]! J8 t% w9 d
2 d: x) S2 f7 d
7 h+ h% R; @7 t, B8 d( u2 `# jКак создаются методы в Java?
" F% f# W! D. g9 Q( k! v$ A9 J. a3 @* c8 L
Методы в Java создаются внутри классов. Вот базовый шаблон метода:& A7 e1 w. M+ q  _, C) ~- B

0 U0 U* I; N0 q% H
  1. public returnType methodName(parameters) {
    1 i, u( P( d$ p" @0 o+ y  A
  2.     // код метода% [/ w& K4 Q/ b' ]+ Y
  3.     return value;
    : I6 E' r) W, f$ L8 h
  4. }
    , J/ ~( A" Z! x, \# X
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    - A. g( x& ]8 _7 @
- q& L& Y! q5 J6 t8 X- j
Теперь перейдём к примеру.; d" V) [5 s) k1 [1 _* y+ Z% @

& ]( V- F" M' k( e! D  H4 D) h/ _Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
$ ^0 x2 Y& @% g# k  H9 ^
  1. public void attack(Npc target) {  // public void атака(Npc цель)1 J7 r8 N+ Y) B) L- |: s0 U
  2.     // Вызов метода атаки NPC
    & E( t0 g& g# C3 U9 v; x# b( D
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    ) M+ \  n+ T3 D$ Q5 Z- p! h' \
  4. }5 Q$ @5 u1 J* q! K; u$ \
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).1 T7 m( t) d; V
  I) r. w  @! _( s: u
& o8 g% M6 I) @: r$ m) A. V/ U+ H' c
Класс Npc.java — вызов метода
6 |% `3 u9 z. n5 u* U( Z. K: c0 g# U# ~0 ~1 P9 D5 ~
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)1 H( j) L6 _6 `0 Y9 v
  2.     // Логика получения урона NPC: Y6 m- I$ u: A
  3.     this.health -= damage;  // это.здоровье -= урон;7 R$ G# D2 I  F1 g2 G% r2 |: M
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  ( m% Q: `" \$ _* c
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());" F# N8 z( O& M! H
  6.    
    9 ^  Q& W4 Y2 e4 m7 j: l! z
  7.     // Проверка на смерть NPC
    2 Q1 Q2 L+ W2 e$ t" o
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)7 V, H) v2 Z9 v  K1 l, I
  9.         this.die();  // это.умереть();
    ! E/ y% T. Y3 G, r4 [7 ]
  10.     }
    0 E! N8 X- w6 J3 L1 W4 w$ S
  11. }0 i. O7 f0 p+ `
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    & l6 _: |% B( t: L, }
Пример взаимодействия (с переводом), F$ x6 {7 Z- ]2 ?: E/ _! k$ @
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");: c2 A% l" p7 }2 B
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    & _  J+ r4 q2 |5 I- ~% U

  3. 5 a- G, \: x- s8 {7 [5 |' P3 j) G
  4. // Игрок атакует гоблина
    : J1 b* {# j# l& k* o$ H, s8 T8 H
  5. player.attack(goblin);  // игрок.атаковать(гоблин);7 H6 P' \4 J. ^0 v. [
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
( A' g$ e4 U. b4 ^5 p$ V3 h5 E) P  |7 R  e& i( J2 Q1 M+ ?; r
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.+ `1 [) G/ c; d+ X+ U1 u5 e
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!- x% E3 t. h/ v* N% U" V* |
" o/ T5 W6 R& v9 Z. ]& i
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30  q+ K6 E; i* S6 e6 m+ L1 H
Привет, Астралия! Огромное спасибо за твои разъяснения ...
6 N  A, k% q0 S& u/ o6 D- `
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
0 K6 i! c, h( V0 m2 Z& J1 M1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    ! B/ F% n( ~, t8 }' ]$ ~/ Z, w4 |6 q
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:7 r; {$ ]5 g: v

* i, o& g0 f( X' G8 p
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    . \4 K- A% W2 C. {- I
  2.     // Логика взаимодействия игрока с NPC" }; P4 x' k! n  t
  3. }
      u: @& q& X2 X4 P5 k
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:/ `  O/ e4 ^, |8 [
  }0 a6 s/ n6 T0 ~$ W) v% M1 l3 i+ C
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    + V/ |9 I+ ~* \  G/ ?
  2.     // Логика перемещения NPC
    ; M  @4 [; g/ Y* Q! i0 [
  3. }
    4 M9 y, ~# `% f3 _, E! p
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:  f0 b9 L9 q. M- F

: G; E7 C) p. S
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    0 G. x; }7 M1 ~& p0 s
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)( O- `0 B& B- ^8 o, ?* L9 p: u
  2.     this.health -= damage;  // NPC теряет здоровье
    ( a' [( ~, \' [' ?6 u% J. W8 l
  3.    
      y# o. p1 v$ _6 T
  4.     if (this.health <= 0) {
    ; f9 L* G+ Q; w
  5.         die();  // Если здоровье упало до 0, NPC умирает
    - X# ]3 I  j4 A( e) N& m& {# D
  6.     }# D, Y/ `+ K+ m& k
  7. }8 M6 }- x  |' h& P) y. \
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример: b. a8 I: F5 ^/ s% V( u- B8 b- C
  Q+ |' J9 l- z2 q
  1. public void die() {  // public void умереть()# [6 x  Z% Z1 G/ d
  2.     // Логика смерти NPC. U/ S) q% _: c
  3. }( w& _0 c  }8 H( \8 v
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:& Q1 Y+ v9 c3 w2 N' C

) E8 V$ I7 ^0 w/ q
6 `9 |- [) l9 C+ P
  1. public boolean isDead() {  // public boolean мертв()# K( S- N# M& G3 a& T" b, B
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 08 e4 `1 P4 |# ^" j, Y8 r: U' ^
  3. }- P8 x' n3 _9 T2 _) d2 z
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    * ?' n5 ?- f! k2 s- {% q) m
8 i, B1 @& r( V  x3 a5 k2 v
  1. public void heal(int amount) {  // public void вылечить(int количество)& J1 n3 j/ k6 M7 t( U0 i& X, ^
  2.     this.health += amount;  // Увеличиваем здоровье; s3 x( L% h& d2 L3 g1 N
  3.     5 r3 O5 V( D: Y0 P* I; `
  4.     if (this.health > this.maxHealth) {" X' f- y* w$ |
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    1 t9 s# x+ R/ q: l" L
  6.     }% G  I! Z% H8 R0 F" g
  7. }
    # V# N+ P' N3 h5 b! [, w
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    ! ^6 O; r% a* h5 d+ R# K, S
( u+ z+ ^; f$ c/ s* O( o
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)+ D1 R1 h; X2 P$ l
  2.     // Логика применения скилла NPC
    1 U$ i. O% {! u; Y' ~' t
  3. }( D4 a* i* w1 K, y% C! x
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:0 V/ B# `! P" n% U
7 W2 h/ Y2 R, x2 w5 o$ O  r

  1. ; I2 J+ y7 Y. I6 @3 Y, f
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    / a2 J$ f  k# J; Q$ P
  3.     // Логика взаимодействия с NPC
    + H( l( ^$ i' A+ n
  4. }
    - Q6 {. l/ h' J9 _
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    , h- D  J1 P# m1 k' v
: J1 c$ w7 _5 f" q& M; C& `
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)6 E  w8 i( S% K, K. S: h
  2.     // Логика открытия окна диалога
    8 a- d; j3 M, l" ?2 B) p3 j
  3. }: k8 ?: k; O3 n3 D( G6 K( W# r3 t
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.% x1 Y% b( `# @2 q  I: J6 l& _6 e) t4 w
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!$ i& c; L& o! L; M

2 q+ u3 x; z9 e( c
: o( h7 r6 Q4 }6 A' u* B$ ^  W, z3 x* j; ?, K/ n( ]

6 o3 R- _! T& w& O/ J0 g: E) L
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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