Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
+ O! B8 E: {! q) M" K+ b7 z4 @* s2 n2 z
0 w- T& k' B! `- B8 m/ T! ^
Шаг 1: Введение в классы и методы на примере L2j_Mobius
" @- I7 a2 U' J% v. j* |С статьёй можно ознакомится в разделе Обучение > Читать
& I! S+ f: Z/ b- C! G6 r: p! |8 X4 n- M, W6 U' ^, g! }
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
0 q* \+ n" I% |3 ~# l
/ s- O- ^: I0 C7 k* E# JОбсуждаем:0 h9 Z8 }2 C) u' @
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    9 P# G, N. n9 {6 m+ X+ h# G
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
& a2 q; F1 Q5 [; u
( v$ g2 N3 g5 k2 m$ M. H/ X

7 T) T! i& ?' L% TИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!0 Q  v0 u: ?0 @) R6 _
8 y' W- N- A8 r
  x1 a. a2 g1 w

, `( c2 }4 Z8 q# H4 O2 A: q5 n' H; u+ O# U, k3 B1 ~
) F9 G$ F, U* x8 h' o/ F) Z. l' g

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?) F5 |  T" E* R" b( p% l
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17* b+ }- y5 z: P! u. |5 u' Y2 X# r
Почему мы используем ключевое слово this для ссылки на п ...

7 A2 i9 J' w  _; R/ w* U" OКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
2 I! X" k# G# l/ H$ y/ Q! rПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
5 x! K9 F! ~% B/ p+ H# |9 ^# ]9 S8 i, A0 G( R! q( H
Вот пример:
2 p- H7 {# S" \. e& {; l& M6 A
  1. public class Player {
    5 a8 E, y& S% Y' Z3 K) q% G  ~
  2.     private String name;, |% O3 b% H( e2 z
  3. , w% F8 a( u, {7 {1 y: S
  4.     // Конструктор3 C& ]: S$ L- z4 h5 x
  5.     public Player(String name) {8 A% L4 {2 r! R4 T( N
  6.         this.name = name; // Используем this для указания на поле класса0 [% y. V" u+ ?; g8 P
  7.     }
    ' n0 Z7 \8 Z/ k, E$ u

  8. 1 ^+ D2 d" U3 _% f* m+ \- |
  9.     // Геттер для имени, S2 b% ^, z1 t: Y( o! H! Q3 V/ |6 ~" ]
  10.     public String getName() {$ `+ e* y7 F7 S8 |8 Z. B
  11.         return this.name; // Используем this для обращения к полю класса2 |9 C( J& Q9 Y+ R, E2 n
  12.     }
    4 ]6 c  ~) P2 D' _
  13. }$ [* I# c4 R* a" x) o5 d) e
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.; l$ E# d/ ?6 D! [+ ?  i2 Y2 p0 Y! J

% P4 j  p: _0 c4 M- n7 mКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.  W' k  F! Y3 }( ~
6 n" \2 f) |) ~
Пример передачи this:# T: z: }: }! S: T0 E# t- c
  1. public class Game {9 A& u: Z4 D' Q
  2.     public void start(Player player) {
    4 T; C$ x8 \6 p3 U0 P) V
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    ( u' a, g/ S; n% N. T
  4.     }7 e# y0 M/ V& h$ s/ A
  5. }
    % l. u' r* ^' v  I  R6 D4 a
  6. + d# L) S( i- M1 R  _; N. t
  7. public class Player {, E9 I, m. {# m% ]) G* F3 A9 }
  8.     private String name;1 D# i4 T- A8 ?1 l
  9.   r. \8 ]9 T. V# e3 L/ {6 I
  10.     public Player(String name) {6 ~2 O" h3 N8 h( @3 U8 ~
  11.         this.name = name;' ?. i2 R0 i9 |0 v7 b
  12.     }/ x. K( W. H% y; i
  13. " @$ ]" [2 f' E! B
  14.     public void joinGame(Game game) {
    % i2 |& |% J# h" m8 P/ x
  15.         game.start(this); // Передаем текущий объект Player
    ) e( _2 K# N- ]" s# ~
  16.     }$ {5 U  b: K* `2 m2 |7 b+ e
  17. }  R2 d' P+ o* A3 ?: U* P
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
) [# F& P" E- J5 Q

3 N# q9 A2 t) t: I$ B9 G- @Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?4 ?/ q8 f8 f9 x" v& g; B
4 y. X$ D; k9 K( T& V
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
& O% }' u8 }* k) DКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
. E8 F" j4 K" N$ [; s. k% K* h
Mike123 опубликовал в 2024-10-17 20:05/ P+ x& P2 _: z
Добрый день!
* a/ M) {+ k( w0 g  U# XКак создаются и вызываются методы в Java? Мо ...
; y1 @4 s* s7 ]4 L) d
Привет, Mike 123! ?
; E; Y0 Y. k% g' ?5 n$ RОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.2 C, E2 k( \/ R) p. Q

0 H* N) N5 Y, A! M1 Z8 e8 }6 LДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
" b, K* I; V. F$ r: Z# o1 C/ K$ g
- U, P9 l& f8 Y3 z
Как создаются методы в Java?
0 r, \1 j3 H5 F" C4 x$ y$ I! u# v8 F. ^. s' {* L* g. J
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
- T1 E; i' \1 m2 I& `2 q8 [, _+ p+ c: H7 _
  1. public returnType methodName(parameters) {
    6 \. h! K- y& e& o) x% ?
  2.     // код метода! O4 @# V0 y6 o! g* x
  3.     return value;
    6 q  T1 u2 Z0 G' \3 H" f- \: ~) [3 `, M
  4. }1 N6 H5 I1 G! v: B
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    . j* z6 f0 L! E( z$ f* k

% c$ b# u* ~  [8 R) l2 V# SТеперь перейдём к примеру., Q# }7 p! z/ n" A% \- Q
& }, `) ~" M0 }2 ]" o1 s) k8 ~# T, `6 f
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
% _2 y( Q  {0 W! n0 V7 L' @# {
  1. public void attack(Npc target) {  // public void атака(Npc цель)" n6 w! k4 W% S! s6 J% y
  2.     // Вызов метода атаки NPC
    4 Q+ \$ a$ G3 X
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    / F- Y- U0 R  X
  4. }
    8 i2 k8 a6 }) u0 J  v$ D' h4 _
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).; F- y! n' d% Y4 @5 A. i+ @2 x

4 l& S! ^9 J% ~
8 C0 F4 g; c$ [7 t9 q3 AКласс Npc.java — вызов метода6 w' E2 a' u( a4 Y7 R4 x
$ |8 W: i8 E. W8 z% d
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)& L) _1 M# X- j# _2 L
  2.     // Логика получения урона NPC; q/ g  N: c' F3 |+ T3 T
  3.     this.health -= damage;  // это.здоровье -= урон;
    ; M# w5 J5 Q6 J7 k. U" G
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  * m# Z6 a& s% M! [* ]; v
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    % C1 P: X$ G* L. O8 u# ~) `+ D
  6.    
    # E1 a6 d% I7 w7 m* T
  7.     // Проверка на смерть NPC
    3 J7 I6 b5 A9 P; b/ p9 i+ [. j5 n2 ^
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)$ X( \1 {3 `0 Q. I( U
  9.         this.die();  // это.умереть();
    / j5 z+ k( b, |! K2 }; C
  10.     }
    ; Z! S6 L3 Y' K( b: Q. A
  11. }
    $ ]8 o: f2 b* b& Y
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).8 P1 d- y" V. W  T) i! q0 c
Пример взаимодействия (с переводом)
) d5 I# ^  F8 H3 p  U7 d
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");9 c3 N* W& h' C7 c7 g- D
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");8 t9 u0 @: i* @6 O; P1 w
  3. 1 e$ T- V4 C; T; N+ h/ R, P2 ]
  4. // Игрок атакует гоблина; g/ d' |2 O. Q: Z/ J8 K8 k
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    ' B1 y1 I3 Y. H
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
2 m& _) u9 C8 v: L. _; }3 \+ s
/ S6 q4 `! m/ }- D0 t
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.1 ~1 @; ~; R8 p6 c
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
  D% H- n7 j8 k# n) `9 ~. ]8 d1 [2 [. t5 h5 i: B
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:303 U5 p2 f, {, K2 c3 V. Q5 f  s+ ~& p% s) p
Привет, Астралия! Огромное спасибо за твои разъяснения ...

$ }% M7 Z2 Z+ K7 w" V1 xОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC., B5 _# A7 G5 K  ]% u/ \/ S  v) K, {
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример* X9 m* A4 [7 k9 @, R5 o+ z+ L$ b
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:7 M) n  G0 P. K! X* z& |8 I) U
$ v5 W/ W8 h* R- Q3 r
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)4 `* J+ m# s9 t* Q
  2.     // Логика взаимодействия игрока с NPC( O8 Q/ D: X+ p' U# P
  3. }/ a2 F6 R; o* y* _5 z
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
      c; a! ^0 M8 q$ a) d# i5 K

" q- ~0 `. D1 I- d4 _
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    ) V; r7 B" i8 q
  2.     // Логика перемещения NPC
    0 }6 C; i9 R# b, O& \6 h5 r
  3. }
    $ [7 @7 q0 u* ?( ?
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    8 @! G4 }1 y) G# X( P5 R

