Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 ! ^$ ]" E0 R3 @! y2 v% k

8 E4 k7 b3 U; X/ E$ s/ \' j; K
& E; d9 a3 o; zШаг 1: Введение в классы и методы на примере L2j_Mobius
1 R5 w2 R' o; H1 l# [) t+ @8 eС статьёй можно ознакомится в разделе Обучение > Читать" x+ }- D! F$ r/ ]. Y5 i

. A5 l7 `! z) I" }- R# sДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.6 ~: ]5 {. B7 p- Q* C/ I

( C. M2 X, R* r( L; J1 hОбсуждаем:
$ C# U) z: v+ F3 u. W7 i- k  Z
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.+ l. U6 V& [& e7 l
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!1 m1 w; ^, v3 ^; f3 [0 Q' k

7 S' f" G" w  z, D; o

( v( g* S* c; i0 K7 K$ M# |И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!- |" k& }; O+ H7 k0 E
! q" c8 J5 N6 `4 k! x

% m0 R" ^* \( c5 h+ C5 P
% n! \* m" z" i2 _
2 H8 |6 o. r+ ?) f9 B, D- f9 I( g, L0 }+ ~

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
; u# v& a6 ~; b4 W9 `
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17; G2 A& ^; D+ r  ~4 ^
Почему мы используем ключевое слово this для ссылки на п ...

