Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
+ F$ |4 s% p4 f3 _6 d$ ^% p- f
8 x8 F- J8 J' {+ ^
' U9 p+ l0 L7 F6 \+ M! A& ?Шаг 1: Введение в классы и методы на примере L2j_Mobius8 c( w! U, ]& j4 ]& v' G* B
С статьёй можно ознакомится в разделе Обучение > Читать* i' x5 @1 g; N3 C* h: I. B

" d+ I) c& {( ^9 h' \, B3 bДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
6 l0 q6 e2 h, `  I( t5 W7 t/ U# x! p) y" i( O8 K* I) I( M' T
Обсуждаем:
# R3 q/ f, d0 i/ {) W, v! {
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    $ z5 ]7 F0 M! v2 k( G1 f
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!& V! D+ ~3 H8 F, R! C% \8 P

/ b7 d% a+ @0 N& r) {  S
5 O3 s0 {* p5 }1 s
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
5 B( j( |! Z- J5 B2 s: A9 \/ p+ ^: d# }8 {
( u# m% ], t) d' O
3 b* ?2 v- h: d0 n0 I6 d0 ]1 G; A7 M/ z5 d0 C
1 v- |1 ?# u+ q; c1 B3 G
0 \* t" n) r8 i1 e; Y" j: @6 Z

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
' J1 {" N6 W0 u
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
  N$ q" I1 K3 ]1 A. KПочему мы используем ключевое слово this для ссылки на п ...
. a: f3 G$ g/ s" S, B' b- f+ Q
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.  c6 }. _, |) T
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.; `. {1 S  E# g: l

& a2 D5 e4 u, x. H; W$ f  d* GВот пример:6 A0 j+ }! ^9 y" \
  1. public class Player {; ^9 w5 X$ _! Z# P% k
  2.     private String name;
    + M% K5 ~: f; b$ Q' ?0 h8 Z

  3. : B- m. @) p; I7 ]. o% h- [" |
  4.     // Конструктор3 d7 s: [9 L! \9 T2 H
  5.     public Player(String name) {# U+ p1 V! R$ Y: |' Q. @+ N
  6.         this.name = name; // Используем this для указания на поле класса
    5 M4 g" {. k4 }# V3 O+ `3 x0 A" R
  7.     }( J$ T7 K5 O) f  v% c! P
  8. ) ^/ h0 d  m! E8 U6 u- c! Z% M
  9.     // Геттер для имени
    ! Q8 Y2 f; ^: V  g# U( {& Y2 c
  10.     public String getName() {4 |. a$ q) C( m- s( z0 }$ ~
  11.         return this.name; // Используем this для обращения к полю класса
    " ?4 t) U; q$ G
  12.     }7 k( r8 S, Y4 |4 }
  13. }
    ! {5 s: j- w( B; E. _+ F6 l+ r
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name., M1 p/ M. J1 H, Q

$ D, J& ]+ x1 m# v$ {, j0 q: ^Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.6 z  [+ W" y) F
9 Z6 j1 @$ L; Q9 j/ X. F0 q
Пример передачи this:
* h2 \8 G4 a+ N) I
  1. public class Game {# e1 J4 D2 @: Q/ ?# N
  2.     public void start(Player player) {
    * z/ m0 Y: P, b' u* G/ Y6 ^# A  a
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    - X- f8 Q$ ?# [4 O
  4.     }
    $ {; t0 Z! u2 _' S
  5. }
    - g! h9 \6 N( U4 D$ H

  6. 1 N. W" [, M9 ~# Y, Z) \, n2 k
  7. public class Player {
    3 y9 u" F/ P# H, `: o5 ^6 M8 ]/ h
  8.     private String name;
      Z, e+ d$ N% r+ h. Q

  9. 8 R; h- b3 v* Y& o( E9 w8 i! V
  10.     public Player(String name) {. W4 |, n* ~4 M
  11.         this.name = name;
    ' ?* r& S2 d4 H- h) U( N
  12.     }
    1 M4 O1 a% A8 {/ D# n2 O0 i

  13. 2 r( M; a# L. S* n8 [6 t
  14.     public void joinGame(Game game) {1 a! ~3 c2 S& {
  15.         game.start(this); // Передаем текущий объект Player' M$ ~# Z; f0 R" Z( @- c' @. p
  16.     }
    3 ^+ p- y; i* K! |3 A' `
  17. }
    ) X- ~  \1 @0 e! h- o4 T0 Z
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.9 h- ?, w# I9 q3 O9 z- w' C' D

  j) W9 @/ Z: R. J! o4 A
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?/ z: A6 q7 d" e9 N0 L7 q' A: L

  B- ?9 o4 V- K, ]! e
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! + P+ F, W) ~! S: M- }2 A
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 / I: W4 O( K; O2 C9 K$ K/ h
Mike123 опубликовал в 2024-10-17 20:05
& b( i- W1 Y7 y, m1 j2 GДобрый день!
: E- D$ m5 u+ X2 fКак создаются и вызываются методы в Java? Мо ...

" ~+ ^, ]' Z( M; U+ I7 BПривет, Mike 123! ?
  }' w2 H6 o. CОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
  ?: ]4 H8 V& Q! {, F, P+ J* U8 K
4 M* V8 H7 o8 |( x) e+ cДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
8 J* a" o5 T4 Y9 ]$ J  r( M9 o
) J6 E6 ^: j# j: |1 a/ J( y* s1 i$ L; a+ O
Как создаются методы в Java?, d- n: @  F" j' Y9 i" S. k/ N
' H8 X% w0 M) x/ }1 w
Методы в Java создаются внутри классов. Вот базовый шаблон метода:" v; d! D  f, y/ K) c6 A0 r9 H

2 D6 s& ?+ s9 y2 \( E- I5 M. c
  1. public returnType methodName(parameters) {
    2 C  G. I  c9 A9 E; n- `9 P! V
  2.     // код метода: y0 E9 C  D% L$ Z
  3.     return value;
    5 a2 |' H! }5 s, d
  4. }1 ]) v2 }8 p. r2 u
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    5 ~! f6 R3 V: M) q% a

/ e1 O- f1 r3 M' dТеперь перейдём к примеру.
+ Y9 `  h1 K. ^7 r, C, Z$ S# [; O# c* f! l  d, L/ \
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
4 _) }0 J( C% _3 \* f
  1. public void attack(Npc target) {  // public void атака(Npc цель)% m% I1 a1 ?& W# }1 H
  2.     // Вызов метода атаки NPC
    1 B& i+ r+ j* g3 }2 R( t3 i, P2 n6 Q
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    ! w$ Q5 ?  G+ D; J
  4. }( x5 j4 g2 h( k( G  @
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон())./ ~1 ^5 x" e5 O( c

# [/ r5 b; |2 g# i' Y0 ~6 h' a, X+ k$ K+ ~0 M, o0 Z# S
Класс Npc.java — вызов метода% ]; B: j" \0 q' X8 W3 g

; ?% S9 L7 M8 @( W2 g
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    9 x1 h6 g. {+ L6 c6 Y4 s" x& N
  2.     // Логика получения урона NPC/ [9 j4 m/ \+ l8 O# c( H" c
  3.     this.health -= damage;  // это.здоровье -= урон;
    7 W0 y: B& h  t: k( b2 J% Q, e/ l
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  ' a& R! g# J! l+ v, R2 x' C
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());4 X8 Z& g  V2 J+ P* C4 X$ f! L
  6.    
    % C- ^/ n! A4 m2 Z: Z, B& K* _
  7.     // Проверка на смерть NPC
    # i) }% @( Z0 I: W4 M
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    1 o( d2 q4 g% t& l; Z8 D, Y9 u$ s
  9.         this.die();  // это.умереть();3 E: i9 ?5 i- J  E6 H
  10.     }2 D5 N! `0 P( |6 o0 v
  11. }* @4 J8 p+ ?0 {$ [1 \) |
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).! ^, ~) M6 Y) X
Пример взаимодействия (с переводом)
. M, z* [3 Q1 F* h6 @* V8 H( b
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");1 r) v6 g/ |* g( U
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");/ ?% u6 w& P- e6 x& `

  3. ' z! \+ U7 x" A$ e& i( T% [
  4. // Игрок атакует гоблина
    3 l$ F) L" u9 o6 \; y7 V: [
  5. player.attack(goblin);  // игрок.атаковать(гоблин);8 M6 W8 s! G2 ~# J7 Q# ?
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
8 O: X4 [+ K7 p% |' Y; v3 W  z9 P  s! C& h
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.0 ~! ^" i4 ?1 X3 i1 }% m) q& e
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
/ N7 j) V! w3 s5 y" f- W$ o0 O0 v1 x: I( V% ~" B* D8 o1 y0 _5 S
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
" J3 w+ P4 o  m" a$ O0 ^Привет, Астралия! Огромное спасибо за твои разъяснения ...

* e6 v; M. i  |( c  p5 {# E2 AОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.9 v0 p* h, ~0 }, b1 ^3 c
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    1 _% m  Z: O0 X$ Y
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    6 p' I7 [/ [1 J* Z
$ i; \1 i) f. N
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    . b6 t' h, F( l. m8 `
  2.     // Логика взаимодействия игрока с NPC. m4 _- Q0 d) ~3 _6 r0 A6 v2 A
  3. }+ \; j2 N, K9 _  G
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:9 T+ r. U4 p' A2 V3 E% u0 v

0 A4 e7 B. |) j- O% R+ u
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    1 S" {- {% w- Z1 `* d+ Z
  2.     // Логика перемещения NPC/ z- x( ], x( V4 o
  3. }
    ! B0 @/ Y2 r2 t# U: X) `7 E
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:8 F2 p- k0 f# z" A0 k0 R
; Z/ s( a3 j$ f6 e  {2 l0 c) t& `
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример% m! y; \  y2 H. D
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    " u: w1 Q& n2 C% e
  2.     this.health -= damage;  // NPC теряет здоровье' E6 U( Z2 ?  i
  3.    
      S  m' b+ t" e+ l% Q
  4.     if (this.health <= 0) {
    6 W4 l3 u6 o7 M
  5.         die();  // Если здоровье упало до 0, NPC умирает
    : T! |8 q" h: U* g5 U
  6.     }& ^! q  _# ]3 B" M$ ^! E' j
  7. }
    & W, w3 x2 ~1 h0 Y$ b
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    ( C6 c6 M9 `9 S9 ]# K

  U% P( |) Q9 A6 [# Y7 |
  1. public void die() {  // public void умереть()
    / P1 y) U6 k  @
  2.     // Логика смерти NPC2 M. O) G+ D- ?/ U% e$ q% G/ f
  3. }1 W) X! F* z* n4 j5 Y4 e  G
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:9 d" T! ~3 B, N. t; D2 m+ @" Z: S
! r( l# Q; S3 b: x3 K
4 B) s  `7 H. n8 J7 R. x/ p
  1. public boolean isDead() {  // public boolean мертв()6 c  `' J. k9 e: u1 {1 L5 a" A
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 04 l. y8 H/ K- Z+ T9 h' f
  3. }) I; V; S6 P+ V* e
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    $ s- Y& t. f( [/ i0 `
9 p& N6 j8 K4 u) q0 z
  1. public void heal(int amount) {  // public void вылечить(int количество)
    & X* z0 Y  d) l
  2.     this.health += amount;  // Увеличиваем здоровье
    $ U. W6 H4 t1 V0 X- _: O* v2 F
  3.    
    5 H  |8 ~6 u: _0 w5 b
  4.     if (this.health > this.maxHealth) {/ c2 D, W  _6 [4 w  b% F
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального: x' `. I' ?5 e! |9 X; P9 g
  6.     }
    ; D" Z( {: O  g% G3 D) B. Q
  7. }
    ; m' ?7 N1 @& ~
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    0 F6 Z( Q* r, S/ v+ @" m

6 x, A0 R4 i/ ]# N" C1 h( t
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл), L- I- d+ W6 j
  2.     // Логика применения скилла NPC
    . H! b8 |$ l- h7 a) ?4 L" y; q
  3. }$ a# n) ^* k) c0 g
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:% |, R0 h7 h+ f6 b
3 p' r$ f: f; t: y2 C

  1. / O! H2 p; B) W2 G) X1 d
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)( P$ s% T- h* n, k
  3.     // Логика взаимодействия с NPC  e1 T  d" `8 r5 g! Y3 S
  4. }
    6 I+ k  l. x5 @. B# B
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:; `# d' k7 e- q4 @" l% y  c" V5 i

$ p; c; N. L9 {8 i' c
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    / F# g  p# l: k
  2.     // Логика открытия окна диалога
    0 `1 |, {$ f5 X
  3. }
    2 n; `4 S3 r8 m; t
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
# e. Z9 R7 t1 B  z" y% `Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!9 P  c& }/ y/ e5 T1 a' A: e3 ^
2 g5 S' T" P" S: F

. A9 A+ H$ j( m( Q# [' V- k5 O( I; f% g

0 |. M; d( B. \1 S' z7 j
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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