Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 9 z5 J9 O& f: \1 S* U$ B

, _' z# P2 B) d8 k& t5 B$ F1 S$ R( V" @+ c& P* ]
Шаг 1: Введение в классы и методы на примере L2j_Mobius- p, ?! ~7 N9 J& i! ]6 n( B7 O* x
С статьёй можно ознакомится в разделе Обучение > Читать  Z; X$ X! C4 G

( w* v8 d/ H1 FДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.- X: B+ B4 c3 U/ \+ Z

, H3 P0 ?% V( t7 MОбсуждаем:
$ q# S. z0 \* X$ n2 `6 g
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.3 D9 W" f6 Y: W( w7 }8 }4 J4 ^
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!* X. u) t" ^1 f9 m. a& M* I: K

' k4 P9 c; y$ q3 q' I5 L

% n# Y" T- n, K; yИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
+ C! `/ ~0 x0 |9 j% P5 b9 I  [7 K4 b0 q

8 `8 ]" b+ v1 _/ W  \& \5 z+ q% H+ p

* Y( m- [  w6 m5 ^3 N) I( i
8 ~4 Y1 u* M3 F! a

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
" I& I/ E! S! q. e+ Z0 @
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17$ Y/ p% r3 z* L2 F3 g( z% Y- G: K
Почему мы используем ключевое слово this для ссылки на п ...
9 L' Q# e2 I3 G% Z# a
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.6 X$ A" Q: {' S6 v& |# m
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
5 @( Y3 H$ }" U3 e6 @8 a8 c) w% }6 f: \* }: u
Вот пример:/ B4 _3 L9 ^0 k$ P7 c
  1. public class Player {
    ( ]: m3 U7 l# `+ H; ~5 M6 R  O& D
  2.     private String name;
    . G6 e+ ^1 m3 _, l* H4 {0 O* T
  3. ! @  a3 ]) |4 |9 L: X" Q
  4.     // Конструктор1 j. L' }6 q" e+ r) _6 @
  5.     public Player(String name) {
    + B4 r* h# [, L) l- J6 V
  6.         this.name = name; // Используем this для указания на поле класса( g; A+ @3 g; D9 h8 F) M( T
  7.     }* c/ `5 K8 G  l  b) h

  8. + K6 t8 U$ l" G0 l' n1 \
  9.     // Геттер для имени; f; \: J  S; P7 E) E6 r
  10.     public String getName() {
    / I9 r  r: t$ S; Y" [6 ~# d
  11.         return this.name; // Используем this для обращения к полю класса- Q8 C; w$ N1 x$ u6 L" l  c
  12.     }9 k/ P" e5 d3 \4 @
  13. }6 ^; a' _) i8 w
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
) f' f! D+ j3 ^/ E) B
0 `  t3 g* T* F9 h' BКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.3 W/ F5 [. ], Z3 f  U
) B( i* p+ }. Y/ T
Пример передачи this:) L9 y! @  {( v: s% R$ R
  1. public class Game {
    + J  z- T* Z6 d
  2.     public void start(Player player) {
    3 f9 b' v5 B# s& O' T( Y& y. T
  3.         System.out.println("Игра началась с игроком: " + player.getName());% L+ \$ j. T# x8 k) u6 |
  4.     }  e8 A$ H0 G4 e4 U
  5. }. L2 U( W5 T8 M7 e

  6. ( ^0 _- m( ], o' P4 }8 t. U6 g4 z/ }
  7. public class Player {
    / @$ ?' L9 e  r( w
  8.     private String name;
    6 O/ c" Q0 m5 @" \
  9. 1 _' B6 o( j, f4 \8 w
  10.     public Player(String name) {
    ! b1 B$ i3 M9 z$ d
  11.         this.name = name;
    7 f+ P' t4 N& X) x9 a! h/ E* A
  12.     }
    - |- q4 c2 C: c( r
  13. ) ]3 B$ ?2 U& e2 A# m$ `
  14.     public void joinGame(Game game) {! @6 m4 U# k; j$ W
  15.         game.start(this); // Передаем текущий объект Player
    ; ?7 y' u3 b& V
  16.     }* P: ~2 u4 Q6 w+ H- `" e- B3 s
  17. }5 E9 ]2 p( s4 ~* E9 R+ K
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
' @9 _6 ~3 B+ c

2 N3 k1 c6 F% o# rПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
7 q3 ]; I- ?% r8 K$ b9 a8 g* l) z3 r- C# N
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! , t+ i, t# `: a  H1 w) j
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
) ~$ [. k8 }+ y; C
Mike123 опубликовал в 2024-10-17 20:05
/ U% o+ W, r; ~5 D, eДобрый день!
$ i! u5 o3 c) X% y. m0 w! xКак создаются и вызываются методы в Java? Мо ...
2 z% p9 w3 ~! w) y$ j  N
Привет, Mike 123! ?9 k, ^- p" C. y0 }  P
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.* l' C2 R3 d% @. _7 b
/ n$ \" L" H6 f5 q5 o/ g
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
3 G0 ?5 F; n) N( f3 F7 B7 W( q8 ^5 w6 Y* p

' C+ @8 V4 V* f; h7 @: J1 ]Как создаются методы в Java?/ e' A4 `9 Y5 i/ }8 F( t7 `
1 Q( U0 R6 C( r9 b- l% |( R
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
; M, P7 l# V9 b! K7 p
: y/ C, b1 e" O; I5 b
  1. public returnType methodName(parameters) {
    3 Y. M& b7 |: x' }( n6 }% d, N
  2.     // код метода
    1 {9 w. j9 ~9 ]4 ?/ p
  3.     return value;
    1 Q% {7 t  `: S
  4. }% r1 `, o4 z1 ~( X+ G5 L6 d# J
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).) ]) f% @# {3 h5 P9 s0 O

9 S  b# Z3 L( u( Q3 K  e& a2 _Теперь перейдём к примеру.
3 }2 w4 u- W& P, @# ]: C5 H5 l4 _! f+ t# O( o
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода5 |: h7 w6 m, s0 i, e" v* J( B
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    & E% i1 H. x: Y7 @2 ?
  2.     // Вызов метода атаки NPC
    * P4 p; Q2 u* C+ u1 v
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());2 V0 m7 U, w& e% f8 s$ r/ z0 c8 E
  4. }
    9 M' L1 p4 i, r% z& \
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).! S- k3 \5 S; J+ f" ^, a' \

" \" `0 h1 b/ G' ^: `1 p6 T" s* V- B
) k) }8 S1 K4 u: SКласс Npc.java — вызов метода
# \5 [8 ?1 D5 A6 ~0 x8 E  |. W/ V/ M  _8 o2 Q$ ^7 r: H
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    4 ^0 ?- D9 X0 l! p  K
  2.     // Логика получения урона NPC
    # l0 A) R1 ^1 }6 j, y$ a
  3.     this.health -= damage;  // это.здоровье -= урон;6 m0 p* ?$ m* S2 T# w( L) u' _
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    & [. o! i. u' x$ K& Z
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    0 s& ?1 N8 L& k# f$ S6 d- r
  6.     , M& Z+ H" h7 M5 `9 V7 `8 ?
  7.     // Проверка на смерть NPC) [8 I$ k5 ?, s
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    * [! A3 ]$ }" j, R
  9.         this.die();  // это.умереть();0 F8 _+ L/ S6 m+ v* o  W
  10.     }
    " j' a# K8 Q' V' r' p  X' W( O
  11. }
    8 \- C+ U1 y1 t( r& Y9 b
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    $ Q# t" M/ e6 n9 n, R
Пример взаимодействия (с переводом)
  E3 w. x' K8 N; D0 t$ Q* N
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");" r2 _; h2 c4 y4 u
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    0 u' M; B2 M" G6 b) d' @
  3. ; C1 C. K& \4 i% h2 G( T
  4. // Игрок атакует гоблина5 d5 u) G1 K4 m, T% G
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    : a. ^$ E8 P) U8 s+ Y0 X7 |
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. $ j  \) q2 |0 z2 o
( w8 T9 N. `- Q3 Z3 `7 I: g
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
- t, z- _- Q3 h+ B' IУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!' ]  s8 X" U# F- E! s

