Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
! ]# M, a) z, a4 a' G: p/ A" O/ W+ N2 e
5 \: q9 N: T# m5 e5 z9 h! j
Шаг 1: Введение в классы и методы на примере L2j_Mobius( f+ u  J! F2 j7 W$ ~
С статьёй можно ознакомится в разделе Обучение > Читать
1 ]- F5 c  j. _8 F
6 i/ h2 P. U4 @& b7 G+ g/ f% fДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.& @" C" E1 q$ ~; B7 {# j3 K' p

7 J6 x0 u; K7 _6 a$ {( TОбсуждаем:
' O+ ]/ e, H" ]0 K1 \" `
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    4 E. v% X/ c' E6 {$ a
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
1 V: ^( \; o- T- |7 Q) l% a8 H0 h; ?8 _: S3 u

) }1 n/ w! S$ `' P9 a9 j
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!$ {" s4 O8 g1 \% H
9 g2 b$ H$ X* j+ N6 E9 k
; f8 o5 Z( z7 v* H
- c2 C/ d, V8 P

2 v. P* U4 }2 X" t. l  |& M- P0 d

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
/ W/ k- i7 ^; o- z6 s& l
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:178 N& m% e& w& f$ W& I
Почему мы используем ключевое слово this для ссылки на п ...
4 ?( G# Z) [8 K/ i4 `$ o+ d
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.: N* B4 E  ^3 P
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.2 a/ }9 ~. Q; ^8 L5 N
6 {; Z/ h: _+ a# I: u! x8 u
Вот пример:
; p, M5 b8 D' Z- G  D' N
  1. public class Player {! M- J6 I3 |. `6 H4 j; O, P6 n' Z
  2.     private String name;9 W" V9 n; H$ Y" d2 j. z

  3. , t/ S2 }  {0 x, C; n. B+ _' u
  4.     // Конструктор5 y& E% J& z' ]* [5 d; D
  5.     public Player(String name) {3 |- h7 _* p  g% r# F' H4 a
  6.         this.name = name; // Используем this для указания на поле класса& e6 ^# R# P3 `. e
  7.     }1 Z: ^& `! ]! ?- W/ q1 C

  8.   Q8 G" g1 x2 o0 F# `% {
  9.     // Геттер для имени
    7 [; W' T& c* l- x
  10.     public String getName() {& n( d5 r8 |4 r  e) r5 w, Z
  11.         return this.name; // Используем this для обращения к полю класса
    2 j. `9 T& k7 p( n* a
  12.     }& \" n0 i, n7 L4 j# \- [
  13. }) }, P; l1 f( D3 U6 N5 ?
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
* k! \7 S" ?4 _3 b, P! O1 [0 e" K. b% m. \6 s3 G3 W3 X. C
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    & t: R4 {+ M- h; H, z3 Z
/ i9 Z3 N- P, q& v$ P- q  U
Пример передачи this:
5 u; U1 O2 h$ A" E9 Y: `* T
  1. public class Game {
    5 m7 ?  w( Y3 g- y
  2.     public void start(Player player) {) ?5 f6 z% K! C. O0 B' Z& r  G
  3.         System.out.println("Игра началась с игроком: " + player.getName());* m; y) ?9 L2 e: v! W0 X2 M
  4.     }
      V4 v% Y4 q2 y( d' _
  5. }3 i" |0 H. o0 \- h- f3 N  H
  6. # N4 [: s$ j( V- J
  7. public class Player {
    2 z* w# J4 _7 c0 R
  8.     private String name;
    5 ^/ D" I# o% ?- C  H

  9. 8 g- g/ j4 M9 G: Z# k& A) i/ {+ C
  10.     public Player(String name) {5 O2 J! S  \# F2 w9 r/ b
  11.         this.name = name;
    1 W4 |% x; M: B1 B! {# V
  12.     }
    9 Z# Z& z" [1 `! c8 F9 l

  13. 3 u! N( L5 J/ j5 K" w* D
  14.     public void joinGame(Game game) {( i0 m$ Q* O& q! v: C! ~
  15.         game.start(this); // Передаем текущий объект Player9 B% P( x" I* l
  16.     }/ ]7 A# h6 u7 M6 s
  17. }' e: U  B. u7 I) z
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.) I9 |* \% \* t- ]- @


; ]1 c! H  H* b2 Q; r4 ]Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?$ e5 [6 G' d6 Y

+ I0 ?8 x  u& E* C8 k/ o
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! 1 ?8 r% t& q4 X, y
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
6 W- S- V6 A6 h+ |7 E$ G6 F/ Q
Mike123 опубликовал в 2024-10-17 20:05* a. |2 N4 T' A9 _
Добрый день!
) k# C, V' y/ k) }, y. KКак создаются и вызываются методы в Java? Мо ...
" X4 G/ h1 C! Z5 }
Привет, Mike 123! ?, o0 _6 p5 s9 }
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
  \% A4 s# t1 T4 S
9 o) r$ S' J$ k5 s# Q3 f% zДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.% m* O; n# Q6 A. K5 f
( J: ?, p2 @1 R" h, w
$ V  }$ W& k- `
Как создаются методы в Java?
2 k1 l8 K& k6 _9 \; W! S
3 C4 o' z9 ^7 f9 wМетоды в Java создаются внутри классов. Вот базовый шаблон метода:' L9 j7 m1 q( L  Z3 T+ ~' g
0 b* e5 H$ z  K- \( ~& N
  1. public returnType methodName(parameters) {" `+ h; o6 }- h+ T2 f% f! o
  2.     // код метода
    % {+ A0 _( o: K' z
  3.     return value;' O+ {" }9 A- {& W, k$ X$ Y
  4. }
    5 S+ a5 ]" v. Z8 g
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).3 W0 B7 s2 m) ^- x7 F

