Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 & N, x7 m4 k- r( ~/ g; G" A
  V- O7 [! y" c5 |' w( ^" Q% W

1 |. ]6 P7 Q" ]1 c$ qШаг 1: Введение в классы и методы на примере L2j_Mobius; o/ x. ]& C$ d0 c. |! w* p
С статьёй можно ознакомится в разделе Обучение > Читать. o# R& K0 e5 ~6 ?5 t+ I# \5 m% h
8 ^+ _5 P% @6 e* j5 H/ p& K" p
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.; G5 r: w" {0 d; J/ E( ]. w

* P) y; f7 W( i( X; d" |, W5 MОбсуждаем:
- ~5 b/ \  S# y8 ]! c" W
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    ' @  W: j7 [" _9 x+ @; h8 y
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!. Y+ B6 [0 L& r

9 L! {: H) ?5 z; k: J; B6 E
4 m+ E  s( ]; e# x( v6 S. Z
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
# Z4 K6 P; [( T% E! |& N- j' L2 _6 R0 U

0 H' r7 t& `$ A2 s- g- s: c& X& ]/ e. Y

- F6 T0 j* O, P+ g6 X# M  v1 d5 r7 [/ m1 o6 w

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?- S3 c: @7 |4 j
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:179 {' w; O: H  I# g2 [* |* ^9 `
Почему мы используем ключевое слово this для ссылки на п ...
+ Y; T( M' B' r! ?8 w. ~; j
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
8 x0 E2 p4 n' N% ~Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.2 C! x/ G. r8 e/ s* E: N% Y& V/ H( c

/ H  U6 e" A/ tВот пример:
: X( `9 Y& X- ~* ]1 V! ?' r
  1. public class Player {& Y& k  l0 b; g/ `* O4 y, ?
  2.     private String name;
    & l; L' n& d* ]* T9 @7 V. P

  3. % _" D3 {$ r# a' F$ k$ C2 ]( K
  4.     // Конструктор
    2 k# k& I7 _- F0 P, ^
  5.     public Player(String name) {  E! N- A1 w2 u) \
  6.         this.name = name; // Используем this для указания на поле класса6 b9 Y  e  w4 g6 @( k6 C
  7.     }% Y, M' o+ o  {& c! v$ q8 e: M' g3 A

  8. - X) {* o# b2 I- o* w& R
  9.     // Геттер для имени5 v: g( ~9 i9 z3 I% V
  10.     public String getName() {% C1 R9 W8 Z, ^& k; k" h
  11.         return this.name; // Используем this для обращения к полю класса
    $ s/ x; H% }9 A% E
  12.     }0 L' f* k9 U5 K" o  w9 W9 y: C
  13. }
    3 G" c" B; s0 q- g. \6 V" m; p
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
" Y/ Q# R4 N% O5 i' y
0 R/ @; k7 z7 U: R8 IКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    ) r$ {1 ^$ E! ~0 _, R& n. O: ~

/ `# I& r# |9 iПример передачи this:
( J! m. `: D5 G
  1. public class Game {* P1 o# t2 @( ^( o$ a7 ~
  2.     public void start(Player player) {" A, O: i: @# L. Y
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    : m: G3 t# O, z+ L0 f
  4.     }/ q% N- r/ K5 R, j
  5. }
    ; u- S$ ~3 R/ t& g0 Q% G

  6. 4 h) O) _9 v% i7 O- g
  7. public class Player {
    " @  j2 U0 ?! |$ U* Z/ A
  8.     private String name;
      ]- ]1 P# o$ @# w
  9. + H6 b1 G- {( ^: b
  10.     public Player(String name) {
    6 |4 F% x6 W7 k9 B$ k; {
  11.         this.name = name;
    8 z$ L" ?' W+ e$ S9 q9 Z: Q: ~
  12.     }
    " {6 L* `* c9 n; G- `$ r  T& k  E

  13. $ D* X# R* R. f7 N5 e! R0 p7 C! D
  14.     public void joinGame(Game game) {
    ) X# E, n+ G  x9 k+ A% G
  15.         game.start(this); // Передаем текущий объект Player2 c- l/ f! y& p9 f8 d' ^
  16.     }
    . D/ k. F% {2 g' {
  17. }
    : y9 P- k- i: l0 g" N
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
  g- c6 x, h! T! v

( \  g& Y+ I1 E- I9 @Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?2 \9 y$ y1 {) z+ E; w+ a  p: m
) ~- J& @0 z% E6 X+ H/ `
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
5 v" w+ j3 z( r, [Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24   r! N6 y" l6 o3 g6 O
Mike123 опубликовал в 2024-10-17 20:059 N+ s0 j; o& o( p
Добрый день!
! `# |5 Y- _% g1 o1 G) _Как создаются и вызываются методы в Java? Мо ...

+ ]1 h# \0 O# c: ~6 aПривет, Mike 123! ?6 _9 Q- o& L, e* S+ r- n
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.5 X2 |2 Y. n: c6 j8 [/ V. y+ m" w0 W

  j: y3 F6 ?# j: u7 R) B2 C1 LДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.- ?+ d  P. X3 e  r

3 u7 w! N/ j' C
7 N: ~9 P: b$ z. v5 fКак создаются методы в Java?7 G9 r: o, x8 }: ]; q0 o1 T

