Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
5 o5 n6 U- d. V' f! s+ J7 ^9 [
& L2 S* ]) P6 q: K9 f2 x+ u, h' \3 F0 q$ ]& Q- f
Шаг 1: Введение в классы и методы на примере L2j_Mobius
8 \  w; E* b. B( [5 J# H1 @' KС статьёй можно ознакомится в разделе Обучение > Читать
6 d% {9 H& V0 T( b+ x" P" E
, g/ A$ P# i+ s9 ?& o% ~Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.# w; y  Q. }2 \$ e
3 P/ h7 t$ L1 y9 c% U
Обсуждаем:
& v- A. d+ E* z5 v& [, H
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.; n$ D5 }  U+ R8 D9 F
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
. T0 @/ @/ P3 H& T% r; a
- x$ e, R7 `" W$ w
0 P! Q$ I/ D5 |7 S/ k
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!* T+ o6 N' W1 Y, {: V6 x

: Z+ f0 D+ V. U: B$ t
+ W& E6 N/ J- h5 e8 j, O) \
6 h3 B3 q# n" X4 V" w1 b! \
! X6 u* B' x1 P& s! Q: A5 I3 A0 N7 H! o: z, ?

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
# R7 o! q* L3 p+ G
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:177 N" E- C0 F: x9 ]1 q
Почему мы используем ключевое слово this для ссылки на п ...
% M# J, Q" j& V+ H  |8 y
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.7 q# |8 Q4 f- \& t' a  Y1 y  Y
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
; q5 ?7 ?9 M0 v9 ~$ U+ G; \0 r0 X1 G& j6 L/ m3 G& `
Вот пример:
( ?. z) Y! c2 u5 G$ C8 f5 S
  1. public class Player {: H# t* R0 j) ^8 e
  2.     private String name;
    $ a: L2 ?2 d; K1 X6 f

  3. % a! t3 _- D8 x9 U" S: N9 `
  4.     // Конструктор
    ) W. ]5 v$ }! B" o7 X* [$ |9 O
  5.     public Player(String name) {
    0 {3 E/ g  ?5 [' \
  6.         this.name = name; // Используем this для указания на поле класса
    & U9 m! g( L7 h/ O+ |5 F
  7.     }
    ' ^* V* X9 Q3 ?% U, R

  8. & d! b( a9 k; c  o
  9.     // Геттер для имени$ X* V* |! p" z& S
  10.     public String getName() {& B" y: |; S' p8 r6 q& s7 `. G
  11.         return this.name; // Используем this для обращения к полю класса1 }5 h. ~0 @" A1 M* K$ i. {4 J, [
  12.     }
    - R9 V2 ^: R) O/ J* S4 j  r' M
  13. }( ]% a  Z# O& P8 I' z
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
0 M$ P* n" W/ ?# a* O. d  J6 v- m0 }7 d& t( M& V9 G
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.# r+ w5 h0 z& j7 p* t( K5 V
+ q& y$ M; n" X, e
Пример передачи this:6 H- s5 `* T( S2 \1 h# a& L
  1. public class Game {2 c4 r" B% [9 O
  2.     public void start(Player player) {
    . o* Q! Z3 y7 ]
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    : z3 k( R+ B7 @4 ~# x& s; G  t
  4.     }# Y2 Y) {  s. Y) O3 K- m7 y( Z
  5. }
    4 ?6 a9 Z( p1 I5 ^. r, C
  6. + F- j$ Z; H  G2 P; r. \8 W1 M1 T
  7. public class Player {
    ( E6 ~8 w1 {% ], h" L' }5 r& P1 B
  8.     private String name;% F8 @0 a' F! O: ?9 |
  9. 2 k, @3 N4 l- F" v0 M
  10.     public Player(String name) {% A$ i5 C$ ]. n' T6 H" S% a* }
  11.         this.name = name;8 J8 |4 x7 b5 L" S4 m
  12.     }
    $ ~" v% y+ p) I0 ~9 E

  13. ; t, c5 e( a/ l( |" Y
  14.     public void joinGame(Game game) {
    . j; k8 {& f$ P& e  G  U3 C! A
  15.         game.start(this); // Передаем текущий объект Player$ \. _& j# {. \; |& ]1 E* H
  16.     }1 r6 N* x4 P$ v9 X: M- K- V
  17. }* E( K& c2 `' b3 C' C- I( w
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.% A. x$ q2 X0 ^- }+ {1 d

) f" K3 x0 b6 p4 N3 `3 ?) t4 e
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?8 K/ b5 N. j( J
7 V3 }1 j* c7 H. K" U3 Y5 {+ r
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
+ _2 g3 B1 E! OКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
3 e& d( r( i- [) p1 t
Mike123 опубликовал в 2024-10-17 20:057 H1 }, q3 e8 u/ X- w
Добрый день! $ A! [+ }0 h9 F. L9 f, e1 n
Как создаются и вызываются методы в Java? Мо ...

4 p/ U$ w; J" p& }* _. j$ A6 LПривет, Mike 123! ?3 Y5 e  a) y. q& [9 a# g
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
; B/ y. _8 h  K) |2 J2 B5 N" z' @# m$ N% b$ |9 H7 V# R3 ^
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией./ N" I$ i: U8 p
% L1 }$ s9 g" m! ^# J! E
! D6 V, A# i8 r; F$ z5 N0 ?8 n! K
Как создаются методы в Java?7 ~! B% r  X8 r( o

; C& u: L; J& O$ y, f: ]/ X: jМетоды в Java создаются внутри классов. Вот базовый шаблон метода:# E+ w$ b2 a  D$ w! {

. }6 x; m; D( b. _) p) \
  1. public returnType methodName(parameters) {; s* g8 k& K2 K/ p6 Q0 g
  2.     // код метода
    5 d. M, L* t* ?; ~/ o2 W& F
  3.     return value;
    ( V' I8 t1 H# X& X$ v8 L3 I- T6 _
  4. }. o$ n& d% q( \. }  D) E
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).3 Z. r# L  e1 q7 L* [
/ A5 X) v8 k1 c$ e: g: B. R2 g
Теперь перейдём к примеру.+ T" Z3 x$ |* i  I- o& K

