Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
8 J' a  U9 ?" H, |! `. s2 |4 k  X8 J" ^; _3 a" L
9 w) @' ]" m0 _) G: Q+ `. s
Шаг 1: Введение в классы и методы на примере L2j_Mobius
) G# x9 ?- w/ B6 ^8 H. xС статьёй можно ознакомится в разделе Обучение > Читать- a4 A2 Z; K( v  X+ O# u

/ J3 I6 [# m, A4 U7 sДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
; E( {. Y+ R/ k" h4 D# }% x+ t" N) h9 h9 W+ K0 |
Обсуждаем:; x+ b! v* U# K; A  H9 T
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius., x% k& i+ F/ ?
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!# v7 d& A) c7 C
+ F7 b' l8 t  O6 v! q% Z. q


$ V- Q3 A/ g! {1 k% WИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! 😄 Но мы вместе разберемся!2 J3 O8 R$ Y3 V) K. t& W
0 {) h! L% ?' T, F+ ]3 N9 l

) P) \- x0 ]4 J& I% b. L8 u$ ]( f/ ?5 P7 [% ^
/ B" W$ I# a7 k4 G# @* K
9 [' n7 l- I( P* }5 X& K8 s; `

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?7 a) {/ q) m7 H9 D8 I: C3 u" O
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
' M# s9 [% x4 I. _Почему мы используем ключевое слово this для ссылки на п ...
. i& o. \5 v9 `2 K( X9 f
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.) o+ ], S' M6 T8 C
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.7 ]1 h: Z! {6 N( U* ~% Q

- [6 p$ o6 k2 F# h7 o. Q# Y% rВот пример:
7 [8 D# ~0 X1 U; F4 N
  1. public class Player {! y' W, G. w' F+ |8 l: H
  2.     private String name;+ E$ C6 _. H) ^$ v/ J

  3. : Z; a* s* S6 ?
  4.     // Конструктор
    0 C, [7 B  I6 t% @' k9 b* T
  5.     public Player(String name) {
    $ S% y+ J4 O# b0 w3 C) ~6 k
  6.         this.name = name; // Используем this для указания на поле класса
    ; a7 X& g, [, l- U$ M
  7.     }( h1 Q7 O3 g" n

  8. " H0 _4 N0 |: C3 g
  9.     // Геттер для имени. q1 c) Q& I+ d3 F) \
  10.     public String getName() {
    & k9 A# a) K7 y& N8 b9 O
  11.         return this.name; // Используем this для обращения к полю класса6 H: m& }- L2 s2 _+ s
  12.     }$ z3 ^0 d* f, Y! f  G% ~
  13. }5 n2 @7 w! q1 n% W) [: m  d
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
8 w1 Z6 b( E' U
+ w5 u* Y$ o# ?& m' QКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.' H# X$ ?% P" h" `
3 V- c1 @+ S! B. i* n% R. Q
Пример передачи this:) h' P/ N" J: n( e& l2 e) s: P! g
  1. public class Game {
    6 m- K+ C/ x2 J4 A
  2.     public void start(Player player) {
    8 L. d& I1 w+ {0 y% l  D( ~
  3.         System.out.println("Игра началась с игроком: " + player.getName());% |$ u( m5 u" K( D
  4.     }
    5 q5 w/ e: M0 ~
  5. }
    . G! v, q9 P& U' [9 V& T
  6. " o, W7 n/ K3 x
  7. public class Player {+ K7 k: V8 ?' A5 s
  8.     private String name;: [& R2 q. E$ w  M6 i4 ]7 u3 g2 w

  9. ' v0 ^  P% D' F3 V: r% f
  10.     public Player(String name) {
    ( k+ k0 \( q* s1 B1 ^: u! K. D
  11.         this.name = name;
    0 f% J7 I  t# h  _
  12.     }
    ' G" [/ B: H. i! I! t
  13. ( ]4 v2 x+ x8 E3 g/ a7 h
  14.     public void joinGame(Game game) {% d+ G3 t8 Z# a) ]) u! u
  15.         game.start(this); // Передаем текущий объект Player
    ) {; }  k0 ~- f
  16.     }0 ]' @& {: y/ f% |4 ^" f
  17. }( r; I& }: z' n, ]+ b8 N
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.  z: y' R  N  G


: t- a# j' i) dПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! 😄# b; M7 O" `  O; E- |1 w
" {/ [+ ~; c. q5 i3 @
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
3 W4 f" R+ }3 \" k! {3 @Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
$ s0 E, ^3 o0 E/ ~  O4 g
Mike123 опубликовал в 2024-10-17 20:05
7 P1 P6 e5 j9 G# O$ p4 }9 QДобрый день!
/ x3 P; V1 n* k/ p$ z  GКак создаются и вызываются методы в Java? Мо ...

# E2 @" K, @6 ^6 E$ O' \( zПривет, Mike 123! 👋
5 z. I! s2 v( J- w2 k3 z' q4 N, QОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
' x( p* `( {8 {% y* [  S* e' K
6 c- L$ ~+ r& `0 a( r. XДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.* ~/ T* r+ h# M8 q/ v1 T/ _

1 I2 ]1 \( i9 p- i2 c9 o3 X3 H
0 O. {& m) L1 \$ wКак создаются методы в Java?
+ K8 u0 j% W6 V2 s2 \+ m
. D; V% q% h, p( u- m; O% zМетоды в Java создаются внутри классов. Вот базовый шаблон метода:9 I4 h* K# N: d0 ]( c

' D, x6 s+ z! s
  1. public returnType methodName(parameters) {& {3 k5 H5 \; C$ {, v
  2.     // код метода5 m5 \6 H4 V5 c3 Y# O' X
  3.     return value;% H' \5 r8 y, f5 Q3 `9 _
  4. }
    + ]* r# V6 ~, n7 t8 K* B
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    0 A0 f- A! m# m2 ]* g  v
$ I: x1 o/ |9 T
Теперь перейдём к примеру.! y/ D4 Y4 N1 X

3 \( Z: I  b2 H* r+ GПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
" S* P8 m! E$ w6 s$ J% }( c
  1. public void attack(Npc target) {  // public void атака(Npc цель)4 B. {3 {& W6 q- S" k% g
  2.     // Вызов метода атаки NPC
    2 ?- u) ~$ p% p, u/ x3 ?; @
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    % N6 y& D3 t$ |( j: t
  4. }+ D6 D4 ]4 E, ~* Y. j2 ?
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).; E: x5 ?! w+ }3 h9 i

' Q4 p* ~/ a' j8 E, J: [: D
% r. z1 ^* y" n( Z1 c7 @Класс Npc.java — вызов метода
& F( Y% J5 G6 u1 A9 i6 N
# t; t) m1 T; T5 B5 N3 q8 _
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)0 ^' y/ Z* u6 _3 i% a2 E
  2.     // Логика получения урона NPC) s: G8 e2 q3 d1 p" y; S0 w
  3.     this.health -= damage;  // это.здоровье -= урон;5 `" P* _1 z5 T) u( j3 o1 Q3 }
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());    e9 p) G) l2 q: B& _) G( e5 W
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    $ p8 C! N/ w7 D/ x9 }
  6.     4 t3 P# |; b1 K) R( f2 r4 a
  7.     // Проверка на смерть NPC6 o( F$ n) ~. s, ]" j7 R
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)9 {( P- f: g; Y( w% b
  9.         this.die();  // это.умереть();' {4 a3 N* l$ h% B9 c
  10.     }
    + k2 f# a; g% C* z: ^
  11. }( R: [* |$ O1 c4 b/ d
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).% w- C) H6 X2 i% q- k( z
Пример взаимодействия (с переводом)
- f8 h" h+ r, }# N7 j9 x1 L
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    + T9 W# t( b" S3 m) T
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    * {# ?' i5 `$ o; T; y

  3. # r0 Z) l7 e  q4 K5 L
  4. // Игрок атакует гоблина
    , d- I  @& x: @8 u6 v2 J  c8 X8 R
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    # O# M) M: I6 O7 p
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 0 a0 `, c* j! C' B8 ?

2 D1 a' y+ e; ^) K( _
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.3 ?5 z/ n1 R  `
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
1 \% u1 J) d! N2 @% f& ]4 L; D+ R
( r8 R5 b3 `; Z  B
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
5 ]1 |1 \7 p$ U2 b0 J" ]" O, E  n9 uПривет, Астралия! Огромное спасибо за твои разъяснения ...
4 g: s" S! D3 g" Q. s
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.  e& T7 q! m+ N3 G! ^7 E: M0 n  w
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример% y0 s, k" G& ^$ H: s2 O: g% c
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    0 r& R4 z# P9 g& K# {8 h& T

3 Y3 _: H1 u. P; ~3 A. h
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)1 [5 {# X: b9 P- i, L- x2 ~3 |
  2.     // Логика взаимодействия игрока с NPC! o; V; _" E7 j7 d4 I
  3. }
    $ r0 ?$ }; V2 _6 U& S2 J, V
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:& U5 `$ Y$ X# S4 u7 `% J6 [1 l
* G2 d8 @  r9 J) B1 ^, I4 v
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    - i* Q/ t4 E* k& @3 t# t
  2.     // Логика перемещения NPC
    2 P* K) j0 {1 v4 H( B
  3. }  v( O) {: W1 S0 z- z% P! B
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:0 X$ ]( L6 ?  t7 u" `! ^
. E0 I; X. h! |* W
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    - C- x6 ~3 U* P2 O5 u  S
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    ( \- T1 m% M# ^3 f
  2.     this.health -= damage;  // NPC теряет здоровье$ C: n0 C  d' H+ L4 A
  3.     / O( Y, U9 W# y5 c& ]
  4.     if (this.health <= 0) {
    : k4 m( v9 [% Q" }% X9 C
  5.         die();  // Если здоровье упало до 0, NPC умирает
    % }4 ?% Y" R+ E& W! n' R
  6.     }, O$ m/ _2 }/ ~$ W+ H
  7. }* |+ B* \) X& B7 D0 U! j
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    1 e0 L* u# t5 I8 u+ b

  B& }1 p+ C/ ]# S& Q
  1. public void die() {  // public void умереть(); S, J  p- ]$ C& d" O2 J
  2.     // Логика смерти NPC
    4 p# B- b1 `3 U; n  }! r# L" Z: ^2 T6 ~% K
  3. }5 L# \: ?! C4 D: w+ x3 O
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:  {, O0 X' F+ L
" w8 R2 m, A! e! _  J
9 @' A% N) _" y* ]4 v
  1. public boolean isDead() {  // public boolean мертв()
    6 O* l. m6 f7 D# q
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 08 E2 ]/ y" l, g/ i
  3. }
    4 V* C# X6 Q  a* b/ Q$ R' s1 w
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    ' ^% p4 p5 q4 X! _4 M1 g
: A' D/ ~9 }1 E" J0 F4 k: ]
  1. public void heal(int amount) {  // public void вылечить(int количество)) m1 \7 V& H; R1 P  N% a3 V1 i
  2.     this.health += amount;  // Увеличиваем здоровье1 p0 _9 r; o+ l& _
  3.    
    1 J. g$ V5 w% _0 [2 G5 H$ c
  4.     if (this.health > this.maxHealth) {4 ?. t/ m; }+ v5 ]5 h+ M
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    9 B- b4 }8 D3 A; g0 g& E
  6.     }
    4 B7 l; F9 G3 \6 G- t
  7. }
    ; C, u8 G& d0 a# G( D7 e% H
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:/ c6 w9 ]/ a6 ^. ?+ c1 R9 R. p
! C  r0 x% k! f7 @
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл), w4 a' p% A. e) ?4 z
  2.     // Логика применения скилла NPC
    % D( I5 v6 y8 u# H6 u& B
  3. }
    2 e/ _9 ^% r/ |4 Y7 e9 b& f
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
      S" E! J8 \( i" a$ }/ O3 U
" R" t4 O: _( ]0 g% I; @3 ]# F
  1. " z0 k0 {" o8 G& H! q! h
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    - Q- p4 W( p  X/ m4 D5 h
  3.     // Логика взаимодействия с NPC  k; S- A; D, `% K) r! q
  4. }- n4 K  K5 f( D* N, z  a6 L0 @/ a7 t
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:- C( x, B, b. w0 M. v

. M- {! Y8 W* n, \
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    + s, N; C$ D0 k" @% B% l4 v
  2.     // Логика открытия окна диалога
    5 t1 C' T+ \. A5 \& l+ v6 v
  3. }& X; @" |; n, Y& G
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.7 _5 [: P3 t# s
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
6 d3 \0 |7 s# r# G+ _0 X; p
' p, e9 Y5 a; z1 ~
' O% l4 ]+ H9 ]1 {8 W6 ^+ O8 |$ ^% [- o" o4 y9 U

& v) r! `/ {7 Q2 T' L. d8 ?9 h. L
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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