Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 % f( M4 k9 h' H& n+ C. O. A& W5 Q  Y
7 }8 }- O5 Q5 x3 C  Z8 f, i- v
1 |' L' s! l5 e( _9 N
Шаг 1: Введение в классы и методы на примере L2j_Mobius: i5 P+ \# B! n. M0 u6 l* m
С статьёй можно ознакомится в разделе Обучение > Читать
1 H: O5 B. J# L; x- w
+ m7 `# u' q9 |Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями." U* j( G; `3 J5 p, u. D7 E
; I$ I/ F( y" A! A  V
Обсуждаем:
  ]" Y" o  |9 T( @  t
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.( H0 k( `& I& U/ X
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!+ C0 ]; Q9 L4 h/ H# h; t5 M9 b8 X& C

' J# w/ s: J9 b8 @! Y# c
, ^4 h7 b0 M* m9 P! i
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
# g9 U7 p* D7 C6 V4 e
- d$ i+ F/ A3 r7 Q, G, u8 @1 [
6 G; s) v7 U3 q( ^% ]! g2 i( Q" V' }

" j9 l0 B% N3 k& W/ a7 p! U% ~4 e% g# P

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?4 n5 V( E0 v8 F6 B
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
; z6 X1 _0 S) @0 l" pПочему мы используем ключевое слово this для ссылки на п ...
0 F0 h/ S2 v' ~9 t
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.% ^5 J. I8 L' \8 v7 k5 v
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.% ?7 \3 s" l$ X4 x( `  G: F, _
5 @, q9 o5 F- A; i9 D! ^
Вот пример:
: R' g' ?1 C! |9 @- q; }2 I' o9 j
  1. public class Player {
    : I. d0 H+ l1 p: a5 d% u4 b
  2.     private String name;
    % W0 C& t5 z: ]0 i

  3. 8 G( o. H6 Q4 k1 n  Z
  4.     // Конструктор
    - r( w. O8 |/ r  S9 H! u% v
  5.     public Player(String name) {2 G# B( c% W3 f3 g. y! y& k3 R7 \
  6.         this.name = name; // Используем this для указания на поле класса
    7 n$ O5 X# s& u4 h+ u' A  y
  7.     }
    $ w$ }' Z& S. g: w; ?6 H: O, }

  8. & T$ Q7 ^6 F1 p% y
  9.     // Геттер для имени
    $ @" u. t" i. x# M" E  m1 T
  10.     public String getName() {
    - n8 r# M& G; i
  11.         return this.name; // Используем this для обращения к полю класса
    7 }% d* ?+ C! K0 }" _
  12.     }
    3 w1 B# _1 L* v, `2 o& L/ _
  13. }
    0 ], j0 o% I; j. s, b: X3 U
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.- I. H% I: ]& A' K4 }( O
6 r! E$ J1 I* u& t
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    5 [7 e) C% U! o
9 A) k5 c  U) I( y! D* W
Пример передачи this:4 u9 V1 G6 J0 M% h6 z
  1. public class Game {
    6 w( ?$ f6 M+ @0 M  b" Z
  2.     public void start(Player player) {
    ) w3 X; i2 v$ I0 q9 P; }3 ^. T+ n( O$ l
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    * k2 j$ x$ ]' N
  4.     }1 n4 _9 E" X# f- x
  5. }
    / D) ^9 Y; o0 p' ~1 x) @
  6. - I( y3 O$ S& X; C3 b/ P" N
  7. public class Player {
    ' \4 Y" ^! M. w
  8.     private String name;6 z: L0 t1 v. Z; M$ K, c

  9. 1 r9 {4 w* p! l/ E- t
  10.     public Player(String name) {. `' I) s/ f8 {( M- q+ ?
  11.         this.name = name;# `% ]1 S1 V0 b
  12.     }1 z" k5 l4 ]# n- ?1 M

  13. ! t, K0 [1 K# c% C8 j6 |; U' w
  14.     public void joinGame(Game game) {. f; ^: G4 l  f
  15.         game.start(this); // Передаем текущий объект Player- l1 B) }, P8 X. n2 q9 s
  16.     }
    & u; o8 p, k7 T6 W" f
  17. }; \. J+ ~7 t" R
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
4 n, a' [8 b% ?3 m# a, g. z8 E
$ F  _5 S- W# k. B! _: ]1 o! c
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
, d3 e; M8 A& G0 Z1 |5 E
/ V( W9 }$ O. b( D
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
+ s/ a" k" K$ l' o$ _1 AКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
9 v0 N# Z3 w2 V
Mike123 опубликовал в 2024-10-17 20:05* x8 Q5 E5 u8 l+ `% {% H; T* X- c
Добрый день! 5 u7 w! d  v1 E6 d; Z4 C
Как создаются и вызываются методы в Java? Мо ...
; |7 q1 p" L% F) n. n1 a
Привет, Mike 123! ?3 c/ T% g9 R: S7 c: {+ T
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.8 y. u, `) g1 \0 N9 g# `

" Z/ F" _7 u+ [3 K: HДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
& @3 a7 Q/ j6 o9 _% V. `% N1 i& A' _. }! D
; o6 W9 b+ q* C: I9 i& E5 @
Как создаются методы в Java?" ]" X  N8 a- P% u. T3 A0 J2 U

! Q7 @! {! N) S* LМетоды в Java создаются внутри классов. Вот базовый шаблон метода:- d2 q7 P* q' V; X
' G2 c9 v/ F% I. C: Y% R$ x# n
  1. public returnType methodName(parameters) {+ i" r) ]0 n. T+ E" i: K
  2.     // код метода8 P, G8 I" D( M5 J
  3.     return value;
    & z6 C% X% S+ ]5 S
  4. }
    ( n! c1 W% I4 f/ ^
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    ' O- K* V# C0 E1 W6 s

# Z4 [3 h9 X/ \, O" E  B3 W; S& l5 LТеперь перейдём к примеру.  j/ q. M" ?# Q$ b9 i& B

2 W% g5 x2 L1 y1 z/ n* I7 l4 }; mПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
4 P1 o- \7 d2 y, g
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    % y- Y0 |3 Z6 z. o/ x. n
  2.     // Вызов метода атаки NPC
    1 l/ k; C. a- l6 q# P/ f5 K& X
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());# C$ o% O. f* p/ P/ C
  4. }3 d4 s/ d" w/ e$ a: H8 f. R
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).' ]$ E% s8 z+ P0 M" F, `/ e2 w

% K5 u) j9 |8 ^+ h( i2 v, D6 g1 I8 P) P! }6 ~
Класс Npc.java — вызов метода+ g$ v9 t  I1 L% ^, v

8 D3 I% W* m9 o8 S
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    0 [  g3 U1 b8 j+ t
  2.     // Логика получения урона NPC
    / j! m: c4 j; b' S- O5 U, [0 f3 ^* M
  3.     this.health -= damage;  // это.здоровье -= урон;8 B( h* ?5 d& B( m7 [# T
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    ; W1 r% |; S' o" @
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());- y% M; U3 ]8 l* S! M- I
  6.    
    & d4 J+ b3 G- P) S; V
  7.     // Проверка на смерть NPC+ o; u- K) G0 t6 F* k2 T4 f" z8 V
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    * e! X1 D( y& J: |  J
  9.         this.die();  // это.умереть();( T8 m/ V8 P7 e/ O+ T
  10.     }
    2 S' e2 f2 s7 L4 q7 j
  11. }
    - P% ?! e2 y& r' b
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    2 |, x3 s+ V0 Y# M! a
Пример взаимодействия (с переводом): v  K2 g; D$ A* |: \
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");( ^2 ]/ C) E/ n# d
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");* p5 X3 Q+ [; A1 [2 y& B/ G
  3. # K" X  J' n$ t
  4. // Игрок атакует гоблина  {+ W: N3 G3 h$ Y8 D  `( X* u
  5. player.attack(goblin);  // игрок.атаковать(гоблин);- u/ L2 ^7 e! Y, O* n. Q# ~
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
( S; Q0 i( `# a0 ~5 _6 Y2 ?; e# l5 D. c' O, V
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
+ X6 q! c. V6 Y! pУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!: Q! U# W, e& [$ k0 C4 Q9 I* z" K+ F
7 B& O! n0 e/ j( v
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
9 K, t/ @- `% S: @1 SПривет, Астралия! Огромное спасибо за твои разъяснения ...
: ]% u6 ?) |- v" O+ j8 z
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
6 q; Y5 w* _& f5 l" c3 J/ F1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    ' b) B$ G: Z) d6 U) d$ B% u
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:1 p3 I6 H# t( b4 c  Y- @! W

