Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 + V- ^; c! e9 J  p
1 l. A' |! w$ p. `5 j+ v: Z
3 @% i: g8 X( {  B
Шаг 1: Введение в классы и методы на примере L2j_Mobius
* n8 U$ d. p* x' }' T, y1 IС статьёй можно ознакомится в разделе Обучение > Читать/ ~% O8 N3 H. w
1 D0 D" Y* h; `( V: V& D6 A
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.) R& R1 }0 v; f) k# ^
! E7 C+ O' r7 @' f
Обсуждаем:
! s' S- K& |3 {$ ]4 s
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.- R5 O* F5 p. o6 R9 z
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
( j, x" S0 w& ~  ~1 U# X! @# u( }5 i) H& k0 y$ d

  R) T0 N: K6 a9 ?
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
3 [$ l8 X/ H9 p' |& u& f
% k0 J1 |1 i8 ?& ~6 y, W
; h6 ^: u. [6 t! N9 o' t6 ^/ p5 f& ^- A. a" p3 u$ k. V
5 a# c% W* H7 G9 o1 j; c

0 U$ J) V/ I. ~  o- \

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?. k; S- i* ~6 j# X2 T& W/ k$ K1 M5 C
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17. a8 s- s5 V8 }" ?/ [- i5 f- h  M0 v. K
Почему мы используем ключевое слово this для ссылки на п ...
$ ~+ |+ ~! R+ R3 @
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
- r: Q2 ^4 W3 ~* d- x+ ]Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
. C: U8 T( v+ L6 o" w* ]& P- I4 w6 j5 `. \
Вот пример:
" q: h0 g- a6 L2 m1 Z2 B! a
  1. public class Player {- r- y' [6 L. F9 x* t3 \
  2.     private String name;
    . T% J9 B: ^1 U( ?8 i
  3. $ u7 X- p" a5 l6 z0 s1 P+ C! q
  4.     // Конструктор* K4 N) j: M/ i1 a7 w
  5.     public Player(String name) {
    & g. R/ ?2 |, ~$ ^6 O; Z# R6 P& b
  6.         this.name = name; // Используем this для указания на поле класса
    - R7 M5 h! `( l9 F. Y/ A
  7.     }, D! E- N+ f, a5 n( D5 y) L* Q% M3 e
  8. 8 j' H! E' o6 G4 A4 o1 |
  9.     // Геттер для имени
    1 c' V# w) g) C" E" D. E! r
  10.     public String getName() {$ h, B8 d% P+ b' D6 \, z/ y
  11.         return this.name; // Используем this для обращения к полю класса! E- M! ?8 r/ C' {2 T. S
  12.     }
    * c, }3 {8 t5 X8 ^' ?
  13. }0 F$ L- A5 S* q/ b# t- f
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
) @, N3 M) N8 }6 N) k' c
+ _! T, j4 C( i8 t( IКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору., r( e2 b2 L- @6 j) [

1 k  w$ w" d! `- c6 `: c  V+ u) ZПример передачи this:
% H9 n6 R  W% n" ?* S+ U4 U  P
  1. public class Game {
    - l7 `9 @2 G" d& T+ v+ t6 Y' e
  2.     public void start(Player player) {
    5 S& @6 W" F1 Q
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    * B# }9 q- ~5 s8 j5 \& z
  4.     }
    7 {* ]  O" l; t+ O: u+ [
  5. }) m- J! U& \7 N. a/ B( L, @
  6. 8 ^7 z! B' e; n
  7. public class Player {  ?( k- J) M0 I9 B! C( p2 C# ~
  8.     private String name;
    + f9 |; b# [( a: a

  9. 8 {5 V7 C+ O1 P7 l6 q" M) Q" x
  10.     public Player(String name) {, F7 s) A: j- ], ?7 v( A; k
  11.         this.name = name;
    $ N' m# n7 Z8 B- N% n$ b
  12.     }( {; ?% @- N3 r& j
  13. 7 w  m; G/ A! D5 a/ L1 Z
  14.     public void joinGame(Game game) {) x& ^, \  D4 \/ N9 ?$ m# I
  15.         game.start(this); // Передаем текущий объект Player* ^& D  n' s' _
  16.     }8 {, o. j+ h( A2 i/ f, |
  17. }
    # k6 h% J; G! ]% z' O
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java./ q6 R: S$ z0 N+ ]) j* g; f

# p' Z9 x: D: H
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?1 `8 r. v2 @, t

7 T$ S) t* @( m' D* h6 }
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
1 B. ~6 J' u. \* d$ P  {$ j4 L( S1 ^Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
: O3 j6 [* l0 M
Mike123 опубликовал в 2024-10-17 20:05
( s0 t+ Y1 z: j/ u- m; u" AДобрый день!
/ Q* w0 P0 B8 y, i; ^" s2 s5 kКак создаются и вызываются методы в Java? Мо ...
0 F: e( X8 H2 U6 a' E# G
Привет, Mike 123! ?8 |: z) f) L7 G4 B8 {1 |3 R0 t
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
; T3 ]+ d* X4 Z# {; I8 O7 w
$ c; q; |8 E. C' K9 l, j9 dДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
" k" B( `: O3 ~3 w+ D8 c( v3 ]. t4 q7 O: H7 z& V

: T" ~( \  g! O( Y6 m9 BКак создаются методы в Java?
4 r6 t+ R0 _+ a) f1 z( }/ K/ c2 c) b/ o
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
2 S' {- P9 T1 J7 E3 I1 T  m* B% p4 v; q! J: k1 A' T0 q3 F
  1. public returnType methodName(parameters) {: {0 I3 i0 [' S/ b/ l
  2.     // код метода
    0 ~* B, s; G0 s1 P. {
  3.     return value;# G$ s8 p* ]) e
  4. }# V6 e9 T! L2 ~6 s6 |
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).6 O# t9 {' h# M( v3 |1 Y( x
% a" R3 M$ N; g  R& V; Q
Теперь перейдём к примеру.
; J1 }  L* @# M& [$ e3 \% u5 Y+ ]3 r- o
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
3 p0 P0 H# g' K9 r3 C* e
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    8 x$ v5 v0 v3 A1 Y
  2.     // Вызов метода атаки NPC
    4 Y4 G) ^& c: v# }) ~. M$ M
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    ) E" h4 e& ^+ @( f. @) m+ _
  4. }
    + i5 @* s# @: U6 U# _
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).7 T! T  b  K% g) H# h( R" J) ]6 {
9 d' Q8 i$ R0 C  j

