Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 ' F$ }  O  f# e8 B: {9 ]( b
3 u) k+ X4 |* Y1 y

& V& q; ~/ n8 PШаг 1: Введение в классы и методы на примере L2j_Mobius
- {% l$ A, ?( ?3 w2 m7 dС статьёй можно ознакомится в разделе Обучение > Читать
% l0 M$ X/ E: d7 _& {
- V+ U1 h, u2 g: [! XДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.( I; n0 }1 G" a* n+ ]5 A
1 C1 C7 m2 R' C5 M; z
Обсуждаем:
/ ?$ R, h; p. ^3 E: k+ D( u
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius./ U9 r" j0 E2 A' h: g# [
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
5 F6 u' ~7 Z1 }$ O* t/ ~2 }# u0 M* d5 {# I8 A4 ]$ D


2 x" A$ M$ j) c1 G# kИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
) E9 m# w- Q6 S6 |' m3 e5 t" W- r! o: }+ B

) ]; F! G" V) H, b6 V4 |4 k: h0 l  O% _8 H4 c9 R8 r, y
* t1 O8 O( ~5 K* T/ v( \

$ t! d& F2 ^$ X& ~+ a4 k8 J

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?6 a: t. G7 g) e, y
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
$ J- n' F/ r2 D% L0 OПочему мы используем ключевое слово this для ссылки на п ...
* ]' x- B! }+ G8 p; c
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.  A+ w5 Y9 b9 F3 W( z7 [
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.; g$ K, X. I9 u/ P# }1 y
9 {, Q& z, Q- F/ Q* A
Вот пример:
9 c/ d8 w* L6 ~4 W
  1. public class Player {
    4 z8 ~; u; N* l- i, {
  2.     private String name;" \9 D9 w, Z) I  v" d) |4 G

  3. & j5 f3 z6 P4 S# W( W1 Z) M: q! v
  4.     // Конструктор
    - d% W# \- F! Y! W) N% q2 ~" f: U- V
  5.     public Player(String name) {! w1 {+ g0 Z% e) m8 H
  6.         this.name = name; // Используем this для указания на поле класса/ X' L# S" u' }  M
  7.     }* H" e6 i# C# ^( w1 s6 l# Y5 r
  8. 2 Z% c  f. b! u+ N6 ?
  9.     // Геттер для имени4 J0 r( W9 L+ {9 u# O  v
  10.     public String getName() {. \7 W, x4 P: ~4 {% K( Y6 B, L
  11.         return this.name; // Используем this для обращения к полю класса/ ?# U$ }2 ?( j5 n
  12.     }# k4 ]. V( _& ?1 \  W
  13. }
    2 m" M* D+ K+ k* z2 K- X2 J
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
7 U) T3 x0 y6 }  B1 ^$ q3 E3 m
& m4 D& u. w/ mКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    4 S5 Q5 `& Y! `+ Q, A7 X
' i8 ~# J2 p3 }3 A
Пример передачи this:
- S! Q* P* m+ F9 J' c+ v
  1. public class Game {
    & Q! d( {5 \3 K
  2.     public void start(Player player) {
    $ z" C  i& ~/ V. U' }; B
  3.         System.out.println("Игра началась с игроком: " + player.getName());$ g! M& m7 u% k5 W4 ?6 a
  4.     }3 @+ v" f6 c3 D1 ^$ f( Z/ T) M
  5. }9 V0 _9 U; G5 h2 I8 v1 y

  6. % p' f( Z3 G3 I/ c7 P
  7. public class Player {, Q8 q- p# l( J8 y
  8.     private String name;8 y& }5 P: ]# p4 v" {& h
  9. 5 V! [! `; T1 k$ A  t0 V% N" y3 M
  10.     public Player(String name) {
      h4 [& N# d1 M& ^8 c
  11.         this.name = name;8 l5 e0 P' N& U. R; A: b; A9 p; e
  12.     }  ?. S. ^1 u' B+ E6 W

  13. 6 p) o( S0 \0 Y5 S. N, s2 V0 j9 F
  14.     public void joinGame(Game game) {
    : }) d  X) t4 r) a+ n
  15.         game.start(this); // Передаем текущий объект Player, n, \5 [# @  R( E$ p  q
  16.     }
    ; g+ R1 @/ W2 x+ A: v, K# ^
  17. }/ @' G7 b, W; i: n
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
1 @7 d+ W6 F7 Q6 R

# o9 y. t# F8 hПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
4 y' Z& j5 j* n  s7 B, v! y: ~& I* V' ~* f) R2 p& G
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! . ]  I4 g2 M+ C
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
3 `1 d6 v+ q& s
Mike123 опубликовал в 2024-10-17 20:05
% O! X3 y1 N  S* v' NДобрый день! 5 r  s- M) ^+ q! N0 W+ I& u4 j
Как создаются и вызываются методы в Java? Мо ...
, x) u) [  Q7 u0 N
Привет, Mike 123! ?
$ b9 o$ H0 F8 A- b. h$ b0 qОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
" T) H5 s& \4 f: Y( a* u
) B1 x2 ~( W) y  v9 u+ \, Q/ `Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.8 R! y1 a, O# H

5 q+ @- `0 d( q( j, t! z( L9 k/ Z% X3 d3 {. Q/ C6 o3 U# `
Как создаются методы в Java?; u* ]/ k( d6 E7 Y& I8 ]: W
% B+ r5 v* R' C% w" ]# N
Методы в Java создаются внутри классов. Вот базовый шаблон метода:+ d( ~9 R3 L1 y, S8 i

2 D9 z1 i* P  k8 B1 g! s) S
  1. public returnType methodName(parameters) {3 B, v1 w3 L! i; }+ r, E- W$ k& F8 k* o
  2.     // код метода
    ! d7 ?- Z1 C; m3 n: v, d! s; K
  3.     return value;
    ( e9 q4 {5 t4 N7 ?
  4. }7 C2 }' w7 O+ {* k2 n% c
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).; l! A, G( C0 i* w# ?7 _
" g8 @3 |3 g) y' T
Теперь перейдём к примеру.
. q' w; l+ ^" c6 j! w+ F, D
' A  t# R( T* `: S( M; MПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
; y& c. [& r- F! \" O
  1. public void attack(Npc target) {  // public void атака(Npc цель)! ~6 y  x" \1 a" R0 b" o
  2.     // Вызов метода атаки NPC6 w8 {+ b/ t4 v/ G( N* E3 a
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());) }; Z- X+ c7 Z, ~
  4. }  Y" d5 v, }& I0 u
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).5 a, a8 F$ F! f/ s$ J2 h- O

# b6 ]$ P1 q5 L- {6 g" c% E3 p" Q+ m! n" S5 y
Класс Npc.java — вызов метода2 }4 Z/ e! H1 U' X
4 Y# b, V. H$ d. u# e: g# d# |0 N, @
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    # i# s- ^: K' C$ w0 u: W: U
  2.     // Логика получения урона NPC* b- J6 T1 k' [8 c  ]' K0 z
  3.     this.health -= damage;  // это.здоровье -= урон;3 W& j1 c6 ~2 x" v8 K
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    * m2 I3 Z: }. L
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    7 m2 q) W; c+ t+ }0 @4 b! P* a1 P
  6.    
    0 ], n0 _" M( W$ p9 b" r- }$ T
  7.     // Проверка на смерть NPC
    ) ^% L8 a" S0 s2 S4 ~, `& @
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    + i6 F. I* ]4 H5 d8 e# W9 D5 }2 I5 _
  9.         this.die();  // это.умереть();% J7 h) `  `" p0 n
  10.     }
    " v- N" N5 r& U( o
  11. }+ L3 f$ W8 C1 ^9 X3 }0 R
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).' h# K: K9 l7 k
Пример взаимодействия (с переводом)0 B2 ?4 N' ~- h  U8 T8 q
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");; j9 x! K; Q% J6 h' T. w& m& k, h$ i
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");. J& i1 V! x2 r9 b, T
  3. 2 u" ?0 m2 e# }: p! {- c
  4. // Игрок атакует гоблина
    " s6 e* ]( J& j0 T! G5 O
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    6 D4 d3 H1 p" l
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. ! p2 z: q! _$ Y; ~. R/ G
2 {/ F. g' F) J3 y
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения., A1 c7 O- Y% O  {1 q! c
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!+ E- r# N* M8 O; e' P

, F6 |: C/ D1 n0 ^5 ^0 h
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
+ \; d' R8 F/ a3 h1 t, I% v' g2 PПривет, Астралия! Огромное спасибо за твои разъяснения ...

) j! S" L  e# v% v  L# T* B  eОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.: I: k) z5 Z  ]& o  J
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    4 s5 \! F1 Y: w# E/ v
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:3 _1 O) W$ `9 Q% f

6 p9 R7 ?" Z. I& p, T
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    6 ?3 Y  H3 [  g- B- `3 r% g1 x
  2.     // Логика взаимодействия игрока с NPC
    % @& A+ C/ @% U7 s7 _% n8 `
  3. }
      D- @- T: [: ]* P- u* s
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:, x! ]4 t$ I7 _1 X

1 Y( _( T1 H+ B; k5 W+ U
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    + A# B* \% M* [' N/ }5 X8 k
  2.     // Логика перемещения NPC* x$ v$ U( V5 p# Z$ {" T
  3. }
    & P2 P& s1 {' a
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    2 e7 H# ]5 ]% [9 o  B" [
8 k4 D& n+ P' o3 P  H4 I2 N
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример. P( n, N  c  r; J5 `
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)+ T+ S) a. q/ W+ c, F
  2.     this.health -= damage;  // NPC теряет здоровье
    % I; l* B% Z% Z/ D8 n# ?$ ]- N
  3.    
    % ?5 w# S( [& Y3 U- Z4 _% k" x
  4.     if (this.health <= 0) {
    1 ?$ {8 |# E4 E. a5 @- G  z( l, J
  5.         die();  // Если здоровье упало до 0, NPC умирает
    * [2 z! t; b+ f) {. N
  6.     }
    / v, V0 W5 n) X! z8 A" C0 @
  7. }! y( J6 R  v3 W; i/ P
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример. k/ L) X4 x  W3 J) V+ |
: }; I& {. [' \. Y! k( t
  1. public void die() {  // public void умереть()
    3 y- d" D# }/ {, o( W
  2.     // Логика смерти NPC
    2 M/ c4 i# z) ?9 S2 v% C5 {
  3. }
    ) T# p+ U% x9 O  o; F% I/ |# O
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:. H5 c; L/ N0 C6 _3 k- b0 F5 Q/ x$ g
* M' B( k# {5 |6 c- e

/ O* l5 z% w& e0 I! a9 V
  1. public boolean isDead() {  // public boolean мертв()
    8 t3 P- H) r7 |+ m
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    + M/ l1 j* ~$ T* U5 V# D
  3. }! Y6 R; _6 j' h/ ]" Z: v
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    ( \$ L+ n1 Z# c* Y
0 b+ K' u9 L  |  n& B$ \5 J
  1. public void heal(int amount) {  // public void вылечить(int количество)- U5 W3 y8 c) F' h) p" D) m
  2.     this.health += amount;  // Увеличиваем здоровье4 e" y; R" U, O$ v2 T7 C* ?( P
  3.    
    7 j4 C: ?" R4 [" N4 C6 ^
  4.     if (this.health > this.maxHealth) {% H# l1 B, R1 g6 g+ F
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального9 r( I8 B' }7 B
  6.     }  i/ S  S4 z( K+ i+ u, n+ O
  7. }
    4 A* x5 e& R3 [+ S% i
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    + F; g! _% u. I) n

' E8 u9 d# Y8 A4 D7 G: Q: i
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)- {0 ]) m9 A- w" _9 b% V
  2.     // Логика применения скилла NPC
    , e4 h# p  \* c+ N, ^. V+ K
  3. }
    5 A+ f# N; N3 r" m5 P
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    : u3 U5 l' }" J8 [1 s' ~8 c$ g

7 v$ E4 v+ Y( H

  1. + C$ W' ?0 W4 q2 n! U0 j+ o0 R7 B- c
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    $ f* Y7 w; v4 r" H% L6 i0 B" J
  3.     // Логика взаимодействия с NPC% |* W6 z5 O+ `7 h7 H2 m9 ~
  4. }: x5 a  M' c& g. j
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    2 L, A4 j  K/ K% V& C9 J
$ q$ k; c/ U# I8 \) V$ j
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    4 e4 L+ C- {9 A4 x4 ?6 m; r
  2.     // Логика открытия окна диалога2 u; e6 p4 C7 f: l
  3. }
    6 e8 o5 ?) [! j" c, m: g( o- l
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
  F6 [# I6 Y& X0 o$ ]Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
  k' a+ ~& Y% e. D+ H7 H4 s8 C0 A

6 S! Z1 P" }$ M. K% f! a( k+ d8 s
( Q/ y9 V4 R( z4 g1 ?+ I$ X! N+ z0 U
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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