Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 9 a6 W% A3 L5 U( I
3 l# |* g0 n1 [) j
! J9 F* L* v! Q$ q: U; W- C' f# p
Шаг 1: Введение в классы и методы на примере L2j_Mobius
% u1 A: I  h* u& c& k! cС статьёй можно ознакомится в разделе Обучение > Читать* X, m: ^+ C5 D9 n: r
* |* O, O- s9 ~/ v, J
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
) s2 U* @! j- F; r4 J: |- Q) c
% W  h: q" Q6 d+ ?% @Обсуждаем:
/ ]# C" H9 }& T
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    ! U' y" `2 _$ z
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!6 q' v6 j: K' @. B
' E$ C% @; x3 V5 _1 C3 i

. q% x1 m0 g3 j1 _( L# L* L  W
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! 😄 Но мы вместе разберемся!
7 m0 }" \+ Y: b: B- j5 w& L: ^6 w: p& A7 S' X
$ a2 h" X% W1 V; ^
! \+ S8 l5 I+ N+ F

* c+ X5 t$ S" |+ A# l& M" E0 A
2 @6 Y7 ^$ v* t7 O  x

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?+ ?% r) U5 t4 h/ r
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17; a/ t' K, \$ f
Почему мы используем ключевое слово this для ссылки на п ...

! q: o6 k) h! C+ T  `: w* J& b. `Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.0 v, N/ v5 r( q. V
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.* r& J- L% z3 G) n, |

# }) c5 m( L% n* H4 D9 FВот пример:) ~- J" R$ i2 Q& b) W3 x: ^5 `
  1. public class Player {% `( l! _  D9 K1 Y6 t* e
  2.     private String name;
    2 Y9 L, O! e9 _$ s

  3. 4 }& |" p8 I) j) p3 y
  4.     // Конструктор/ T% v" I: y" e$ K! X+ g
  5.     public Player(String name) {
    ; B8 _" P4 _# R8 N8 J+ H$ k' n7 r! D
  6.         this.name = name; // Используем this для указания на поле класса
    $ e: B0 `1 I* i4 f4 l& n2 ^
  7.     }/ Y: U0 e. |) H4 C+ F+ o

  8. $ W4 U, b. `' }, O1 x/ i
  9.     // Геттер для имени  e, |/ u% _; R0 t, B
  10.     public String getName() {: ?, Z4 C- _( S
  11.         return this.name; // Используем this для обращения к полю класса* }$ M0 M1 O( m. c% G& J
  12.     }
    % [4 L4 `; M$ X' D! k! n' c
  13. }
    ; j. \1 |8 n) y
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.9 Y$ u, W0 l, V, e6 o6 v7 k3 m$ j
+ F$ U% M0 r. O: c( S
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору." L1 h2 O8 d+ U/ L- o0 `, Z

2 `3 k4 i. X' c3 K/ C4 R: c3 iПример передачи this:
. O& s$ k. U- I" h
  1. public class Game {
    9 v9 Q3 L3 l% k; R% d9 v( g% P
  2.     public void start(Player player) {& q9 J. @* @6 t& ?& m/ E
  3.         System.out.println("Игра началась с игроком: " + player.getName());6 i" u4 s4 b/ ~
  4.     }& |" r5 Z( ^" l1 W
  5. }
    ( v7 u; o4 s2 m8 S/ I1 Z
  6. " Z+ d$ K; C+ ]
  7. public class Player {! w$ }; S7 N" ?: h
  8.     private String name;
    0 ?) U! x3 q% d. A! n

  9. : k% J. @0 r. W( r- V. R2 _
  10.     public Player(String name) {# y& g- E; p) y# y
  11.         this.name = name;
    * J. V; g7 ^3 y
  12.     }
    ) ]. _+ W2 u( J$ e
  13. 3 l& L9 X6 \$ V
  14.     public void joinGame(Game game) {% [: ^9 N7 X* g2 w, u% \$ B/ b
  15.         game.start(this); // Передаем текущий объект Player3 t: k7 [3 q+ F5 Z" d$ r4 I( i
  16.     }, W* w( a1 S8 q  @% u6 N9 D
  17. }* s4 I4 @6 c  I2 ~& O
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
# B% {5 I2 S) h

' a) h8 i5 L0 Y8 M+ P; BПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! 😄, v6 e: F) t8 A* C0 ?3 M1 Z
9 Y. y4 f* Y; L' N$ G" W! s  {
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
# y& W1 i5 [+ V# E: p+ AКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 . S8 d% T& r5 a" W/ }0 q4 [
Mike123 опубликовал в 2024-10-17 20:05# A. h: _2 U* Q+ ~2 n% V) E
Добрый день!
/ M9 k! F* }6 c# |4 oКак создаются и вызываются методы в Java? Мо ...
  a: |4 a( G" E/ e
Привет, Mike 123! 👋1 T/ n( z+ \0 }& n' B
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
) d8 k  L$ ]% o2 @% |. D; o7 H4 r2 z
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.4 D4 I& A  |' E2 b9 Z
0 q; Q5 K/ C5 x8 U* R( r2 @
1 r7 f. P$ E8 F0 q5 ^
Как создаются методы в Java?, _/ R5 n5 {9 ^, I6 N: X
3 H3 t7 |% z( k6 p
Методы в Java создаются внутри классов. Вот базовый шаблон метода:0 O0 r% P/ g1 w" J! m
. I( A6 G( Q2 @$ I( a
  1. public returnType methodName(parameters) {
    / A. y2 i8 n9 }  M4 i. f) T
  2.     // код метода
    ' M0 x9 D' m# H- j3 [  G2 k1 d7 k
  3.     return value;
    ) I7 X9 H' z# }* T4 ^
  4. }
    " t/ `- K: x) x8 u  n4 A
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).4 O- O2 q" i+ s- Y% W* S, r" n1 @

