Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
* K3 T: c2 @/ p6 ^7 d# F  Y1 f
; B2 l; n6 D8 K8 q" R
" X0 J: \( M" T/ o7 R2 E0 }) |) QШаг 1: Введение в классы и методы на примере L2j_Mobius2 M, Z+ T  ^) U
С статьёй можно ознакомится в разделе Обучение > Читать& \7 Y3 C6 ^1 \( M+ m+ _

4 }  k) Q3 `( x4 f+ O" yДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
& F/ h* A  K" P; q# t
# o8 \2 z5 T4 Y7 LОбсуждаем:
; Y. z! d; W) \0 g6 x* o4 X# K0 I
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius./ P# V6 X: P4 o& c% ~
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!) L& |  o  M* g* c& T. w4 w
$ w. j" v* P4 {; ?# i/ C: i- j


' n) |/ x4 i% N" G5 nИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
3 `5 {8 [# A5 ?/ t. V6 a  [3 V$ ~+ [5 I& s& }; o# P% z% ^
, s/ P+ i5 [: j; y" J; N
: q$ E/ M% c2 f3 _6 Z" `) j: r6 q/ v
% R2 B5 f# z+ y2 j* U- t7 D
4 n! L& ]6 c9 s8 B8 v* w1 W8 G

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?% h8 e# l" E# ^- B5 d
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
) ?  k# N+ M& GПочему мы используем ключевое слово this для ссылки на п ...
$ G& x* v: {  S
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.5 q5 k$ y$ z' ^/ V
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса./ Z9 d- n+ j% h+ Z. Z

. H* ^0 E* J, Y) q% F1 oВот пример:9 W+ f: W) x/ _- s' Z; _
  1. public class Player {1 M' I* B/ a: I9 B
  2.     private String name;9 y) N, w2 u4 C! }" @1 Q
  3. 3 |* n; j1 b0 W
  4.     // Конструктор0 i% @3 M" y/ ^2 A" K
  5.     public Player(String name) {1 K3 U! M9 f  o5 s2 @8 I+ T: a
  6.         this.name = name; // Используем this для указания на поле класса
    + T1 D$ @5 p9 P, ]
  7.     }  J: W6 k) ^+ g& }+ ^0 |+ z
  8. 8 M; _  S# ^2 ?
  9.     // Геттер для имени- I6 t, C; t0 n) J! N9 {' k
  10.     public String getName() {0 h7 V7 M) y7 g- z9 q" a7 W! U) m8 [8 t. K
  11.         return this.name; // Используем this для обращения к полю класса) E: Q- R2 F+ t0 M! Z- D5 E# W
  12.     }
    0 D) b; N/ O: Z+ w$ c
  13. }
    / a  C5 I& D0 \" A* e" e3 E
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
" P9 _: B8 c6 I- U2 b& A
0 s5 {3 i* a0 Q0 F% ?( hКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.8 e% b# ]( L& J4 T/ p3 g3 H

5 _, M2 t9 m5 t  A. XПример передачи this:. ~& [  ?2 p* A0 ~! U" S% C2 B/ G
  1. public class Game {  u4 f6 t& u. a- k1 _3 |! H1 p
  2.     public void start(Player player) {: [0 d: \/ ]2 l' Q# y) \
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    2 R! u( G+ v) d  Y: G, X8 r/ G$ Y
  4.     }  b4 e9 e7 E5 y! w' F4 ^1 h& H
  5. }
    ; ]4 N9 @0 _" E, P+ U
  6. 3 ^9 q. e& K- [9 H$ i9 T: x
  7. public class Player {, h' S5 G/ x" U2 ^, E7 w
  8.     private String name;4 U. F9 K. s# r6 C) t

  9. ! ?3 U# V0 D6 F* U* N% L
  10.     public Player(String name) {9 f# a5 c' T) X, |
  11.         this.name = name;
    6 `  g: d0 @! y6 _& w+ w1 P5 f8 H
  12.     }' o$ Q+ h5 [; j: u: F
  13. 6 W' r  r* X5 o) `# e7 k# ?1 L. Z
  14.     public void joinGame(Game game) {
    0 }' [% A9 [! C1 ?' q) v2 I7 G
  15.         game.start(this); // Передаем текущий объект Player8 V& y2 ]: ]: L. G* l3 Q  x+ K. R
  16.     }+ Z# R5 Z% s- L8 ~! t
  17. }
    0 n4 T% ]) F' O# y& U" w% [
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.* Z. p  }- p9 Y9 |