2 m' n+ `; J9 T* D
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример" i' w; R9 |: x" O6 D
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    3 N8 f" M! A7 I/ U! K0 Z1 @4 R
  2.     this.health -= damage;  // NPC теряет здоровье1 ~+ u; u8 S/ [+ ]  x
  3.     & n' M! a0 R8 j9 W
  4.     if (this.health <= 0) {- d! ^; F) t% Q$ E
  5.         die();  // Если здоровье упало до 0, NPC умирает) O' J: H5 k: i5 ^9 |% j
  6.     }
      {9 @8 ^1 o2 ]1 H0 g0 b1 y' V9 c
  7. }
    ) R8 G) v! J( E+ T( D! Z
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример8 y1 O% ?, M- N# @
4 w- u6 K, T- X
  1. public void die() {  // public void умереть()4 T5 c: W$ [- ~* l- j& l" X
  2.     // Логика смерти NPC
    : o$ R4 ^* J3 D* J2 M- U
  3. }' u" {) s+ g; v6 h5 }+ e0 S- e5 |
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:2 U& c; q8 \/ D2 M) K

; {; ]* O' h- N8 V# v( v4 ?4 d. |4 a$ e: Q
  1. public boolean isDead() {  // public boolean мертв()
    8 S  e* `3 Z1 X* j% C
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0' _7 b% a: [. Q, `
  3. }
    ; t4 c8 G. }! }
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    ( _$ ?4 c; j, }$ E4 t

