Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 : m+ y5 e/ K  [+ F! k- O1 k4 s  `& {

7 b& m, U5 z. w. L  ~
/ g" V& E  H4 u2 Y; r- _4 ?4 qШаг 1: Введение в классы и методы на примере L2j_Mobius' v" O5 @, w8 ]( w5 N6 T
С статьёй можно ознакомится в разделе Обучение > Читать; {3 P* U& G# o; F2 N, Z* U
0 {- Y3 k/ n+ r. o) ^' @2 |4 W
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
# A" S2 T0 n8 Z% ]) Z  a. U5 t3 G5 q4 F/ q* T4 |
Обсуждаем:
7 B2 P5 ~) y' y- ]  |- f; _$ o' _
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.2 E( {7 ^0 D8 @
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!3 `3 \/ I5 x4 m* c) N, X
( {8 A2 j4 {" {; m

. i% n. n/ P3 l0 Y3 ^& U6 x% B# h$ X
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
. Z; j- [- l. w
2 V% k5 D* s0 U- R! t) c6 w+ j  y; j0 x# c9 ~  Q9 o1 Z! v

% o8 N8 N2 H- p3 h+ m' \6 e6 x
/ O' f- G. |$ ]1 }5 {: M" Q2 b! s  v; o4 Z

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
7 h% Y$ K( o5 n/ I  s- m
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17) X2 Z5 x8 i! o3 O  t/ b4 P/ l9 ]
Почему мы используем ключевое слово this для ссылки на п ...

, M( l$ F7 }7 XКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.2 J  v/ E8 m/ b
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
2 `$ N0 k* n% C8 a/ I1 P. x
- c6 O/ Y3 f0 C3 bВот пример:
. p/ U1 D! c& I: i
  1. public class Player {
    4 }- }" {* }3 k+ f; p4 F) M
  2.     private String name;
    $ J2 c$ L& O  B+ u% H2 ?

  3. $ X9 d  X6 t# c1 P6 Q
  4.     // Конструктор
    ! g1 N( M3 j. X+ P
  5.     public Player(String name) {+ g# ^  a( V+ Q
  6.         this.name = name; // Используем this для указания на поле класса% x2 e, R$ R  _, N8 R0 d& N/ T* L
  7.     }1 [3 v& A) \. S& D# p

  8. # E* O) m+ J+ c2 e, b
  9.     // Геттер для имени/ ]( r6 S: u3 }5 s6 k9 X5 Y
  10.     public String getName() {
    2 U, c7 E9 @: a, C$ X: Y1 o
  11.         return this.name; // Используем this для обращения к полю класса
    0 B5 ]3 j9 T( F+ c! B+ w
  12.     }! e: R( r& T0 R3 A9 H! t% x
  13. }
    5 I; L: I! X/ X. L
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.( w. r' j) Z6 d- r
& R: o$ k3 X3 Z1 m# e
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    4 y$ u" y5 J# V9 p6 u
( G  {; W% R$ ]$ q, s
Пример передачи this:9 [! m% Z$ Q& v) h4 P& |$ e' Q
  1. public class Game {
    + m$ c, l7 f. Q
  2.     public void start(Player player) {
    + T; l* D% u' n+ ]! t7 ^
  3.         System.out.println("Игра началась с игроком: " + player.getName());/ @7 Y2 o. Z7 y( [
  4.     }
    + K; \$ a( `: I4 \* g+ l) I
  5. }
    % L9 M2 c9 z. [" a  m+ t
  6. . d" {- ]4 [, g( Y: \+ G& D
  7. public class Player {& x8 a" k$ b6 O. [. V
  8.     private String name;! U, u% c) A( r0 y1 A
  9. : k/ _6 I8 l' v7 u8 Z
  10.     public Player(String name) {0 L- y) l! d! i) ?7 E7 B. |
  11.         this.name = name;
    9 W6 e; U- [% Q: I) U; C5 j" A( w; ~! a+ r
  12.     }
    3 d" y6 @6 q/ w. e: O# K

  13. 6 T: |; Z1 _8 m2 \
  14.     public void joinGame(Game game) {/ X" Y$ N1 Y, a2 ?6 T4 k
  15.         game.start(this); // Передаем текущий объект Player
    . c8 I8 }# H% o6 Y
  16.     }/ L# E2 X5 ~$ J+ L3 f1 h  T6 s9 P
  17. }# k& r( K# |& B3 j
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
' {7 I, s$ _9 F( x! y
9 K  k7 Z" n* ]* C8 B+ b$ D
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
& S/ _4 \: ^% C( i7 J. Q! p6 F$ ^% G+ V# ^* s$ E3 x
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! + e6 g; d0 p* ^* O
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 2 S  D) b- r: u) h. ?9 `
Mike123 опубликовал в 2024-10-17 20:05
# }2 T' v# b. Y( n# a' Q& d; jДобрый день!
% p$ Z, @- C4 FКак создаются и вызываются методы в Java? Мо ...

. Y8 r' p% Y; F# KПривет, Mike 123! ?+ ^) o. u: n, m% |1 T
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.9 m- I: P4 c8 h

' J6 K; w1 \4 S% CДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
) b4 ?$ U' W1 Y% W
% S5 m9 _+ O" y& V: ]  V: ^' {$ R9 z; M& x# n
Как создаются методы в Java?& g" j" r# W6 D: F1 ]* N8 p

- q9 y' \$ _% w1 F6 V+ v' `( \7 K- }Методы в Java создаются внутри классов. Вот базовый шаблон метода:
) j$ t, c3 [% V5 e! n* h: V3 q+ i4 E7 ]4 R+ v' H
  1. public returnType methodName(parameters) {$ D/ I" z: B6 a# p( E
  2.     // код метода9 d/ G4 o* D* A* J7 J: l6 ~' B
  3.     return value;
    5 _) c; T: G6 Y) y$ U
  4. }
    $ @3 K  P, i, c$ U1 d
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    3 C( o0 @+ N9 c

7 ~$ n. H7 R7 o1 Y2 mТеперь перейдём к примеру.; y( Q: M' S$ ^4 c# L: E7 ^

! c) D$ u0 g! E' A3 b& A5 kПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
" V6 u  ?: Y4 j" G+ h! s/ ~5 w
  1. public void attack(Npc target) {  // public void атака(Npc цель)# W; P2 H) q" m+ d0 F# M6 J
  2.     // Вызов метода атаки NPC/ E# J; j5 H. J- x3 f! x  J
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    / x! j0 m0 S$ E7 J, m& Q
  4. }% O+ c7 h0 }1 V3 Z
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).# ~6 G3 o4 o$ W1 M& Z# g

