Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
" D5 B& p9 S* j  Y1 u
2 d! ^5 m4 I" h" V$ j+ e4 q$ {
3 N4 ^8 `: Z6 M8 F# IШаг 1: Введение в классы и методы на примере L2j_Mobius
$ i4 M$ u% p( }' gС статьёй можно ознакомится в разделе Обучение > Читать5 c! p( |0 S# J3 r
8 ?1 W, \. x8 v6 N- M8 N/ ?
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.% p- p1 n/ x6 [$ d, v

' }7 K+ r7 ^6 f- o/ K  }9 J- j3 nОбсуждаем:
5 \; x8 h$ O. U+ F6 Y8 Z) T
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.; r$ W/ U3 h* ]+ J1 N5 \! K& U0 n+ {
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
2 d* y" H: y" K3 r" }8 `
: ^' P' [/ z( p% m8 w' P! H6 q  s
/ @5 G  w$ A( h4 T7 D
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
7 A  J9 L  ?" B, }
# P2 j1 b8 W+ h2 l
0 p. w) |7 g% V* A5 J5 I5 D! Q4 [3 c) i; d# E& n5 N
: q' J* G/ `( Z- k/ _
$ ~  |+ t: v" a9 h2 _( ^

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
4 w: h% \0 o8 d5 J, O* Z3 _
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
$ E: l+ d( ~2 H" [9 X1 LПочему мы используем ключевое слово this для ссылки на п ...
! C+ B6 \8 A* k# _/ n# a, }
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
& z. \# A/ ~/ L1 vПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.4 r4 M+ ^; j7 z

1 D6 J& S6 C: r- s" JВот пример:
9 [7 _. Q3 d7 N/ G  \. R2 u6 q9 i
  1. public class Player {- H" L/ Q8 W+ A# i: x/ j
  2.     private String name;
    ' v* E5 {9 R2 P8 |2 `
  3. 9 q3 R" b0 y3 L/ e( c
  4.     // Конструктор
    ) T0 {3 ?& _# R+ A
  5.     public Player(String name) {
    5 R, a: F* m& b/ S0 c
  6.         this.name = name; // Используем this для указания на поле класса
    8 f7 W0 J. u' y
  7.     }+ T6 \2 u3 P! T) O) r

  8. ) l" \6 v! R/ x0 W
  9.     // Геттер для имени* O9 ^5 M& M2 o; @8 Z& m
  10.     public String getName() {
    ' `' X1 `5 {) o3 Q3 c* O
  11.         return this.name; // Используем this для обращения к полю класса6 V* q! f; i- r8 G) O
  12.     }
    2 V8 F1 F' z8 D8 ~
  13. }5 v$ n" H" \9 Y5 H2 g0 n" u
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.5 [5 {! y/ ~$ `' }- W4 b
# e. e4 P# r0 H. E) e; }! [+ Y. ]
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    4 N6 x6 t# F& Y

: X5 A: x3 Q" n9 EПример передачи this:
( N, H5 C# v+ h. w
  1. public class Game {/ G# ^" d& r( K' C" H- ~9 g
  2.     public void start(Player player) {% r2 V5 |) J- O9 i" Y0 \
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    " l2 }" Z+ l+ u9 V  @
  4.     }$ R! |3 ^0 U% R) I" Y7 F5 |+ p1 N
  5. }7 ^" a3 r3 A1 D

  6. + a( H( ~5 Q1 f4 S6 \- {
  7. public class Player {+ z+ U* T2 L7 a5 Q
  8.     private String name;
    4 z4 W2 Q7 i# o7 I# M: ?+ `

  9. 7 P) |& U0 L, T
  10.     public Player(String name) {
    ! i0 ~3 y) c7 G' B( ?
  11.         this.name = name;3 M% [) D. E5 A
  12.     }
    ) c4 l3 F# l/ Q2 o: a7 s$ Q

  13. 3 ~# E+ G& q; l) i  a
  14.     public void joinGame(Game game) {0 ?4 E- {! Z& |& D$ H# X+ u) v
  15.         game.start(this); // Передаем текущий объект Player. X5 {, M" O; E0 P7 E1 {/ y
  16.     }: J1 b. O+ F! H
  17. }/ z9 n/ R% X( z* }5 C' d
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
' E0 Q: i0 [7 A, G2 Y9 Y# K
4 ]& B. F/ W8 ~$ C
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
' C: \4 g% [, t/ _  s) _0 x& L1 ^) b+ ^( d3 u4 b
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! ' Z5 n; C+ w) W8 g! p% o+ O
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 2 |& y. N, C0 L7 p5 }* R* m
Mike123 опубликовал в 2024-10-17 20:05# P* E  [+ L0 D. `8 k1 k
Добрый день! : p* W" m8 |- ^$ Z/ H
Как создаются и вызываются методы в Java? Мо ...

" p& Y5 H9 i( D# SПривет, Mike 123! ?6 N$ R/ V3 v# j5 w$ M
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.* \* \2 ^) a/ A7 D, n9 A* L
* ~8 Z4 q0 o$ W6 n+ Y- H- E
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.* r7 M: T( h# ^/ b4 _2 {# w

( F2 b/ G; v4 Q# k
3 ?0 I+ o3 ^, U) \% F  {0 Q, NКак создаются методы в Java?2 `* a' e  ^! \/ c2 J; X/ v+ g

9 X- L. k; i, _% eМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
- u0 ]5 D# u: g/ T8 U+ W, D5 x; j7 U7 N# ]& r" M7 _' p" @
  1. public returnType methodName(parameters) {+ h: W% `. ~2 f: Z6 ~
  2.     // код метода' ]3 R$ {5 W$ ~1 `* @2 E
  3.     return value;; @- x1 V4 x, }. o! ?: y
  4. }
    ' Y  x. Y) }. S/ P3 O; N
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).' h5 x! `: I8 p4 f) _