2 b( w+ u/ p; H9 a" Z' @- d5 P( t2 F9 P
  1. public void heal(int amount) {  // public void вылечить(int количество)8 W) U9 N, g4 j9 f
  2.     this.health += amount;  // Увеличиваем здоровье
    1 b: h6 P* }# t% i2 v
  3.     * I0 B: P, \% p/ [
  4.     if (this.health > this.maxHealth) {' C3 O/ N1 b. a1 Q; A
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального9 P" {; ?: O9 k, }7 k
  6.     }
    1 z0 q& @: x; N  S
  7. }
    ' u8 `' a/ `( _3 n$ K( o0 T) X3 ?
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    * S* H" y% p' N! S+ C, v

; f; v5 o/ U0 r. N* ]7 q. G" h3 H6 S% l" d" Q
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    + Z0 J' I% ?0 q5 F8 Y$ o
  2.     // Логика применения скилла NPC1 h. w, ^/ r/ \7 Q+ M3 ~
  3. }' Y+ a8 e+ \) H  J5 Y$ b
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    ) T5 H& z3 N8 o, [. s
$ z1 l# @- Z! l1 ]9 `

  1. . V7 y" c% U1 w9 }& k/ w6 x) @
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)) F- ]* o* z' c
  3.     // Логика взаимодействия с NPC' U) _8 u3 a. X8 U4 k
  4. }
    2 M2 U# A% k& B$ b
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:+ W- Z( Y! l2 ^1 ?. w% f& d
* I0 Z& ]# s* p
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)) V& h  Y5 p" x
  2.     // Логика открытия окна диалога& o. ^: J' |7 |% c
  3. }9 r0 y2 M7 W# b  I* Z
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
' f7 {' d) s5 R  c% ?Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
1 x$ N+ m# N$ C  @0 F3 ^
2 D  l/ [8 @' h: Z% E+ I- l6 d* W
  }9 n/ b2 ]$ I6 c6 W

. |" d/ m2 D: F1 k4 @1 \3 e8 n
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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