/ C! b3 ^' {* m- j$ @
6 H& u0 Y& E0 K* XКласс Npc.java — вызов метода
; J. H- O4 _+ D5 N; T; P$ K& h9 |6 Q, c9 U1 O/ y, \7 u" k: K) w
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    6 g/ P1 K+ J" L% Y
  2.     // Логика получения урона NPC
    # |  G6 H8 r. Q$ s9 W, Q
  3.     this.health -= damage;  // это.здоровье -= урон;
    % M4 x0 |, v+ _, Q8 z1 U
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    $ I/ d4 j  g6 A. W$ b# k2 U# b( [
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    & q; z7 {) l8 E
  6.     . ?7 |3 C' H4 i1 A5 a4 }* g4 e
  7.     // Проверка на смерть NPC5 c- d* a! G  S( X
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)! Q( U6 }" Z) `' O' r1 R
  9.         this.die();  // это.умереть();6 f7 C2 v" e. @4 H# i
  10.     }
    2 n; j$ p& B. \6 e
  11. }/ o' q% v4 z, k
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    , V  D  j$ k7 C, W' G
Пример взаимодействия (с переводом)
5 r, N- ^' P! u
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");5 ~) ~" A9 F9 y& S
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    * A) y7 l: f1 {6 X2 _
  3. : W6 k2 y$ @( h
  4. // Игрок атакует гоблина
    3 H2 N' y- f- c" z! ]
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    9 H. v" B) H7 N/ h* v" Q3 O; ]/ @5 ~
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.   R' Z) h1 a, }* q
) Z, y6 L/ v+ U' H4 d  |5 K
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
1 _0 F8 [: X5 l1 m  J) tУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!5 Z8 M9 X% T2 T3 l8 R9 @

1 b5 Q6 _3 {# u. y# o" E
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
" W2 ]: T; ~. v: ]Привет, Астралия! Огромное спасибо за твои разъяснения ...

$ d) G- c! F; z" e' Y4 AОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.; |! r  N  S0 r. D3 @! h1 c
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    # l; l: X6 j7 ~" m: W0 V, J7 D7 k
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    5 |( F& v) V6 A3 Y- c6 n' p2 ?. ~, S