$ ?, D5 s% `3 C2 Q9 @- ?Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.  @# R7 r* S3 ?8 P( ?# Y) H
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.: u$ r2 G  V) i) t
* q. Q+ O! j+ q
Вот пример:
: C$ q$ N5 f2 T; r: a
  1. public class Player {, G3 m5 ]/ E% M3 N( [
  2.     private String name;
    ; n: ?1 C  @8 v% }  N; ?
  3. 3 Q, t! r4 Q) E* K  P/ O% P. C
  4.     // Конструктор5 r3 W( J7 W& ^" z! A
  5.     public Player(String name) {3 I+ W* m, y9 [1 Y7 N
  6.         this.name = name; // Используем this для указания на поле класса) {# w- c8 x; D" r0 K
  7.     }% ?- n; ]$ _4 l+ B
  8. 3 V$ n$ x5 U$ f& @3 _2 [
  9.     // Геттер для имени
    ) k1 {9 p# v" T$ {: G
  10.     public String getName() {
    ' ~- N. X7 K  E; J. b
  11.         return this.name; // Используем this для обращения к полю класса) p" O' g- q- W! q& V
  12.     }2 s/ d, X' F$ Z5 a% f
  13. }
    % n* M3 x5 E. W- P* x' Y5 K6 r" Y
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.. N; _8 D8 Z; M2 ]( q6 ~
8 I- m9 s7 q& k: Q$ n
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    : l; C/ M$ @$ L+ ]' {

, |# |; @0 D) \: K4 ?, k! fПример передачи this:; F; E  V6 D7 k; U5 ^" s& o
  1. public class Game {; _% {/ [* u) F/ j
  2.     public void start(Player player) {
    6 |9 l, R8 O" J
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    3 I. I1 R3 \# @( t6 x7 v
  4.     }1 }1 }* L- L% ^* K& l
  5. }
    ) d% ]2 G" T( K8 }+ @$ D5 r. r
  6. + c1 \/ K8 \0 J
  7. public class Player {9 V% J6 f" p" T# m/ l
  8.     private String name;6 v, w& T1 c: ?- Z& K  |

  9. $ \6 J: W, g4 y; o+ z' h& o
  10.     public Player(String name) {: A: ~8 v6 D  K6 d3 s2 m; J
  11.         this.name = name;
    + x% u  B) ]) y# {) h
  12.     }
    ' m7 Q  ~$ L- R' A

  13. + k  J& {/ p; V, Z( M+ R& T
  14.     public void joinGame(Game game) {, `$ t3 M9 k9 S* x) R1 o0 z6 t
  15.         game.start(this); // Передаем текущий объект Player( @1 B1 z7 @  x2 Y" ^8 V
  16.     }
    - f  Z) j* l7 B$ Y
  17. }( W  w5 h* X0 C
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
) ?: g# L. {- S( c0 B
1 @4 R2 H- F! M5 c0 m
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?2 q3 K9 m2 T4 S: P/ @
3 l! K* x' H3 C+ Y" _
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
' d2 N8 O) d! M* SКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 ' K6 v/ A5 P' W5 v* Y3 K; T# k9 ?" V
Mike123 опубликовал в 2024-10-17 20:050 Y8 v$ \* S1 J. @* z
Добрый день!
! R: D3 ^7 [! E9 t% A& h, d4 ]Как создаются и вызываются методы в Java? Мо ...
( C% Q. _' p% T* }3 K
Привет, Mike 123! ?* D# H* E" h1 S8 M# ]2 `  x
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
$ D4 T' h: l' m. K& y" X" h. l" B; t, P- C
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
. E: x9 C3 `" n" u' k3 Q, _9 o# P
$ U: d" {! [* v# l: b
( l7 Z! F: a5 dКак создаются методы в Java?
" W$ D* c' y+ ?1 h$ m$ h% w& r$ a
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
: b! f4 X0 Q9 Z2 N0 f) G% H' A( u- T1 O/ }
  1. public returnType methodName(parameters) {
    ( Y6 M7 s$ ^/ j8 n* V
  2.     // код метода- u3 Z! U) `7 z. w; n! {: M" w
  3.     return value;
    ' d7 w# i+ ]' L/ g, s# l7 s: r
  4. }
    ( c  |1 `; \/ x! ~3 A& w8 G
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    + h* w6 R) d) M( q  }1 Z

' L* O' i  X& h7 Y8 vТеперь перейдём к примеру./ f% J0 {% v& B6 u2 H" w

5 \; W9 J7 l2 [; p! u. uПример на основе L2J_Mobius с переводомКласс Player.java — создание метода; |: j: a% C  C# R3 c8 w
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    # ~) |& t. L) L9 M5 f9 L
  2.     // Вызов метода атаки NPC
    2 ~0 S4 g- H$ q3 i; o
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    8 v. \3 _4 R8 v: J' \
  4. }' x: X; K2 s. A. D6 d
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
2 p$ H4 Z% K9 \- ^1 J- i
% i' B( Y5 S) Y! V5 O
4 [5 }3 y' e1 p& T6 hКласс Npc.java — вызов метода* u  J+ k4 h8 M+ a

1 A3 v7 D( w1 C% `
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    5 T3 n# l) K6 g- a
  2.     // Логика получения урона NPC/ H  c$ r; O0 p- t9 T' @
  3.     this.health -= damage;  // это.здоровье -= урон;
    $ k& h, ~8 l3 S% {( C
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    ; {4 F, M( g- S" W
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());  N( u9 k0 Q6 {
  6.       b! Y8 e$ W6 I
  7.     // Проверка на смерть NPC
    3 u: N% y* D) S" @
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0). w- T1 J$ G# H; ]
  9.         this.die();  // это.умереть();
    ! |, H( {! }& Q! l; f9 Z
  10.     }2 ]4 _* @" F2 M( k$ F' a% |5 u
  11. }9 ]" S  h; ]) _! C% y2 m2 ^( z
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).8 n& G- C% _5 a2 H
Пример взаимодействия (с переводом)
& Y. C( W; _6 s! G. f0 q* G7 I
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    . e0 l" F$ z7 e& s% G$ J' j5 M
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    0 {# F" \1 c7 U) q; F  b9 s* M9 C8 h
  3. 2 \+ e$ F5 ~" v
  4. // Игрок атакует гоблина
    * W# ]# X  A) L; ]
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    + M) M! l  i) Q! `8 H5 ]
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. ) R2 R- @6 C; h- `$ e; s
& P9 W4 V4 W2 d/ t
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.% ]5 C* D& l9 N& E, w/ j
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
. s1 y, Y2 w7 U" b0 k2 l0 j0 e+ f; t" o7 J& V
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30) q; d! r7 U: O" {, W! l3 C* w
Привет, Астралия! Огромное спасибо за твои разъяснения ...
, n0 ^/ f  ~9 @: O. g
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
6 I  M0 |% C4 F! i2 W1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    8 `8 n$ d; ]4 @9 E& Z6 r
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:5 {) t; W7 W! r, X& S% G; n

/ i; l  ^- E* N
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    . p( L( t  q  r! x( ~
  2.     // Логика взаимодействия игрока с NPC
    7 _( q. w6 I6 z
  3. }5 R4 I- H0 u2 T. I
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:& U5 W/ c5 S/ ?

5 x) \" k! K  {8 A7 d2 |$ v
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)3 L; X& B, |  n) c1 u: c5 G1 B' ?
  2.     // Логика перемещения NPC
    " U3 Q* ?4 w# Y- |$ P7 A  C
  3. }' C1 X' Z$ O- a5 U7 D
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    ! M" l: }4 r" e- ~

2 c5 o, _- g* _
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    * K$ \! m& O$ n, s  ^
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    : ?! Z* Q. u7 `2 g4 I* I
  2.     this.health -= damage;  // NPC теряет здоровье
    ) @$ {4 U- Q" b
  3.    
    " a) A- Z3 ^' ^, J) P) C- t
  4.     if (this.health <= 0) {
    7 W3 g8 h! N( }3 n6 c  `
  5.         die();  // Если здоровье упало до 0, NPC умирает; C$ ?: i/ y1 `5 @) g
  6.     }
    1 k+ T1 S& W% m! q, Z# {& \5 Q( R
  7. }- n, J' l' {5 d1 @
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример& h" |+ ]5 e3 ]. g* \; Y+ a

' T3 x7 g& M' [- Y$ ~! ?6 h9 A
  1. public void die() {  // public void умереть()8 I7 k' K; y7 D+ K1 n" E6 Y
  2.     // Логика смерти NPC- G( M7 m! h! _
  3. }6 }, U  X, h7 }* O
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:2 {8 E6 B$ t4 f
  O( q& v# L/ U' E4 q
  G+ H' f0 y3 t6 k. i
  1. public boolean isDead() {  // public boolean мертв()' Q7 G4 I# D( B3 h
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    . V* f. U; V  T! h5 M- c0 F
  3. }9 t$ b/ X/ F1 N2 R6 j
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    0 N% |. W7 r  S% n

- I+ j  A" @$ Z5 Z) i. ~
  1. public void heal(int amount) {  // public void вылечить(int количество)$ [3 S7 O, k2 |  Z) j
  2.     this.health += amount;  // Увеличиваем здоровье
    8 |2 \+ k  p$ y: ]! ~. R/ b
  3.    
    5 X: {0 _2 {; F% r8 m' A4 Z% l2 b
  4.     if (this.health > this.maxHealth) {) Y# g; T, p% Z, O$ q* u
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    1 I2 |# h* ~  ^8 M& i: m, ~/ y  a
  6.     }
      t; x5 }8 R1 y: \4 K
  7. }# T# w' ]9 M5 M$ c) z5 w4 f
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    , `3 F0 \. z* f+ u

9 j1 n1 D$ S7 B1 @3 f) p4 C
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    + r/ N; ^+ B  X1 x  P% \2 @
  2.     // Логика применения скилла NPC% G! N- v5 Z7 ~: b
  3. }0 w( A" C! x/ g
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    * u, m  G9 K+ v* N9 \
& z- E+ b1 H- ^+ I' q" [& E6 o4 X) e
  1. % {& o; t& R% E, N) \3 W
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    & l) O0 \: }) n2 V# ]% A
  3.     // Логика взаимодействия с NPC5 l+ [" T6 F$ O/ `$ h5 R
  4. }; c# J$ j% T" v7 a, m: J: f' o6 v0 o
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    - _5 \8 H0 ]4 Z5 z0 K) u6 Y- R

+ R6 \8 H0 s# A) u1 _5 s
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    0 m! I( D& V& i+ O
  2.     // Логика открытия окна диалога
    * T( @, @. D  M. l! s* D
  3. }' T5 m" T3 \5 d' g
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.+ X4 r% i, F4 j+ \0 c6 l2 V/ f
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!, P; }& d# `1 Y3 y
  v8 F) B, r1 H) ^$ n/ N2 `

2 j/ x9 c7 t5 x7 m; E+ ]7 t8 ]7 h$ X

) G: K/ X, D! R
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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