Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 & G8 V% ~: ^$ O/ m
9 I5 g1 A5 x" r6 j/ ^4 ^
+ Z5 `7 i. u: m  b
Шаг 1: Введение в классы и методы на примере L2j_Mobius
- |/ \, I* U. l* c  I. YС статьёй можно ознакомится в разделе Обучение > Читать
) s- N3 A6 \# ^2 D' O) u& X: b3 q& d4 Q) l/ T  b
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
, ], \/ a. N0 F% G: q( s& Y$ L
  U7 j8 D# @& o, Y, RОбсуждаем:) e+ D* [4 U" W  p0 p
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.( l0 p* L. R$ o) _: @* Z
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
2 w0 v$ W7 J% I* Z9 Y7 y& @; _
8 n' Y, N1 V) {- c( L) M
$ o% Y, Z% _) u: U: ]
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
! ?% q/ Q! d/ j7 }* v" K4 O& z& w6 |) W/ ^2 w# h$ z
/ `4 L/ z1 t+ R3 ]* x, B: d
& I0 t( u) v% `& X0 e4 l1 I

. T; `2 p  k( G& l# |& m5 A1 R, V

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
4 U8 x: t# G. f. a8 l. ?$ ^
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17$ s% m& m( F. Z! W) C; Q' W
Почему мы используем ключевое слово this для ссылки на п ...
3 B" r7 J2 @( r7 g" A7 {
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.0 n  a( m( B: r: h( c; `
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.7 u3 \- E+ r. b. K, [

+ _4 N  s# D# \6 `Вот пример:4 j( L) D9 o: w0 n, N
  1. public class Player {
    9 J3 u3 ^; ^5 U1 N7 P0 T7 G  _3 J- A8 ?
  2.     private String name;" |' H7 a) Z3 i! N6 z5 V6 ?
  3. 1 _! ~, h3 g  y9 W
  4.     // Конструктор
    " G- m. V! G7 ~, t5 Y: w2 c
  5.     public Player(String name) {
    ! {- t# J6 Y' j9 |2 J
  6.         this.name = name; // Используем this для указания на поле класса
    : I- O! H& G$ E2 Q
  7.     }
    & g" l- E0 f: M# E2 J: t+ S

  8. ( Z5 }, Y7 n' z, m6 b
  9.     // Геттер для имени- J2 R* v* G$ K* m
  10.     public String getName() {/ E! d7 L6 u$ z1 y1 I1 Y4 _
  11.         return this.name; // Используем this для обращения к полю класса
    ! P6 b3 ?, a6 K
  12.     }
    # d5 c; y. z- O: [/ \! K
  13. }1 G! i% f4 r/ c# i
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
  W; r, i$ F' i! w% o% `& N. X/ S* c$ L6 D
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    . o! v: }( u6 \/ d

; s' u4 Y3 ?- ?* z8 V1 g0 `Пример передачи this:1 E5 j- b4 Y: {. U3 S- W1 y" j
  1. public class Game {0 U$ v4 O2 K. h' T5 Z" C: h
  2.     public void start(Player player) {
    8 g1 _2 i1 t8 \" g* P: r
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    # ?- ~  o" Z) V" `6 m2 y
  4.     }# q2 e; r% a7 l5 a% k+ p
  5. }
    & m* T. d- U' v7 I- _
  6. 1 t! x" k, O4 d( g  l% ?& v( H
  7. public class Player {
    9 U- S4 |  s8 M( e; V* C( L1 _- [% y
  8.     private String name;) T& I0 ?9 B& B

  9. : y' O6 d" H5 |0 Z* L5 t# a; m
  10.     public Player(String name) {
    6 [2 k; m9 T7 A/ Y
  11.         this.name = name;
    2 e0 @3 g! q  o  Y/ L
  12.     }
    8 U% b& d9 }- k9 v1 I

  13. - b; w6 M* {- k" }8 \
  14.     public void joinGame(Game game) {
    + U* J3 i/ s! m! E* m
  15.         game.start(this); // Передаем текущий объект Player
    8 s' k3 `+ ~6 s
  16.     }3 H4 g7 E7 K! ~. {
  17. }0 Q# q9 ~8 Y4 P4 W
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
$ A0 G/ C; P$ L
# W8 ^1 `& v2 a! I8 M2 O  T
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?0 O9 g$ |7 K# H2 k, f
3 C1 `& a: C$ ^4 R) Q3 [/ O/ B
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
/ h' b2 O5 O3 J4 r6 }2 F# yКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
9 ?7 l1 [2 k' @/ p
Mike123 опубликовал в 2024-10-17 20:058 x0 O: F7 x/ q% Q# n9 `' Y/ X: y
Добрый день!
) I% C1 j: \. N, L8 |3 RКак создаются и вызываются методы в Java? Мо ...

3 V+ x4 m, X+ L; FПривет, Mike 123! ?
  Z  L$ q. K/ c) ~: K  J8 KОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
! o: D) y0 I7 y8 O, F- F/ p5 X% `: R2 Z7 [+ y4 m
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
9 A" I2 M1 \+ _* o, ^4 d6 ]
( g: R) ~: Y. ~) v1 h0 R2 k/ H2 R% s2 K  G( ^$ ^
Как создаются методы в Java?" X; v5 \5 B/ l/ W' b7 t

$ T8 b* s8 P' X8 ^Методы в Java создаются внутри классов. Вот базовый шаблон метода:( w% U8 p  a# e2 Z0 _. R
$ q* r% p% |9 ^' h" T
  1. public returnType methodName(parameters) {. C& y. p8 h  a* Q* d
  2.     // код метода
    ) W" |! t" x' D! t' x
  3.     return value;
    - I$ A# o$ ?, @, }3 U  v- {( T
  4. }
    0 c  m) }& f9 ?9 G
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).; t2 j8 Q/ B7 T) t5 d8 |4 e1 c. m
5 W0 C/ A4 \+ i
Теперь перейдём к примеру.
) W$ Y3 ?: @3 H, d+ @( z' O4 \, Y
( [( D- g* y6 l) J1 FПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
$ M! s! g! k1 S# a" `
  1. public void attack(Npc target) {  // public void атака(Npc цель)
      b2 R+ Q' M& I' i8 V
  2.     // Вызов метода атаки NPC
    # P0 H: t% w. J: `: l/ D! }) X
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    . }. V- e3 x5 ^* r
  4. }
    " [. j3 a2 w* l! h( k# ^
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
; x9 n2 t) t* S- K: M/ I0 x* O3 s4 s" G5 v

' e5 B" @0 b4 w" G% eКласс Npc.java — вызов метода
1 H/ y; I6 p3 n
' s$ X3 |8 d" D( P7 L. p0 H
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    , ]! j& R! n* i& e2 r. E; z2 ~
  2.     // Логика получения урона NPC# ?  M4 a2 _9 |- r( r' U8 ~. q
  3.     this.health -= damage;  // это.здоровье -= урон;6 S3 o8 o( l4 v% Y' u
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  8 U1 P( J% f$ M& m  |- Q% p
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());6 O  H) `, D3 j4 {" n
  6.     / G1 t8 g7 o, u/ g4 {
  7.     // Проверка на смерть NPC
    8 d* o: k7 v( G0 ~4 Y" v
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    7 D/ |: H6 [( z( S5 e; U
  9.         this.die();  // это.умереть();. F1 ~1 O. x+ {! U3 A+ _) f' T
  10.     }
    5 |. @$ N/ \0 a9 r
  11. }" g; O# @1 L, r' H. O
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    9 `1 s+ ^9 }' E- _. Q; _
Пример взаимодействия (с переводом)7 `, r3 S2 r/ O) d) a* v! v
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
      ?/ W3 _: Y  v* N( V
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    " Q' \( E- H3 E5 s3 |
  3. * b7 F/ k; X" h
  4. // Игрок атакует гоблина' i% q# @3 P# @8 F
  5. player.attack(goblin);  // игрок.атаковать(гоблин);4 Y% y# c. ?- \
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 6 C. }3 b6 ]4 `6 ]% W* e- Z$ @

