Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
; L: |( g& g( z* ?4 S
& H3 f. o2 L1 \6 z5 T: G, {6 I7 l/ U+ [! s
Шаг 1: Введение в классы и методы на примере L2j_Mobius
8 N/ B) i4 q" DС статьёй можно ознакомится в разделе Обучение > Читать
8 O4 Q/ ?; D, n5 N& I' H7 t3 Z% B- [8 ?
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
6 x" p( h+ N  v) v
! O! m7 T1 K) [8 rОбсуждаем:% G: H# `# a6 {( y8 c! m
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    4 l0 r- g/ V7 N# b2 T
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!. O) O7 m7 M, H0 ~3 k
$ p+ G1 l- g' ~7 j2 t8 b0 |: r

! Y) c" j5 t4 U8 o
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!  [! A3 A3 \# ]" [% p) O8 {

; `5 a) _0 a! L$ C6 f6 \2 ?) X2 ]9 M4 a: ?' p9 W* }

! M2 A: M5 {, R  P" x" ^& I* u+ R4 J
! `! y) Z8 w# f5 Y4 N

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?0 c2 w# D+ v- @/ }" Y  I3 l
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
# L' g# O# o! A( ^  R' @. qПочему мы используем ключевое слово this для ссылки на п ...

0 L2 R7 e2 M  I- e2 T) D$ t5 nКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
6 y; A) J& P/ x6 n- ?. W+ BПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
! `7 ^) P& \8 u9 z" S9 C9 J
& o. m+ o4 ]' g" pВот пример:
6 I2 O  x, [: n5 l' V5 R
  1. public class Player {* V, o7 e7 x, O% e, e7 ^5 j& }+ k3 z
  2.     private String name;  k# u& `/ P" V( v

  3. , N+ }/ J% \" w4 Z
  4.     // Конструктор
    : b' h/ x1 T$ X/ {6 H! C* h2 f
  5.     public Player(String name) {
    3 ~, ^9 H: a$ g( W% p" F$ r/ e0 F
  6.         this.name = name; // Используем this для указания на поле класса1 S: E6 a5 _4 r7 U' z
  7.     }
    3 j0 V' O# w! p) s$ y- ]. z( t
  8. - r/ c) R( _0 ]$ A
  9.     // Геттер для имени- p* F3 a' i& v. ]* o
  10.     public String getName() {
    ; A$ @1 W1 _. w) }
  11.         return this.name; // Используем this для обращения к полю класса+ W6 ]: p% K& j1 r: ~
  12.     }; V" S: p  z; U
  13. }. {; O$ [- U- [' q
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.* x( y2 }( x8 d9 C7 j8 A" x

6 T" \/ K& f# V+ F9 C% RКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору., t" E; |4 h# ^
" H. \5 T/ K' E
Пример передачи this:
3 T3 d8 o3 v  Y: C2 o/ H/ o6 U
  1. public class Game {
    + g* {- j/ G; [2 W
  2.     public void start(Player player) {
    ! j) ^9 r, c1 K+ b: o9 D" F
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    : S2 P: j0 _, y- W# [5 f& \
  4.     }
    ( u, x9 z3 m( l2 `# D; t3 r
  5. }# o8 u  i5 d4 b# k! i1 W( H

  6. " v9 ~3 F0 j0 g
  7. public class Player {
    9 N; Z  M5 q3 s( \% f3 `; U
  8.     private String name;
    6 G+ B" {& h, L$ ]0 a, B8 K2 u
  9. 7 [8 Z3 T# C% k  Y+ s4 L
  10.     public Player(String name) {
    1 N* ?0 y6 m1 D1 ]# P4 ^& P
  11.         this.name = name;7 A+ J7 I* ]+ Q; V! [7 K$ w" t
  12.     }
    8 W* {* Z" s% I. y; B6 S! X
  13. - @2 z6 c4 ^& d9 `7 Y7 D
  14.     public void joinGame(Game game) {+ K" @) h7 b8 z9 r, R' n
  15.         game.start(this); // Передаем текущий объект Player( [  Y5 v0 N% @! c) T& p
  16.     }9 B1 l4 i4 l) d  i! {- |
  17. }
    ) V! x) o+ Y1 u
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
3 |4 C  G6 w* S, A' Z' a6 G

! e! I8 e4 W7 c5 F: H9 `" ?, j0 N" _Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
/ {  {' K% _# J+ J1 `* q) B; @! P  x& O4 M& X
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! : L( |5 B) ?9 b' ]5 |7 ?# U
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 " ?9 K" t0 n( G$ b9 X) v
Mike123 опубликовал в 2024-10-17 20:05
( x/ B: B: e2 V6 J5 hДобрый день!
$ {2 g- b# _  c: |* F) f9 K1 TКак создаются и вызываются методы в Java? Мо ...

; `3 T) J: a0 A$ LПривет, Mike 123! ?9 g6 g: V5 m7 X, N: z8 \
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.8 Q9 h$ c7 \% c+ R; b/ P
9 j% \0 l1 p* ~1 ^9 T
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.9 r& m' N9 {% m. R  B0 p
- [; m2 Z0 P" [
3 c5 m' |& v  u! W2 I. O$ {5 k5 V
Как создаются методы в Java?% u* t" \$ t$ g# d; N

7 |0 K( D- X0 z+ i7 _: dМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
, |; U+ u* u3 H( M
5 P+ ]4 Q$ @3 h+ L% n! m9 q% v
  1. public returnType methodName(parameters) {6 z4 N9 y, H. K$ _
  2.     // код метода
    ) k* A! y* ]% F6 v
  3.     return value;0 b. R1 ]  {8 U$ e' \
  4. }; E8 ^% ?$ F* u% F: A9 N3 Y
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).( ?- j2 h6 W' G
8 Q5 q/ Y) @& @6 ^: s
Теперь перейдём к примеру.
& p; G4 [( j6 ]. ], M7 u& P7 B3 D! p; w* k" s
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода( a6 q2 q$ Y% {" n
  1. public void attack(Npc target) {  // public void атака(Npc цель)- \- F5 N! S  A  S* h# l3 j& m
  2.     // Вызов метода атаки NPC
    " l/ `, n3 b: B* ?
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());. {7 ]% t) ?- z& ]6 A9 Z* [) e/ E
  4. }" y$ ~2 j3 y, q5 B
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
0 P5 g6 i6 E, Y' m$ |& ~
. Z' d) M! Q8 h/ W9 z# F# J% @9 G5 g
Класс Npc.java — вызов метода
1 w+ w0 t4 t. E& O3 a
! P3 }7 w6 w, G8 f* t: Y. t8 M
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    / F2 g$ K( \, {* O$ [2 g
  2.     // Логика получения урона NPC; {2 M' N3 N) e4 C; q
  3.     this.health -= damage;  // это.здоровье -= урон;7 f6 }  Y. W- j
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    ' c7 J# [: _! c6 f* l2 H0 e
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    - A& P5 P0 C6 \! L& v' f
  6.     * ^5 L# }6 L  R
  7.     // Проверка на смерть NPC" J6 G/ Z  c1 b0 y" u7 o; v
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    2 `* `- F0 t+ U  }: r+ ~
  9.         this.die();  // это.умереть();
    ' V! Y8 r9 Q5 b- O3 D7 o3 X
  10.     }- z# J5 S( _! O8 R$ h8 n
  11. }; H8 v3 Z: R& [; [" x4 r. B
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    - x) n3 t/ q3 A# `. \4 Y
Пример взаимодействия (с переводом)
. b0 j" I) c' ?+ r
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");* u9 V7 }: [) Q! ]
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    - u, C2 o! Y, j. r
  3. 5 A6 A5 T$ B0 L$ M- d4 S$ q
  4. // Игрок атакует гоблина
    4 G" ~3 k8 o/ W5 n: ?( K8 g% v* t8 T
  5. player.attack(goblin);  // игрок.атаковать(гоблин);) u  y- j: E/ Z3 D5 w( v
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 7 D9 c! a+ U1 H$ e  X
8 g) G3 |4 @0 O5 N: ]7 ~
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
$ k6 k) X- g1 |) ~1 j/ \5 KУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
2 i; W, V+ a6 S, L3 m" d3 s
8 m+ y4 o( X. u, v6 _! c: ?
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
9 L2 A2 y% H* m& o% N$ TПривет, Астралия! Огромное спасибо за твои разъяснения ...

! p# c& M' ]( g3 S2 @  l. pОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
$ z: P' C; V1 z- U, d$ x1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример. a6 Z7 X& l9 W9 R9 o
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:& S# ]/ G# T7 p: p) G% f1 q* }& w
9 M& _/ M& F8 t: o! x4 W; ^9 {
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    ! r) ~, Q( u9 D2 C/ R
  2.     // Логика взаимодействия игрока с NPC- T4 d% ^( R/ s
  3. }2 |, |3 x; H/ d- [/ ]
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:3 T2 T" w8 h! E  ~) F3 m: _. f1 v$ P
  h, q9 \. Y$ a" G+ o6 @, Q
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    / Q) Z" p0 y9 U
  2.     // Логика перемещения NPC! d# @& Q% c1 V7 x( B' ?
  3. }
    . |1 J& [; Z6 J: O4 s
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:0 l% i4 M4 v6 h1 n4 L
) q+ x- q& R4 f, K% b9 Y
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    # V, c7 _7 a% I5 b$ S5 [# m
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)* y' s8 e4 [" E$ P0 K  [/ X
  2.     this.health -= damage;  // NPC теряет здоровье* b3 g! O% m) ~9 p$ K- f2 E# m
  3.    
    4 o5 e0 g& q( ]5 J4 l7 h1 B' |* k5 n
  4.     if (this.health <= 0) {% @# ?/ x; ]5 _
  5.         die();  // Если здоровье упало до 0, NPC умирает
    ( d# B; g6 G; n! E5 d* `
  6.     }* D3 T1 R5 D8 v  k* e" O" r: b+ g
  7. }
    ) R+ J4 u* r( m3 k  u
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример9 e0 I! e. }4 q
9 q9 `: ?* a- j* O+ b1 w
  1. public void die() {  // public void умереть()
    7 @3 z: U5 m' N9 c: ^+ `
  2.     // Логика смерти NPC
    . i" y+ s2 M3 h! _- r
  3. }; X+ k7 H0 f; t) a
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:' n- f' m! w1 _  O) i  l# o. x1 f& c