6 m0 V7 z: W  {/ bТеперь перейдём к примеру.
) N& N4 z4 O% O4 s) m5 `0 o) F" f! K
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода0 C: T0 Q5 P! y/ f
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    0 x5 G5 M4 q+ ]* Q& |$ A
  2.     // Вызов метода атаки NPC9 Y6 S, H8 s' P9 F4 Q* ~
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());1 p" S( L% z" E0 O' d1 S3 a0 }% J
  4. }
    3 x* R2 B' p' L
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
% e4 N5 x' `2 _
: a7 h5 l: T& Y, ~7 B
* \2 s6 K) _5 o, ?" KКласс Npc.java — вызов метода
2 B) M- G, D0 F/ o3 s2 P7 h7 m, I% S5 T
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)7 K, ^2 q( T3 P: [1 I  z
  2.     // Логика получения урона NPC/ q+ n( P# ?) G9 Z6 s
  3.     this.health -= damage;  // это.здоровье -= урон;: _. r% i5 h, a- S( G0 `; j4 k
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  7 e5 K# c; o' I' k4 Z. U7 B. C
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    2 Q& ?+ |0 F4 W
  6.     " z- \1 ~: @' P/ q# d
  7.     // Проверка на смерть NPC
    " c9 d6 v9 v# L1 \* m" f
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)4 x- R% [' ^  a+ y3 z8 X
  9.         this.die();  // это.умереть();2 k& ?1 }" D% G1 b. ~( T& c' J
  10.     }1 v$ ?5 f$ w. h
  11. }6 ?3 [; h6 H9 t9 |1 b
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).& I' F8 i' X' w& A3 k
Пример взаимодействия (с переводом)  ~! d* q3 P' G) r
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");: W  R& @4 G7 d; ^; ^/ D8 `# s# X1 F
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");1 n, \/ @7 ?9 s; c
  3. 9 q) A: [3 W, r: H
  4. // Игрок атакует гоблина( F) \. w6 b) w
  5. player.attack(goblin);  // игрок.атаковать(гоблин);% r9 Z* Z; e2 \3 @/ X; u
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. - X8 A; S# u" U2 t/ |

/ z+ E# {1 @, _% ]3 k- _" f
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
' K' C4 _8 W) z# `У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!1 x( }$ v* }; T* z2 ?

4 ~& b% H" c  L2 ]  W3 t: C
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
4 d. G% L8 T- P& q6 M  yПривет, Астралия! Огромное спасибо за твои разъяснения ...