2 I6 M8 D% a8 U+ X3 H1 |
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
$ K% `; }- y4 Z. f
4 Q& d+ G- A* s& i3 j" z
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
) t8 e/ G# t4 UКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 0 ~* j# s" M5 E% W- b
Mike123 опубликовал в 2024-10-17 20:052 r) O% T8 p* z7 x% ?4 I* c
Добрый день!
. R% R! ?- l' F+ v+ r& O% rКак создаются и вызываются методы в Java? Мо ...

) e# h6 C$ y2 \Привет, Mike 123! ?
. K8 c3 D+ C- ?( {9 n, ]  {- TОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
) V8 u+ r4 T) f1 w0 o
, p! }' ~3 w, D! H+ f% l( B4 L; VДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
9 p* P2 g) z% r
: m5 i% A' I& ^. B4 Q; c
6 ?8 z5 r6 I( [Как создаются методы в Java?4 ?2 {' `* g1 Y* u. _3 _% M4 m. a
7 |7 O. z0 [3 v# k
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
. Y/ x! S' A; ?8 o4 i& G2 o  B( z; \0 @/ i$ R
  1. public returnType methodName(parameters) {# i4 v7 b6 W% Q  i6 N, K
  2.     // код метода  G! O/ Q1 {1 @; E& t3 m
  3.     return value;) d3 Q; ]9 M+ L* V9 _
  4. }9 C' i+ d; b5 |
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    5 d+ o8 H9 _% A

