Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 3 ~: o6 i7 E0 s

6 l1 \* C2 n  P, i/ s
# F4 \' t/ f( n+ DШаг 1: Введение в классы и методы на примере L2j_Mobius& Q+ |" j5 j- P( _
С статьёй можно ознакомится в разделе Обучение > Читать$ s# d5 b1 ^7 E9 u, Y, u  v1 _

5 Z) N  w1 A) v0 }Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
5 \5 m: R# n6 i4 r( ?
! F" ~; {& ~- w1 B1 j7 t% a7 ?Обсуждаем:
% n+ @/ g7 k, V3 Z+ |  x: M
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    " _4 n# b, h9 \6 V
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!! u$ f3 A1 B3 k

8 L* E$ V: a- e' w1 |

) _- P) C, l1 BИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
# r( a0 I/ U7 v9 i7 P( ?0 l! x) N

2 m1 H& K: f4 q) L" V7 Z; E
. n7 ~# ~: Q4 G; g
# [  Z. r  {% J- m/ _
' h4 _6 q/ F, R$ V

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
7 ~: Y5 C! N7 ?- r0 l$ p
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17  c: t8 V$ u. G8 [- ]$ q! U7 a
Почему мы используем ключевое слово this для ссылки на п ...
8 K2 V# U6 i% K; m9 g* J
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
; E: @6 {; _. r1 J2 s, PПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
+ d2 T3 k7 b7 U6 O& g& x; m; j  m. n+ S' f6 H/ k9 B4 G
Вот пример:3 _3 @& j9 V* C; C: w) x  t) g
  1. public class Player {
    9 }2 E* B+ K% }+ M4 _2 B) O) z
  2.     private String name;
    9 ]4 b2 V; I1 G2 N8 @
  3. . e# W8 R3 O/ O% `3 Q/ `4 d
  4.     // Конструктор$ _1 W2 n7 X+ P4 m/ f
  5.     public Player(String name) {
    5 F8 `8 X/ L$ i0 K
  6.         this.name = name; // Используем this для указания на поле класса' P, o: w1 H7 D, d' U, D
  7.     }+ b+ Q1 q; K) M% {4 ~: C1 b; n

  8. 0 G7 W8 S/ X" Y
  9.     // Геттер для имени. {8 f8 e4 c5 k7 a, k/ z$ Z
  10.     public String getName() {! e8 @" r( U0 g' Z4 o/ j. C
  11.         return this.name; // Используем this для обращения к полю класса
    ; D, I2 x# L4 b6 y! a# N% h
  12.     }: w5 v* \5 |& k% {4 ?& y. U& T
  13. }
    / v. M6 z+ k, L/ p! y% O
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
0 A( A7 o1 z0 |" ?1 v: o0 T0 i/ `/ j+ I" h$ X
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.# X, L+ P- A! N+ X+ S0 x* J+ q
7 H. M- g: v# A. |
Пример передачи this:
" m/ ?  l  m" M! `6 S
  1. public class Game {
    9 c& S9 @0 r- |' {3 D+ U" ]
  2.     public void start(Player player) {! G( a$ v( S# G( Q3 V+ j
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    - }; n  K7 }- r& n# A
  4.     }
    ( \6 ]& D1 s+ U: c# d
  5. }
    : Z5 H1 ?$ C' v' t! L6 v$ ^0 R
  6. ; f" n8 j2 E/ q
  7. public class Player {
    8 M( V* y4 f! X
  8.     private String name;5 c3 ~; S) \. G

  9. 0 S# y& Y3 b1 }
  10.     public Player(String name) {
    ( m" p6 i0 V. M1 A0 ]' }6 a# B
  11.         this.name = name;
    9 H$ |0 W) Q$ Y" a& m! M; i
  12.     }  t! r9 f, Z/ _
  13. 0 X9 k  b3 f: ~" ]5 r- R
  14.     public void joinGame(Game game) {
    ( r% P7 [5 @: ~7 T
  15.         game.start(this); // Передаем текущий объект Player$ q8 o0 X* o2 N; l. O7 }
  16.     }
    # w, I+ D* `7 Z) ~( v: O: t
  17. }
    1 X; Z+ P6 I  G3 V% v
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
; X, ]2 E- o& k! n% {+ e
, `6 j* A) k2 g$ o" E1 _0 P( \; x
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?3 f1 d& d" W# b  }
6 E$ D& e$ R0 w0 v
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! 2 m" L1 V/ I) d/ Z
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 8 `  H. a1 y2 E5 M# A
Mike123 опубликовал в 2024-10-17 20:05
: R; F( w6 o9 }- C' M  G) |Добрый день! , |' q# U" g* W
Как создаются и вызываются методы в Java? Мо ...
9 e) t0 I1 Y/ ~7 ?7 w
Привет, Mike 123! ?: _8 f: q# Z$ a( a1 h: H
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
6 J( C5 i' t, R# b5 t7 n- G1 s5 S
; V  o+ n4 I# q8 S* o9 B! R2 b  SДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.& H; U* P$ J+ I3 k$ f
) W$ J5 [8 H9 p$ ~" p9 U

% S* Z' K, v2 F, BКак создаются методы в Java?/ U: V0 i/ u* i6 S

1 J% D6 Y# Z' m( n1 \Методы в Java создаются внутри классов. Вот базовый шаблон метода:
4 s, _& U! f* d9 M" F; L
2 @$ `4 z& V# L
  1. public returnType methodName(parameters) {  O' a8 k7 m5 x0 _
  2.     // код метода, Y/ `# p0 O$ t4 n, P  V7 r( F
  3.     return value;% c, u- L  S" W: @) B
  4. }
    * V. ^4 ~+ s1 S0 I- }: ~! ^
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    6 k7 p/ A7 ?* D: G4 p# d

