Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 # `' K& O3 [  T% a  o& @0 T

0 T2 E( \  e1 }' ~' y2 t& B$ c" c' \( T1 U
Шаг 1: Введение в классы и методы на примере L2j_Mobius
& ^% P5 Z2 N" ~С статьёй можно ознакомится в разделе Обучение > Читать
7 e8 S2 \4 _% j' c" n7 h) I8 F( y0 q- X
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
1 D! |. M8 O9 J$ r6 w' M, @- f& x
Обсуждаем:2 s* @) |& r2 q: @9 P- K# @
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    1 F' E* `* N5 o
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!( X/ x; I$ R( z$ ~) @* g& Q8 f
) g4 M3 p- @4 J9 ?. @, G$ I


6 b5 A( U% n' ~; f  lИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!, c) Q. s! ]. B$ d9 Z: B9 |! i

7 S; f8 X! q6 L  K" F4 i
$ y; n( e+ _. l) [9 G$ Q  @; e4 j1 R& w* f5 j& _; v0 X4 c7 @
# h; v( n9 }- o' q' z# B
2 T4 h. o0 _; y3 K: h

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?0 c6 y: V' W0 q+ F1 Z. s* {
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17. C; \( |  C/ e9 M# X
Почему мы используем ключевое слово this для ссылки на п ...

/ _7 H& i/ X) |3 G. ^; CКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
! \( {# u; ?; [5 ?' x% t, xПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.* C7 U) i4 Q% J/ {/ f

, K0 X! p% @, z# M$ U! rВот пример:* C( I$ h5 y0 ]$ |6 ]6 i, I
  1. public class Player {
    ( f) u( E) J) |* n
  2.     private String name;
    + X1 S4 w, |& x

  3. ( A( b# Z2 T2 E( U( ~6 D
  4.     // Конструктор
    $ `( p' B; E5 i# R8 f( d
  5.     public Player(String name) {
    ; h/ G7 t- C4 W2 c$ q) s; n% O
  6.         this.name = name; // Используем this для указания на поле класса) Z/ M+ z: m' Q* ^9 d( g5 h
  7.     }
    9 I: ]. G1 B. r7 {4 I! Q; [
  8. & n7 W6 H* @& F3 @6 h0 b- J0 N9 D* U
  9.     // Геттер для имени) E4 N: D/ H5 @5 T5 m3 O( v- l
  10.     public String getName() {
    9 M8 u! w! k9 s' D
  11.         return this.name; // Используем this для обращения к полю класса* t7 N9 F) y+ P. W# S6 G
  12.     }! D+ n+ w- Z/ Z6 ?  s9 T
  13. }4 v4 p" Z, U# N6 [& |" [
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
: E" u5 E$ J3 c) G: a
+ L; P2 w  D- t+ N) U' j5 d3 N+ kКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.4 T, D" G( v0 c& _( @
. M% d0 w" R) {& s5 X
Пример передачи this:( g: d9 H3 A' W! D5 U( T! Z
  1. public class Game {. _, H9 ]& [9 N
  2.     public void start(Player player) {& @9 f; V, ?8 v6 k3 Z  u
  3.         System.out.println("Игра началась с игроком: " + player.getName());: _* S) N- I- j6 ]& E
  4.     }
    % L- H. l' O- Z+ a! Y
  5. }3 B) q7 H. x0 x, z
  6. * q" u6 p/ s9 r5 a2 M( b3 n$ u- D
  7. public class Player {- U( n8 L8 e( ]2 {" b
  8.     private String name;
    1 g3 E& z. P" z' [) K+ A
  9. ) o0 l4 ^1 x8 |0 U2 b8 T
  10.     public Player(String name) {  ~5 Z" F. Y' i! S
  11.         this.name = name;7 a' ?4 a& ~3 \$ E- ^
  12.     }$ T0 v5 A- Z/ ]$ r5 `* D
  13. 1 ~$ S, y/ a/ Y) r2 X7 W' |
  14.     public void joinGame(Game game) {1 h5 h1 _8 D1 m4 ~
  15.         game.start(this); // Передаем текущий объект Player1 q! @/ s9 _  {- P) b0 X# g) K9 x
  16.     }# J+ N/ ^' h) E: L
  17. }1 E' Y: Q) R+ R8 o' ]5 }8 p/ x
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
2 \! D, D  F" O- E# [
; ^3 y1 s. \6 w# ~
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
1 W+ Z7 @! J5 l0 t# R% p  D0 \- d) D6 }* B8 p* o
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! ! s+ A4 m. E1 k/ [
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
! a- f% r; t1 t4 X
Mike123 опубликовал в 2024-10-17 20:05
+ E  I- T& i+ UДобрый день!
/ a6 R2 c9 d8 N1 D; U4 ^  PКак создаются и вызываются методы в Java? Мо ...

* Q" L) N% ?) ~; aПривет, Mike 123! ?
' m% _5 P# m4 a, rОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.  o! i+ B8 g+ i- `0 W# ?
* v+ d. o: ~" s6 [9 n
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
( s. e: t1 j8 H! E0 y3 l: o* ^5 {5 Q# u8 ]# B
) n8 C6 ~* r! N/ H- s- G
Как создаются методы в Java?
0 c$ L: _: l, J% H  R+ r+ `' s, o
; T$ }  c6 v! d+ xМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
9 R; N' @* u% e6 O& K% N  u# H/ c% E: z$ }2 g0 G7 x
  1. public returnType methodName(parameters) {6 y& x* q( X- w. L* N" b
  2.     // код метода
    1 m) v7 d# h7 g0 L3 G
  3.     return value;% w% p6 l. @# Z0 G8 s
  4. }
    7 R2 \! q. L& n, p3 e3 f
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    . U3 i2 y3 u/ |

+ K. A5 M- j( c  z5 L* v9 `, LТеперь перейдём к примеру.% A+ k& a# Z/ ^" y2 I6 d
; \; X; w( n/ O9 S1 `
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода0 F) O  a+ Z$ K  @
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    ! \8 E1 x% a- z
  2.     // Вызов метода атаки NPC
    : j; ~7 R/ B% |3 H. I
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());( d$ j) w& U" n( F
  4. }  a# C8 a# K2 }, O- A
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).$ V/ R9 @! o( O, F: |% X+ E) [
1 b0 f( P7 V* s( J
! X, h3 b4 M2 b# \! L# x
Класс Npc.java — вызов метода
5 o3 k6 Z, R1 {1 O* y
5 Q0 _* O8 Q; X& M: W$ ~/ X
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)1 }7 u2 e% V- d6 h& _+ X
  2.     // Логика получения урона NPC
    + B2 p% K: _0 h% H( E! I
  3.     this.health -= damage;  // это.здоровье -= урон;
    4 R; ]0 {8 L$ u, x# P5 z5 M
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    7 f$ q1 ?- F) X) S" x: O
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    & O2 ^% c+ t# o* }) J3 t
  6.     ) a* Y" m! X3 T7 Y  [1 e
  7.     // Проверка на смерть NPC
    : |/ [" j7 S2 T: V; g2 f. L$ ^6 l
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)( H6 s+ T6 j& C
  9.         this.die();  // это.умереть();: j4 c6 c8 u7 {: q2 O" A
  10.     }
      j% j3 R8 ^/ A5 V. ?8 F8 i
  11. }
    6 w, O: [' N: b1 s+ D: s( ~- i
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).7 t* v$ l$ p( z8 w* C9 Y8 G
Пример взаимодействия (с переводом)0 ~8 |. f: B; t7 l% h
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");& E) ?- [3 G; f& [! |3 q8 `. w8 i3 `
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");6 N, p! d- z7 Y1 o% k( U& R
  3. 7 Z- L% W+ d2 w4 a' i0 v+ |
  4. // Игрок атакует гоблина
    7 X, V' M! ~9 v: N; ?
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    7 l0 C7 _4 U  b  N0 p
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
9 P, t: H1 e0 N" C% C, c5 A. r! _& K
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.3 N/ F3 d/ j! q5 v# g7 o& ]
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
6 |% t- w3 i5 @2 T
7 y4 w- t0 S) X
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:301 p" l: e5 Q: |2 k# A
Привет, Астралия! Огромное спасибо за твои разъяснения ...
& T3 ~+ B1 T  w  V& e
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
: k# J' ~5 B3 b4 `2 v: z5 U1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример9 r  A5 m1 n) x. ]
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    * a( m0 R1 Y2 g8 G
8 q  L' H8 K4 Z7 m4 _% A
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)) v8 }" X  M) Y# ?7 C+ O5 b" u
  2.     // Логика взаимодействия игрока с NPC* E& k7 ]7 _5 _. l1 x
  3. }: m$ g5 C( c7 M9 K
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    9 ~! o7 ]! i$ U2 Z' z4 u
' x! ^1 r8 T3 I: J- }; w
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)/ M. n4 B9 ~3 }& z& M& M
  2.     // Логика перемещения NPC
    5 s2 M9 h- k: c" L
  3. }; H0 D, E6 ?3 Z- G
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:& c% i4 z7 D1 B: |: c4 P