% E  X% W( E- `  l# [, G7 ~  BМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
% T4 `5 t; C& G
3 M! ^1 o! u7 k/ }6 P
  1. public returnType methodName(parameters) {
    3 }" h* f1 O/ U
  2.     // код метода
    * @( r6 v5 d2 M0 Z
  3.     return value;; ]6 K0 i, O' A4 `% B: O' }
  4. }
    7 G: `$ c( O, d2 P: e( ^
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).3 L1 k3 d6 T1 k+ h# B

: \- ?6 V: |  x6 x) R. b( |Теперь перейдём к примеру.
$ R# @* q1 `* @# Z
0 n6 r& K/ T( `* Z& P# e6 EПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
) [: _- _$ M5 e0 W: e
  1. public void attack(Npc target) {  // public void атака(Npc цель)/ G8 |3 I) {  g! L( N9 l
  2.     // Вызов метода атаки NPC
    , g; J4 M4 V8 v5 d
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());' {# j, ^: ^$ `; e, x* D1 f
  4. }& {( W' X- w) i. h
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон())./ z& l. r- `' z2 r
- ^% ^0 t& n+ Z
( r# E. S: z: A( _) m
Класс Npc.java — вызов метода% o4 y' T( z' |9 A) G+ F$ D$ I
/ r  ~; A# C9 P; @+ d2 h2 w- \
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)( z9 ]) {6 c2 R9 W4 f
  2.     // Логика получения урона NPC
    2 S) N  u# F' }7 k( X
  3.     this.health -= damage;  // это.здоровье -= урон;; v) F- z, F$ D/ O
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  ) r9 V+ A4 m) W  q, H1 m% C4 @
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());( C7 R6 I. c  O, T4 q4 _3 l5 |
  6.     3 v! }! v9 G& k  d8 O/ r2 Q0 R
  7.     // Проверка на смерть NPC
    0 A6 `4 D& O9 j, D3 L9 {' X2 A
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)! S) l% F( t  s7 N2 X
  9.         this.die();  // это.умереть();
    , F3 j) Z2 N# o0 h
  10.     }
    ! X, A+ Z2 \% F& c0 i
  11. }
    $ c7 @) L5 h9 b9 W
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    - Q9 p' x+ Y6 D+ \" p3 F5 y
Пример взаимодействия (с переводом)
% ?. j! T* X! Q
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");4 u3 q) u3 B! g
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");  t% \4 R4 k! j6 F1 C& K. V4 q
  3. 2 U2 M8 V3 h8 r' w
  4. // Игрок атакует гоблина* J: K' G3 b! g! s
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    # O8 L! q; [4 \% y9 r- S
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. + W7 F6 Q3 q. {6 R- i" \6 Z
% e. o3 A2 z8 l9 G- J
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
$ g2 L7 e- h1 J# r& v# k  @! cУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
: v& K( e! d- \
7 w; Z. M4 Q9 _5 L2 `) z6 s8 L$ b: K
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30' J& Q' y+ W- T. a  J: V
Привет, Астралия! Огромное спасибо за твои разъяснения ...

0 {% ~' c' m' U1 LОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
3 [0 j0 [! I5 g9 D: m2 w8 |1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    ( q( h: S  D. B4 C
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:; h% ]' x2 }, S% t- H
3 G( s  E2 k% j5 h7 `0 s
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)( w6 H0 j4 {5 p' h. W
  2.     // Логика взаимодействия игрока с NPC
    4 [0 n- e* z. G6 N9 _
  3. }4 d* ^) y1 i3 y+ [' G- {4 ]9 [# f
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:0 A( f9 c" X7 R  Q

. K  w$ S# w  s( ^
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)* D) q! x! R0 c: S# Q9 r
  2.     // Логика перемещения NPC0 r1 O! C) f2 w! x
  3. }3 P% X1 Y. k6 u+ y+ c+ G7 `
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    ( c% m$ x, m. b9 e6 X

. C! B6 v" S1 a3 t( B) b* `3 z
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    8 }) j8 o& @" R* u
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)% z; y9 y+ n8 F; y( k5 \" k7 q' U
  2.     this.health -= damage;  // NPC теряет здоровье
    6 G( y8 X( s9 X" |3 p6 ~
  3.    
    : ]7 ]5 E" ~* A, _$ X- g
  4.     if (this.health <= 0) {
    ! H0 J/ a) D0 d6 l' C3 r4 e$ G" j
  5.         die();  // Если здоровье упало до 0, NPC умирает
    / E! V( A' z4 [1 ~) \7 e! r8 s, L
  6.     }' [( V9 _7 q9 Z4 y
  7. }2 i6 k$ Y! g: P8 B
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример) O. O" S' _0 U/ \' \6 P& S+ k

