Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 : |# |2 {8 {7 J4 c( z( y5 ~

: B; s7 G3 i; f+ S2 a
- u3 l% N# D0 c( k" AШаг 1: Введение в классы и методы на примере L2j_Mobius% {% g6 P  [4 P$ R1 Y8 f/ U, K: |
С статьёй можно ознакомится в разделе Обучение > Читать' L- p5 b0 ^2 m$ p0 V
5 P5 Y6 E8 ~3 X2 U# |1 S
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
* B7 T' N2 N: o
2 y+ c& w( s0 F- xОбсуждаем:
) y' f, ]) w  d1 {# U
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    " b& D1 Z; Q- R4 [% T# A
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
+ {/ w  T; |( F3 `  m1 O5 @5 r% B) u- S: L, N

& {/ G- l7 O0 {5 r/ b
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
8 w( V7 j( z$ ~. M1 b; {/ R4 ^- L: |! d. ^. T

' s# D( E- y% E: `& y2 T
# W2 v' u* n3 e: [# N* R' _5 `1 ?' k( l
- ^4 H  \" \' n0 ~6 W$ y1 `4 N& C* \- |! c" j( F6 q5 f

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?" T' |4 l9 I7 s2 t% M
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:170 p2 U3 o8 H+ ?' Y8 i% L
Почему мы используем ключевое слово this для ссылки на п ...
# }' C4 G* g" e+ ~( K
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.- W9 I5 G9 A3 ~& O% A& I0 j- x
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.$ z* c, o+ O" {( }% N* P

4 D; s* p: b4 x, oВот пример:
5 m: a% c4 n2 x/ G! C% M5 [/ e
  1. public class Player {$ f/ N4 Y3 E2 l0 s# J2 M7 N8 V
  2.     private String name;
    ) o% K9 {# P& f: V, O# _
  3. 9 Q$ i$ \' Q$ I
  4.     // Конструктор
    8 d! _: C# o% K( M% v; k5 a
  5.     public Player(String name) {2 v+ e  R+ |% [
  6.         this.name = name; // Используем this для указания на поле класса5 G4 n* {, C7 W, t6 k8 |6 `
  7.     }" {$ ^+ Z# N$ Z  s
  8. # n. Z: ~% @0 X
  9.     // Геттер для имени, R4 ~+ t. d: n6 h0 `' C8 v
  10.     public String getName() {
    $ h& C6 S1 W* j. W6 U
  11.         return this.name; // Используем this для обращения к полю класса% |# k( \2 z( M
  12.     }
    8 G& R. F2 _3 ]
  13. }
    ' K2 B6 J( [. b6 o5 u
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.4 T  g- S) O; n& J
! |- f9 q5 X1 D4 _
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    ! q/ i- C( \8 K& t  T
! S+ K. ?6 p& T' m9 y1 m. F( o
Пример передачи this:
/ Y  m0 m: a) y8 c* V  Z6 t: Z
  1. public class Game {/ X: t7 H: t% @7 E( x3 Q& u0 z
  2.     public void start(Player player) {3 Z; c# l/ @  h8 \, \# r% C/ i
  3.         System.out.println("Игра началась с игроком: " + player.getName());
      p- W+ m' F6 U
  4.     }! N' {4 m8 v  H$ o: A/ z
  5. }+ r7 R$ L' g7 r+ X; Y8 }; s" o$ T' Y
  6. * F9 P4 Z# L8 b4 X
  7. public class Player {
    ! I  [+ P) j0 [# Y3 v
  8.     private String name;( p$ ]/ H6 ^% a! S; M: n
  9. 1 _, R: Q2 G, `8 R& x( m
  10.     public Player(String name) {
    ) c6 p. j3 Y0 [0 F4 m7 W" M( i" S
  11.         this.name = name;
    3 u) ?, @+ p8 c8 C/ b: y
  12.     }
    8 I7 J4 q" I  G* c7 q
  13. ' x2 {) h2 R; U: y* O# z8 `/ V
  14.     public void joinGame(Game game) {
    6 F6 H- t$ h4 o4 ~# P9 Y- A
  15.         game.start(this); // Передаем текущий объект Player6 D6 O( a5 Z$ [# I
  16.     }* ?) J  I6 ]( v) ~( t
  17. }9 {7 S: p" z) R
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
% A9 i* @2 W( ?: B0 O- |( k

& S; D8 c5 x- _9 p& TПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
$ U* }, C! i* D
1 N/ {9 Z$ N$ F: z
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
0 X! b4 B' ?% O' P. rКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
( k, w1 R2 k3 g- s4 z9 [
Mike123 опубликовал в 2024-10-17 20:05: `2 w7 E7 a% z& L7 n  L& I
Добрый день!
/ N: M! y  S' M- j( z! @0 z( `Как создаются и вызываются методы в Java? Мо ...
% U* a3 C5 e9 f( u  x3 u
Привет, Mike 123! ?# K7 ]$ X+ F; S6 Q+ K; @4 x
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.! x" t7 c, }2 S+ ^* y3 b- B0 r
+ X  Z! o3 S% f
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией./ Z; @% X: Z# W/ A  g# q; B! R

  p4 @; G: R; C0 E
- A  S/ u3 W! w& i8 J7 YКак создаются методы в Java?: M2 Y( W! N/ j2 A  A

$ J/ m' W% N8 G. c: `Методы в Java создаются внутри классов. Вот базовый шаблон метода:1 }  \1 a6 J, A2 [& H

4 {" G/ [& S+ g. T/ F
  1. public returnType methodName(parameters) {
    9 ~1 X4 @7 w; H3 ]5 N' A; h
  2.     // код метода
    0 N! @6 f. Y3 h( \# `' s2 d7 M
  3.     return value;
    2 q% C* b5 |8 C3 {" u4 p9 B
  4. }
    + A2 @: A* ?! ]+ L: y% U
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).; G3 F' q; q" }. v) N
& p1 h$ n9 S/ I5 S0 M! n
Теперь перейдём к примеру.8 L" b0 `! d5 T- l
* r; H$ w" D' S0 L0 s0 P- k
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
" g/ o" w9 J$ ~; O! c
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    " |8 u: [  ~3 j; _& ?! Y
  2.     // Вызов метода атаки NPC
    + f" S- c7 e9 P8 e. p
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    7 F3 K. Z/ ]4 a4 x5 ^
  4. }
    # F! t# C) D+ v+ w
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).' h5 u: ~, W5 F- f0 n
0 C" k/ W# b) x7 J
4 b, d% K, Z$ `" P
Класс Npc.java — вызов метода
- A" _6 ~( U- E( C4 d" n. S8 Y& q' X- W! r' w/ B0 y
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)$ L# |# O. v: {, X8 X3 O- \" b1 R
  2.     // Логика получения урона NPC
    ; _" F- o' ^0 \  K) I  `
  3.     this.health -= damage;  // это.здоровье -= урон;
    . s$ l; m) L, H  D+ x
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    ' I8 A' r/ C6 P/ K5 Y( K
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    7 ]# }/ x: V9 J, B+ A( E' U3 b2 Z' i
  6.    
    1 R+ O+ J: r7 m; ^( `+ m* A
  7.     // Проверка на смерть NPC! w' P* u' `! W! q# V/ |; {
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)  z. ?/ _6 H' |, i; O' H
  9.         this.die();  // это.умереть();9 v' L% ]6 K6 Z* A5 k/ z
  10.     }
    ) N0 L4 |+ ~; ^; l+ E# z: Z
  11. }) [. X3 S# O+ x) C$ ~8 \
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    2 W  w! v$ q( z, O2 Y4 Q
Пример взаимодействия (с переводом)# h2 q5 O# }2 ?6 N
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    0 B. r" P4 t% p7 F; k
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");& g2 N1 c/ o! v8 e! @8 U5 Y8 O
  3. - X% G' ]& c) V
  4. // Игрок атакует гоблина5 i3 Z9 I( Z9 U. n5 j
  5. player.attack(goblin);  // игрок.атаковать(гоблин);5 Y3 u* P  K' F0 N5 j8 P
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
& Y6 q; Z$ N* S" Z/ w4 z6 B7 }5 b( K" Y4 U$ ?: g. V8 [
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
  J3 m$ @- K, b* WУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
+ v1 F/ Y7 |8 x/ p! l! \1 N2 g" S6 e- {# Q! f  A' W3 {
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
" U/ G9 c+ o! @# Q8 CПривет, Астралия! Огромное спасибо за твои разъяснения ...

6 d& P( f' q; @# d$ e6 _Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
# J/ B, C8 }/ n  B1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    & H$ G2 ^) c3 ~* X8 t4 l
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:& `5 _* o3 B3 A% Q+ ?0 F+ O5 L% E

, S/ A# L8 C2 d- O) e, D
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)( @2 ~1 K. \% G' N, e6 N' `+ Z
  2.     // Логика взаимодействия игрока с NPC
    - ]6 l0 z5 }: F* ^" o+ m* {' K9 @- x
  3. }
    2 Y/ F5 S) z8 d3 ^
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:6 s2 D8 u" ], t5 ^5 [

$ T8 L0 D* }* p3 @& @; R- p
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)+ V0 b2 r/ ?& }8 @
  2.     // Логика перемещения NPC- m" c# Q* w% g, k
  3. }4 n/ v# q- _' g! {1 |; d# `
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:8 u3 ^0 Y5 {  V# n; _  D, H( k  @
1 D* o- C+ J2 |
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример) s; P& a9 D+ O) T
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий): Q$ _' k# Q8 {6 W
  2.     this.health -= damage;  // NPC теряет здоровье
    ' {- ]; ^. d& M0 O* D; o7 c4 r2 W
  3.     ) b) |/ N+ A0 X8 k- a% X
  4.     if (this.health <= 0) {/ ~: Z) @+ n  j+ }; o2 U( }) V
  5.         die();  // Если здоровье упало до 0, NPC умирает
    ; n, E' T6 Q) M4 l- _
  6.     }: K, L' h4 A+ j/ a& K, e6 |/ e
  7. }
    2 e+ @- u  D0 \$ o" X
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример/ U& i! D& S6 }" V, s' u; p& M2 g