; q& f: @2 D+ S/ V9 g
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример4 I  y9 M5 X) }8 T0 f
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    1 Y( l5 S( E6 M; f
  2.     this.health -= damage;  // NPC теряет здоровье; M( I' |  F2 S$ L3 C9 }
  3.     ' s/ @, i& R5 A4 G% u, v% H
  4.     if (this.health <= 0) {
    4 x5 c/ o( L8 @
  5.         die();  // Если здоровье упало до 0, NPC умирает" u1 f3 I4 Y6 K' b# A# {, L6 b& y: a
  6.     }
    . V( n; ^2 P% A" u0 h/ V, S
  7. }
    - N9 W; v" Z7 {
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    9 w& |. G: r  L7 R3 ?- @- Q
) K9 P7 Q$ N2 a/ c
  1. public void die() {  // public void умереть()
      d7 T0 i6 a5 }7 V7 ]
  2.     // Логика смерти NPC0 b/ e( j6 c4 o0 C) @3 g; L5 P
  3. }. N4 t: V- m( x6 a, a* d; U1 u8 Y
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    + L( i  J5 Y3 J( @- B( i

4 N# w. p/ w2 s) x- k/ g% Q  f8 _: {: m( u9 L+ o
  1. public boolean isDead() {  // public boolean мертв()/ [8 f& u- P- ]3 g) R3 ?% f
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
      l- |  y; x7 a
  3. }
    ) N  n, f+ S( d% P+ l5 y
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример; x& f. o8 k9 z

9 r. b* }! [. M. G
  1. public void heal(int amount) {  // public void вылечить(int количество)/ U7 R; x# L$ t# p% P
  2.     this.health += amount;  // Увеличиваем здоровье
    ; \9 e5 U4 b3 a$ t
  3.    
    : J; _3 s. C4 n* U: ^& f2 _
  4.     if (this.health > this.maxHealth) {
    6 i, N% n' p/ M0 c
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    & H$ \# M5 F! @
  6.     }
    : P( B& f2 a8 n$ c. p" u" e
  7. }
    / v2 D6 B2 k$ `; [' a
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
      @' n+ P( Z. E& i
# x, ~  O& w2 d/ g- i* Z
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    # ^2 P- }3 I1 h/ t9 c
  2.     // Логика применения скилла NPC; n3 r0 p& C# e5 @
  3. }/ v0 n+ Y0 `( \# m; G, V# ]2 W
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:' v) Q4 L+ @! ~: ]! \3 P5 @7 m8 l) J
# R; c4 i7 Q$ \7 e0 a* x( L8 O

  1. # F0 r4 e1 Q9 c; U
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    # W3 Z+ W/ v2 p7 K
  3.     // Логика взаимодействия с NPC, ^% \4 l; S) O+ s$ Z# G+ B
  4. }3 V4 x( |" p" R) f
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    ) ]: I" k. ^; R1 F" S8 {

/ n9 k4 j7 u% R' }8 [
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    0 _; u9 R5 ]" ^7 Y
  2.     // Логика открытия окна диалога
    & h* E" O7 U  f' ~+ }0 J
  3. }# n( ~5 r$ A' h0 i( w6 T; z
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
! N+ c" g0 j, J: `Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!1 o4 `: O) o8 i" S

4 f& M! {( R3 `& ]$ j! W
2 h( R; B* S0 L% y0 s( \3 X7 v7 v, \$ a% O& b3 [4 r
+ N8 G( z) S( c
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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