Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 * K6 S# |1 r8 [/ [" L
: g' h" v4 N* x( m; X1 c

& Q0 V" M* B4 I, y* x% _Шаг 1: Введение в классы и методы на примере L2j_Mobius
% m3 p  m/ J# s9 WС статьёй можно ознакомится в разделе Обучение > Читать+ J. N+ s+ }/ }! C* s* e

0 K) \" z6 W4 }) f, j2 r' Z0 SДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
) Q8 P- e9 g" H* R( ^
1 U+ \! s) \* Y. Y9 z9 M, y" J: i( tОбсуждаем:
7 Q! d. ^. [* Q7 E2 }* z
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    , g; m, ?4 j6 }& U9 |& j
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
$ c4 c  u1 l& w1 R& G4 U* [, ^/ V% m. I  f

5 M) a5 w7 @# Q' i4 n( d
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
* R  y1 o0 E, {0 L! l1 G
/ H$ `" c' P( D% z' Y/ s% Q- e4 b! B, d. {
- o. D9 I# G2 |- ?; Y2 t6 y) V

2 C% U! y$ |1 R" ?# j3 k0 N) ~! I: V' V

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
4 Z, k8 L( m3 X+ R5 u5 W; j* v
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17& U8 [8 h9 c9 I+ {3 e! U; l
Почему мы используем ключевое слово this для ссылки на п ...

8 n+ G0 |' p- o) a7 A% Y, SКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
! K# C7 B5 |; [1 M5 o2 V9 MПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.8 v$ |+ L( z0 b
, P5 }' Y( h4 a* ^8 Y
Вот пример:- p2 l" R4 c4 I% c0 O
  1. public class Player {0 [$ H6 R% H2 p
  2.     private String name;# t7 ]- X4 {3 w+ P
  3. 4 A, {9 ~& O" d' @$ y: ]& Y
  4.     // Конструктор
    1 I% e9 N% I$ ]6 Z, t
  5.     public Player(String name) {8 N: c" i- `% b& ^9 {0 G+ d
  6.         this.name = name; // Используем this для указания на поле класса  L* V3 i4 w, R. \8 Q
  7.     }: [8 o1 m+ B. e& j. P8 K

  8. 4 e% E' ]& [* n; }* {; l
  9.     // Геттер для имени
    ( g2 y0 D# {! p- C
  10.     public String getName() {7 m+ }* d6 ]: i, R6 F  s
  11.         return this.name; // Используем this для обращения к полю класса- D9 |1 J' y& `% q7 @
  12.     }7 Y. A: q+ ]* d; @, P
  13. }
    3 v3 b. J) y* B1 N' ^9 K# z
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.  L2 a/ t- Q9 _. [# Y! b* z9 R
5 ^: V/ G! y6 l9 P6 o% F1 J
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.+ T( x3 e6 F4 ?: g3 j
2 ?  }4 j9 s! |: R
Пример передачи this:1 `+ O. }. {3 d4 t/ p: t* m
  1. public class Game {
    % T7 g$ c& D& ~1 m( z1 F* Z
  2.     public void start(Player player) {( N8 d( G: i& e! ^
  3.         System.out.println("Игра началась с игроком: " + player.getName());( d1 Z% t$ Y1 d5 g. s
  4.     }
    4 K# I8 W5 X" i7 C& A) |& h
  5. }% ^$ E, [- T7 x2 q/ K# b
  6. $ X/ j4 @4 J, V$ F" Y
  7. public class Player {' e) P, p# h% t0 ]4 U. ]
  8.     private String name;: b0 x2 W, M( m3 h; F+ u* n1 n$ e9 J
  9. 4 j# e! [. Y# ^" Z
  10.     public Player(String name) {2 F3 R8 A) z2 M
  11.         this.name = name;5 ~0 y- f8 o/ \- g0 q
  12.     }$ ^$ {4 A' V: ~1 b

  13. * r! S! E8 q' L- G4 o2 F* m6 q
  14.     public void joinGame(Game game) {0 K. z3 Y8 J- P; H: s9 }' |
  15.         game.start(this); // Передаем текущий объект Player' ^- X: E6 N7 ]  c. w
  16.     }: c( r- `2 S# C/ u7 b% L, v
  17. }1 \9 s# F8 o  p. Z2 p3 D
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
/ g4 S: O/ @2 @9 v5 |# V

