Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
$ s4 u* B( P0 }: P3 @" a% `& x) o: G3 b
6 n) s8 j: U) {2 @8 ^0 V5 B) `# g1 D
Шаг 1: Введение в классы и методы на примере L2j_Mobius  g. L% i. P4 l$ O# @( {* _# x3 F
С статьёй можно ознакомится в разделе Обучение > Читать4 Z- P# T" }0 u$ ]/ c

6 @. d2 k& A9 H/ Z9 ?) F: ~, SДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
9 E9 K7 L0 g1 r; b
! D* @  m: p5 y, c$ YОбсуждаем:4 M: Y0 N6 h% n: r( y
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.5 H# @5 L: H2 {- H- d
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
5 i. ~5 C8 P* s; M, X9 D% I( p0 {2 {$ A  {) w2 _6 W

0 }2 X3 @$ @- C! P1 V- B/ H
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!+ \- L/ O8 F0 K! s- D& I
6 `! }" c( h& d  R% K  f% Z
0 V; p* G+ L2 [; g

# I; k$ N: |2 f) d0 p5 o. k% Y) x6 G$ K+ i9 ^
( n. S+ I& i. a

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
2 r7 Z% z) d, r. G
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
( c  f. Y( P6 t( }4 H2 pПочему мы используем ключевое слово this для ссылки на п ...

( ?+ E* R; V: bКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.5 M! |' G7 {: I; Z( w8 V1 @
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
& |2 y: K" p' N9 c5 i3 N. U5 T
6 ?( `$ Y* m. J5 [  o4 d( U" `( d7 hВот пример:
6 ]) h, }, j. a0 [. U! |' Z3 ~
  1. public class Player {1 L# @! H$ _7 D1 I( e
  2.     private String name;9 \$ j9 S& g9 p6 O5 ~

  3. 4 y# d3 e) |- y* y% w, u; e
  4.     // Конструктор
    9 l2 n# D! O1 d8 w/ O# y% ?8 v* u
  5.     public Player(String name) {/ Y7 I% N; `5 U7 w1 G$ H3 @
  6.         this.name = name; // Используем this для указания на поле класса
    ( S) ?% {. |8 G0 O
  7.     }( J) L% }: x& G( N$ q

  8. % x* r- U  i$ K' {- o% `: K
  9.     // Геттер для имени- f- x: k# ?+ J& H
  10.     public String getName() {, V* e( f3 ^& [3 ]# h2 h; J
  11.         return this.name; // Используем this для обращения к полю класса9 Q4 Y  ]+ k, j9 Z) R' n% x3 v
  12.     }. [/ D: M/ M% i
  13. }% C8 T% P$ w7 T) D$ T( }9 e# _
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
3 G% G! a2 J- z  F0 L- J& f* Z  X, Y  W& ~3 E' K7 I4 d  ^3 d! r( {- j
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    ! ^+ Y, z0 K: H& s7 e% v
' S7 ~1 p& k. [$ g
Пример передачи this:
+ H% S, E: j+ `  z* S9 d
  1. public class Game {
    ; y; g* j9 p4 L
  2.     public void start(Player player) {( T7 t- ?% Q6 Z3 u# Q7 `# L
  3.         System.out.println("Игра началась с игроком: " + player.getName());; X! i' ^; k& G/ p3 F1 q
  4.     }+ F# Q( ?9 h# `# r7 P9 ]
  5. }8 ^# U0 t2 ]. q8 a% B" S* ^

  6. 1 Q  @/ h, J) h  D/ w$ \/ `& p
  7. public class Player {
    ; ~/ ?4 Z+ u$ a7 y, S0 S3 W' T
  8.     private String name;+ o$ v5 E, q1 Z5 a. N
  9. 3 Z9 j3 a/ x* Q1 G/ h; i3 w
  10.     public Player(String name) {% J. V9 h( B2 K8 W( ]9 ?
  11.         this.name = name;' f6 d1 M0 M7 n3 [$ {
  12.     }
    5 \' h1 e5 E! x& \, o

  13. - J0 `, }  n6 ?  S: o
  14.     public void joinGame(Game game) {
    8 i9 [5 B# Q1 Y  P' {: [+ S- x  B
  15.         game.start(this); // Передаем текущий объект Player
    ' O; W2 D7 G" }" ]9 {" \
  16.     }
    3 A  b- P: C# [& u; Y& M
  17. }
    8 D! e5 e$ y% h$ V0 w6 q& `$ D
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.: F0 f+ f9 y0 M8 H

8 @# l8 @3 @/ z' l
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?2 t- `1 i5 \% o/ j7 z; r

! |0 U" ?  Y8 B- m; t
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! . h/ x" f& V( c4 ~
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
/ N; \9 Q! E2 A
Mike123 опубликовал в 2024-10-17 20:05
# K; `( Q9 \8 y7 b; k$ J" }. KДобрый день! ' e+ x% ~3 L/ B$ L/ w# H
Как создаются и вызываются методы в Java? Мо ...
; q) i7 D! e8 V+ o+ ?+ ?3 _4 |
Привет, Mike 123! ?
! e0 u* [( c8 ^5 p6 c1 tОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.7 ?) A! |; f; L5 }: u
5 h" K1 ?  Z, ?% s! c0 h7 d) Y- p
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.0 x4 E0 ~7 S& H) z' f: W
- ^. J- {: i) I- |: V
* f2 d( h5 O7 P1 K) e, r/ N& i
Как создаются методы в Java?
: u% N/ {6 d3 p- h' l0 \& _
; s; ]4 y) _& U% ^% WМетоды в Java создаются внутри классов. Вот базовый шаблон метода:' M& i  [& W0 T" w+ o
% u& K/ D% O  b# H- t8 t( [: q$ b
  1. public returnType methodName(parameters) {
    ; k( ?4 J& Z$ E* f
  2.     // код метода/ M+ \6 l4 n0 j
  3.     return value;
    7 s7 j9 b5 _4 }" i4 A9 v# s
  4. }+ o8 `& K! `* S* v" t( F( ^
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    # o8 S' O: t' s" N
8 y: l9 n- L  n4 L8 m+ F# g$ O* u: Z+ m
Теперь перейдём к примеру.
8 A) K# G, ?1 Q" \# o( a( q8 m' D8 T9 u3 N' r7 [3 m
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода# r/ W6 e! @% p. ?8 U
  1. public void attack(Npc target) {  // public void атака(Npc цель)1 U# f( p" \$ O
  2.     // Вызов метода атаки NPC* v0 Y+ p7 E2 T/ B+ ?0 @
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    : }. ]% O. o% U4 P' R; e
  4. }
    4 H; U, X( p, g+ k8 y( ]
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
" Z; Q/ A6 A: c& }3 I: L. r
$ r8 n7 y3 U6 N' {( j. V( p
; ~4 ~5 v0 ^5 O, jКласс Npc.java — вызов метода+ S! b9 _1 c1 N
' B4 u& P7 Z: R9 y( p* p
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    3 {* M0 [1 g. t
  2.     // Логика получения урона NPC9 v, M5 n9 f7 K. E; [' ~5 N
  3.     this.health -= damage;  // это.здоровье -= урон;
    * E+ w6 g+ k4 S- u
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  0 \- v. v  ^- l' |$ ]/ L0 u
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    , W+ U. M! a, K3 m& }0 I+ X% R
  6.     + B7 ]. h+ H' c" ?# ~5 m; X3 X( y7 {
  7.     // Проверка на смерть NPC# l# y6 M% J( [
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    ' X6 G% G) ]3 l9 H  k/ G6 Y! f
  9.         this.die();  // это.умереть();
    7 F. W; V" _) F9 x; k% [% Y8 @
  10.     }
    ( P, }: W% d2 T( _% r3 s. N
  11. }2 k+ I, X2 h7 T, _8 h4 F1 V* D
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).8 p1 d/ U8 a9 v5 n6 l& D2 }
Пример взаимодействия (с переводом)/ `7 i9 D5 L' r
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    6 n  W( i4 k4 C9 J/ V( `
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");- p8 {# c$ b/ D8 Z: K8 K4 R, Y! h
  3. 1 ~  I. a4 L7 b, s
  4. // Игрок атакует гоблина
    % q" A1 U) Y: r: I0 V+ J  K; ~
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    * P: |! k- O! V
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
3 D3 r# M* ]; I. e8 V' k4 L0 z  L) u% d. N# T- ~. W
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
' I) D/ x0 ?* A/ e6 B3 ]У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
& l9 l* x$ Z( Y
$ ^* C. K+ O5 w( U
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:300 @8 T& Z& P& q& U- I
Привет, Астралия! Огромное спасибо за твои разъяснения ...

6 ~2 B0 |: o% V& K' sОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.+ f' p+ M5 k5 P
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример6 V  z! W6 n9 q3 \/ ]1 ?' i
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    : @0 n( b5 ?+ c! X$ A6 M- r
: c; c8 N1 B* Q6 R- u
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)4 b) ~; Y+ K0 |) Y# R
  2.     // Логика взаимодействия игрока с NPC
    . p% G, [5 l' |" T7 n. c% Y
  3. }
    / M# o5 N& l# L# s, B
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    2 m* N# `* P" n. A9 W+ K: g
! `! W+ F8 N& o4 H3 _
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)4 a2 ~& H: a6 W# v( K
  2.     // Логика перемещения NPC  c8 f- K/ r7 R" `& S% a; P
  3. }
    $ P( Q! V4 {% d6 s
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    % v/ ~5 o6 Q& Y9 d

& A! K; Q8 Z6 W
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример; ?+ I0 F7 |/ X9 I2 c: t6 L
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)+ `, N4 i& N4 T
  2.     this.health -= damage;  // NPC теряет здоровье
    : }9 _$ `) v! D/ y( v
  3.    
    9 t; S0 l+ \9 `3 n' s7 Y) q! b9 H
  4.     if (this.health <= 0) {
    & D! \3 d; U5 y1 Y# Q' g  Z) J5 g
  5.         die();  // Если здоровье упало до 0, NPC умирает
    / N6 }( V0 [. _4 F
  6.     }
    ; ^" w; p3 v9 G* Z' j$ ^' W
  7. }
    , ~$ J: R5 j& Z: e* r$ Z7 k
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    9 ?  h* |" n# \: b; j
. r& H  }3 t6 {3 g5 u
  1. public void die() {  // public void умереть()* g6 x9 H% ]& Q& Y) Z! S& F
  2.     // Логика смерти NPC0 l( E, Y8 o/ v  i1 ?
  3. }
    : ]( E0 K7 G1 s0 w# Z+ _' e6 |
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    / u7 N  ^& ?6 }. g

* S7 b" S2 g1 f1 ]' P# o) O* g9 z8 s6 p' \% V
  1. public boolean isDead() {  // public boolean мертв()
    & D/ w' Q# u& q/ {# @
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    6 n/ V- f$ ~. E1 p2 n& U  g7 R/ \
  3. }
    7 x* w) |. i3 _8 h  v
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример! T, n$ w; z( ?- {
) e2 a, g0 A# I# o- A# }
  1. public void heal(int amount) {  // public void вылечить(int количество)# K( y$ j% E5 k* X; I+ p
  2.     this.health += amount;  // Увеличиваем здоровье' d. d/ i6 P8 ^
  3.    
    ( d7 R; Q3 p2 F6 J# u4 Q
  4.     if (this.health > this.maxHealth) {
    1 S( o) G" n' E( B# ?
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального4 D; s. E+ }3 x  I
  6.     }% d  P1 M7 M1 |7 X0 m* t
  7. }1 e8 Y* l3 j3 E( f' m9 X
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:3 k. u: W$ m: L4 g5 J- u

) H" f0 r+ f) C- x( }, T: x% p
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    " h8 J% `4 z+ @( r0 m! j0 [
  2.     // Логика применения скилла NPC
    * ]/ y. e0 N  g$ C
  3. }
    8 n- i% r/ g2 C! ]0 F" p, _1 c
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:) D' d( L" q+ E$ d( I

6 O+ b# M- ]5 M+ P4 \& ~7 N5 n4 O0 e
  1. : }. h6 x  i; q1 w" C
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)+ b. Q# T3 Z) O& ?# o. l  H
  3.     // Логика взаимодействия с NPC
    2 P* |" j# p) S1 x
  4. }/ Q: T) u! Z% ?; c' [) M: q/ {* B
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    5 x, k/ t. w! S6 n

- M) P' S7 v5 ]1 n4 I
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)& H) b+ O2 g8 F$ R
  2.     // Логика открытия окна диалога
    3 A% p5 n: z8 c
  3. }6 F# ^( j' u! a1 B! L% _% I
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.6 H0 Y( H! ?, }* h# N/ f
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!; T, ]+ x" b$ ]& A4 z0 K/ E3 R
0 C7 d. D$ K2 T+ L9 T
0 ], a/ {! s9 f1 [) l

) S; r# b* \: p5 H2 [2 G( B. u: V" Q: C7 D' o" _+ M" @1 Z/ Z
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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