, v! X8 S. b+ T/ @/ R1 U5 z
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
1 D0 [! E4 ~/ @* ]: B& X: D- e# ~У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!4 J' {$ f8 N+ I. n

8 ^: h' z; J+ O
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:306 Y4 t" @2 M* p$ I. u2 R: G
Привет, Астралия! Огромное спасибо за твои разъяснения ...

) B# h, a$ E6 f) y( S# BОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
  n+ X  e+ x  g1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    / E3 ]$ `: w# v+ M. B9 G( p
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:/ f; y4 c: o/ A2 S

+ ]( J- t& ^; L: F0 V$ Z8 e
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    2 T4 S% `9 o7 V5 o- E, i9 r
  2.     // Логика взаимодействия игрока с NPC
    8 _( U  X) q; R/ N8 r
  3. }; {) K( `$ }/ Y  K4 z
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:* a" ^3 y- v6 {  q. R

. e% U& y. i& h0 ~
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)& ?; ]2 K% l; u
  2.     // Логика перемещения NPC
    8 |8 ], _+ G7 G! C
  3. }1 Y( r- T, h( p& E4 p1 U/ E
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    + w( n: [' \. R/ g; Q* }. O% n. Q
% W# V6 q3 o6 J- U' ]. U
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример9 J6 C* v; |# ?: }. i, R6 M
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    . M- ^0 L0 [! {0 R% b: E- Z
  2.     this.health -= damage;  // NPC теряет здоровье
    + Q8 s. m3 f8 v- @* V1 h4 b
  3.     8 K  x( X# Y" ]) v# b$ ?. _2 }
  4.     if (this.health <= 0) {3 m3 `  r; m/ D9 J$ T
  5.         die();  // Если здоровье упало до 0, NPC умирает
    ; {0 l& w3 T; P" k: r
  6.     }
    ( }. v% \- M' H$ F2 S0 t! G. ?
  7. }6 G  P1 t$ y" y  F' V0 f+ `3 K
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример+ l6 g, C$ i1 \% W: g% |
$ w- s/ k: T+ V
  1. public void die() {  // public void умереть()" W) @$ h8 S2 l; E5 c0 |. E9 c& e
  2.     // Логика смерти NPC" O; q7 a; M& X6 P7 ]4 s# M; Y
  3. }
    ( V% d- d4 m5 M: E$ c4 H
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    : Q7 P& `& m; d$ |

2 R( ^# i) e5 X- O. E) C
3 h2 |0 q9 m! `
  1. public boolean isDead() {  // public boolean мертв()  |, r( J+ @/ z& v- k# K1 t. Z" F
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    : S( S' m1 J$ h
  3. }* v& R  Y8 G: x
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    " Q- ]( l+ i/ O  ?# y5 \

8 ^$ b# O$ w/ _
  1. public void heal(int amount) {  // public void вылечить(int количество)
    / w3 b. [6 G. h- P, Q: c9 X
  2.     this.health += amount;  // Увеличиваем здоровье8 k7 P8 @* Y3 y7 q/ p" G
  3.    
    2 J0 b! [2 ]/ F0 ?& I# H' a
  4.     if (this.health > this.maxHealth) {
    . |$ Z% }: @1 Z
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    9 r: y# ~* u  Z* ]- [
  6.     }# K* g9 `2 h2 b" m2 z; v
  7. }+ b, t+ z7 ^9 X: F6 w3 ]
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    & t/ P, w5 {# n) ?# g0 q! `1 u

( q/ H: A* u% g1 ]
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    : ~9 M: V5 S: Y' b8 a
  2.     // Логика применения скилла NPC) f* a0 M' l/ O( x$ V0 @
  3. }
    " a$ ~4 h  b, R+ e2 h' R
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:6 b, C. @0 U8 P6 ]* w

2 j, |' l8 S2 _! M3 u6 w; |' Z- T

  1. + |3 m/ `6 S+ }. X( V
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    4 K  N4 D* C. s- n( \* F* m' J7 n
  3.     // Логика взаимодействия с NPC
    % z4 M- f9 s' k+ G  p
  4. }4 e0 V* L3 D  a- D
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    & l6 e  Y4 S* n5 {- F) E
- d  r  h' j; c+ `' G
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок), \  A# O$ E5 q5 F
  2.     // Логика открытия окна диалога
    ; W7 z- C2 I4 o+ l4 A
  3. }
    - y: W) c4 s+ }3 u$ j! D% J1 B- U2 c
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.. X( S3 v. O# Q% m$ |' q& \
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
: ]2 m; ~; C- p2 r% c* f3 H
. V* t" k$ T; _& n
$ O; }7 z! b0 L) x  T- t, [' s6 v1 M0 u' X

; k" A5 H: Y$ c# s- `+ e# ~& g
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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