$ R4 G5 r( K' \& \
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
. B7 _( v; ]1 T( r0 w$ \Привет, Астралия! Огромное спасибо за твои разъяснения ...

$ Z) J& w% z* m6 b7 A+ {& y; UОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
; _. e/ L4 Q( M; A/ X1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример  F8 V' u3 C. {7 Y
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    , k/ i% x9 y/ R1 p1 i

6 D" i: h" F' c- z
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)/ }( T& m! [, J; O
  2.     // Логика взаимодействия игрока с NPC" z# R2 r  B9 J* j7 g; k
  3. }
    1 e8 I- Q2 p  e: S# ~
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:- o$ W: F1 p: S3 F

$ A! ~# x$ O  p& O
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    & O. Y4 H4 q" G+ Y* N$ U
  2.     // Логика перемещения NPC5 v0 h! H% `$ A# t! x
  3. }
    " S0 C2 p# H7 Y5 Q( M: s: ^
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    * S0 L3 ?- n0 F% i
3 p( f! P- Y; B! ~0 D
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    , P. i/ A$ C7 v. J- s, z6 X) L
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)6 f) I% w3 i* C+ i6 a( W
  2.     this.health -= damage;  // NPC теряет здоровье
    ( k) k: w0 r0 U, v! H6 A
  3.     4 x. J+ t$ K5 [* J9 N! Z# u
  4.     if (this.health <= 0) {
    - q5 S& B) z/ ]. h& p+ X$ M* b
  5.         die();  // Если здоровье упало до 0, NPC умирает
    ' J3 T$ W) N, O+ ?  i
  6.     }2 v* H0 i! u2 ]  E# d+ \
  7. }: R0 T! `; U& }( M3 W+ T9 M
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    3 S8 v) n$ e" q2 n) @/ X
, x/ m1 U) Z- ^5 m
  1. public void die() {  // public void умереть()
    * T0 X* @. P* l! n4 g+ k
  2.     // Логика смерти NPC8 C% h+ ]5 ~0 F, A5 ]( v
  3. }  `8 Z8 u! {3 M( A2 y% V; {& G
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    9 ?7 S7 _/ [3 z( Z6 \* R: |
4 n) K2 ?( E" ^! F' I& Z5 T

$ h: `- }9 ?5 H) n$ r! {
  1. public boolean isDead() {  // public boolean мертв()
    / J8 U. `$ f* R  q$ c
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    * T$ E  }( z5 T
  3. }
    : E8 J  w) J" E; n
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    9 m8 [& F0 _4 _9 k; v, E' z
5 H- E- t* z: p; w" f2 c6 o! U
  1. public void heal(int amount) {  // public void вылечить(int количество)
    3 L! N2 w9 {" c2 U; L2 O- F5 V
  2.     this.health += amount;  // Увеличиваем здоровье6 X) o3 ^9 N, T' w; T4 F
  3.     + j8 u1 i/ [; @
  4.     if (this.health > this.maxHealth) {" X; G4 V; l) V2 l( V* J3 d9 G+ D" K
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального  L0 T3 D% y1 p; p1 p. a' s6 E% l/ n
  6.     }  Y/ @3 M- J/ f# g# y
  7. }  P8 x( t! U. m( ^/ X
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:( ]& [& H4 B: s0 B

$ ]1 h/ e, U% r, O7 F) @. a- M
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    $ y; B0 k% C8 U4 {, B
  2.     // Логика применения скилла NPC4 E! ^9 J1 Z3 I/ t5 ^( v% k* }
  3. }+ q5 ~6 I$ a* i2 s2 ^9 Y
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:" c& {  c9 P3 h( R  v# t

7 o) J8 ?/ X: _4 h. i

  1. 4 g; E& d9 }$ t% n/ b" c. L. T
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    1 k2 x! Y: `4 U* X( E0 ?5 P; l" y0 Y
  3.     // Логика взаимодействия с NPC
    9 W9 A( ^8 }7 j6 F% L* o
  4. }
    + y- y/ e8 \& Q+ Y
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    ) z  y; J( ~7 f" o7 n0 q* f- _& f
8 m5 ^2 j' u6 B
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)1 w& }* |+ g, k" `7 }2 |0 x
  2.     // Логика открытия окна диалога) O2 h* k: Q& |; \% L- {0 n
  3. }8 V5 [) n+ Z8 g
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.5 b0 o7 U, i1 N" a$ [
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!: U/ J! o# X0 t: d- k& s" c

% c, \. S% u! d) u. w
2 Z; a* o4 Q2 T/ q
! Q/ \0 U% |, i& n
3 B/ |% l. v" w% l) `- }' K7 M; e
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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