Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
1 J5 W: m8 ?3 b: Q# x2 ^6 c) ?5 S' d7 G: ^. Y

$ f8 L" b9 J$ u5 P4 x! @Шаг 1: Введение в классы и методы на примере L2j_Mobius
1 C- I& s+ X9 Q0 Q( j6 D1 rС статьёй можно ознакомится в разделе Обучение > Читать
6 ]" t) J# X5 R4 k' |! s8 {: J4 m
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
5 k1 F1 {4 A/ B) I2 ~% F. \) [* t9 U* f7 {
Обсуждаем:
- ?; N8 E& m0 v; P# m1 ]# y. n
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius." l  W" i  b6 X' [
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
6 f& g/ X4 E7 E6 t# r+ r8 l
4 U/ S4 R3 `+ O: v6 \
4 [9 O% F+ q+ K( w" J2 B6 W& K$ W! ]( {
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!& W1 }2 X# B2 k! i# O" l0 J

8 w1 [& V& f6 j2 r
* D2 A0 t9 \3 l: Y! S& D' L5 F2 d. R$ s5 {. h

/ M& C: e# A8 |% K; n# t" u
/ P) r9 a/ @: L6 l0 N5 ^9 D

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
+ P, H: |" L% m# @
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
  }! R: W! M4 |$ h; L( t5 SПочему мы используем ключевое слово this для ссылки на п ...
" M0 d3 M. _" k) ]  x0 G0 t
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
: f% }2 d4 f' n" x) p0 n) X1 _Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса." L; X2 ^, ~: D& d  q, X

& _; f+ Q+ ]* H/ }Вот пример:
8 B; G1 w/ f) ?5 L0 v0 ?- o1 \
  1. public class Player {5 S: a; G8 z( C8 k
  2.     private String name;
    7 k% m! S: a- [* p& `- a
  3. 4 J% s# U) j! n; a$ J- S
  4.     // Конструктор
    " ^- Q, d9 U( K
  5.     public Player(String name) {) z+ `) {& A3 E6 [
  6.         this.name = name; // Используем this для указания на поле класса
    ) N8 B* {; C4 p/ Q) Y
  7.     }
    7 S5 O% a$ b; _5 e( T; Y
  8. 4 ]( G6 z4 ~6 q: I6 e; W* @
  9.     // Геттер для имени4 {) |) w3 h. N4 b" c) W
  10.     public String getName() {
    ) I. \: h7 i: L; z( }4 ]2 [# e
  11.         return this.name; // Используем this для обращения к полю класса
    " ]# l8 Y; ]0 D" }! f
  12.     }3 ]8 J/ {+ s( A! [
  13. }
    ' q5 ^* ?' w. q& Q0 n# p
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.# t% q$ l0 d" y) {7 b. x' U2 V+ l
7 q4 D9 d3 |" }8 v
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.9 J4 h4 A) _6 K3 n

8 K( t& H! g1 V7 s4 N1 H4 qПример передачи this:
+ @! I2 ^3 z. X) M6 v+ p
  1. public class Game {
    + B# ~7 p- N/ p  A7 i
  2.     public void start(Player player) {
    ( g. \/ V2 \9 W; Y$ q
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    ) t4 }! g) }. N5 y
  4.     }
    : x1 E0 q+ W. S7 O% P
  5. }! H0 C6 b1 [5 g9 ~( J
  6. 8 A" U& a0 @- r0 }  K; f; q
  7. public class Player {
    1 c$ [$ z& i8 x; L, L
  8.     private String name;' ^! t( D, h+ w/ \# y
  9. ( N7 J0 j& |. r  f
  10.     public Player(String name) {
    7 a7 _- {! f" u% C0 U  i0 m  W
  11.         this.name = name;
    5 W$ Z3 L$ E- T) }% S
  12.     }( M7 d  I# T' d

  13. , R, }" Z' A  ~  S
  14.     public void joinGame(Game game) {
    " ?& V/ _1 @; O$ S. X' v, n1 R9 F
  15.         game.start(this); // Передаем текущий объект Player
    ! q8 T+ t; X$ ~3 c
  16.     }
    ! G* ]- c; k; w& j
  17. }
    * F7 |- n# @! L& k+ C2 |1 A  i
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
3 e2 H2 B! d4 P: J

/ N& u$ k% f5 ^5 yПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
5 n  o8 _) S: ]* C) l
% A9 H0 Q# I9 c
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
, X- l. N0 G! o( \$ p: OКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 # @4 Q" M; V* J8 Z5 u4 B! Z7 A' W3 z5 Q2 l
Mike123 опубликовал в 2024-10-17 20:05
; g9 B$ w9 _2 g' D" @Добрый день!
& t* p' W" ]" R- s. N. ~" CКак создаются и вызываются методы в Java? Мо ...
, b5 G" t/ X/ Y2 h0 e# |
Привет, Mike 123! ?6 n- W' z' L8 G! M: o
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
" _" m6 ~8 T( x
3 _2 b1 r% o; u9 F  E) g# GДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.4 q, c0 e( U8 d. B: i
2 W  ]' f& H) P
* g2 q! N3 {3 S7 {, P8 f' I
Как создаются методы в Java?0 n( c2 a! Z8 k4 h  E

6 e3 i, i2 R# l% W% \0 JМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
* s6 M$ B- g" U
' N- h- `# o9 r' n# f
  1. public returnType methodName(parameters) {7 {1 P% G& ]# t  @( N6 \/ ^! e
  2.     // код метода7 ]6 V4 {- Y) v+ P
  3.     return value;
    ' |2 \0 }  }; E- u
  4. }
    ; m5 y' F' C: v7 N6 G  r
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).4 ?; J! C1 g) ?4 q0 q

