Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
* l* L: d% z" b& @* R; r% f* |% u9 b
7 O+ l! ]7 ]9 _- c3 ~  q5 I# z& R! t
Шаг 1: Введение в классы и методы на примере L2j_Mobius
) x- C4 r( d: G( \( O5 S5 bС статьёй можно ознакомится в разделе Обучение > Читать' g- B9 K, ?6 f

8 r5 n( p0 g+ K8 O; _6 yДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.# J7 H4 m7 ^/ F5 D
( C  X. w' `5 P
Обсуждаем:
" Q0 m! {. B. \* ]* ~
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.6 h; w2 Z2 k/ R* @2 w1 H# k
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
* B6 t/ g' m# |" h' O3 T
  `: G& h  k5 u: A" _

( {, G) ]' `1 b, \& z. X. k* Q8 OИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!, n+ n% {: \/ E+ n$ |6 C

7 |& F# \9 }) r9 V% J" S! B
2 ^! L8 M; t/ J3 }- M8 X" w% d2 `# q0 R5 i+ i& w1 G

" w* o# o8 ^: E3 G+ y! {8 m7 f( `9 ?. V8 u' W/ n

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
4 o* a2 B0 Q- `9 c, V+ ^3 L
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
& L0 E2 b3 F8 C& I+ ]Почему мы используем ключевое слово this для ссылки на п ...
0 `  D2 S& b1 B8 _& U7 ^4 X2 t+ |
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
0 L3 f9 d, {% `, xПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса." ~; a* Z5 M$ y$ K

" Q+ I. Y6 [# p+ u- y0 n0 |Вот пример:
4 o' O. W# }  q' o! G2 w: X
  1. public class Player {% X5 w/ Q1 U$ A, H/ E( \/ i
  2.     private String name;% \. h! |5 F. P9 e5 f4 ^3 E

  3. ! @9 i/ |3 ?, f+ Q
  4.     // Конструктор7 a$ }( U3 l6 w2 L+ A
  5.     public Player(String name) {/ v6 k, g5 G- S. c3 [/ I' H
  6.         this.name = name; // Используем this для указания на поле класса
    ( x- t$ |5 M3 }
  7.     }9 B. h  C+ \& M) x7 m7 a+ t
  8. * c/ E5 Y* z9 W
  9.     // Геттер для имени
    ( M5 P! {& E& ^( m1 c: \% B
  10.     public String getName() {
    4 I! u) w1 N$ N9 }7 u
  11.         return this.name; // Используем this для обращения к полю класса5 `4 V: M" q7 @& l! ?( d. a9 V
  12.     }3 a0 {# A+ d! R8 Y, A' M
  13. }
    - Q. T( _9 H; I( J! g
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.; e( D4 k$ N$ r# u
. y+ O# @# N2 i
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.( ], ?% j( R( m) a

* X% P4 k& q4 i: @Пример передачи this:- j* K+ q; M9 f; ?( y8 u
  1. public class Game {( d5 F- S" z' |2 ^
  2.     public void start(Player player) {
    5 Y6 n# d2 _9 X- K9 x, I
  3.         System.out.println("Игра началась с игроком: " + player.getName());; q0 H0 ?1 u( @' B
  4.     }
    " p6 m# g4 v) Y6 U+ k
  5. }& q# u/ Y% H4 ?- m+ p& B

  6. 7 `* F2 }- N' T
  7. public class Player {
    ; H( @! I! i/ g; l3 H5 k% b
  8.     private String name;
    1 U8 R0 I% Q) t! q  e
  9. ' |- o5 _8 |" @  n2 |) b
  10.     public Player(String name) {# F5 |0 s9 [8 y5 _: `& n
  11.         this.name = name;
    - K8 u, _- B! p8 \9 J
  12.     }
    $ X3 }; x: F  h5 ~9 R. J4 z1 f6 I/ k
  13. " r& ^: `5 b3 k* w) {
  14.     public void joinGame(Game game) {, ^% |1 _- y9 G* }
  15.         game.start(this); // Передаем текущий объект Player
    & [6 l! i" G" \0 j
  16.     }
    $ a  A. \7 ^4 g/ W
  17. }8 p+ r4 l2 ?/ X6 @
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java., R( i, H) S; ]! i* [/ K( b0 D& m5 Z6 f

) Z9 p& D& q& H7 p; X8 h. d
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?1 L. [- A* F6 m' [# o/ F+ I( x+ C

: O: S' m; ]8 {7 s9 O2 L
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! 8 ?( Y# U% t% ?' h. V6 K+ d7 H" I
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
: P  N. ]) _1 c0 T5 S' {$ q
Mike123 опубликовал в 2024-10-17 20:057 v6 p) n% I6 C
Добрый день! 1 z; D  v# E) F: K# j
Как создаются и вызываются методы в Java? Мо ...
9 a# G% W9 B/ _6 M* V$ U  h
Привет, Mike 123! ?# U7 @  E0 X2 e  `- |) I
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
, s0 V8 y/ j3 p" g4 p
( h: |1 j5 _: @  I7 Y0 T3 P2 MДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
( X2 t" D, b( s6 I' Y- ~0 [  J
  A# T% @" W, f0 K5 U. E+ {9 f0 C' N9 U$ V
Как создаются методы в Java?
$ f" U. q" S# M/ l" l6 @' Z. j' n* M0 d6 y' V" f
Методы в Java создаются внутри классов. Вот базовый шаблон метода:: H8 U0 l0 E% b. U( Y" z; t

( W  L# B7 b$ @2 `
  1. public returnType methodName(parameters) {+ N( o$ _( `1 W' Q. Z# u, r
  2.     // код метода
    1 s) y7 v6 W6 ]' D
  3.     return value;
    ' O5 M- R* ?* `
  4. }# L" R/ Q' I7 S% t; K
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).% s! Q( E% k! n' h/ d7 S2 b
) A' w( n0 ^* J7 W
Теперь перейдём к примеру.7 u' d2 B8 r# n( w# e) {( h" P
" B3 K) V5 ~: {" e  Q) }9 i6 j' E
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
5 r) p2 N. T! q
  1. public void attack(Npc target) {  // public void атака(Npc цель)7 n4 W8 Y! P7 P
  2.     // Вызов метода атаки NPC
    4 ~; E' \: k, l& B* b9 z
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());- K2 y: i+ Z/ p4 `! Z& D2 B$ M
  4. }
    # q7 A. }  p2 y, S2 _) }# z# N5 ^/ G! c
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).6 u: z- R" ?5 c8 n
8 P1 v. }+ y8 N0 p
3 P4 ?$ K, Z8 \2 E& Q1 y9 Y
Класс Npc.java — вызов метода
8 Q7 P) B2 Y% c, t: N' X; O
" Z6 S& E; \4 Q# C8 K
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон): M: s& q3 `/ ?- w/ K, F
  2.     // Логика получения урона NPC: S) n! ^5 O& S. A: ~
  3.     this.health -= damage;  // это.здоровье -= урон;
    , `) x# D* A0 t; b( |5 T
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    1 v4 Z4 z( Y0 I/ W# e/ ^! }  n
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());/ r6 l2 u. N( r4 N, l0 D( A
  6.     ; r, t, `) ^* ^& a$ T3 B
  7.     // Проверка на смерть NPC
    1 W6 x! I/ o2 _
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)$ I1 I- o  T+ e! f) M
  9.         this.die();  // это.умереть();
    * l# X' n1 ~$ D5 x, a5 o
  10.     }' U5 \1 [1 h! B- T% v( `
  11. }
    0 Q8 R% X; p, p
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    1 y- z8 v% ~6 A; x6 ?. ?2 l) `
Пример взаимодействия (с переводом)6 Y) t% [$ |1 A7 @/ C: U
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");+ ?! l; X4 G4 ?( Z" f! Z6 ~
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    8 C* h6 B8 Z" j, T/ j

  3. ' R- i0 F" M( V  @& J8 P$ C
  4. // Игрок атакует гоблина
    , e& o2 o1 }, A" h0 o
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    . y% `+ g+ Z3 o* n9 `; w* z6 u
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 8 s& t; f6 C0 M* D' a3 c
! L: M4 A, f! B, Y0 r6 |/ x& t
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
0 Z& t3 O9 C- G: LУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
/ ]8 H" B( J# B4 H4 ?: h; }  a, J  \3 T0 i2 S1 H, z5 Y' w
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
. r5 H, \1 N9 \3 gПривет, Астралия! Огромное спасибо за твои разъяснения ...

1 s# P1 H4 Y$ Z1 rОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.4 t7 |$ k9 f0 `' ?4 b
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    3 N  A5 r9 d7 l. l% A, p
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    $ X5 u8 y, P% F( L1 u
; Y6 L8 E0 o* y/ h
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)1 _# K  K( ^1 F) p8 L
  2.     // Логика взаимодействия игрока с NPC
    ! a3 L9 Q* T5 B
  3. }
    ' l8 n$ N0 x2 z: ]3 ~; N" V
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:; S; a  R5 P& H9 J( |
0 S1 ~* Y; {; E0 o& U/ i. B. r
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    " b' @: y! A. X- h
  2.     // Логика перемещения NPC
    7 b; |# N; o) u& @
  3. }
    ' ]- q0 r2 l+ S' m! ^
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:* W: O, C5 M1 L$ s6 j. f+ B4 l( G0 m  G
7 V& D' r, E+ ^
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    7 F$ p# j, e: }' m( j
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    7 Y, [: E% Z, x" }
  2.     this.health -= damage;  // NPC теряет здоровье
    : m4 J# V2 t+ T) ~) V" X
  3.     / g' B% C: w- v# H
  4.     if (this.health <= 0) {5 ?; G) V+ i$ F8 j% g
  5.         die();  // Если здоровье упало до 0, NPC умирает
    9 k" K- q1 ]5 v/ L0 P: x
  6.     }
    ' n3 _( ^* _  R! j2 e
  7. }
    * v: G' Y2 }: K6 V) D4 i2 k: v, r
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    * U3 F4 }# a8 c$ K  G/ F
) K( B) K+ ~6 j2 x2 x8 x6 |
  1. public void die() {  // public void умереть()
    2 ?5 x# ]4 a% z; N$ v
  2.     // Логика смерти NPC7 v3 P0 a) n- S5 o
  3. }
    4 r/ }$ h/ E. q) y) ]) o" X- }% n
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:3 E8 V. u0 l" v& e) _% S$ j* M% f