3 P7 j6 L7 e- J/ i) {4 S, J2 a
  1. public void die() {  // public void умереть()
    9 X6 s6 n7 K" M' h9 k/ \% @
  2.     // Логика смерти NPC
    ! H  Y8 c! K1 P. B! A- {
  3. }: [+ @9 t: u9 U
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    % ~6 N! A/ G/ V+ ]7 D( o

' u' z/ A" M3 `4 `% \
4 D% k1 [1 Z  I" \
  1. public boolean isDead() {  // public boolean мертв()
    % b& @4 G' u" s0 p! Z7 H
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    / t8 J7 u$ k5 l5 ?
  3. }
    ! ?/ l; _0 r- @9 \
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    3 ~& W2 R6 b- D
. Y- k; @( i, T( i5 K( H+ c6 _* }
  1. public void heal(int amount) {  // public void вылечить(int количество)
    : T+ n9 A/ b& Q6 L
  2.     this.health += amount;  // Увеличиваем здоровье
    3 ]8 ^$ O5 ]2 X
  3.     " h$ k3 e& ?7 U
  4.     if (this.health > this.maxHealth) {
    ) P1 x0 P" m/ K0 K
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального. p* V0 |6 ~* l2 b9 Y1 E4 u
  6.     }9 T. O$ y9 f$ H; H% K
  7. }5 z" g/ k) s/ n+ R) O
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    9 R+ ^/ @! w. y1 X. {8 Y+ V
9 G$ [0 @0 e: L; M
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)7 {6 Q, Y$ w  D3 p  U. t. j
  2.     // Логика применения скилла NPC( b3 {# A4 ?, Y$ D7 C# K1 r& u
  3. }9 O, b: G4 H/ m+ @$ D
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    8 Q# \$ E' k8 A: c/ Y- f

: f6 ~8 }1 z2 O% o% H
  1. $ v' O. |5 z. Z% c3 @
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    % a2 H( ?' f! ^5 d) }
  3.     // Логика взаимодействия с NPC
    8 Q6 {, Y; }. ~2 U# K6 I. G6 v
  4. }
    4 p/ d; j2 @: i5 M3 q0 j6 H
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    8 g0 t& ]' A& ~
+ ^; o7 N! P7 Y, {6 P# v( v! |
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)! o. c2 A+ E# u4 }5 e3 W
  2.     // Логика открытия окна диалога
    9 d5 N: i( h: m6 _; M$ P
  3. }  V! Z. t: C" Q5 D8 P. S
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
4 h3 S' @+ s) p4 D8 WЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!5 Z4 n. z, i1 K5 w/ w

; R6 T% T, u. l: y) a, ?
' e! ]! m7 S; k  M# z. j' q" r  f4 g' G# X) n

/ G) e- j+ N) ]" S' v8 {
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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