% U; l; Y# w  o* Y, J% m6 s/ `$ u
  1. public void die() {  // public void умереть()
    8 b* K; }" o+ ~7 S' Z
  2.     // Логика смерти NPC6 R! s8 H. h9 Y# ]  b
  3. }4 Q! o1 X( [1 k
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:4 W7 l; Y" |9 X; ~
( Z/ f' Q4 O+ s3 G, f5 l) d8 n3 g* v

1 K5 {6 r  h/ N) j% U0 D5 @$ ]" v
  1. public boolean isDead() {  // public boolean мертв()
    * A4 \. _; A4 U7 k' S8 U2 i
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0: J% C6 u% f4 o' l
  3. }) u7 y( M% L5 U/ `
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    6 j$ o( M4 {* H+ x

0 i* B! {9 c1 h: A6 e* j( w
  1. public void heal(int amount) {  // public void вылечить(int количество)
    $ }& h# E; f# e+ m  \; G8 x
  2.     this.health += amount;  // Увеличиваем здоровье
    3 A5 {8 x3 W# G* c* R! z/ Z
  3.    
    & }( @* O; x( D7 n+ g
  4.     if (this.health > this.maxHealth) {
    7 @9 P2 N& L  X" y, y# I
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
      |  E( ]- P) M* R" i9 e
  6.     }3 b/ T2 c/ F3 E, t
  7. }
    ) L& R! `; N4 Y3 t& |7 |3 o( k7 ?
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:/ c: \( A. ~8 q* x5 S
5 r$ a7 h; v6 J; s# _
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл); {6 ~) [5 Z3 P9 Y* d0 D
  2.     // Логика применения скилла NPC7 w2 N- r3 r. B0 o% s9 L$ B0 k/ I. m
  3. }
    " Q- c& A; D1 g9 e+ L) r% G: [
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:+ }/ ]# C) V7 i5 k/ ~3 U

0 X3 T4 K  L) |1 }& Z
  1. 1 o4 @: o% g6 a0 p* n8 ^1 Z9 W
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок), g$ {- J1 i5 u6 _/ u- @+ k( v
  3.     // Логика взаимодействия с NPC
    : z/ K9 @6 a9 u- r  {
  4. }
    , M2 t5 W* m, }
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:0 n% s! \' O7 u4 r

$ g1 L* d) z$ U* k
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)2 {, ~* d7 F$ a
  2.     // Логика открытия окна диалога
    & D/ a8 e! ?- ?
  3. }' K' c0 S& r1 f4 r  _
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
# _4 X! r, @6 LЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
& E# [7 ~; i% y; b! E4 u& A5 P# Y7 F0 a
3 ^* z, G3 K  k, s" }' D

. Q+ k. e3 \% o( s4 [+ v/ W% `7 @/ [
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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