Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
" B3 w+ P5 N% ~1 i
, L) t$ v2 x" O& I% Z, n0 k. H! F! p
Шаг 1: Введение в классы и методы на примере L2j_Mobius
/ `1 ~  ^: m6 }3 a$ f: W3 D' |/ ?С статьёй можно ознакомится в разделе Обучение > Читать) o& V3 f% y" j& Q
3 f4 `/ w5 y9 Y+ T( ~7 A8 {
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.0 L; O8 a; }- p) h5 f- H: ^0 A  @  w
6 i: l  h& J! H4 `' o* w) [/ V
Обсуждаем:. A( C  z3 M% `! L/ E
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
      ], a1 W/ ^6 A9 [
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
8 ^" m) p7 {2 j5 @
, x. X  w2 X5 y0 j6 |  c6 J5 |, b

5 |! U* H2 F7 J5 e3 X9 x: \& d2 ^И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
/ @$ I/ y; Q' O, U! A. a- s5 [% ~: G& q4 ^. r( I! O- L+ X8 U# [
- l9 t0 O1 `' j9 m: b) P

5 V3 E% V) w0 _5 z
! w- `/ `. Y; r" A2 v1 H/ z' [4 q8 b9 K. H0 ?# T

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
# M5 s, V6 \, {0 e0 z' @3 W% ]  L
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17- ?% d( z; V0 i9 L
Почему мы используем ключевое слово this для ссылки на п ...
. C# X6 X$ c2 x9 V/ ^
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
2 V% V3 V) z( u. O! HПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
+ C" Q/ O( C: `8 M
- n: U6 k' M2 cВот пример:
& N6 K5 P& i1 G" l5 K
  1. public class Player {1 x7 t  V& t3 o
  2.     private String name;
    $ q7 O" e1 ~$ C) q

  3. 2 h+ i( \) k$ r# U$ r
  4.     // Конструктор
    7 X: A( a2 B# ]5 ?3 X# q
  5.     public Player(String name) {
    + s) ~5 D2 ]) X! A4 X; Z
  6.         this.name = name; // Используем this для указания на поле класса
    / R) U- E" u0 p% v; N
  7.     }! y7 M. C, E% ]6 R$ X& F, j

  8. 4 @  K# p& p/ @. L- S2 x2 o# }+ |
  9.     // Геттер для имени: [6 Z2 m  v0 ~! n) s% j% C' F0 l
  10.     public String getName() {
    6 C& W% d8 C0 p& l- A
  11.         return this.name; // Используем this для обращения к полю класса6 q: n, \6 _$ _" M% T9 M
  12.     }
    8 P5 v, w3 r( l, O: }9 N
  13. }
    - K) V2 S3 P! T3 y7 l
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name./ Z: ~9 H- f- E/ w3 Z

, s9 X: @5 _6 V% q' s0 ?2 t; _Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    $ J1 k- V! e" S/ g