, o  A' ?5 d1 H2 K% r0 qПример на основе L2J_Mobius с переводомКласс Player.java — создание метода  m1 L2 y' |# s: @- u* |& u) o
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    1 x* `; M) G2 ?
  2.     // Вызов метода атаки NPC( ~. C* S/ h* h/ c  K
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());; t: R. \. V3 a. ?
  4. }
    * l$ e5 [9 [0 n" Y" ]
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).( ]! g, w0 Z) |6 \! _
+ T: q# {0 e/ x% e2 P1 ?/ U

; `& g& R% o$ Z- P$ t. b3 uКласс Npc.java — вызов метода) x, U& [1 x# \( e, M4 N2 ~
' t9 {# O/ s3 g
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    9 \9 N# ?/ m9 b
  2.     // Логика получения урона NPC
    0 m6 ?4 T. b. k
  3.     this.health -= damage;  // это.здоровье -= урон;/ P# v# [  y6 p6 y" t: g2 h
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    " x- X, h$ _1 s% J
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    4 |7 ^; e* r1 B0 A9 a
  6.    
    . K% R; V' z2 Q0 }2 \
  7.     // Проверка на смерть NPC
    & f/ o) u4 ?; A8 t' ]  p9 h+ c
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    6 l% t- b( S& X
  9.         this.die();  // это.умереть();2 e3 o$ ?: w5 `
  10.     }
    , l: e' r! R9 r2 ~+ @
  11. }4 {+ T" r! i' a! [
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    $ j) i; E+ j) A+ T
Пример взаимодействия (с переводом)
/ P& |: A% x5 x
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    8 t3 l; n+ U) S3 `+ U" J, Q! `
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");+ {$ }6 N; k5 @. \1 {
  3. ; f1 ?/ ?9 z" _2 m4 a
  4. // Игрок атакует гоблина7 I% R7 j2 u9 }% I0 I8 d( F
  5. player.attack(goblin);  // игрок.атаковать(гоблин);. X) U: j* b& I& K% ]. i
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 3 ~2 @7 V9 C  j8 b8 i2 w

+ `" F6 F  k$ `
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
1 \; q6 B7 a  QУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
( g  I) N# h5 z8 I% S5 s$ c/ u8 n4 V- ?5 \8 S8 v5 A" }9 I
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
1 h- }  ~- R8 Q3 N4 Q1 o$ ?$ DПривет, Астралия! Огромное спасибо за твои разъяснения ...