# N2 a( B5 O. o) a: c/ V1 M  U5 N) c7 D  B+ s* G$ _
  1. public boolean isDead() {  // public boolean мертв()
    ( f. k2 i5 \9 `8 R
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 05 ^0 |1 K9 W5 L' y
  3. }
    ) g( w; _: q" X# i9 F
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример8 ~/ @$ o, ^: O& M0 r" s$ m$ Q7 L' e

# P7 |) U# ~( c, A& b, }, U
  1. public void heal(int amount) {  // public void вылечить(int количество)' u; R5 x, e) k+ e+ Z! W5 v. ], j' x3 q
  2.     this.health += amount;  // Увеличиваем здоровье$ p) j$ V1 i) ~/ t& ^+ \
  3.     $ g% c* h) w6 B  ~  a
  4.     if (this.health > this.maxHealth) {4 N4 p* ~& `8 J3 D! l! K6 P; }
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального, B( u$ |& d1 Y$ C) A% e
  6.     }2 W! I: Z3 f# y/ l( ]8 g' F7 b3 a
  7. }0 H% {6 j9 ^1 r* \! I
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:  y1 ^/ b+ G8 Q+ h" b# k

3 z4 H$ ^/ K  x6 c
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)+ y, i) U" l" D1 G0 A" v5 L
  2.     // Логика применения скилла NPC5 f; r: e. P- Q  q6 s; a
  3. }* f1 ?; K4 \+ w; x- M
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    . c8 @  K2 \6 C, L
% E% t8 O/ `2 |# K

  1. 2 N% ~7 r1 ^: L. K7 G
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)6 E& s4 _+ T9 e! a5 t5 d
  3.     // Логика взаимодействия с NPC% U7 ?: h" G* ^0 K
  4. }
    8 o) y+ U: c# a  Q& ^
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:% f1 s6 ?6 B- U' s1 W
" }- m5 M- G7 I' r# e  O$ B1 p7 Z
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)$ e# {. W% s9 a0 r
  2.     // Логика открытия окна диалога$ o9 `. n* C+ T* Q6 W( K& t5 z+ L) j$ n
  3. }' f9 U' ]. {. O9 W
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
' G' F; k$ x8 D7 \3 wЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
8 r; n5 r% r2 z9 q9 ?
$ S- t" f6 L9 X' u
* V. {5 ~& k% j
! M) r, k; i, X1 [. m% W' @6 b1 G+ O3 s
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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