- g  f7 o. a' X6 `! \
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    4 c/ f- |0 ^, l% G
  2.     // Логика взаимодействия игрока с NPC! @: T( e# B- j, g( X
  3. }
    ) n9 ~, p$ ?8 T* j& J& l) Y# c
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:  T/ k  l5 b7 R( W' c% U  R
' ?( p% m! R, t7 L, M  e" |2 o
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)% @, e7 ]+ A( b9 c, Y; T
  2.     // Логика перемещения NPC* w6 n7 b9 y3 V# M7 u% }; q
  3. }: a# N. @" y8 A4 A8 ]" k- A( V
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    ' x( L  L7 [; E* ?3 a2 ~4 y
( _' i" ?7 D0 x
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    : G5 K0 j* R, Z  w; L$ `8 {
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий): z! J8 [" _: w
  2.     this.health -= damage;  // NPC теряет здоровье% T, q0 r# [; F8 @$ V
  3.    
    1 j( f  z0 t3 N; q' |# ?8 i
  4.     if (this.health <= 0) {2 u+ r# ~7 v3 S% A$ L2 e# l& K9 z
  5.         die();  // Если здоровье упало до 0, NPC умирает
    + X& E: b' m6 X6 J' R3 M
  6.     }* q4 ?0 n  R" P5 [/ ]  F9 _
  7. }- N( ^/ N- A4 `' N
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример& Q2 Q' f# j0 [

+ q3 ?: _' E, d' h) M
  1. public void die() {  // public void умереть()9 ^2 Q. |, V% r, g$ \* B, N
  2.     // Логика смерти NPC
    + n3 g3 m' l2 ~+ c: n
  3. }
    9 K' `, e% f: i( p+ P
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:& t: [+ s" h- V

9 k0 F$ u7 Z; ?( m  O  J/ w* s5 a
. W9 X5 W- P- s* D( z0 A- K; B( S1 K
  1. public boolean isDead() {  // public boolean мертв()
    2 s) M4 {" G& A& u- p9 a6 ~: R
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0( N, N( E# c5 Z6 w* U3 |" Y  s7 `. _
  3. }
    ! S: {2 Z. l& s& p5 m
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример9 n% X% v+ w& k2 U2 w4 u  W
; S* t2 D' x2 b/ }6 j
  1. public void heal(int amount) {  // public void вылечить(int количество)/ Q6 n6 T3 Q' O6 k4 G( Y
  2.     this.health += amount;  // Увеличиваем здоровье
    , n" ]% ?# z2 ~0 i
  3.    
    8 P" [5 t; @6 d" M  s
  4.     if (this.health > this.maxHealth) {
    , G# Q3 y9 O& e6 K# H
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального! h. a, H/ k8 |% ^. `$ @9 i4 V
  6.     }6 s& \5 w+ |4 j& x4 X. H; ?  }
  7. }2 R3 D+ i6 }- A  ]' u
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    . h4 g" n9 m$ Y$ V% N

- [! k! _- s1 P" l0 `6 i
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл); [& s4 H( g6 m4 r& r; a0 G0 W
  2.     // Логика применения скилла NPC
    + c3 J2 F' d5 Z/ ^1 k
  3. }
    , _. z% r7 }6 K& O: M
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:* I6 U  f+ o' [) B# {
( J- R: V( A( L: ^

  1. % g. P$ o) G$ d1 j, l3 C" ]3 f* |
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    7 F1 [  w1 ~5 _# H- e' D
  3.     // Логика взаимодействия с NPC9 i. v. M4 ?5 t/ |
  4. }
    % O" Q7 Y+ H3 s) A
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:+ Z& n3 C1 P% t/ K0 V$ p

: o" K! F; M1 [. ?: m
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    , K( `* o- G; b$ S  |: K# F) {; ~* z
  2.     // Логика открытия окна диалога
    9 k  m" t: y# J* Y7 h" j0 i0 u# R, ?
  3. }' A* O2 p& Y# Y: O  r
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
3 W+ K1 E4 d, EЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
9 Y+ i. b) e* [
9 I# L$ q5 }5 ^/ l" n, y6 y8 }% d% s9 w$ H8 {8 Z8 q/ x1 A

9 o6 E) A  B9 F9 q- [
6 n1 J6 K( y* [( }9 v! e6 ^9 Z
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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