" @1 M- J& f( ?4 l8 Y
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)# w1 a- E  G1 \( U: v( e0 _
  2.     // Логика взаимодействия игрока с NPC
    % s: q0 g: e3 B# k
  3. }
    * ~; d+ M" H4 P; u& O
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:* H3 @) \) n- x* d3 O

# c/ s1 t- Z8 O* e4 O2 X
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)4 h) G: C. E5 n0 F6 o# O
  2.     // Логика перемещения NPC
    5 f6 a7 E- X/ p4 Y
  3. }
    ' }' ~( r2 D; k6 p
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    7 ^# q3 ?  J0 n+ B7 |. S

+ J# J; x! {% r3 a. e! u
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример* G  [8 \/ C; Q" C! X1 Q  W
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)7 V( u$ z8 `+ @' A
  2.     this.health -= damage;  // NPC теряет здоровье& [8 G! O- V. V% A% ^+ @9 i
  3.    
    8 K8 _3 g+ l4 p: N( a% n3 y% m
  4.     if (this.health <= 0) {
    9 Y; T1 h; V$ n8 {3 f
  5.         die();  // Если здоровье упало до 0, NPC умирает( C2 O, F' W$ l* ^; P
  6.     }
    9 \0 k: ?1 U& j; [% a. A
  7. }. R/ b1 M; I8 _* r# d
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример' N& l8 n' q5 E7 F1 y) e% @

$ g, _1 F3 Q' {4 t$ R2 x
  1. public void die() {  // public void умереть()
    : W: F. R& x6 J7 q+ z3 [* A0 r
  2.     // Логика смерти NPC
    + f7 [  J; c% g4 }
  3. }
    7 X0 C7 ?# ?) u0 ?5 V
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    , B% r& [4 M0 ^" C

7 v; s6 c' u' Y  h; r9 N
( Z2 i/ G) E) O" g4 k
  1. public boolean isDead() {  // public boolean мертв()3 s8 C- p* s! T; u% Y" A
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 01 @7 x8 x5 `7 I1 J
  3. }. l0 A% ]) [  G* S) a+ F
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    6 Z$ w+ b4 y& L+ f& G( ~

+ o8 b- c9 y1 T4 G- U4 A2 G
  1. public void heal(int amount) {  // public void вылечить(int количество)% B+ Y5 e4 \3 \2 y$ F7 ~! ^$ z/ g* u
  2.     this.health += amount;  // Увеличиваем здоровье
    ' C! F) |( o0 i3 @
  3.     , s7 F, D: T4 P+ w
  4.     if (this.health > this.maxHealth) {
      O) b% I8 s4 }- C7 q2 D
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    7 ^* [% n: i) g! [6 o
  6.     }
    2 T' T+ T; d8 Y) r. v
  7. }( T# `/ f3 f; O. G' e4 J
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    ) d  Z6 l6 Y/ o6 R1 Y+ n5 {* f8 v+ H
7 _- A# P. m( a9 M/ B
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    2 J3 T1 P2 W7 ~9 C" [+ W
  2.     // Логика применения скилла NPC- F' T5 O& t' K" {6 |4 T
  3. }
    ! M) T: K, f. F/ Q) c
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:6 Y5 A. z" f6 z- Q$ u& V, v
/ F* ?; P* P( v, G1 P/ m8 L* _: y

  1. 7 L( E( m8 q& V( T6 X# S
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)4 o& P" D8 U! V& M* [7 N9 B5 Z
  3.     // Логика взаимодействия с NPC
    1 x7 l! t6 y8 ~6 @# d$ Y4 r# b% ^
  4. }; x: t8 E* X4 C8 r
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    8 u7 y' G+ S* [) G0 w9 v! C; V

- V5 t" R2 B/ k8 Z+ S
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок). R0 B. n' X( N# z$ N' Q1 e1 Q/ E
  2.     // Логика открытия окна диалога: v6 I' N8 R1 W# b
  3. }; ?. n$ d! x4 v
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
4 I% `$ N+ ~% _/ h5 O& Z  |6 ^Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
& D0 I; \/ d! [1 _5 b4 @. B" D, s% z6 a! z' N
* V6 B) H7 q; `/ ^

, w4 F2 B8 Y7 X6 K3 H: H, H8 }/ D+ `7 G* F# w; d
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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