7 Y* w, G% S2 [* _% J. BТеперь перейдём к примеру.) j8 a4 \1 r. j. s4 x9 @& m, c  W8 F

: x1 Y3 o8 n, B( y  z! vПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
' Y% F* L$ ^) N4 s5 j4 O- M
  1. public void attack(Npc target) {  // public void атака(Npc цель)0 l6 H# j  o, t- P" Y5 w# s/ s
  2.     // Вызов метода атаки NPC( t/ W" p' b4 w8 i  }: `! @
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    $ ?8 Z6 d9 m, C* K0 I4 J
  4. }
    7 P* h4 g: }  a4 ?  b' L, {: d- y
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
" Z6 l, C* e  Z+ V. ?' {3 g6 l8 l4 A6 {+ W2 X* I9 @$ K- @# Z
( h" V2 m  @0 f& R" p9 O
Класс Npc.java — вызов метода( g$ _! p1 M7 b

, x5 U6 U8 ]/ l! ]: e
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)" Q: n( u6 ~4 n: g2 V
  2.     // Логика получения урона NPC
    + q, [: q+ n& `4 j- Y; F' {
  3.     this.health -= damage;  // это.здоровье -= урон;
    3 N) z3 a4 V# J: L6 T' w6 A
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    1 z+ q3 h' x4 v% r. R1 B/ ~
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    & _  q7 v+ h" l6 t- P3 X
  6.     ; |6 ~: {8 I8 j) [7 m
  7.     // Проверка на смерть NPC( @& U& ~. r6 }; s& B7 s. e
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    . d# X$ v1 v! ]/ q1 m6 ]) q
  9.         this.die();  // это.умереть();( e2 m  t: U* V
  10.     }
    ) o: M0 J1 L+ `, @- G8 P
  11. }2 q$ r% d( W6 p* M5 g! I+ z# D6 D
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    . K% M  j" H2 u" g# D
Пример взаимодействия (с переводом)
+ n1 l6 Y. ~8 k* ?+ N7 ]2 r7 }
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");. l- c3 }5 ^6 u, y* l/ R
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    - j+ V6 X9 D  c3 y) f' X0 v
  3. ' M; Y' m% [5 v/ r6 u" s
  4. // Игрок атакует гоблина+ p5 f8 s: ]$ ?4 h4 W& a# ?4 k
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    . t- @8 B7 c6 J- \  @
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 2 c! ^1 q7 I8 G% x$ m9 w4 B
) g) x: h. G" Z9 M2 |
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
# m. _2 b" O- ]1 n. }+ U# ^У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
- f* s# ~# I) E$ i4 ?" R. s* k
/ K% w- K" J9 ]& }' b* f
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30% ~& {3 a# {2 [' ^6 V& c. C$ u" i
Привет, Астралия! Огромное спасибо за твои разъяснения ...

# Z8 m. c" i! F. o2 mОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC., }. q7 _, I$ _1 ]5 ~
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    / E9 H4 l/ e% e- F8 W: O
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:8 P  L4 w5 I$ H) R$ \) i- J