' c1 v. i: ^' \& \Теперь перейдём к примеру.
+ z1 Z7 l( g3 M5 s: K; P, G$ J" D
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода% r/ `, n* l% u
  1. public void attack(Npc target) {  // public void атака(Npc цель)+ b- t) G- w8 e9 n% z! Z0 ^  D9 |# u
  2.     // Вызов метода атаки NPC+ Q# J7 o" o' F) d/ H, |0 d4 p$ j; d
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());! I) ^; B- V9 b
  4. }7 d- S$ ?$ n8 n0 B
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
4 _' G- {5 l( L+ }2 ]& ?1 w5 S" ~

' o! B1 G  R8 W# B9 I' nКласс Npc.java — вызов метода5 z' N$ X! g2 n  y" e/ p# Y
* h, m3 M* I' j
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    2 i8 j- d- g$ |- A0 Q( d8 ?# a
  2.     // Логика получения урона NPC
    * S8 j1 o% Y8 H( L9 U! \/ Y
  3.     this.health -= damage;  // это.здоровье -= урон;
    # c, A6 s" Z+ y7 C" e0 X7 W  W
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  + P# o7 \  d6 W/ E
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    9 l  f- ^6 U# v' b. k
  6.    
    & O9 d- c; L; K* j0 ^1 l8 x* n9 x
  7.     // Проверка на смерть NPC3 T. S! E5 @$ ^
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    ! `* U8 l' o! n
  9.         this.die();  // это.умереть();
    0 d# B2 a! ^# d: `
  10.     }
    7 x6 x' t  `* g% L* V5 Y1 f) D
  11. }( [: f* [; g$ u2 C0 [- p
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    ' I+ a- z; F) k0 C: a2 d
Пример взаимодействия (с переводом)2 ^. b; Q$ O' e/ |8 U" j! A! f
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    # q- T! P6 {/ j" `  |, T  N" x& I/ [! u" Y
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");9 U( g' ]3 S2 @# c' F. a
  3. " v) r; O( \/ J6 N
  4. // Игрок атакует гоблина7 w* w2 h- y4 {2 S4 d0 k
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    & L( _! o/ n& j8 Z8 C6 M
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. & r7 m0 _& F+ z8 Q2 U

0 N7 Y4 E2 m# R- j: J% U
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.  B: e) l: T1 ]& L' N6 `8 z# N4 V
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
$ s7 _1 j( [- m3 R- y  {% D" ]! p
: _, s& x( k5 `' X# |7 Q$ p( I5 F
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
, J8 u; y( N( |9 R8 o  x+ O. _Привет, Астралия! Огромное спасибо за твои разъяснения ...

7 M. N: @# l! a' ^+ g# BОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC." P4 m- _% ]/ g" e  `; t+ F
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    $ ]2 c2 u$ J' P8 ?
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:4 t3 s# K; P1 m9 P
5 f% w& l6 C6 ?4 w% M/ e
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)3 q6 w) s8 l- q! z3 L3 B& ]
  2.     // Логика взаимодействия игрока с NPC
    $ C/ t' ^. [8 `6 y' \0 {
  3. }: d4 ]8 z! O9 S& ]3 a2 k  i
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:9 D- u5 w' T4 `; w; _# T
" X6 t: i: f9 `" T! A# H0 a8 ^% Z+ p
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    6 j" k1 c8 Y) f+ D+ Y
  2.     // Логика перемещения NPC; o6 z5 X, B  G) A
  3. }
    # C& q1 k) Y0 N3 ^1 V
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:2 _. b7 t! m/ G* T
' _2 Q9 [0 v1 I' q& H, L. J6 a
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    : s( r; e0 s( T6 T  |) B' a0 W  C& w
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий), f( |' q8 J4 I) _; N( x
  2.     this.health -= damage;  // NPC теряет здоровье0 u* A( H8 u- m; H* D6 \' \
  3.       Q5 H/ R7 l6 N1 y& Z
  4.     if (this.health <= 0) {
    6 G- H" Q: c( X1 O
  5.         die();  // Если здоровье упало до 0, NPC умирает! b, u. f0 d% b6 F! U
  6.     }
    5 E9 y0 E0 Q' Z( ]" e
  7. }; \& p9 ^8 M, g; V4 q
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    : \) f$ w5 N- V6 S# S