" n1 e5 \: }9 uОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.% J# ?' ~# E9 S* r
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример" s" h. D( B& O) E
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:( ^* O; Q$ [/ f
# G: A9 r4 K0 v) w8 [9 r
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    9 ?! @/ {/ ~, u: `" `5 ?
  2.     // Логика взаимодействия игрока с NPC" W* B* w, m$ v: v3 |! n( \
  3. }) U7 T! w% j+ _3 M2 ~! G
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:) p( P- V+ }; l0 F  E( s

. T! D$ K% A' d" b7 ]
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)1 E1 n1 e; b) |8 @+ N
  2.     // Логика перемещения NPC- @7 ~( v8 V8 G( j$ }6 G
  3. }
    ) l/ x' x9 E6 a, x  c+ g! z
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:4 b) h- \6 u- F- T' P! i3 \

& M5 ?) @) \8 [
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    1 a  c* H3 `4 `9 q+ K) s$ u1 }
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    * Q% U9 M7 B$ C1 e; }. {' D8 p& `9 c
  2.     this.health -= damage;  // NPC теряет здоровье
    1 T' s3 H( n9 E5 m4 L
  3.    
    " i+ O" _: S' C7 u$ n/ X% ~' h
  4.     if (this.health <= 0) {
    ; [3 x. y  G. {7 `' b
  5.         die();  // Если здоровье упало до 0, NPC умирает
    7 |3 K! d% h3 ~# z* t) [% f2 o
  6.     }
    1 A2 x$ F( A& B9 w
  7. }
    3 P! D; P* a/ I& K
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
      q" l* n$ B- `/ X: O, _% B

* P" s6 F& a  n- P& ~4 X( v& V* Z
  1. public void die() {  // public void умереть()! l) |0 Z2 H+ z9 V6 f6 N9 H2 x
  2.     // Логика смерти NPC
    8 w* |. w8 o( a
  3. }6 I1 h0 w- M5 B0 O
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    ' ~$ r$ }0 P! H0 U: I9 @1 O1 y3 m

/ o0 }7 J- Z0 C; ^; @0 Q: V2 }/ t- M  e/ `5 P
  1. public boolean isDead() {  // public boolean мертв()% h9 J/ }, H; f5 ~& a4 w% @2 \
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0$ p. C# e* R4 Y6 i2 P. P; ?9 G6 r, n
  3. }1 d  u" y. R& Z  |: ~* ~- F0 N8 \( H
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример. v3 f: j9 I. B7 t( n' q" G9 t2 f
( ?& {/ l6 W$ \' R
  1. public void heal(int amount) {  // public void вылечить(int количество)
    0 P) m* }# V$ c7 ]
  2.     this.health += amount;  // Увеличиваем здоровье$ ?/ }# f' B1 K% U0 t+ ]/ l
  3.    
    2 Q; k/ a% n/ d* k
  4.     if (this.health > this.maxHealth) {
    " w: ]6 x4 A0 g, J7 T' {' j
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального0 f9 S  `: Z: F$ w# n" w
  6.     }' l9 Y5 ]9 a- w* X7 B  v1 D' Z
  7. }: u2 h* H1 a# q0 i
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:# e# s3 X) M' o+ h% w$ f% C' J
4 U. O' X# A4 A0 N! `6 K3 |2 r
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    7 s, h+ N! z/ E2 Q' |4 }+ \9 Y) @  O
  2.     // Логика применения скилла NPC6 t" Z; R' T5 ~" Z8 @- V
  3. }! R0 i+ }6 h8 y. C2 v
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:/ a/ D( o5 _0 n( M2 O* U0 `4 O
' Q9 f  V3 O% [" G1 S! y

  1. - y4 l; X0 ^, ?! _! l
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    , x: z) a) P6 q3 _6 ]
  3.     // Логика взаимодействия с NPC
    : V) H! a) H8 t0 S3 w5 ?% f5 W/ U
  4. }7 ^! i1 L( C- \& D9 K! K* A! |, m' k
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    $ |* z7 c: W+ O' P; A" J6 x+ V

5 M4 W( W6 U+ Z
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    4 S# Q+ [7 j( L
  2.     // Логика открытия окна диалога
    ; Y) q+ F9 U* A2 Y; d  x0 Q$ }5 y
  3. }$ }- Q) [7 L. h' ^8 f6 N# ~
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
- x4 B# `+ o9 v; D# qЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
0 Q# v4 q5 x- m
; f- X0 J0 B9 B. Z4 p- ^+ D* t; s4 e+ L# e, u
* |7 h5 I" C* G" }1 T5 C) y6 h

6 A9 V+ y" v$ v; o
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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