Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 ; Z! s4 Z2 f4 i6 p. P

0 H8 w6 T. R/ \+ n% B
) D; T0 F$ L% nШаг 1: Введение в классы и методы на примере L2j_Mobius6 k1 d5 t: G* l* D# \& E- ?, z
С статьёй можно ознакомится в разделе Обучение > Читать
% [$ d2 s* J4 q- L% ]# E( ?. h$ [! [3 M& U3 A
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
, H7 V/ V7 X% t2 X5 ?8 M3 o
* q; R# a+ ]) _, \9 SОбсуждаем:
- W6 \$ @9 E7 h# d
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    / v8 X' s5 z, k" j
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
& ?. |7 w' B! A6 E1 U$ G( z$ d- M+ B' r- {" y. i( {4 L

+ l$ F+ Q+ s: ^; W# y
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! 😄 Но мы вместе разберемся!# j6 m" h/ L6 `4 }2 j4 W

+ T' |& D% j: ?6 G8 R9 p/ V7 T: f
( d" ^. {: @% N. g2 O2 O& w* M
/ e$ Y# V9 g/ u, x, s/ W) Z$ x7 T/ u% ^. h: b' v4 ]
) m+ w! a7 ^9 o; J) t2 R/ D

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
# f! X! i' B# ~0 f# _
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17# U' P1 x, M& k
Почему мы используем ключевое слово this для ссылки на п ...

3 N6 }3 s' f$ oКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
7 @! F0 J" ]. dПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
& G8 L2 ?2 [  z& q/ I3 S0 M5 S- V; T% t( `% Q* |- C$ ^. C
Вот пример:
- y- I( P, T0 C8 T+ H
  1. public class Player {$ K3 m6 X  T2 `; b
  2.     private String name;1 v4 X: v8 l1 c

  3. ( M0 b7 O6 ?# T4 S5 |
  4.     // Конструктор
    6 N7 }4 C5 H- Z# [' k3 N- T& W6 {
  5.     public Player(String name) {9 F" Q2 P, B2 c, @. A$ `2 e
  6.         this.name = name; // Используем this для указания на поле класса0 t# Q' P9 M' O! U" ?' h
  7.     }7 L5 P* g' p' F' v) o% t- L& K  l8 I

  8. 0 J2 I& d1 V$ F) v* I
  9.     // Геттер для имени3 ~" Z9 y- _7 m9 p7 Y$ C
  10.     public String getName() {2 |2 h& y* j* b  t
  11.         return this.name; // Используем this для обращения к полю класса
    + L; Q: k' w2 @
  12.     }; S8 @3 @' e: W( ~+ R' H* A
  13. }3 c* d4 s. S- F
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.* I# }+ L. Z% V; d" B  c
4 _3 U3 n( V2 O* n; ?* Z
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору., Y) X# v1 l0 s2 g