; \3 U8 c8 F' `) r/ ]+ aТеперь перейдём к примеру.
& B; E+ \' `0 C0 A5 Y: c' G. ]& p9 A, s
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода% \) s# ^6 k' G4 {  q0 B% W
  1. public void attack(Npc target) {  // public void атака(Npc цель)$ K* a+ `( t" ?0 Q- [9 y
  2.     // Вызов метода атаки NPC/ }, [9 d, v6 y! Z& k6 B
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    1 d  u7 O' R" U( ]" J& E6 C
  4. }
    # ^* b7 X; Y0 W7 X# R2 M! T5 E
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).8 o' t4 H9 N9 c, r- [1 o2 X, D5 A# x

* I' ^7 f  R9 c
9 s. v1 q' a- D  nКласс Npc.java — вызов метода; B, B5 C  P) l2 a( \6 w
5 z2 {! W! y' ?, Q9 x8 t3 N
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    ' @4 a* O2 P$ ~: j# v- w% G
  2.     // Логика получения урона NPC, c: i* B3 x( H; ~3 r- k  k
  3.     this.health -= damage;  // это.здоровье -= урон;
    ( n0 Y2 j; F" r  p3 S
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  ! ^4 W- S9 P9 }
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    ) e2 N6 z' Y* b% o
  6.    
    $ A/ Y: ^7 A7 d2 |) v# N! `7 m- g
  7.     // Проверка на смерть NPC
    4 O; {4 r* ?4 M% Y9 P
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    8 e0 S4 M3 o0 z5 g9 j" T
  9.         this.die();  // это.умереть();
    4 C9 p3 I3 Y% S2 R
  10.     }" R( R+ _# J- ^2 g
  11. }: w; r: Y- k% }( r% T+ f2 ^
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).! @3 g* ~) b0 L7 Y$ ?, u& D9 }
Пример взаимодействия (с переводом)! S% Q6 A% ^$ j1 F
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    5 m" J3 ^/ E( E5 y" {
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    - M$ D& I4 G' R" |

  3. / M8 E0 ~$ z3 d: T9 E5 j- y
  4. // Игрок атакует гоблина
    8 W3 a* e' E0 g
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    4 O( v1 t( A" `) O0 N) ?/ c% A6 [- x7 C" c
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
& s( H) M# z  W" K; ^. R% V
% q8 G' J+ c$ j4 I( u
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
5 o) l6 j. @! dУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!9 C5 g" }$ i/ ^  x/ [& ~  C+ S) ?( f, S
1 w# |& M/ @9 D0 T( R
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:305 g8 _! N7 u" s) u/ l( G. ~
Привет, Астралия! Огромное спасибо за твои разъяснения ...
7 t9 B( t$ _; c' v& B7 g6 V
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
  Y1 Y, p. |$ T+ B1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример. Q3 F' l% p: _6 i- [
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:( W, n) Y2 }3 c
. \! Z" c- O5 ]7 U0 f  G
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)+ ]7 F  b8 C0 E3 H3 t1 k
  2.     // Логика взаимодействия игрока с NPC1 d5 G+ s" v+ J8 V
  3. }* q* N! f1 b9 z: f/ d
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    1 t# J: h1 J: h( u6 I2 u9 X" D$ X

