Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00   Y& t$ \+ |' Q! O- R: {
6 z. l4 |1 E( z, f; k& D. {: _

* p5 V. `5 k  I" a) n' eШаг 1: Введение в классы и методы на примере L2j_Mobius
2 |; x3 {: ~$ N6 O9 M, AС статьёй можно ознакомится в разделе Обучение > Читать; n. ?0 x, b, R! b& N8 ]

& V3 _& p# F6 h; NДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
: J* R2 z" T$ i; p
0 Y: i+ ^% l0 wОбсуждаем:# S! o! y7 R# e9 ?" Z
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    ! X% l+ j2 Y6 P2 W& g
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
4 B% e$ h  h/ g" I6 U& Q9 _8 r: u' k" F$ j$ W2 a

" |4 E# ^7 U6 Q7 a
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!6 j. G; s% E- r5 f& F" }3 B8 k
) i  _  }8 b1 Q1 w0 _* @& D

  F' r5 b* z2 r1 u* \, I+ s4 I) S% f: b2 V1 I/ j- X# _) }

+ X' w& @& Y  o) d; t. h1 s& _% \$ j6 H9 t3 u; I

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
, w2 ?2 G- K4 N8 g- v
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17* R6 ?  S' i/ D- q6 M$ v% F7 a
Почему мы используем ключевое слово this для ссылки на п ...
8 A0 V& e( g/ f! ~* \+ a
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.9 W! c8 D" z! q: K  S+ d2 Q' \7 {
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
( z! u+ s, P& t* g9 p8 r# a8 u0 m1 W/ _$ o% O
Вот пример:6 ]( e; k4 p& n6 g; M
  1. public class Player {
    , r' h0 c. Q: J6 {/ x
  2.     private String name;/ s6 c0 f% ?0 [4 A$ X( {

  3. $ R$ d: Z+ @9 J! e5 M
  4.     // Конструктор
    1 J4 m8 I$ m* v5 }5 _
  5.     public Player(String name) {: l- i  a. |5 i, @
  6.         this.name = name; // Используем this для указания на поле класса7 V  m% z& s6 j0 C
  7.     }/ W! v$ g: s! A! d1 s4 w

  8. 3 k8 u1 n" I' ]; H  p$ f; f, }
  9.     // Геттер для имени; E0 w( d! \3 {
  10.     public String getName() {& A: c# e7 c! a0 p& N5 @
  11.         return this.name; // Используем this для обращения к полю класса1 N7 G% v) m+ E+ h& ?
  12.     }
    5 z) `* P, f, A9 r: y8 L- ]3 c8 }
  13. }3 L2 r* N2 T: R! f
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.. V$ ?6 \, H4 h; n+ w