" h& ^' a5 i  c8 d8 cПример передачи this:5 \# c$ p( m; l2 f* U7 q, H
  1. public class Game {
    1 X! U/ D7 M% K0 h/ x' O' K
  2.     public void start(Player player) {' P: o) k1 i4 T4 S: D) F: f' t* `
  3.         System.out.println("Игра началась с игроком: " + player.getName());) c. o* H2 L4 c& h: `1 c
  4.     }1 j3 e  h' A' G" ~' p
  5. }
    9 m. c3 k7 z, _! F; e3 ~! B% N1 R

  6. , ~1 K: S( n; {: h' K0 y
  7. public class Player {
    6 ~2 |, x- `0 {7 e! @" L. D
  8.     private String name;/ J6 m+ ?1 M' `) ~

  9. * V8 o3 y7 Y4 `% B
  10.     public Player(String name) {
    & ^) Z: }+ H' s2 z
  11.         this.name = name;
      S/ r2 l" Q/ D7 a$ v0 e
  12.     }4 d, R5 n7 x3 _: O, n( z
  13. / b0 O, Q1 D& U1 F9 n
  14.     public void joinGame(Game game) {
    : l$ @! n. z2 s/ Z! [/ x" Y3 t8 j
  15.         game.start(this); // Передаем текущий объект Player; O9 H* f& J. W2 {. m
  16.     }, v# l! n# H* ]2 Q
  17. }
    6 ^* c- l% K5 S, B) t. q
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
/ q% X8 H- }$ @! e; m* _" D/ `

: b9 G  R0 v. p, \3 HПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! 😄
( r. H) {, w7 o) u+ G. Q  C. V0 i! w' k  L; ?
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! 5 p5 r- O8 U9 C2 t  z
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
  }( j5 f+ l/ J6 W" X9 |
Mike123 опубликовал в 2024-10-17 20:05
, v6 e& D$ @+ u; L- c2 rДобрый день! , l9 ?4 A& [* T
Как создаются и вызываются методы в Java? Мо ...

/ \0 {$ U5 B9 M" h1 F% yПривет, Mike 123! 👋
" W# w, }6 A, P$ R: SОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
+ Z/ ]( b  z! C# {4 T$ R, g" I4 O# c
5 Y6 M# z5 f& M6 }+ ^7 EДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.2 p5 R4 h/ W( Y/ H) x$ `2 k$ I* e( o

/ ~& P% d* ?5 _3 ^1 }' a; b
% y* h! r  x, k4 m- ]+ DКак создаются методы в Java?# H8 h; }. A* u( |( b. _0 G

# T8 q$ ]( j. |3 E5 bМетоды в Java создаются внутри классов. Вот базовый шаблон метода:  g% a7 @' ~9 S2 p7 a' D

9 k4 M/ v% E) j3 s! n$ q9 ?' L
  1. public returnType methodName(parameters) {9 Q4 S% g. ~$ s6 w
  2.     // код метода! D0 y. r4 K9 ?: i3 }  `
  3.     return value;. d- E9 w4 Y6 T. g! x3 e
  4. }5 C2 r- E9 g# `* U! W) n
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    5 B8 r/ u. }! V
( Y) H5 J; @; w* H+ y
Теперь перейдём к примеру.
! {! j' I7 r2 H! \6 J/ u9 A+ K1 E# t2 }' A
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
" X- s2 u$ D2 ]3 y
  1. public void attack(Npc target) {  // public void атака(Npc цель)+ F" \" p8 u3 o- k$ z8 P( Z% E6 z, U
  2.     // Вызов метода атаки NPC
    5 f* i; K& [, Q5 S& b( u
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    ( ?* A! j& d: t, Y4 P; M
  4. }
    6 b7 V" B' e% _: @- q
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
7 a! S9 a  B' n, c4 w& Y: B2 {; W: g; S
4 n- p) u7 N* z% E6 @: I0 c1 N5 u4 f% y
Класс Npc.java — вызов метода" Z/ S: a) X$ Z/ S2 h3 v% b4 A& j
- V$ R7 L+ ]/ p6 j: U
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)9 T' a8 M# }( |) x$ k
  2.     // Логика получения урона NPC) v9 L/ z( \$ \7 @( N
  3.     this.health -= damage;  // это.здоровье -= урон;
    3 Y9 j& N3 G; c4 r/ f9 P- K
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  $ o* q# M7 c" K/ D7 U
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    4 Q( b0 A9 l* I$ |1 G2 H8 F+ Q
  6.    
      L+ X' s2 ?/ j( D4 ?
  7.     // Проверка на смерть NPC
    - D0 p7 ]" _$ k
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0), V( k2 @3 h$ ~4 w
  9.         this.die();  // это.умереть();
    , Z, B8 X, z1 q% p6 ^+ K
  10.     }
    , Z  ?" O4 `: A5 v: k: O: J6 I
  11. }& T) b% P3 P: @) j+ p
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    $ q0 k6 q$ v. _  r0 J" K
Пример взаимодействия (с переводом)9 U% j& t- N; H3 [9 u) E: B  w
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    3 X/ K* d) R& P3 A
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");, z7 w/ l$ F7 P" v5 \

  3. . `0 o  W7 U( \9 P
  4. // Игрок атакует гоблина
    $ R8 O4 |. L; w$ A! U
  5. player.attack(goblin);  // игрок.атаковать(гоблин);5 `) d: g3 T7 k0 O$ V$ |
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
& I, i: `& R; o6 C  ?9 X. V4 Y' F( s4 F( ~# K5 x
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.7 e  W6 J) p3 [, m1 M
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
! b3 y5 c5 x  J
9 t7 S7 [& e# `* N" i3 \
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
& `, w/ N" b% xПривет, Астралия! Огромное спасибо за твои разъяснения ...

; _( l: J2 d+ ^: T; S0 u  pОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
1 j( S5 m3 |6 i# _1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример2 f6 d% S& i: o0 m9 b! |; l
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:" z! v8 O! ?, o/ g# s

. E$ V2 ?9 K- e% }1 y* G1 W0 f$ l, E
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)  M7 K, X; A8 m/ ?- D* R+ Z
  2.     // Логика взаимодействия игрока с NPC
    $ w, s0 u) D0 Z- S! o
  3. }
    ) n9 Q0 x4 Q6 _  ~7 i
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:: F' G$ ^5 x& ~# H2 Y- }
8 z/ Y5 ?3 M1 I. p* i) m
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)5 s" x% R7 ?- t- c) _* ^
  2.     // Логика перемещения NPC/ V. B7 f0 z0 o/ \; j
  3. }
    ( H% v1 Q1 J7 s
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:& i2 Z$ _5 \2 {; ~

. D  R( F3 o  c/ K( Q+ B) d0 t
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример( _/ b( i9 A' G( ~& W6 a8 Y) p. {
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    : B+ ^9 Z; `2 \4 `
  2.     this.health -= damage;  // NPC теряет здоровье
    # `8 P, I7 Z3 `5 U: \: z3 E! J
  3.     ; r9 Y8 E( H3 H% o6 _5 q' E! s5 r
  4.     if (this.health <= 0) {3 x$ B% ?! t4 V. |' k, \) h
  5.         die();  // Если здоровье упало до 0, NPC умирает
    & a: ]# s" Z, S
  6.     }# R3 h. V$ t4 p; N+ V& }
  7. }
    $ k' [  h0 S' L+ x
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример& V# V* C( c" U. g# g$ g2 {
9 I/ Q2 p( B" C1 Z
  1. public void die() {  // public void умереть()
    ) m/ V$ q% R4 p! Y1 A% H6 ^3 H9 J
  2.     // Логика смерти NPC2 J4 @" ?; q: b$ ^. l% ~; d- z
  3. }' _+ @0 h: ?: T# b  C+ ^
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:& n' g; \$ V9 f) v4 s

' a+ |( q0 o3 O
* r* ?6 q& c6 |: z
  1. public boolean isDead() {  // public boolean мертв()9 ^* f  `; ~8 P( x) R
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    - e$ R* r* T* t0 i
  3. }
    , V1 k) j8 n6 T0 n  ^' _6 N( \
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример' I; J% m" C+ b; n2 C: i* b
. i1 _* V0 b+ E4 f* u' r
  1. public void heal(int amount) {  // public void вылечить(int количество)
    & @4 ~& T- o3 `, s+ f2 i9 L2 k
  2.     this.health += amount;  // Увеличиваем здоровье
    3 N* t; X* {( `
  3.     1 ]9 C/ Q& A5 a) ~" y7 Y
  4.     if (this.health > this.maxHealth) {* b5 G6 G; L; K: Q
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального9 T$ O" j) U8 h. F3 n6 ]% V1 S1 S
  6.     }
    6 q( k- `8 ^+ H
  7. }
    1 X. y' n5 X: q0 L7 L# F& h) j
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    ; C. a) f* `1 B0 }( }

, V9 K) l# y1 f6 t
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    # D( k8 g( z) h$ O+ w% v; n
  2.     // Логика применения скилла NPC6 x: P7 q2 g7 D! C; \7 o
  3. }
    3 H) E. T! @4 |  O" p& p* K
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:' k% J% l1 ?! ?! c7 i! E2 G
# o# y1 \, c7 R' A2 I+ W$ L- Z

  1. $ y" R- V; O* Y
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)4 h: M+ ]8 p- U# g3 \+ F
  3.     // Логика взаимодействия с NPC, U! O! t' {. K! r' y5 s. R  v
  4. }* R+ ~) s, l5 X: R
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    # L* a: }. L$ {. n5 L

' Y3 g( l- X) c
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)* o1 B& f7 A# k3 t
  2.     // Логика открытия окна диалога
      U. Q& n* _' e' a
  3. }
      w, q8 [: T, q# O# E
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
9 z+ N/ R! E, _/ o6 L3 }( K  }Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
: M$ d- y+ E/ m1 t$ L# n6 `3 w) Q2 d$ T! q/ A

" U9 O! u  U7 f6 H* |5 {  ]  Y2 \; d$ s& [0 r8 Y( c* ]

) |1 }7 m% P( ~; f8 J  j
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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