( ], d8 b4 g% Q7 |# U7 }8 x
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)( v+ j% V- j4 R1 Y7 u
  2.     // Логика взаимодействия игрока с NPC
    * P& j8 B' {! H  R8 ^
  3. }
    / W( z" v0 y7 n, |1 B! E4 G
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    # O8 \- L- {, ~8 g& y. q: h

- x3 p1 _# F. M6 X3 Z# c+ X
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z): j( l/ k4 C2 x. P
  2.     // Логика перемещения NPC, E! X% I1 H" ?0 S* x( X
  3. }8 b$ ~" _" o+ C
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:" j! f, A+ C) v. |  r/ x  A

3 N/ g# k) f2 v7 I
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    3 p# b$ E% J6 g" h8 C; e* i
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)1 w5 [) C: `7 s9 F0 b* [$ w' d
  2.     this.health -= damage;  // NPC теряет здоровье* @; g" Z- I, r: `
  3.    
    3 P9 q$ }: Y) y+ v+ |
  4.     if (this.health <= 0) {
    # f, ?1 M+ D$ `- h
  5.         die();  // Если здоровье упало до 0, NPC умирает) x, E( m: v) I5 L4 B
  6.     }* }/ l; s) {. p! J: F8 G. R2 D/ H% N! W
  7. }
    , @+ k0 @% M3 {: X2 ^; h9 u) w6 v
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример: D3 A( w$ w' A' J5 j3 b# M
% @: d; c, A0 p$ r4 L
  1. public void die() {  // public void умереть()
    / y$ \" t3 N; K$ o" A
  2.     // Логика смерти NPC
    & z( }; |1 A$ ^/ D
  3. }
    7 ~3 F3 }2 _7 S) `5 h5 c. U
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    % G# K0 n- F% z  H0 t
- A9 V8 X! y. g/ V% Z4 f
" T' a4 ^. [. r+ b
  1. public boolean isDead() {  // public boolean мертв()
    : ]; h7 Z; @( Z4 U9 A0 O  |5 q  f
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    + t# |( L* W+ [. ?5 C2 J& a
  3. }
    , R; d; ~) ?& D, I7 X. D" c1 w
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    0 E+ B- |: b2 E0 W' [

& j  Q! z/ K( X8 u' L
  1. public void heal(int amount) {  // public void вылечить(int количество)
    $ k- @; F* a- L& i% S
  2.     this.health += amount;  // Увеличиваем здоровье
    8 c4 t: u: A9 t
  3.     ! h6 {+ B+ k; ~6 _& W
  4.     if (this.health > this.maxHealth) {
    0 J: C5 q4 o0 i; f; b
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    ; \& J0 ?' v  U  ^7 f% ^6 T* w
  6.     }  p3 O/ A2 P7 \9 r, d
  7. }
    2 g7 q+ o& R9 I1 X; f
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    ; Z9 l+ `' S: F) n! Q3 D( A

8 p/ q3 I$ m! ]' E
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)3 I% m( F) p9 S& n# w
  2.     // Логика применения скилла NPC1 g4 M: r# }/ O3 b' y1 H
  3. }: L' z) j8 [' B% D; S+ B
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    . Z4 @& ^; }5 U) l: K

) N% U8 O9 ^/ y5 y6 ^
  1. & H" L& W0 J1 A8 \( ^- L# V5 Q
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)2 D8 Q" [6 J8 h% @- @+ D
  3.     // Логика взаимодействия с NPC: U) R/ Z* T+ v
  4. }! }, G1 e: d( u. k; k4 y
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:; w! D; x! R% j& J4 W

" X+ ^: o; Y) I/ f# l. b
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок), h  z: z7 _/ D% b2 O6 V
  2.     // Логика открытия окна диалога
    2 m/ l* g1 Y; _( U, G4 K2 ?
  3. }: \/ w4 _$ X9 X; ?
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
. Z( M9 N( u' j% T, mЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!" s9 \" g7 B4 B& g0 S2 i
# j: O; z& H, L$ n' ^+ M3 b: J9 C
: x+ w0 [: Z: M: Z9 h
& ]+ P; v1 P' C' E# O9 @& t* I( T
% m! ^7 }. x3 l
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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