; X6 y3 X3 e4 I8 m- a6 JПример передачи this:/ @& z* H6 M8 u  A8 N
  1. public class Game {' l6 x% N, T- L0 `$ F2 e$ @
  2.     public void start(Player player) {8 v) q! v9 t3 I9 G/ n$ p9 O
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    - n0 ~  f9 @# y4 @  D
  4.     }, K5 O2 |, T' `
  5. }
    8 I! C5 o# O0 v) |

  6. 0 e9 w9 {; q* r: Z+ B" C/ F
  7. public class Player {* s# V: m" V" u5 G' D
  8.     private String name;
    0 g- I6 J& V) t2 ]& c1 U8 w

  9. 3 [2 F1 H! N! x3 k: ~9 R
  10.     public Player(String name) {
    7 d7 C7 ~& \& F9 m: W7 R4 {$ {
  11.         this.name = name;
    : {2 |7 p0 S' s7 O, b& W
  12.     }
    ! l0 C! `& C* Z% W

  13. * T' ?9 i! t( C  i/ U/ K. f, ^
  14.     public void joinGame(Game game) {
    . f& ]' \. \4 m- \# w2 v& E
  15.         game.start(this); // Передаем текущий объект Player" r: ^, p, E# V! Q" y& X5 j
  16.     }
    + t+ V& e$ D  ]1 a2 \
  17. }$ k3 x: ~. d0 t. _5 f) K2 G
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
5 r5 }  B# W  L6 [; k4 k
5 E& Q& t5 H! w# E2 j
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
; F2 v8 i, B! M6 V( g6 f1 K8 O  |
& j5 Z, ]5 p0 @$ X7 M& s
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
, r$ r- o, n- p, jКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
$ y, t- g: ^: M0 {/ o
Mike123 опубликовал в 2024-10-17 20:056 {' ?; |2 a# b5 G9 ^% M
Добрый день! : x3 t' N$ p; L  E3 v; I/ r+ j
Как создаются и вызываются методы в Java? Мо ...
6 x) o5 a- S" o# k* h7 i
Привет, Mike 123! ?$ v0 Y! \7 E9 X$ I
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.8 V! d3 d/ O# j) O

& R( C) J. q; [2 c; G2 q9 f/ RДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.' k( |9 E' |6 S0 F2 Z- v5 Y

) Z" b- U$ d' D0 n& d3 u2 h" {& s1 d, n7 e* [; c* e( K
Как создаются методы в Java?
5 G4 k% e- m3 a* I) K' z+ H0 S% N) @& Z0 r
Методы в Java создаются внутри классов. Вот базовый шаблон метода:( q. j9 ]4 f- \5 t* N$ H

% l# g3 k0 M, N4 k, M; j) A& \
  1. public returnType methodName(parameters) {
    2 L6 B7 R' G  {, q0 g* J
  2.     // код метода/ w1 y3 p- L6 V$ ?) g
  3.     return value;
    + O- K. i8 j/ w
  4. }
    , b( r& l( S  j2 ^
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).5 m, u& q9 t7 z6 `! B
5 l1 I# P4 j) a2 z% s
Теперь перейдём к примеру.
4 J, M' `: {" d  H! R- I9 R; k' u* q& c% J# @& Z
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода: Q- U0 P. A* ~3 p8 x
  1. public void attack(Npc target) {  // public void атака(Npc цель)3 }% l; w: A, q# ]8 f1 [) D, X2 F$ e
  2.     // Вызов метода атаки NPC
    8 a. O4 X# H- j7 Q
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    : B- B% Q5 _2 ]9 v7 J. L: U
  4. }
    5 W7 Y& T3 W5 I  D
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
  W/ K1 F1 l& |& l) W# r5 R7 t+ s; S) {

4 a9 `3 i# K% i( wКласс Npc.java — вызов метода' k- A* ]: Y+ s: D

7 p4 b( o2 r( }/ l3 T
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    + T  k4 X2 j+ O  l. D; X& X( ]
  2.     // Логика получения урона NPC5 j; z! C" Q0 P; f
  3.     this.health -= damage;  // это.здоровье -= урон;
    - Q& T' G+ e" z# P! i! T
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  ' i+ x/ N7 v+ ~. f1 P
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    2 f: [6 `$ F7 h4 r
  6.     / J& B0 }5 \* T/ Y4 \/ S5 E
  7.     // Проверка на смерть NPC# h/ M$ h2 g2 c% K
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    7 S  `; Q. g! [1 Q
  9.         this.die();  // это.умереть();4 E- x+ L: ^6 x! S- v) p' `4 Z
  10.     }
    3 s- s8 o5 r" U1 P
  11. }
    * i# y. e" ], g4 T* J  H- s
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).: I3 q! D* A. q3 G$ q- p1 o" M
Пример взаимодействия (с переводом)
- {9 h4 {2 _7 }
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");1 z* F& x7 h4 E
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");$ a  d; R1 ~! I8 Q# j7 p
  3. 1 H+ [, P& L) C
  4. // Игрок атакует гоблина. Y1 w8 v/ K0 l. @, h
  5. player.attack(goblin);  // игрок.атаковать(гоблин);5 f0 Z. D6 J) Z% @6 `
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
1 n. \* X# B; F1 E  v) r. B1 s# f" [1 ?! L, V! x! ^$ O
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.1 O; D* B: Q% O# v, w2 k! M
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!' N6 }+ ], H( t* ?0 T3 b( K
+ K( _$ `% V/ s9 A/ ]" t: W( j
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:309 L. ~5 V2 X: d; y" B
Привет, Астралия! Огромное спасибо за твои разъяснения ...
" y8 y9 t1 f* b% e/ \8 E: k3 [7 z
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
6 n' @* j: C- V8 A1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример/ R, F. p1 w: M7 l1 d6 b
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    4 n6 }. x! F) W- z
4 @5 h. g2 e, h: K8 E  o2 \
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    & P$ X7 L' e: t- K7 n0 o
  2.     // Логика взаимодействия игрока с NPC
    5 I9 W: t  q9 e/ P# E
  3. }
    $ D1 @( }" F8 T1 ?- b9 \2 D
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:  r) j% s% L! {9 Z7 i% C# V
8 f3 O4 |! R) q: ~" T9 R
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z), x/ Y/ \: d4 A$ N
  2.     // Логика перемещения NPC8 _+ Y* i" u& b! E# d4 d
  3. }$ J% R  u! x+ {, w4 ~9 g% L" q
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    8 S3 p; ^8 r$ X  m

1 s1 b9 t) R* n
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример, q8 }5 D" ^: j2 p* C$ r% m1 U
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    ( X; M( o- U1 M- ?9 i- d( L
  2.     this.health -= damage;  // NPC теряет здоровье
    2 E2 z0 ?' g' Y* _! l% U# f
  3.     : s  w: A9 }, y. G/ D
  4.     if (this.health <= 0) {
    4 c0 E' }6 q8 _' w, l4 j& w+ w
  5.         die();  // Если здоровье упало до 0, NPC умирает/ i8 w/ b% Y& G4 C9 a. h# ]
  6.     }8 O1 ^/ d. P3 F) V
  7. }# R* |4 G5 g$ P' c/ h+ o7 v; m6 b5 J
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример4 ^% f% _6 Z8 V& |/ |3 H
# e- E8 `  d- R8 ^7 D
  1. public void die() {  // public void умереть()/ }! P+ L7 r' b4 Q3 q6 M$ B& T
  2.     // Логика смерти NPC+ ^0 }0 M6 L0 e, T! J. ~
  3. }7 P; U. P& N% H
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:& D+ k1 u) o  A. {; L5 b

$ X' |4 e4 e! }: I0 G: m: z, S+ I2 F! t
  1. public boolean isDead() {  // public boolean мертв()  }* ?1 C) A8 ~) O+ I- u7 s) y
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    : Q5 T- _5 i3 l- g) L: l/ A: h
  3. }
    1 I- n: \1 A" O8 @
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример( k- m& x2 u- c1 }: A: d7 v
+ Z5 ]9 u& a4 J: a/ u; d
  1. public void heal(int amount) {  // public void вылечить(int количество)' }* L: g; |* L3 m- _
  2.     this.health += amount;  // Увеличиваем здоровье
    ' l' i) }4 T  K) I/ E4 L$ n" u
  3.    
    9 t$ K5 M* k0 x
  4.     if (this.health > this.maxHealth) {
    1 g, C6 @' T" |' A. @2 i1 _
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального$ ?5 o/ _2 }' u
  6.     }% o) Z7 W/ x2 b8 ~* V
  7. }0 \4 k8 g& l- x# |
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:5 ?9 B$ A1 U+ f( g, t
: u* y& @! ]2 X0 p0 Z' y8 O
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл), a+ W) u. L: k3 c9 Y. y
  2.     // Логика применения скилла NPC
    4 Q* {9 `/ ]6 L; ]7 l" T. v5 B% D
  3. }
    / [6 c% G" G) p: M8 a" }, L2 l( Y2 H
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:# O, R% L3 l& M
) \* ]3 u/ Y# V5 x

  1. 1 t4 V9 ~8 w/ F6 m5 j
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)9 E+ }! E  M4 }
  3.     // Логика взаимодействия с NPC( S% e7 ?+ Y. E  J
  4. }
    * ^. E' K6 X, u! H, e8 ~
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    3 c  N4 t- q! P2 H9 ?+ c7 d% U

9 @. W" ^9 x) O% ~8 h. W
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)0 q# Q2 A, ^, C0 Q7 P# ^
  2.     // Логика открытия окна диалога" K+ K2 ?! U( E% \$ B* _7 l& R# I
  3. }/ y& @3 H4 r' E
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
% @+ @: z% O% K7 Z$ V$ q+ `9 CЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!- k3 z* x. r2 J5 _& ?
! V8 Y* c( Z0 l

1 d) o9 c: A( s) F" Q( M- E$ x' g( d5 B* G( D+ T7 e6 ?5 ^) R1 W

" d' \4 ]( N4 @: M  u6 r! q% a6 d
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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