/ q& d8 O$ [$ W( V
: U7 i" f8 a* e  s+ O8 ^0 U6 _$ g+ a
  1. public boolean isDead() {  // public boolean мертв()
    ( I2 n  V% [, z& f- G) k  [! J" O
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0# ]) ?+ X5 Q9 o  H
  3. }8 Q  T# M3 @) y4 C7 L1 X7 t! K
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    / p2 M) w% M; I/ d- @

* i. |8 f  F. I% g9 Q
  1. public void heal(int amount) {  // public void вылечить(int количество)
    ; P* ]1 U( e& j" }8 R( `* a
  2.     this.health += amount;  // Увеличиваем здоровье/ ?+ b2 Z, O  {4 e# r/ @6 d$ C/ ]
  3.     0 W0 ^" Q. C0 o% k* G7 V
  4.     if (this.health > this.maxHealth) {
    $ S7 P' H1 d, Y
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    - J5 J5 q/ F; {  k" H9 L
  6.     }
    , x0 v- M8 n0 t$ z) Q
  7. }
    4 C* T  l! v  ]5 V; q3 a, Q8 |* y
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:; ^# g% z9 p4 O4 M: ~
0 i0 R" H2 c( v* {( o
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    1 j+ V' N1 f# l
  2.     // Логика применения скилла NPC
    5 X( G) i  V- w$ }) a4 _" h2 j
  3. }
    1 u& j* x( H$ Z+ D4 v) o
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    % {! I/ J  {: Y4 J) Q. A& `4 ~

9 [( L- X. I/ ?2 Z- K% D0 n
  1. ) q3 K  e# |) S
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    " F/ }( d6 q/ G$ f( U1 C
  3.     // Логика взаимодействия с NPC: V( N+ I  m% d: p5 i
  4. }3 @# h& y( Z/ O# N2 H) l
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:; I" L2 O6 S, R% M5 |+ U' Y; `% l

5 U  O4 L+ L( l5 E# o7 `: F& D
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)9 X  O9 T& w6 q7 [# Z$ H; l! @* j0 t0 {
  2.     // Логика открытия окна диалога
    1 q( g! A& \! I& C, n- m$ @" j
  3. }% s: A7 s& q5 Q! w+ _/ n# a4 ]
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
0 `* l# Q+ ]5 m, E8 i/ @8 I8 Y& zЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
9 h: H3 w0 |4 F5 m2 E; @
' `- Y0 N* @+ k- J* C8 J% L/ x6 q- Z& I4 R5 C

8 |. G7 i. U- L; @2 t" @( [1 f
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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