Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 ; S( q1 a; E" K" [0 Q/ O

2 C+ \1 g) y) ]3 O4 c& F  M8 s' s; j, {
Шаг 1: Введение в классы и методы на примере L2j_Mobius+ |- M& B" z7 K% ^5 R0 B
С статьёй можно ознакомится в разделе Обучение > Читать
+ A. @  u- s1 v7 [) N) l( b0 V% [8 Z
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
/ [; z; w9 x' y4 i) t- S3 K! l, Y! u8 [- F) w( f# K' v; _
Обсуждаем:
! N3 D$ }, L. W- s
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    ' ~% y6 u% q9 T! K$ g; G
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
) {1 `* @2 f: x' s6 _  G  e8 L; Q' K& J& U* D( Z+ J


8 {9 h" b; F1 lИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!4 [' U$ I0 w3 X2 @5 E3 L

; c, _1 a# P6 l7 K" H) Q( [5 c
4 t( U! }/ k& T( q: G) n' }# H0 M7 a9 i0 Y' m7 _) ]
" Q1 u% |& w3 i$ T

- [0 K" s6 f# H5 @" @6 I* k& ]" A

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
, z" p3 a4 M9 o0 q
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
5 V4 @& ?* F9 ]" fПочему мы используем ключевое слово this для ссылки на п ...

/ [4 E: x' t" x+ X2 R& D2 wКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.1 M( H6 b* B7 F+ L) m1 s
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.! \; R/ Y( {3 s- Z: \
1 r1 r1 a1 s; t! `3 U) S' N, u( }
Вот пример:) w! U$ N4 F3 H0 a0 u: Z
  1. public class Player {) t  a6 u# R+ S" l; |
  2.     private String name;
    9 h% p1 R6 G3 q# ^5 q

  3. 5 a$ a1 I7 }" B) F- }' N
  4.     // Конструктор
    # R! Y9 }  k! n! }
  5.     public Player(String name) {
    0 v' T0 \& \3 [4 n
  6.         this.name = name; // Используем this для указания на поле класса4 T3 R* n1 ^+ P) H; J4 n
  7.     }
    ! j& k* ~7 P: X- p0 b
  8. ) X9 R4 m$ Z( n
  9.     // Геттер для имени
    % Z& y# P* W% _8 G! \
  10.     public String getName() {
    4 [7 H" W# q( G$ b4 ~
  11.         return this.name; // Используем this для обращения к полю класса
    8 k. }2 Q  ~, m/ {% \3 B/ T5 w
  12.     }9 H5 A8 A6 I1 l# g
  13. }! |6 a7 c4 b- p" ~2 W
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
/ a* A. E" ^7 O3 t2 V( C1 ^
- v0 c" N) z2 b" i) D0 cКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    ' A% X9 h& T) h( d9 d

) w0 L" Q& B$ Q9 u! \7 IПример передачи this:5 ?/ {2 }, ]1 i7 `
  1. public class Game {  ?# [1 Y2 D/ c  P/ s& R
  2.     public void start(Player player) {9 q1 ?# Q) p0 S5 s& K' l2 Y4 m9 _& r! O
  3.         System.out.println("Игра началась с игроком: " + player.getName());# R- f3 F) D7 G  M) F
  4.     }
    ' [% L# o9 }0 K2 W6 T
  5. }  n+ W- ~5 C$ N! O

  6. ' F* u1 C  i" v. m
  7. public class Player {$ w+ i1 \6 n6 `2 F% H- W; ?
  8.     private String name;
    & F5 E5 F0 S( O, F/ w4 {% o
  9. ; D. v4 S$ L0 Q& q6 J' ~# {- m/ P
  10.     public Player(String name) {
    7 y* K( v& g4 ~- `0 `  h
  11.         this.name = name;
    7 s- m' U" H4 F3 D* T
  12.     }4 I9 H  r# y7 V$ g) v1 Z

  13. : X" G0 ^$ [( P$ h9 n6 S
  14.     public void joinGame(Game game) {
    3 V# F1 ~; X  o& X/ O2 w& _
  15.         game.start(this); // Передаем текущий объект Player$ X% c# o6 k7 z  D8 K
  16.     }* F1 R! p9 M. V* {; b
  17. }" i6 L( D4 q" G
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
9 R2 ]) F- l% p  d

$ V# k: z4 q& d; i5 sПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?' r! |, U' M* B4 [( ~; l/ _

& j% j# e0 G' A( z
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
: o: q' M: D; p3 o" {Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
* a4 R* m/ F. b. S  T
Mike123 опубликовал в 2024-10-17 20:05
$ d" k0 X0 H/ L+ x9 V* m" uДобрый день! 7 f- B% O$ D. q; R5 T  L& s6 s
Как создаются и вызываются методы в Java? Мо ...

( d% b  N# p1 W" H) a# Y- ~Привет, Mike 123! ?, u, y& f. q9 m+ K! E! B6 R- W- y, s, X
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
  K) P, i" M& V; Z/ I+ ^4 H3 [# l$ f7 c! ^8 H' A
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
- L) Z1 v* O! U) M8 o2 x2 G7 C. B/ C, P% H9 h% z
7 }, U( i7 X: z7 `
Как создаются методы в Java?. R/ t, b5 c7 \( j% u

  o9 k& K+ q# u5 ]  \9 rМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
. a8 W$ n4 B' ]0 O* G+ {8 K" W5 N0 b, H5 ]
  1. public returnType methodName(parameters) {
    $ m# Z. R' o( e
  2.     // код метода# q; v) s/ y/ O. a
  3.     return value;  D4 b1 q( ?" a1 f
  4. }
    ( y5 U3 d* X6 O( t' r
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    ( }2 j; _* N2 }- n$ H. i

* s' @! ~* s0 NТеперь перейдём к примеру.0 m% p1 z# f6 T0 j: S. v
% w; k' P( l9 x+ u0 L2 D2 {
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода/ n: k- A! B( [, c6 z+ \
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    , j) U$ `  N/ v8 u
  2.     // Вызов метода атаки NPC8 G0 r/ G! y, k9 I
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());) c/ ~4 d8 F. J1 v" W: ?
  4. }' N: ?, z. G; n. K, Y
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).8 R$ q) N* ?# K

. L# o6 F3 C. _5 \/ a9 f1 E# l) @+ E: g4 Z$ r4 o& J
Класс Npc.java — вызов метода& C4 I# z: ]5 A+ H" ]* [) O

9 v0 g: z3 s0 {, _, z- j2 |
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    & f( J& v: q/ M" [  a
  2.     // Логика получения урона NPC
    4 z8 S) ^+ z( z7 y6 d2 P8 d% }5 [, v
  3.     this.health -= damage;  // это.здоровье -= урон;& t0 _# y3 o  \6 N6 U% ?
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  1 H! e* z3 E: F
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());6 F! |; Z9 |4 e/ E+ `
  6.     ! s- m4 B# d% J* x  I+ d
  7.     // Проверка на смерть NPC  U; u$ H$ B1 Q( r  ]0 _$ Y* K) I5 ]; u
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)  f* R9 w& ?( C3 h3 A, Z
  9.         this.die();  // это.умереть();
    * y! D( O6 `6 t' O- N. ]
  10.     }
    " j; J2 o0 I$ r) b% g) S% P  ^9 j
  11. }% t3 z. ]7 q- A# s" j' K, @
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    " b. o/ P7 m( t* _
Пример взаимодействия (с переводом)" J( u% V3 }) F. R; O& [
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    9 N5 \4 C, _2 f' o2 C
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");% o4 r/ S. N' B

  3. 2 w1 P" Z8 o& R% i$ V- t
  4. // Игрок атакует гоблина5 u# a# t* ~$ v( z
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    . v" S$ N. B7 B+ P# R! o7 v9 ~
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
# b5 B8 {0 ?4 b) c" X5 k$ \2 E+ K. f! o
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
( t3 _5 a# h! L# ^2 w1 g+ B4 o5 _% DУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!# h; y0 C; M  N5 B% U: d

0 E; v$ ~) z. j" i  \
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
* \& `4 x% ^; ^* ~4 ~: D+ X- n. R0 sПривет, Астралия! Огромное спасибо за твои разъяснения ...

8 J, U9 o% Y4 M! Y: m; f$ [Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
5 x* {( N  _4 R3 O1 |* v1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример: p4 `; Z4 P/ ?* |  w2 p0 R$ z3 M
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    ) r, K8 L6 g+ l4 O) M  \4 S6 I

: T: S( j2 p* [% `3 @
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)! Z8 Q; A* O! d6 M; o2 K* _# b' B* H) y
  2.     // Логика взаимодействия игрока с NPC
    6 k$ F$ G; A1 P6 a' S: b
  3. }
    7 x. x6 L4 k2 X/ `$ X" \
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:4 e& H* v2 K& u! \$ d  }
* }2 }0 h6 ^/ Z: K9 i
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    1 K  |7 T, A8 {
  2.     // Логика перемещения NPC; e% [' u- b; `+ E! x
  3. }
    0 X/ l8 z0 ]+ ]7 I5 h. |8 S, i
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    : H& B' C8 w1 p/ P5 |  R

! U; R& ?# Z: \) K
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример- ~( J* |! r5 x
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    & I+ g" F: l; n7 K
  2.     this.health -= damage;  // NPC теряет здоровье
      ?" U' m6 O" H, W& J' G
  3.     3 A7 R9 [$ e4 d" x
  4.     if (this.health <= 0) {
    - Q9 g  g' L  q; X6 Q, K
  5.         die();  // Если здоровье упало до 0, NPC умирает, i8 O6 J$ s0 U
  6.     }7 d5 z" M: n/ W! M
  7. }: Y) |: j3 @1 `# m
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    0 E% Z& [  S8 w# `! E' e

/ d: L! Z/ w, r- ?
  1. public void die() {  // public void умереть()
    / |+ @# {) O+ _7 {% l1 s, x
  2.     // Логика смерти NPC
    , n; b" m5 |0 g
  3. }
    * m" `3 s6 l0 q8 F3 w* q0 i' x7 J
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:+ d0 B, F7 W- }! j  w! @7 I0 v
" j; D; L+ i) e" k4 a+ J6 N% t
7 Q2 i: m# P) g
  1. public boolean isDead() {  // public boolean мертв()
    2 P& I3 e0 p8 f4 G
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 07 N: V/ |, K9 n0 B* w
  3. }
    : {, |2 t$ h8 H" j, R
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    % X, D+ r/ m9 w1 K; J5 c

8 e  _/ p) z& L% d- D% y
  1. public void heal(int amount) {  // public void вылечить(int количество)
    6 E: a5 h1 t- ?- c7 Y, W
  2.     this.health += amount;  // Увеличиваем здоровье6 l' |% z2 D, \; ?) M: I8 i3 _5 d5 a
  3.     6 a$ j" v  I/ e' r4 T. C
  4.     if (this.health > this.maxHealth) {; @) M: ?2 `5 T5 s& S
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    : Z2 v: v, q2 i! I' ?3 v" O
  6.     }( I! v) S4 G) v/ N) f
  7. }+ z9 J) ~  C. {. o2 N, k8 x$ T
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    + I) h% s; I9 x

/ \( C7 ^1 D" U" f2 E0 U
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)+ n6 q  \; ?' J) F' M5 [4 Z* n) ?
  2.     // Логика применения скилла NPC* ], i  [+ W( `; h9 t$ `: b' r. }
  3. }: a8 b( l7 e0 m8 f
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:& E2 x- I8 @& C$ M6 A
' _' l1 m, Y2 ?
  1. + o* ]% C, l+ }$ L5 n
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)' t- ~5 z; t4 g, u  D0 ]
  3.     // Логика взаимодействия с NPC
    $ |) d8 D5 A+ c$ ?" N' n
  4. }9 k+ s) j& @9 H. z
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:7 D" n6 P5 b/ u  l3 P4 T7 y
% V5 x' h( V  D8 v/ F; U2 G* Y
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)- O) ]8 B4 g& _
  2.     // Логика открытия окна диалога
    3 {5 S) U: M  y* [
  3. }  z7 P7 u# _6 }2 s
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
0 B* s! f9 p5 @+ ~# ]- g5 KЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!1 b3 g1 [- M- e; {/ U
; q3 @, b) k% f  U. `

9 \3 P) y0 [2 G) T
, ]) |3 F9 H2 f3 N0 G6 K5 x
# _  @, R" z$ G! `# L
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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