: o2 I/ f; [$ Y9 N0 {( B: C# iПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
  w3 o; W/ ?. ~* ^& E6 P
* K& n% p' {' |8 x
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! 7 U6 V- F: G! ?$ [
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
. E9 R1 x- |  C, n. W
Mike123 опубликовал в 2024-10-17 20:05" e4 z! l+ D; r
Добрый день!
* V: p- u9 Z( l' c7 QКак создаются и вызываются методы в Java? Мо ...
# `; b" I2 l! p1 e' |
Привет, Mike 123! ?5 n3 H- l; N" h6 n
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.6 i; p4 [: X# W; f8 z" K

' i5 y0 ~: Q" i( ^. Z+ E1 LДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.# `; a. k$ _( a. C4 t7 u/ P7 e" E
3 L3 I% C8 j0 E6 _8 u" v% e8 @% w

% R# r7 ?, ~; ?( z  H6 `Как создаются методы в Java?/ j: E# t: t  Z

9 \! a2 ]( ]8 Z! {0 q( C+ m- A$ DМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
' J3 T* e; u5 k2 q. R+ ?% J; U! i5 j% b5 s$ M* Q' @
  1. public returnType methodName(parameters) {# q2 o' A3 S' q) d
  2.     // код метода
    + b4 S; O" H/ n6 }/ w
  3.     return value;
    # z/ x% b/ E0 @$ t7 ~
  4. }
    , z8 ]' B2 m& x* z+ C: j
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    7 Z  i/ A2 @: N. B5 [

' {" D* Q# E: N- ~- MТеперь перейдём к примеру.7 S2 w  h4 j  |4 h4 A/ J* b

; m( d7 `7 c( u5 SПример на основе L2J_Mobius с переводомКласс Player.java — создание метода# I( Q$ @, x, q# \' O* d
  1. public void attack(Npc target) {  // public void атака(Npc цель)6 Q3 O* c; g: t* b9 Y# K, r- ^
  2.     // Вызов метода атаки NPC$ i8 j/ p+ w; \+ ?
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    1 D  D, j" u5 [3 c
  4. }
      I0 E+ D2 z; t- [  h- }2 E2 {+ k
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
$ m/ n+ b. j" A3 F+ Y4 E* G  z# L: Y$ i8 n/ |3 L+ w9 U/ R, ^
+ U9 }: s4 d5 S
Класс Npc.java — вызов метода
+ U0 Y+ b2 x/ z. g$ y. A1 h  }1 N2 d3 {
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    ) \: G9 W4 H, }9 q4 R! q# A8 l- r  Q
  2.     // Логика получения урона NPC; y- L, b# ]+ q- p7 Y7 \
  3.     this.health -= damage;  // это.здоровье -= урон;3 @# T1 @0 h8 P5 z( e
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  ' r# v# r# @# d' |% l9 t
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    7 a+ T8 Z* @2 Y0 t. O# O) C; E+ X( I
  6.     , N4 ^3 z+ A* D; v. z) x
  7.     // Проверка на смерть NPC& o1 Q3 N! |& ]" E' M9 \9 L
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)8 F+ A. ^+ E* Z4 P' S# g3 E
  9.         this.die();  // это.умереть();
    + n2 v0 y& J3 X3 R4 W- d
  10.     }
    ' O' \; [& o9 q: H! A  b
  11. }
    5 l. h7 m7 v: ~* Z+ `, j
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).; J5 S( N( n7 `" E# A9 p
Пример взаимодействия (с переводом)( m" q) ^5 |* a" U7 g5 H
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    # n) x, t6 F* m4 T  X( s
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    " |# c. ?: f* k9 l2 {. [
  3.   }) Y  ]) H% _- e
  4. // Игрок атакует гоблина: ^5 B9 W$ l! D9 T
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    8 g" p4 j- U) J9 O" D! v
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
3 O9 z- k7 L; x5 k( d$ f7 Z) T: t5 Y  Y  ^
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.0 \! H4 x. r0 v, B
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
6 Z8 }' F" T, M5 D& o. O
# Z9 `; n. D" ^4 z/ ~
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
3 b% R( K6 z7 n* FПривет, Астралия! Огромное спасибо за твои разъяснения ...

7 `# _7 X4 ]+ \. f! o0 `" DОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.% L+ b9 S, o8 ~# P$ |1 {
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример4 }2 @  r( I+ E. {) T$ f* F) M% V
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:% j( C8 e" a# E& D! c4 v3 j

9 p9 G3 m; G8 `+ _" c. a5 I& C
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок); M6 u( y) \4 N5 y* f* a. f( I0 O
  2.     // Логика взаимодействия игрока с NPC
    : p  U: Y$ G! t0 _  M7 [9 |
  3. }4 }/ {# R2 Z" ]( f4 g* I, ^  d  x$ a
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    0 H0 w, O7 c- S) t! p# o* t

3 a( ^- P, i" R0 p' Q8 Y
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)' v7 P9 k* `/ F
  2.     // Логика перемещения NPC
    9 s: `$ A; w7 X9 `, J# f4 \
  3. }
    . x) O* n1 q- D! ~! i) u
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:* d) C! J; |7 n/ [

7 U  M0 Q8 n, }; o
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример( D, K1 u8 x( C& y8 _3 e2 b
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    # d, |( [: R( ~+ w. r( g
  2.     this.health -= damage;  // NPC теряет здоровье
    ( j- j/ u1 Y7 d- i
  3.    
    ' C" {& B. v: _+ q7 v' V9 p7 l
  4.     if (this.health <= 0) {: U! E3 H. i1 ~  w! x! e
  5.         die();  // Если здоровье упало до 0, NPC умирает
    , e5 O- Q) }4 e6 X/ A' ]
  6.     }7 G3 n  Q+ T. x& \
  7. }
    4 w1 M  z" R9 ~- O0 R/ }" u
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    3 N7 g. z+ ]. p) ?$ ?! e
# j  Z0 j* V$ e+ R, e
  1. public void die() {  // public void умереть(); \* L! [& V/ h2 s! S
  2.     // Логика смерти NPC
    $ C2 M/ h- J2 }5 R
  3. }
    2 y; J# C4 K% m% T
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:& K8 {+ [: B+ b5 ]2 i9 {
; c; A& r, t6 e3 x( x; ~$ o
5 D' w9 _% S; Y$ s+ M  o/ B1 k' R  g; G, J
  1. public boolean isDead() {  // public boolean мертв()( H4 \5 C( e: p- t+ I
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0: D- {7 Z4 e" b) @
  3. }
    6 C3 k& a  x3 q( X% L
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    7 B( y, e* J0 D0 r+ q

& d2 v. r$ n: B. i7 k% `
  1. public void heal(int amount) {  // public void вылечить(int количество)0 l2 a( F& v" E
  2.     this.health += amount;  // Увеличиваем здоровье7 Y. |9 r: S$ @5 i& T2 }
  3.    
    0 w2 y" J9 Z! B+ J. R0 y
  4.     if (this.health > this.maxHealth) {
    5 t, u* i. S5 _5 I9 P1 Y: N
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального2 C7 G; u& L& ~+ y0 I/ G# o
  6.     }8 c% A0 J3 O" F; H+ P  X# i: _# f3 c
  7. }# T6 }; C  ~7 y5 x: o. @
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:! n5 H% D0 B" a* x$ n) M% a9 _
- F" S4 m" ^" ?
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    % x( T3 ^- z9 p* B9 X; a5 Y
  2.     // Логика применения скилла NPC
    ( M8 V" c0 o: N6 Z6 b& U
  3. }# o" E5 U! T! }5 ~6 R+ z" }' J
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:4 K6 ^& N; `3 `  C, V+ t

' s* u' j- R$ {; o, z0 c

  1. 4 I# q  u0 O! `3 b% t, o8 P6 E
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)! P" w; U* v) T1 l
  3.     // Логика взаимодействия с NPC
    . l/ E! @& A4 t- {
  4. }/ B5 d7 L3 Q2 d0 H% F8 O5 d
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:. E% [/ W/ y% t! _2 U; e
/ M1 k7 Z& \, N% ?) s
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    9 H( d: r1 l: a9 M4 v$ Y& [
  2.     // Логика открытия окна диалога8 n& L% b& N, \0 u& Q4 R, J
  3. }/ ~6 p: @# V3 B
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы." o! ~1 ?3 J9 ?- o# d- {
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
9 {$ j) K+ y' V5 k
/ C, }1 ?; @! ?) v/ q: o
( H$ k1 o& @9 b8 l; M8 K" T( x4 [! [
; A' X# n" k: C# q3 K
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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