+ w3 E7 ?  |7 f! F* ^Класс Npc.java — вызов метода
5 k/ u  u8 e" o* a3 x  n. R  P) F4 t" U5 d
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)9 w2 O* ]% m- L
  2.     // Логика получения урона NPC# C/ @; s$ x9 N$ b( \( G6 r2 Z
  3.     this.health -= damage;  // это.здоровье -= урон;
    ( n  V' z1 t& @; n
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  . \. j0 y3 v$ Z/ c$ y6 M3 z
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());7 x- A9 y: T2 V
  6.    
    : p; v/ c; n& z9 c) g
  7.     // Проверка на смерть NPC& I' Z: E4 O7 M( y  A! u
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)# L' f& Q. m& o, o  V
  9.         this.die();  // это.умереть();
    ) s0 i. j9 a2 r8 y
  10.     }
      Y$ m! k1 {8 m. I5 Z3 v
  11. }3 c. Y6 k3 Q2 x6 b# q3 G
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    6 O' u: G: L" U% h( b8 U0 V
Пример взаимодействия (с переводом)' h9 a6 Q5 g/ X0 C! @1 T' N2 r* I
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");+ w+ K: L) D9 W6 B* s' S1 n- P
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");! {. c: m& _: K9 @5 ?: Y

  3. ' R# ]9 @4 X$ O. r* f% L! ~% ~
  4. // Игрок атакует гоблина
    0 M5 e& ~# m0 p, S) `
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    0 R. i* ]4 c. e8 P/ q
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
/ V  E' s0 m2 N4 X" w5 w" u
* H0 s* ]" w+ D7 o/ Y* b+ l
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.1 b# b0 |1 t% m3 ]# l9 t' ]2 L
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
: t  `! _) z8 Z5 ^0 [% V: r% I5 |( v* S
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
4 k, Z( _# y+ l8 Z; nПривет, Астралия! Огромное спасибо за твои разъяснения ...

# r' C) ?/ ^  p9 D, QОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.4 R4 R! q" ~! b4 |
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример# @: Q5 }+ l* _( E' v- c
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    : x& D/ D% D6 ^+ A- M7 m: ]6 J

& |. J9 X5 E3 y6 V9 I+ F$ d
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    : S5 t: B2 i3 q5 v
  2.     // Логика взаимодействия игрока с NPC- ]2 y/ V* z  _3 c4 o* w# I" F: }
  3. }- r, l. [  t% q0 ~3 r  f; }  |+ M
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:6 G9 o4 d% P2 ~$ e! U8 a! ^! X6 m
7 x( a6 Y. F% Q( v8 ~
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    4 h8 u' D8 E$ C3 t' B# \
  2.     // Логика перемещения NPC/ ?% m# ]' x/ C2 g8 e
  3. }
    " f" W' Y; F; d4 o2 {( v
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:6 H9 F1 u- F; l, [. \! I1 d& Y

4 V; V3 c: G2 W) \( t& T$ c" ]
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    - x; @2 F! x7 N4 i7 ^1 V1 T2 V, _
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)) x: V5 l7 r% H5 B* z* ]6 p
  2.     this.health -= damage;  // NPC теряет здоровье
    + A' u2 X+ a+ e/ b/ Q) I
  3.    
    2 A6 @$ \8 S6 \: c: T& Y
  4.     if (this.health <= 0) {; F' ^  [, C4 U6 m, y) |, N
  5.         die();  // Если здоровье упало до 0, NPC умирает
    8 `8 ^% c) ?, {. J% G( D' U, n6 s
  6.     }
    4 v+ u9 n7 U; H- U8 ?
  7. }& A9 H/ s' K6 k
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример  G3 |6 `3 v9 ], s9 w: r# }

9 E* f$ i) X* W& ?; [4 v
  1. public void die() {  // public void умереть()/ Q* r- x% q  {- z$ q
  2.     // Логика смерти NPC
    5 G+ ?! _. o7 k
  3. }' V! ^) d& \: W! L
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:) e' f0 e; H/ d. r! g

/ {9 x. W" ~8 f8 q& }4 P) L$ `  ]
  1. public boolean isDead() {  // public boolean мертв()
    # f8 C. M/ f7 ?8 o
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 01 t2 M6 e# ^$ s! s
  3. }
    # B5 d3 ^5 p( Y' C% F2 e
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    * b4 F0 }4 a: }( h: q

+ w2 ]* h( |  V6 J
  1. public void heal(int amount) {  // public void вылечить(int количество)9 o9 l5 C; O+ J
  2.     this.health += amount;  // Увеличиваем здоровье7 E2 @" O2 z, S" b7 Q
  3.    
    4 @8 p* o' T* p2 Y
  4.     if (this.health > this.maxHealth) {  Y. M: A7 {! M" Y- Q/ g( |
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    ) B& {6 c$ U$ \$ v  N: D* B, P
  6.     }' \& \# O: ^: _1 v
  7. }
    ; R' f( i% o3 f4 y
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:% Z9 L& R2 O+ v7 m% E' N5 K5 O

$ L3 o' p) F/ R
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    4 G( @, x- a& Z+ y, E
  2.     // Логика применения скилла NPC$ }" ?- M" `! p
  3. }
    7 j+ V) ^' k8 V# C3 Q3 y% s
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    7 o5 W" O, a5 {
$ `" V4 i$ Z' V, ]! F, N

  1. ) |( Z& l, S/ K1 L+ V
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)2 H5 x# T% y6 A3 u/ k5 R
  3.     // Логика взаимодействия с NPC% Y  C, o, R( e. Y; V! W; n$ O. B
  4. }4 t, |( i8 O4 }
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:8 a  N" W# }  q! W( |
5 Z, q+ U, [; Y6 _: {! E/ C7 B
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    ; w1 H* [2 ]3 l) @3 `- S6 q
  2.     // Логика открытия окна диалога
    5 g; i9 e  w4 ]" b' b5 _& d
  3. }) p. v5 f  ?& [6 s
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
( R" N: Y4 n4 J  E- TЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
7 z/ @; \8 v! l- q+ b. z! C; J+ k2 W0 k) m7 n

. i/ ~8 M0 D! S8 y& ^* `. w3 M4 J' \" P- S# J5 Z4 J& T

$ O; D0 ]" o/ I: ]
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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