" o4 Q5 }* q/ Y' y: KТеперь перейдём к примеру.
& b4 o2 w! T% @: n: Y+ p9 ~
/ }1 ?, n) `2 C7 s% uПример на основе L2J_Mobius с переводомКласс Player.java — создание метода8 p' j" c6 i8 @2 ?% D- [
  1. public void attack(Npc target) {  // public void атака(Npc цель)$ Q  {  N; B( r* m
  2.     // Вызов метода атаки NPC
    $ R! t$ Z& f5 @$ \- o1 N. a. P0 l8 T
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());' i( o9 h0 V8 ?3 \. b+ t& V+ O
  4. }
    $ [" K4 m8 d  r) @/ r# N0 s
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).' |* [$ e2 E7 u. ?" W
# v1 F0 l5 Y9 ~7 ?8 B7 m
/ ?! E: R  v, M! P9 M2 f
Класс Npc.java — вызов метода
3 F( l" V. \2 U# g, n; q/ A8 T' o3 K
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    ; Y& m7 x  B0 m* V9 N
  2.     // Логика получения урона NPC- h% X9 H( n) r$ `- E! P& e$ `
  3.     this.health -= damage;  // это.здоровье -= урон;6 c* C3 ~+ K) l+ ^, t- u( [
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    ) f) O% S9 Y. N: }
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    ) J2 M% I: x0 \4 X9 M
  6.     1 g* P2 t* b. w
  7.     // Проверка на смерть NPC
    1 E9 @! {6 j" y2 q! ]7 k
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    8 p6 s1 t) |, N9 E; }/ S
  9.         this.die();  // это.умереть();
    . K9 v, D" e- {7 P
  10.     }
    2 y; W+ q! z+ x+ A1 `  a9 [
  11. }( h1 V( p2 \2 V% o' T
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    * @' ^. b7 s' D) j* y8 _
Пример взаимодействия (с переводом)8 L/ T4 X4 s( q7 E, x
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");( y/ v% R8 U# ]7 ^# X" M. b! H& d
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    ( u3 T0 ]4 D9 M5 Z# _, f" a9 o

  3. & ~: [3 |# F  @
  4. // Игрок атакует гоблина8 g, A) W) v  ?% k2 `1 k
  5. player.attack(goblin);  // игрок.атаковать(гоблин);- Z0 S- g$ Y$ j1 v5 o* Z3 C, c4 b
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 3 l" Z1 p# H& K$ I& @( n  l

7 i+ h' ^: f7 n3 D! C7 a
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.7 _8 s  l0 Z1 y6 M( y+ z
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!4 y0 a$ r! a# n; q5 E
3 l. K- n, J) B
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30. a- t/ ?8 ?( }, G
Привет, Астралия! Огромное спасибо за твои разъяснения ...
+ y2 U& P7 U$ \' E  l9 I/ j
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
+ G% a6 I5 ]- A4 \8 D1 R, i: [1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    , J5 g# D7 O4 O  g, R" A
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    5 \# G" E  d, \

+ D3 [$ V1 n- _
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    $ `! q% n6 M; X& }0 U, i
  2.     // Логика взаимодействия игрока с NPC
    6 Q" Y8 f" k6 I9 V" g" D8 U
  3. }: V( l7 V. E5 n! J9 }! \) ~3 R
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    " Y, h7 Z* z2 R  ^' J, c/ T8 ~; t0 d. R
9 F5 w- w, u+ Y: G+ H+ y! e9 E
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    ; b/ O8 `: K4 p6 z% E
  2.     // Логика перемещения NPC8 q- _& k" b+ p6 |# f
  3. }
    9 A$ ?' }$ L" n5 j+ [6 I6 c
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:( x: E8 I. o- K* F% [0 ?0 R, \& J

: {: X5 v2 V( `# N+ e+ A! e, E) A
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример1 y1 p4 f! c9 F1 R4 i! z
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    ) z4 ^# H2 F* V0 k( P! `
  2.     this.health -= damage;  // NPC теряет здоровье% y9 y7 G1 q" ^3 n
  3.    
    ; S9 ^' W$ I  P8 l
  4.     if (this.health <= 0) {
    3 ^# K3 z( \2 P- {/ M2 R
  5.         die();  // Если здоровье упало до 0, NPC умирает
    0 z! y  H/ `  f0 _4 J, H/ G
  6.     }9 s4 m$ y8 P" b6 z' u7 l! D
  7. }
    2 ?) ^/ E, d0 ^: w5 P& ?
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример6 D8 w. ^/ }- I8 V  L+ Y6 k8 x
+ o  Z) J5 w& S
  1. public void die() {  // public void умереть()( x; C2 Z  i) G; X/ M0 i+ Z; T5 G
  2.     // Логика смерти NPC
    + U7 V$ o4 k. U. r6 {( S
  3. }
    7 A$ }0 n) c1 t9 }
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    . `' S) S) k4 V0 h( `, ]" F: s8 f
0 P- `1 j5 L- T' Q- Q. G

4 `4 ?8 w0 I& h  L
  1. public boolean isDead() {  // public boolean мертв()+ H7 b8 ], `# x4 I
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    " w! G2 V1 \0 G4 i7 ^* I
  3. }  @, C1 P7 v2 y& j
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример! l( s: I7 q' z% ?1 ?3 X
  A% g. I& |9 d* f. y0 h& f
  1. public void heal(int amount) {  // public void вылечить(int количество)& E* a; j4 h" o+ o* p1 \
  2.     this.health += amount;  // Увеличиваем здоровье
    & l8 y8 O) J% ^# o5 y
  3.    
    6 B1 D& j0 N6 l' ~' m
  4.     if (this.health > this.maxHealth) {& Q2 A5 R( S) {
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    6 T5 t2 o1 N8 H1 D4 b
  6.     }0 j* {, t' ~* w3 U0 p1 I1 ]) T
  7. }
    8 \, Z- J  _! J* P1 k) T" V/ s
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:0 L% a. q) f& a* X( N
, s  h9 O% Z9 R
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    1 [* S/ j7 T: f/ s" t. w  i
  2.     // Логика применения скилла NPC) O& V8 @& W7 D6 b* r2 u) s8 g) i9 L5 m
  3. }
    4 f6 u) @5 _0 G4 s5 U
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:5 N9 x& [9 K6 L5 L( W" D
- Q  @0 S) q, ~  B! h0 J! _- H# e

  1. # F: P5 L) B$ W- r6 w5 Z
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    1 X6 n- G0 t" y
  3.     // Логика взаимодействия с NPC
    3 y' F! L! {( t( f0 }2 M
  4. }
    7 n( [5 q7 \% v
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    ; |3 z: C2 M8 M: P2 r
  f, f! M- H' `/ w. s" ~) L  f
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)0 B, V4 ~2 B6 ^5 M9 c' `% B+ B) j
  2.     // Логика открытия окна диалога" L+ w# Z5 g7 L& n" y$ g  d
  3. }
    9 ]% k' J9 K8 N3 ]
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
0 E" J' k+ B/ G3 Z3 ^Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
8 r9 _+ _8 |( _) u& `
1 d+ u+ r# H! o. }+ T' S! A$ @# g! X6 Y

% X- _  F& R& N9 A! k* E3 v3 R6 W0 v8 e7 y& q
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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