" }" v: N6 d7 _4 b( Y
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z). d* M- y: Y3 w9 W! K1 \. d; ]
  2.     // Логика перемещения NPC
    5 l1 U+ q+ C- {$ ^
  3. }
    - {, C! Z1 S" _9 @( _, ~
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:+ P6 U4 w. R8 {+ R$ s
+ S, Q  V2 P8 x& n; F- n
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример: b3 \; H; g# _0 A% F( b
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    3 N, A! k9 f$ K4 O4 b$ y6 {
  2.     this.health -= damage;  // NPC теряет здоровье7 L1 o3 Z/ t+ {; s' C$ Z
  3.    
    # V. J/ H3 ?- m5 l
  4.     if (this.health <= 0) {
    5 `7 E, Q' K1 f, E9 l
  5.         die();  // Если здоровье упало до 0, NPC умирает
    6 e3 X7 m8 i9 J; ]# X! q  N# I
  6.     }
    . o- ?4 B& z4 L0 S
  7. }
    3 K1 J; \4 C9 i' y# J- i
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример/ k; Q, F$ [% g/ j1 I3 @% Y

- a, D6 w9 z$ f/ {( y( }
  1. public void die() {  // public void умереть()% I1 W! q4 S& j' q) p" \% \: z
  2.     // Логика смерти NPC
    . t' x0 S' t, w9 y% c, a, ?% ?
  3. }
    : l# q7 u- O3 V0 F2 P, {
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
      v% O+ e" B9 N6 U3 ^
# O. _. n$ p+ [$ \5 P
; l5 o1 T& K& j# M" o
  1. public boolean isDead() {  // public boolean мертв()
    2 i+ p$ E2 V6 w
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    6 f: `, j9 O( b$ Y" G! `  a2 W* ^4 Q
  3. }+ f# k5 v- ^& ?$ l# U
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    9 a9 B. R; U; y
( F2 V4 r0 i+ m& C0 _2 K
  1. public void heal(int amount) {  // public void вылечить(int количество)
    8 v% x( u! q* m4 P5 x% s) y
  2.     this.health += amount;  // Увеличиваем здоровье& y. N: B! S. _* ?
  3.    
    ; z' y5 w% m( p9 \8 M6 ]* S0 }3 l
  4.     if (this.health > this.maxHealth) {2 V+ W) ]: o  ]/ v0 A
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    . u$ R. ]5 J2 ]: W7 b4 `
  6.     }9 k- x% w+ M9 e7 I4 r1 t
  7. }, T% S# i# M7 `* J0 O2 K- Q
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:  H1 o. D" m9 p+ L; J
) [8 C* b$ J( _/ i; x
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    # l2 `% A. f; G# Z# c, A  G) }5 s
  2.     // Логика применения скилла NPC8 k& y) `# j" ^- ]) i
  3. }% @5 x1 @& g! X+ I! d' g
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:0 X/ a2 j* y8 l1 E, {; [# q
% i' r- ~' l4 C' l

  1. 4 p+ a4 n6 g- p% [# g" J! n
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)4 C- Y9 o6 R" l  l& C$ y# R
  3.     // Логика взаимодействия с NPC: e6 o# j! U$ ?0 R
  4. }
    . k* N' X) W2 I& W3 g+ g1 Y8 z/ ?
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    9 V( F) B; b! K
: I  Q# d! z7 A3 Q0 Q  [4 }
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)7 n/ J! G1 Z! p1 h2 c+ v, s8 N
  2.     // Логика открытия окна диалога
    6 d  y. A" ~& w
  3. }) b, R2 [! w6 M+ i6 m) O+ `
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.' g6 j& n1 l- o9 o1 W  h
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!& x( @- i: f$ Q  l" V. v

: M9 D: L3 ]: n6 k' s. V4 \; R7 E, `8 F

" F# X3 E$ N& q3 ^, Z0 u. u9 I, c, O) Y
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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