( j0 x' Q1 [" n5 }2 U# O3 f% W) b
  1. public void die() {  // public void умереть()0 f0 e- z: t) {' m- H& Z
  2.     // Логика смерти NPC# E8 J: }5 k8 B( b2 }* z- _8 T
  3. }
    9 B- ?( t: c& s' W2 z
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    4 I) }7 I3 q2 ?. B2 g
4 j* b" g0 h4 i) B- M' x+ A7 o( a

( ~0 m$ F6 z9 F% r8 ~
  1. public boolean isDead() {  // public boolean мертв()9 N/ r0 }- i( f4 ~% ?/ V2 m
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0: m. _: e0 m' X& C
  3. }0 h1 `( u3 s8 j' l
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример$ z& L& |8 t2 @: k; \
, t3 f, _/ Y+ W% I! l& b
  1. public void heal(int amount) {  // public void вылечить(int количество)
    ' Q8 J# N; G8 V
  2.     this.health += amount;  // Увеличиваем здоровье; u5 t- U( g* s5 Z
  3.     7 O" n4 C7 I" x- S, t
  4.     if (this.health > this.maxHealth) {" c) I: u$ Q- F, d, H
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    # H. {/ J7 O- }
  6.     }7 H9 U+ j5 k( w% \. i
  7. }
    * K9 `4 }; [* l" o3 }
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:4 d6 Q0 ^# C) g) `$ V+ B
/ F8 ]( C3 Q5 J2 S3 |
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    " [# L( t! _8 H1 P# o* N6 ]+ t
  2.     // Логика применения скилла NPC
    ( X' E  v: g7 R
  3. }9 M3 O! T" b9 |  Q4 J
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    ( _5 k8 c% y8 B0 m
4 g& r7 U* F- A: d9 a& m

  1. ' J9 F. Q# v9 Z! j1 }
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)# `' a9 Z" S/ p1 u. t! `
  3.     // Логика взаимодействия с NPC
    ) ^4 q* d' k2 z1 K  i8 \
  4. }
    , c6 V6 T* e: A% \, Q# O6 E
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:" V0 D6 I/ ~) f. P
/ Q# d9 k" s- C+ R8 Q, i
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)+ ]1 w( C/ E# E. ^, I. j
  2.     // Логика открытия окна диалога! c. ]  x" x' ]# b: @
  3. }. s2 O9 s) j1 }
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.3 q' }. B# s4 S" F0 l
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
5 u: T6 e( v' n1 X  s
! u# M3 V& u/ E/ f) ~5 P
! t1 [9 k3 b& M8 v4 {4 e2 c( k; e* c% ]" d$ h

- ]. {% M& O) j/ ^7 A" q# N- |! r* ]
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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