Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 ; g) `* I, u! V
3 G# F8 t. o  n( W$ E
. f4 b$ X" ]$ C: Z0 U
Шаг 1: Введение в классы и методы на примере L2j_Mobius' B8 @$ v9 l- Y8 t" K
С статьёй можно ознакомится в разделе Обучение > Читать6 R! [/ V( D& Z! k

, ^: e, j) z; E' GДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
! X: t7 ?1 v6 g6 F/ F% Y2 u
0 n: A' m5 J5 ~. b( ~4 I4 tОбсуждаем:% _* A* R5 @' _7 {  O! P
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    ( a* g. I; `  G- g* j7 E  L6 h
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
1 x8 X+ a) ]4 C2 [& ~4 R& O) M0 s0 I* ^! c0 O5 X  \


1 y; _2 f6 ^9 z6 R# xИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! 😄 Но мы вместе разберемся!0 w& I4 R( j4 W( D) [

# U: r6 e, H. i4 N$ z; T4 K8 l
: r1 e) h) [+ e7 `% m6 V% z8 K
9 J' N" d0 f- V- _2 L" @1 V1 `! r: M: l  x! x9 s. f
/ M% R1 s9 l8 t: D+ j

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
5 p1 K1 H5 t, y! I% ?9 p6 W+ W6 v
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:178 a. }+ d& N0 y% q
Почему мы используем ключевое слово this для ссылки на п ...
; r9 u( u7 n# |; k" R- D/ y, \
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.' K- T7 ?# ]( G2 U6 z5 Z
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.# g: ~1 a  W: h7 D9 N8 V, ]  Y. s
4 t$ p9 t- x% \
Вот пример:
8 r1 Y" x9 B# {  o! y2 N  ~
  1. public class Player {2 ?! O/ z$ T+ P( k: n8 N( n
  2.     private String name;
    - C4 L- d+ Y0 D' |8 L; |. ]

  3. 7 c$ V, J7 @, j- c( E1 k1 q
  4.     // Конструктор
    7 ^/ E  w0 }) N; ~9 b& B! }
  5.     public Player(String name) {$ ]% f1 h, y  d) T: p. X8 G: Z& Y
  6.         this.name = name; // Используем this для указания на поле класса
      a: k9 _+ N/ z* n: ^
  7.     }
    , k, v: J6 G, V  S8 Q/ b$ @
  8. $ z9 [4 I7 z/ R4 Q' ^3 @. b
  9.     // Геттер для имени
    ' y5 V  ?8 k! E  H0 V6 H
  10.     public String getName() {
    * V! n6 }# J4 ~$ [2 X' P- c
  11.         return this.name; // Используем this для обращения к полю класса
    ! J) Z9 D6 d  |/ c' i( T
  12.     }
    7 h$ M* Y7 c* l: q) V
  13. }
    - z8 R' l/ h! ]" p. Q" }- d
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
- Z- M4 A0 i* _- O% F4 S& p" k% q9 X) |- ]( \/ }. C
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.6 q' t7 }9 o7 K3 j# Q
/ O# E- v4 \( i* c& K
Пример передачи this:
+ Z0 d6 R0 V) P9 i, h1 i- a
  1. public class Game {
    6 N* M( p1 L, X( s8 J7 I
  2.     public void start(Player player) {) J- Z" m! O( I( ^1 }0 R1 w# a
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    " x, D4 s  Q4 P8 U2 e6 F1 h
  4.     }( R! g8 ~$ w& j- I9 O+ X
  5. }
    , `, _; o/ A$ J% p) L4 ^
  6. . ~! t: p# W1 R9 h
  7. public class Player {
    & r5 S! x3 u6 s4 F8 U6 C8 C
  8.     private String name;% k$ T! A' t; I. _* }
  9.   w) x2 K; @3 @) {
  10.     public Player(String name) {9 U$ A  [7 `1 Z+ J9 O' s0 s! c
  11.         this.name = name;9 s1 Y- d; Z; A  K% Y
  12.     }
    % B7 {) D! C' }$ s! k3 o! c2 z8 A6 x
  13. $ k* B7 `$ n! I9 p# y  T% Q- `
  14.     public void joinGame(Game game) {
    9 H% g7 k2 o3 \5 c1 ?
  15.         game.start(this); // Передаем текущий объект Player
    ; x% b0 H" _5 s& L3 `0 V) ~
  16.     }
    6 L$ G! z; T+ ^; b; w: J; {
  17. }
    - n0 {! _$ p- ?" K1 q2 h& d2 C
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.8 i' \  K  B' A5 x( c! d


7 K  }9 x- k* ~5 n7 Q7 q9 VПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! 😄
" J' _/ V+ @2 u3 \
( A/ H5 e% e2 j$ k
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! ( ?8 d# ~- T, B) d$ @7 u
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 ' d! H1 J7 z: H% l
Mike123 опубликовал в 2024-10-17 20:05* v0 l" |. E1 H  S2 A1 W4 h2 S# h
Добрый день! 0 k3 D/ w' f# ?+ ^) K
Как создаются и вызываются методы в Java? Мо ...

* M- a$ i& j; O8 x9 x2 ~9 TПривет, Mike 123! 👋
8 N# @5 G) @$ w6 BОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
' i$ x; f+ P$ x6 c6 h& U& ?! u' q8 h7 i8 Y) B8 L( p" V. Q" X
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией., h; c; X8 s  p. x% H
# @$ O6 s' }# _; Z
: P* B, l1 p. ?5 N
Как создаются методы в Java?! l2 P5 D3 k  }+ Q7 |9 M

# E+ M& d4 e% l$ l: ?Методы в Java создаются внутри классов. Вот базовый шаблон метода:4 k) R5 A5 |& S4 q- c6 {! t& E8 X+ y
6 C" e: R9 O2 v; e
  1. public returnType methodName(parameters) {0 `0 l$ x: D0 M
  2.     // код метода
    % y+ j) o% B# n; p% e0 I' X
  3.     return value;
    2 m4 f- o9 ]! i8 u' `
  4. }
    # ?8 P6 W) r; B9 M) U' K1 J
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод)." ^9 y: D) {* S+ s8 ^. ^
5 @7 P/ O/ h2 R4 G! ?9 U
Теперь перейдём к примеру.
! f7 ?& V6 m% U- h; p) |5 _0 {& |# A
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
) y' |6 a9 M" j. }9 D# b( U5 C  i
  1. public void attack(Npc target) {  // public void атака(Npc цель)8 j- E) v. r' C: N2 u
  2.     // Вызов метода атаки NPC
    0 C9 x8 W- _9 n1 C; o) a) z+ L$ z
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());, M( X- y5 M: H2 S0 P
  4. }
    & t- U$ r$ {; ?% o3 Z6 H* t
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
9 z: a- R. L$ K8 b2 E1 y" ]4 f. a) ?; W+ @9 y1 H% Z
- q1 Y! V- A/ m, Y
Класс Npc.java — вызов метода/ \5 U$ \+ D& l8 X( |

; _* w5 w) }8 K. n$ o
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)- A. j" w* e* W" F
  2.     // Логика получения урона NPC6 c) o6 ?* y" Y' C8 S
  3.     this.health -= damage;  // это.здоровье -= урон;
    & B- r1 |+ q9 T3 L' K* `
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());    y, s5 |7 t# `
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    4 b9 o4 @$ R4 J; v7 h4 d
  6.    
    # ~0 N2 b0 T  @+ {" M& {
  7.     // Проверка на смерть NPC/ Z9 ^# b0 f* m! z% f9 p
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)3 h; I2 t$ {/ \  G
  9.         this.die();  // это.умереть();
    ' P( b2 `) f" R* |/ `# Z. z/ e
  10.     }0 d  f1 j5 ]: t" {8 c# v
  11. }
    4 O  B8 N6 N- Q0 V
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).. w) ~( d: B2 |: e% z
Пример взаимодействия (с переводом)
( i, ^% P8 |; i. S2 u' c# R
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");+ M1 I8 G, ]# r+ G: Z
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");  U. L5 r+ J" r" r

  3. 3 \! F. Z; x! ~4 c3 V
  4. // Игрок атакует гоблина
    4 C8 a2 B; v1 \2 q! z/ H: J7 i
  5. player.attack(goblin);  // игрок.атаковать(гоблин);% x" J8 g4 m9 A; F/ u
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
! O+ o! p- G5 l! h$ k0 O6 q1 S. }3 [2 V
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения." f: l5 A! }( X8 j1 R. J
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
- B" x9 f9 W9 D4 _, `
2 O: `& \( n6 |
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:305 X1 B7 x$ I* {) U1 P5 {
Привет, Астралия! Огромное спасибо за твои разъяснения ...
3 h4 B) p' S' y/ l2 Y& v  N, q$ |
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
" `0 Z* e) [% A( ~& t, L, w1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример+ u/ ^' ?! l  y, w
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:- g2 o2 Y8 c/ z  N
$ d  q5 ]% X( t- P/ I- j( f
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    ' o! @4 |- D2 z: b( S% H7 f
  2.     // Логика взаимодействия игрока с NPC
    : ~0 Y/ R1 O% X0 ]! _. ?
  3. }
    : u/ i; I- F$ f/ w0 {6 `& ~* |
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    : W8 r" {' i) n' q
; j6 {) U3 F, t/ A9 @; \
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)& `( [. V, Q3 ?9 x( t
  2.     // Логика перемещения NPC
    # k! l: A  }, t
  3. }5 c; E) W/ i0 N2 i/ e  G
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:! V: m* u* M& M" Y

$ l5 b: _2 _" H; \; `5 l6 p2 U
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример* ^2 \% ?  v0 n' G$ f
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    % _0 c( a8 W4 C: K  |; b  V3 ?1 _
  2.     this.health -= damage;  // NPC теряет здоровье7 {0 s- i+ ^0 U4 ^/ X% V5 o
  3.     ! S) q" N! p! U0 t+ x# J
  4.     if (this.health <= 0) {0 X: c, V' U! ?$ n- o3 U4 L; J2 d0 s" b
  5.         die();  // Если здоровье упало до 0, NPC умирает* d3 K$ M9 H9 [! y! b1 U- }
  6.     }$ i+ S( M' E; y( |+ A. t$ k$ J
  7. }
    # [5 \; ~+ P) W0 c" t
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример/ u! h% L0 B$ E  [  x% H% c) C
  I  m- N! r1 s$ z# L) t
  1. public void die() {  // public void умереть()
    # p' u9 ?. n. u: Z
  2.     // Логика смерти NPC8 h: `: Y' n% |* n, U
  3. }0 o& {- y3 O( c2 b
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:& ^' Y" V0 a- ?0 I
: l+ P0 C8 _! N( W! y
' R7 z$ _5 ]) D) ~; Z
  1. public boolean isDead() {  // public boolean мертв()
    5 o! |* F, X/ W6 @* k
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    + x  Y$ V$ d+ ~# O) X$ S+ o6 O9 i
  3. }% t5 e2 q5 F0 v0 u
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример7 B7 t2 F/ l' B7 M- V
& N0 s# E( E. s1 l
  1. public void heal(int amount) {  // public void вылечить(int количество)) a7 P" v( o  M. o6 z4 _
  2.     this.health += amount;  // Увеличиваем здоровье
    3 Z3 k. ]2 k: _4 J8 F  l
  3.     : Q# V( j" d( n% h# c
  4.     if (this.health > this.maxHealth) {- {/ }+ Z5 a# |9 s- G
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального2 I, }, ^) x+ o* q6 \0 g" c
  6.     }
    & |5 U5 [/ x( g0 g5 Z
  7. }7 Q8 y3 v  f2 R* u2 C
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    3 }0 x7 c( a2 {, Y
$ P7 u! n6 @# c$ a% i. Y5 t7 t
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)3 m& N0 H8 D" \# p) m
  2.     // Логика применения скилла NPC
    # `, [: [0 y" Q7 P
  3. }
    4 h1 t+ H9 G8 J0 l9 I: `- B# e
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:9 X+ y2 ^7 @% ~. J8 h6 J

' |% Y$ m! m/ T1 x

  1. 6 G; w3 Q) S5 a. ~, c- z
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)9 D( |. {- M: m9 D! E; T
  3.     // Логика взаимодействия с NPC
    $ m" B2 N" x& a3 p3 t
  4. }. W3 S, I6 G9 J% w2 m$ r
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:1 o- f/ d, G" U6 l, B

0 S4 d" B1 m1 }: _8 d6 u* ?$ r
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок), z! v$ h+ W4 J% o4 D) D/ R; V
  2.     // Логика открытия окна диалога! E$ V* Q! E" ?& ~" d+ v4 v
  3. }
    + i6 v! {4 J( n/ T, a) |: X$ M4 k
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.2 v) z3 p4 s% a
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!5 P% t! Z$ v# I7 h4 a5 O
* v+ d" H! b$ g) B
# P8 }3 R- F' B2 P: {1 j/ H

: `: S# {: J# w) v+ }$ ~% z' q8 m
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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