; b5 L8 d/ G  C# HКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору." K1 Y" _4 u# `
, Z* f4 n/ g* l! e" r! }7 H
Пример передачи this:
0 H/ }# d# G8 ]# P: n
  1. public class Game {
    / s- p3 p2 @! }1 n$ A+ S- ]
  2.     public void start(Player player) {
    ' t2 A! j" k/ u. ]) g9 [
  3.         System.out.println("Игра началась с игроком: " + player.getName());/ j6 R& h" }( G! Y# c
  4.     }; g" H4 l% [$ V1 s" P0 k- k
  5. }/ W+ g' c; y% _1 [' [

  6. ) }, k6 E3 d1 e' A8 H# {
  7. public class Player {
    + p" Q# }3 k, v3 n( S1 R# D
  8.     private String name;
    / K4 O* g3 E( z9 s1 N

  9. 0 R' ?" ]4 G' y$ U% z+ F
  10.     public Player(String name) {
    & T: }$ N( x: m- m! ~% L
  11.         this.name = name;! i; [: l7 a" g! f) J1 _; T- l
  12.     }
    : \+ R6 C; N' F- a4 u, o

  13. % z% v* D5 o2 @. L5 u
  14.     public void joinGame(Game game) {0 o2 H3 B1 T( T( e$ ]. K1 a
  15.         game.start(this); // Передаем текущий объект Player" a+ u+ S: t, u0 t: `( Q- C
  16.     }4 b7 G3 W& f2 ?# @8 f% Y% \) X, X
  17. }
    . @. G( A5 T( O& o$ f8 g! {
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
' B7 a! `) [: e! T* t" w( t, K

$ {% x/ P, Y% ^  RПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
, h; l4 j4 E6 N  p7 a8 R/ `* X5 q
9 p  X# U: r# ^& N# }+ }
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! 5 K4 X9 F% k: B+ d+ g
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 6 p3 x& H+ }* k6 F# I
Mike123 опубликовал в 2024-10-17 20:05
: x4 O. X: n0 R' x8 K* RДобрый день!
" {1 Y6 N1 k4 R* B; A+ q$ c! HКак создаются и вызываются методы в Java? Мо ...

3 c$ R6 _" W8 o3 l0 s) X: W6 |Привет, Mike 123! ?
( T! R* w3 S7 Z5 I6 L* {7 jОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
9 r) X5 C  t. D3 [
! s0 h! p* {' \- s5 T0 w4 \Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.) j, s% v, `0 {7 N2 t; f. H# b
6 {6 [. e9 u, O

$ r7 J1 D; x. B- _/ QКак создаются методы в Java?
+ D8 Q7 p3 Y8 G$ k* w- }. u8 g& C. B
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
- V- |6 O6 E# u& h: Y* s7 U% z& j, ~* c, S! J7 y, {( F
  1. public returnType methodName(parameters) {6 K: q& J: D! Y
  2.     // код метода
      T" V: `+ W0 G- v: |
  3.     return value;
    % [1 |. u4 u/ t  o, p& v
  4. }+ s. b3 U0 U, p
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).( \7 F) L" `/ ^
0 d. K5 |) X% M" p8 E/ d4 a2 ?
Теперь перейдём к примеру.
, t# r9 }0 [" j4 w: ~5 f; T, q$ K1 o% V# W# K/ X6 I: I3 r9 {
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода* d( a; z. `" _2 @/ ?
  1. public void attack(Npc target) {  // public void атака(Npc цель)( i$ _" Y  \. u2 j% b5 ?
  2.     // Вызов метода атаки NPC6 }# d; R# A0 a
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());! B# T) I% u4 v5 Y# W' Z# S
  4. }
    ; p8 F* _0 l4 I& H6 h3 @
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).! m$ k5 _1 F/ ?9 }! b) |
( u. a, r7 c# `  F5 Z- |
4 `! B8 w, Z0 o. B' b
Класс Npc.java — вызов метода% B, u! N/ j+ g2 e. j# o3 K7 C
$ k& m" s- q# ^: Q$ p" g+ l
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    . D6 }4 {8 x2 |- G% Q0 y
  2.     // Логика получения урона NPC1 N) }0 e3 B1 F; o% }5 [4 j5 ]
  3.     this.health -= damage;  // это.здоровье -= урон;
    ; ~4 I% c. J- F% v
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  " s; h5 ^5 U3 ]6 f4 o8 F
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    % z4 a+ K7 [) h2 q
  6.    
    / t- `* |5 x6 `, n0 c6 I9 K
  7.     // Проверка на смерть NPC; [; i( [) P. J% L5 g
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)& _. O) X0 r- V. l, P
  9.         this.die();  // это.умереть();- H5 W; g  p1 ]
  10.     }2 e- s" r" W2 x# J
  11. }
    : B0 O1 |# V' A. q- \- b8 E0 o
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    / j. K7 X3 L9 |# @8 X- x+ E3 k
Пример взаимодействия (с переводом)8 @# z4 t. U3 `: X# S& m
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");+ P- G9 P( E& s( e0 O
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    3 A7 T1 F' v5 q7 [6 f# W
  3. 6 N$ u" A: E; C: c: c1 N( \
  4. // Игрок атакует гоблина$ d/ S% G! u# x- ^, ^: m
  5. player.attack(goblin);  // игрок.атаковать(гоблин);6 A. N. `. ]1 ?6 c4 I) @, R! g$ Z
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
% g# }6 V2 q$ t  D5 x0 q
7 G1 _* y5 j# `" U+ J) ?4 R
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
. V5 a; ]% c& G2 sУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!; t4 R0 {3 t8 D) d

4 I) b! F; K4 x) X
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:302 `0 w' Y% V5 i, k7 Q
Привет, Астралия! Огромное спасибо за твои разъяснения ...

) r7 B* k2 Z. |- S, T! [Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
& x2 o' ^& t3 L0 p" K3 l1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    4 o" c6 ~. v- T+ y' V9 `
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:& w; R0 }+ t) b0 `! s" b
; f* u$ G% a; w# |
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)) ~9 W5 e- ~' @( R4 Q( W
  2.     // Логика взаимодействия игрока с NPC
      d% F" t0 H3 S; O; e
  3. }' l6 f  J/ J" t7 a% P$ j! W( f7 ^
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:) ~  y! j: v3 Z. J# h

( `7 ^6 B/ P4 u8 h# A7 P4 J
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    1 b+ t! w  [" ]! I% u) ]3 }
  2.     // Логика перемещения NPC& r# e9 Z: T! m( t8 n
  3. }0 ?% ~3 \  M# i+ `' E
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    * n+ t& J2 S& [. }; M+ d

8 `2 Q1 t  \  a4 d4 R& |* `5 l
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    * c; k- a( K: x3 G% t
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    % `/ u9 E4 Q/ i. s! F: U+ C  D& q
  2.     this.health -= damage;  // NPC теряет здоровье
    . c0 w* ^0 h' z2 Z( H4 m
  3.     9 B" R' U- ^" I! J+ r
  4.     if (this.health <= 0) {8 v4 {: x! @2 \) M7 q: g% M
  5.         die();  // Если здоровье упало до 0, NPC умирает
    0 P# r0 ^1 Z1 Y) B$ z
  6.     }
    $ s  i5 |+ n1 L, y' K- s- \6 H; F
  7. }8 v4 B6 W8 w& B/ X5 K4 G
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    0 @+ H) X, [4 J, K$ g8 X

4 y) I5 E5 E. p0 c/ I4 z
  1. public void die() {  // public void умереть()
    : G1 L4 I5 i: Z
  2.     // Логика смерти NPC7 f% u# X- G) _; r
  3. }
    6 a% w' d4 A) {4 r
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:/ a/ |7 g/ A/ D3 e8 L

+ u9 V2 M2 k3 z7 D4 W- K8 d! E- L0 T0 ?* N. a5 ^
  1. public boolean isDead() {  // public boolean мертв(). v5 q  {6 `0 U8 _
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0' O% H; j/ p" o% p2 ]
  3. }& E# x( O1 L- d# c
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    4 a# I4 b! Z( w8 L: a
+ |) k3 o+ A, \3 L7 K
  1. public void heal(int amount) {  // public void вылечить(int количество)! S8 K8 \( o# G) H
  2.     this.health += amount;  // Увеличиваем здоровье
    % T$ S( _! G0 ~; G: N( x3 S
  3.     + I5 z. n" l5 L! f
  4.     if (this.health > this.maxHealth) {
    & y8 k& W# O, x( f* x8 J9 X
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального" M" G+ |2 ?  e, v  i7 _" C. z) u
  6.     }; D5 S4 d0 ]1 P
  7. }
    . T8 u$ l6 T( F% ], s
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    2 f1 ^1 ?" `; `% b7 ], V. u

8 x6 P) _2 B0 X% f. }' _( H4 x& z& W
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)8 J  S, x7 F4 @+ \$ f" G
  2.     // Логика применения скилла NPC
    8 e$ P" e0 J' n# d- l
  3. }
    ; F7 x3 _/ o( {3 R* O7 ~8 d' Q4 z/ p
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    6 j! @7 n6 ?" K& Q0 b- X! G+ Y5 z
- W( c0 V6 D! S2 G6 p$ R' N
  1. 7 K! [. k: S0 o) B. p/ b
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    + d, b* a6 ?* d' M& |) w" J' b! b# E
  3.     // Логика взаимодействия с NPC) C( s: b; d( i
  4. }
    " F: R3 |. p6 C; N) S8 v
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:) H4 e" c  r. b0 b

) Y( l" f; }( W! M! {8 `
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    8 \: {0 Z- P" V
  2.     // Логика открытия окна диалога4 _5 Y2 m1 D7 T: W. N" q! ?
  3. }
    % J7 T' N- x: y
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.$ o) W: @, r# ]# P' o5 u  H
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!4 T9 R5 V  [8 o2 e  h. g2 a3 [0 T+ j

1 F1 b, V/ k* X: j
2 t/ {! f( r3 N
0 o7 y2 Q$ c1 Z* w/ a/ u
, D! G( |8 F' j* y: Q& I4 [3 a! A& i- {
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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