6 U# A6 r; S5 zТеперь перейдём к примеру.
5 u# |3 B+ ~7 Y' }. \4 b& {( T! L8 a, {! E9 W( l# i( O: {
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода! ~- z. e" T0 h+ j3 [
  1. public void attack(Npc target) {  // public void атака(Npc цель)2 g# [3 D1 P9 F3 ^( ~! e0 F( B
  2.     // Вызов метода атаки NPC
    " n- |' }3 n% O* L, F! m
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());( G" a  j( k5 Z! l- V3 \) I# |3 p& p
  4. }+ I9 P# ]6 z# F  K7 e8 T
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).$ f& @: m8 {0 t

/ A0 ~' y$ B2 Q( m+ H0 B1 H" h
; y' F6 j1 s/ ]$ ^) mКласс Npc.java — вызов метода
# O7 T& b6 E( x- Q% O! v5 z8 h) \" e
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    1 m7 E. T$ K- {6 m; L" f. U: e
  2.     // Логика получения урона NPC2 B6 l) L" `! P
  3.     this.health -= damage;  // это.здоровье -= урон;" K. Z! N$ Y/ v1 `- A2 a: V# {% p
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  * p& w2 p9 z$ y* i; _' o9 l
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());. I& Q7 X5 I: e
  6.     + u% c; x4 f. U  O7 S, e
  7.     // Проверка на смерть NPC4 u$ W7 y8 m/ H  [. A- d* I
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)! t; E) l" a5 z( x4 c- D
  9.         this.die();  // это.умереть();# N  T! u, ?# W8 }3 k
  10.     }
    + p/ i, M2 i: X1 }  U
  11. }4 @( V# d5 }) v# h- O  e! m, R
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).  w  C2 U! g) G& C6 M* q
Пример взаимодействия (с переводом)  G% Z0 Z! f* m( E; p8 Z/ D
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    # Y- T& e' e  t* c$ {- n! Z. t
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    ) U$ j) E* A; B1 A) X7 Q* E

  3. " S; P# ~2 F6 Q$ F' y* j/ C( U
  4. // Игрок атакует гоблина' ]1 n# P" d2 |& x
  5. player.attack(goblin);  // игрок.атаковать(гоблин);/ @/ T) k% F% W# n
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
! m3 r: l$ N8 o# |3 B) X" B( k5 O+ i% H; u# a, H8 {% e
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.& Y# b1 t' @: _1 s1 @7 u% f
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
8 g2 ], b4 }* N( D9 h0 \: d
  J; E/ X$ W$ ]% f5 H- l8 r
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
9 f  O; u6 I: D. p, n1 NПривет, Астралия! Огромное спасибо за твои разъяснения ...
5 o3 g9 L: D6 V/ w* l5 j
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
  k1 S- H. E- o- B1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример3 S2 B* x  p5 A$ n( q# M, ~
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:4 Z; `) ~7 l( ?3 }

7 R8 b: Q. F3 I2 f0 T
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    4 E, x5 x, O, g0 z3 I
  2.     // Логика взаимодействия игрока с NPC
    % @' K! \" u) w/ L: q; o. x
  3. }
    2 v; {9 ^, p; l% R% ^6 x1 d" O/ Q
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    ) J4 c0 w2 p) {) v! f/ {$ u

  N- O0 C: M8 V. G2 ?  b/ R
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)" [" q% i' \  B6 h  i* p: d* \! }4 [
  2.     // Логика перемещения NPC( K, D7 L6 ?' v; Z2 [8 `
  3. }/ {4 @9 J9 P, I  d7 }
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:+ _& P! X) H3 C" p* b2 R
1 D) f# y: D7 S$ d& M1 @% X( h, V( D$ y
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример  ]& r& s% L1 l/ h; E% B4 p
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    8 j& i& K* B8 v3 f& j
  2.     this.health -= damage;  // NPC теряет здоровье
    ; j  [5 _- T1 Q$ x6 ]
  3.    
    ( b& W& \( u# f3 w  [7 V- w, K
  4.     if (this.health <= 0) {
    - }0 c4 ~' Y9 _2 {
  5.         die();  // Если здоровье упало до 0, NPC умирает& M# k1 l' ^) c0 D+ [" c2 W
  6.     }
    6 A8 l3 U+ R; d2 q9 s$ X
  7. }
    / L, D, U$ {$ Y! t+ q1 w( o+ h
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример3 J( l9 S7 a0 S
3 J: U6 D6 ]( d5 n
  1. public void die() {  // public void умереть()  L, T# W$ |" w& S" r
  2.     // Логика смерти NPC% p1 J( p! m" n8 B, w7 P
  3. }
    * ], H& R8 ?! t
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    ; y2 s, K$ q4 t

1 k3 N6 O6 t" x5 i7 D* \4 A1 n
+ r9 h7 P" l/ Z7 `. j
  1. public boolean isDead() {  // public boolean мертв()
    ' o- [' n9 c6 r( Y: [  }
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0) y9 _5 x# _- O3 w
  3. }
    2 I" \& @% B7 k1 O5 }6 u. l
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    + R* n8 ^9 U$ f" O2 Q& b

3 `2 G& _0 ~3 I' Y1 C% h. h
  1. public void heal(int amount) {  // public void вылечить(int количество)
    . ~# B0 g' k9 N3 c2 h4 w( w
  2.     this.health += amount;  // Увеличиваем здоровье
    9 Q1 ~9 U: D  P7 V7 O5 J
  3.    
    1 S! S8 s# y# ^1 p7 c% f
  4.     if (this.health > this.maxHealth) {
    0 C" r4 l, ~( _; _3 G" ^& d
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    $ \$ x1 k1 L, W* ~9 D
  6.     }# }/ x$ ?+ `# M! e. a+ S7 F
  7. }0 ?" N8 p3 L! h: L
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:# G* x+ u5 k  |) m0 q

% i* Y' |% B1 q! Y+ L
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    ; T1 T' H( d6 e0 V3 z! T9 o! I
  2.     // Логика применения скилла NPC" P& T: ?% f$ h: S4 n9 ?2 U- {
  3. }( {" b' p3 ?; m& A
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    , c- D. ]' h0 g/ U7 i; u. H+ R. C/ D

+ @( {% \: z6 N* u2 y0 a

  1. + q4 W; i* T8 k# z
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    * l: l" q) u! O5 X+ J
  3.     // Логика взаимодействия с NPC- u% C9 }7 H6 e$ y8 N
  4. }
    : b8 n$ B. h; C
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    & S  R/ M: v1 }

" A) |+ N) ^: Y7 K, ^
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)5 L# |: {# r5 }! h
  2.     // Логика открытия окна диалога
    0 `) p" {, O- D& e2 A3 a( l! m
  3. }
    8 r0 C% F. H3 ~8 `" a" J
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
8 b% `3 T% U% A' SЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
. \+ l; ]7 Z- n% p6 N* R$ \9 j9 C0 T) J2 {  n5 x
, U- Y* r# g% O3 X1 F' D. W8 Y- }) ~

- \; @1 T* X$ h( d+ `4 d7 v0 ~: V2 z
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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