8 O9 f; n% b/ u) P$ `% mОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
( e5 b. |) h2 B$ }( R6 \2 N# J1 w1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример$ ]& \7 O  Z  U2 O0 F* c' |6 d
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:9 Q& b" z5 R1 |, w8 K* v  B8 e

) ?* m; n3 t4 y$ h
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    ) [( ~% u  _; h' b: Z1 l
  2.     // Логика взаимодействия игрока с NPC
    # C! l1 k% A5 O( R1 ^* g
  3. }0 C- r0 Y8 k, ]( O* w& G0 C
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:- A* l3 p- J2 ?$ O3 {

1 Z0 X4 [+ c2 N* q* Q4 _( {, l$ L, `
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    9 y% ]) _2 ^, E! P+ G
  2.     // Логика перемещения NPC
    ' P5 {8 L- p5 m' e& W3 a) V- M
  3. }9 H! v5 ]# u# i% S+ g+ M4 j
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:! R- ~/ v, B* v# i

6 `7 {/ A; Z+ Y; `: l$ C5 T: b8 u8 F
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    ; E+ Z$ Z- b* w" {/ C  w
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)- W) T; @- X7 E5 A9 _$ w
  2.     this.health -= damage;  // NPC теряет здоровье
    6 J) a" z& W" i. C/ _
  3.    
    ! |4 a# ^0 d1 w6 B
  4.     if (this.health <= 0) {* L6 f" Z* H$ o% `4 m, L+ C
  5.         die();  // Если здоровье упало до 0, NPC умирает- k+ Q$ ]) ?" m
  6.     }4 L; g) i% A0 ^8 H$ ]% s7 Z! ~. D
  7. }
    # I! I6 ?5 ^9 N3 D9 y" ?
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    4 e1 f4 Y# t; G$ q, I) |

) K5 v, {* X1 L  T" @! }
  1. public void die() {  // public void умереть()
    5 q0 P" h; B; S* G4 h% m9 S& m
  2.     // Логика смерти NPC
    # p# ]* K; U  W4 m) H
  3. }
    1 t3 Z6 ?$ T* m1 y% k( q
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:( J% O& _: C% J4 [3 }
2 a( j/ b3 X) I% ]3 o" i  u' `, V

+ ~' [* f" S' w0 ~* W# H
  1. public boolean isDead() {  // public boolean мертв()
    $ ]5 @' d6 {6 Y- u3 z# {
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    4 `, P4 o6 ^" m0 n5 V
  3. }
    3 y3 N0 k) v% J5 `3 S7 r3 ~
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    1 L7 n4 Z) ?4 ~9 R! B
0 O! u; {; A  B7 D* ~& O6 t
  1. public void heal(int amount) {  // public void вылечить(int количество)$ w, V/ D: H& D- i" t& a) I
  2.     this.health += amount;  // Увеличиваем здоровье
    * y, _, U* [8 T' N* y
  3.     * n6 S6 H7 `) @( _' D4 r  L! ?
  4.     if (this.health > this.maxHealth) {
    1 ?$ Y2 E  a0 Q/ a9 X5 P# }
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального) c5 ]7 z# Z, M1 v9 m2 G. j
  6.     }# i0 R7 h0 ?6 s, L; I
  7. }
    1 q8 `9 O* b% u- ?8 ?& r+ L7 \
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:7 f& F9 o: g5 \) n* ?' T/ n- z
4 F2 z$ G) N; o: I$ P
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
      h% C; C" g7 V6 @0 o7 D: D  C
  2.     // Логика применения скилла NPC# d$ ^9 [/ b" K" o& z9 n# {) u
  3. }) L: X, Q; C8 d  p9 i
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    / x7 Z5 X1 g" ^! R$ e
5 m  I' x- o; P3 W; d( c6 d

  1. 0 l- |7 M( V4 n4 a7 U6 Z
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)$ d7 w3 B$ G  s6 L0 t6 ~* p; j
  3.     // Логика взаимодействия с NPC0 T2 Z1 r& r! a- z' T0 q
  4. }( A2 S/ N4 N  [- O- o
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:# C" Y6 ?/ h- X  e& O6 M" L

$ L+ _7 m" u2 D$ ?! z
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок), ^+ [. O( w& H; ?; e( m
  2.     // Логика открытия окна диалога- O. c  L- f$ u" Z/ r9 Z
  3. }; P7 ~* g1 b. w8 Z* o
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы./ c0 Y: H# d7 O* k) U7 {
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
$ c. J" n7 L" T2 R# ]& O7 F7 @. h

% |; P* ?1 l* b+ Q, a" E
. A8 F. ~5 p, p& F' e5 B) f  @  Y! O0 o! U9 v4 ]6 f' k
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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