Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 ) Z* B: w7 _# j7 ~; l6 m
9 x/ X! \2 d5 E1 [4 `9 R" d

6 D7 r8 _5 p+ w; N7 n3 gШаг 1: Введение в классы и методы на примере L2j_Mobius- W' `5 {& K; K8 _3 B0 G
С статьёй можно ознакомится в разделе Обучение > Читать
: b% O4 B4 T  S' b' E
3 I2 N) o* J6 @% }( x2 i" y, lДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.- P% Q. a0 w1 i, Z) z+ S  i

1 {& X. A! z7 q# A9 C, w1 k9 \Обсуждаем:+ A" c9 L9 U  N4 ~
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.$ K. Q5 k* T5 A$ V  C5 s. l
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
' f8 b" m6 i: }9 x8 s) ?3 _7 @5 H8 \1 k

  `& F! y! v. J( [3 Y4 v! P- I
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!, |$ Q& u( t% _4 B! @" l# X, i4 {, [
  h( U5 Z/ i) R& P$ ?

) @/ t$ x) ?2 m; _
5 B7 X  ]( ~5 H
$ Z$ v$ n: _& o7 o+ \1 q$ G3 e8 A" E, Y1 X; }3 T- R* _

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?0 z& x; P3 O$ _- m  }
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:177 d9 ]. b. K1 U  d
Почему мы используем ключевое слово this для ссылки на п ...
) s; F, U: s8 N4 b! f/ [* q* v
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
8 C# H& b9 q* h% GПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.% h1 W3 H' i5 H

6 l  z. g0 }( ZВот пример:5 z" q" H& m3 h
  1. public class Player {/ R9 U0 e5 c) ?! ?5 t
  2.     private String name;6 _# w- [3 T( r* F7 G6 A' H

  3. $ {  B0 Z: Q. U1 U
  4.     // Конструктор
      D- [4 Y3 x+ z8 V
  5.     public Player(String name) {* o3 Z. i" L9 q! J$ e, j( G* C
  6.         this.name = name; // Используем this для указания на поле класса* i* v: Y4 `( z
  7.     }- D. Z; j" V( x9 u5 b! Y4 p
  8. 0 |3 X' W8 f, z, e4 t
  9.     // Геттер для имени3 }8 I+ L! r8 k/ e' f
  10.     public String getName() {
    + p! o4 a( |9 c2 B
  11.         return this.name; // Используем this для обращения к полю класса7 U1 `/ w4 m+ ]+ T2 Q
  12.     }7 L$ ?4 D- x/ N. A
  13. }" J% t6 C! _% S) M
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.+ n( K. }' \, a/ e+ r

0 A: m. O( U+ QКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.  e& K  H+ }  u4 R

- a* T3 I) d, F' w) Y+ c) g+ kПример передачи this:
6 j0 n' J* }1 W
  1. public class Game {1 w) u8 s. n/ @- D4 M' Z! S) V
  2.     public void start(Player player) {
    2 t  y7 x* J/ j+ k( d
  3.         System.out.println("Игра началась с игроком: " + player.getName());4 x6 B5 b) K' Z$ c  d2 d2 h
  4.     }
    + q6 o4 d3 |: c1 C1 \4 P
  5. }( I, [. Y; |6 ^6 t' U2 X# `
  6. . u! R/ o" `+ [; A# i. \2 A
  7. public class Player {
    ; Z: \! ?: |5 e' a. |
  8.     private String name;
      {$ `( {; d& l2 b% ~

  9. 9 C/ T( q/ y! P% {  y
  10.     public Player(String name) {
    + D- Z7 L* w* K: D* @1 s3 h! D; M
  11.         this.name = name;9 J' i) N2 p9 x& g; h5 d6 U& t
  12.     }
    ! h! G5 z5 b* l' ]
  13. ! b, O3 ?$ L0 \
  14.     public void joinGame(Game game) {
    ( X/ `0 i- `. n& |' o# W( g) A3 g
  15.         game.start(this); // Передаем текущий объект Player/ ]0 b1 O$ F/ [) p$ X1 P
  16.     }6 W9 ?: W5 Q; u+ a
  17. }8 Y; T! \! j$ k/ X
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
: |; c! p4 V2 l* z4 |+ ?; K( p6 Y

* G1 ?# ~6 l% `" DПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?% W$ z$ V* E- C' r5 Q
$ U6 G6 x) s5 p& m/ _7 ?7 R4 t8 S
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! ! K, h- Z, h$ S
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
; y+ c9 l& [1 O! d7 b8 N7 X
Mike123 опубликовал в 2024-10-17 20:05
7 b3 L$ \3 V" }3 LДобрый день!
5 d( P9 o# `9 l+ [% C* s! lКак создаются и вызываются методы в Java? Мо ...
- z0 L  }. A; B. Z
Привет, Mike 123! ?0 X$ d8 Y$ x* K! k
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.: {. p! H. ]! `& ^  L9 H' o, x

  m  y0 `( ^( q$ N, v) zДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
& z: i7 x5 ]- ~3 `' B
/ ^1 F9 w# G3 [, \$ f0 z" C# C  Z5 ?1 `" W# A7 ~" g1 [2 O
Как создаются методы в Java?
5 n4 i9 E. D9 V/ C; ^
8 N5 w( Q  k' B& HМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
3 e" B6 k0 S0 S5 @6 J3 _- t& q. e. M6 d
  1. public returnType methodName(parameters) {9 P( {1 A& O8 i5 U
  2.     // код метода
    7 t3 j. D+ j" d
  3.     return value;
    , j  M: d3 @& B9 z0 ^! A) L' [
  4. }
    % v$ \: q1 n* d$ i( i
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    3 v* X# O# G; D- K( N- l

' i: e; N- q8 Q8 n: k+ \) RТеперь перейдём к примеру." ~" O0 C2 e" T2 a$ q; `7 B

9 I( \; w) v1 r7 j; ~9 mПример на основе L2J_Mobius с переводомКласс Player.java — создание метода, u: |, G, n, t6 I. i5 f
  1. public void attack(Npc target) {  // public void атака(Npc цель)' V9 o$ f9 b7 P6 v$ Y* O; e
  2.     // Вызов метода атаки NPC
    : }' \  q) S4 [, {* z
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());. _1 ~  x4 E  d( w1 i; p
  4. }
    , Q3 r3 k1 |- C$ P5 G3 ^
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
" f% ~4 h' J+ T; z' z+ O& P0 k& v' b) _2 X* ~% c6 Z% c9 }

) X; _( [( Q) ~* y5 k0 {Класс Npc.java — вызов метода: g) E2 L8 `' c8 @

% x. {- \0 g( P- R
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    ( O6 O  b( N( e" F6 Y5 l  ^7 v
  2.     // Логика получения урона NPC0 |3 X; k0 b; y+ j
  3.     this.health -= damage;  // это.здоровье -= урон;& z; j3 F' Q( b0 S7 X; p' e
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    - `- e7 r$ f% p' C' E
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    3 J# E; X2 Y& N/ ^3 E% o# {
  6.     # N8 Z$ F6 D! L" `* R% @
  7.     // Проверка на смерть NPC
    4 E. ?8 L3 P( |  R) }6 f
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)5 A' A/ ]3 V: @
  9.         this.die();  // это.умереть();
    : `5 s: z% o. ?/ ^3 ~
  10.     }
    % B7 @: y$ @4 e1 x2 m; B0 H7 D# Z
  11. }
    ) L3 k" s  V5 t/ `
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).+ u8 X5 V1 E6 b4 G6 ~
Пример взаимодействия (с переводом)0 S8 c4 u3 Q; @. Y! G) u% m* U! Z
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    ; P4 T& [8 U1 b0 z, P6 j
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    * U" \1 v$ p2 Z

  3. 1 d  `& Z3 d8 o1 G
  4. // Игрок атакует гоблина+ j, i$ ^( A' A9 r, O
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    2 P& T, Y2 Y% R. V4 Z$ @
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 5 V) {, P5 a/ y' g8 T, O0 e

8 ^: a) q( y. p) V3 ~2 {& P
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
# \9 ~2 _6 H: X' o9 EУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!# {1 E7 H8 P3 N( U) f$ A  M

3 W- P- d) m8 N9 V$ l3 y1 t, r
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
2 m) q$ G6 O8 VПривет, Астралия! Огромное спасибо за твои разъяснения ...
7 w5 R. F6 e9 Z) w  k1 B
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.: ]- v  h+ G+ X/ v9 o8 P
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример  ?; w8 ~: |0 s0 q2 m; i. H0 y  I
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    ' D) f! D" z* B- H7 J% y" }
: L& b' p* {5 h# n: a
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    8 ?7 g, x  n& G! D3 f
  2.     // Логика взаимодействия игрока с NPC
    4 m  o+ o# Q# h3 y" K4 p9 n
  3. }8 G4 U1 I3 z' N
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:. p9 Z+ b$ f% _: A1 S" F) O; _3 H

; O( o/ k+ e+ d) l. X6 n
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
      C0 ^: u6 `1 H; \' _7 V  S  q- \6 J
  2.     // Логика перемещения NPC
    6 E9 a) i% \; O# v( V
  3. }3 v9 Z8 k. \3 X4 ^
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
      [9 b% j  M7 A
2 s% R9 A/ n5 |, r
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    " R" e7 N& H' O, z& `% T0 w
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)+ ]% w# T5 q( G) c; |+ ]4 @
  2.     this.health -= damage;  // NPC теряет здоровье4 `+ H+ d* w1 R; t. O$ I% U
  3.    
    ! }& F; H. X1 h9 e" ~3 O
  4.     if (this.health <= 0) {; h( `  W& O7 c6 b8 X. t5 M3 o
  5.         die();  // Если здоровье упало до 0, NPC умирает7 q$ q6 Q4 S, c6 c2 p, e
  6.     }
    % v1 f- y9 K2 p# B2 {+ N5 f7 S
  7. }* L) s1 @8 M/ v& }# z
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    3 v) d, I! Y% M+ G/ ^: z

5 x- m$ C8 |* X& _: j. [5 v9 n; F
  1. public void die() {  // public void умереть()
    " ]6 P2 J2 F9 _4 Z) j5 R( d! C
  2.     // Логика смерти NPC7 k9 x: |" W; F$ l
  3. }. a/ s& t8 L- e
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:6 m. m# w8 w7 Z& v# A- h

) Y& H, @8 g% z! X; Z3 s1 g+ b6 @* H( h
, c$ c8 n  i* n
  1. public boolean isDead() {  // public boolean мертв()# M( F8 w' K( z% ]; q& q7 G
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0' K) O/ c5 |  I( A+ q# O" F
  3. }1 t; d6 ?6 j* |$ z, m0 c
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    ; m+ `! t1 E7 b( [! Y# m4 ^
. \, L1 m& Q# S" J
  1. public void heal(int amount) {  // public void вылечить(int количество)4 g  }+ A" l$ e# k: b  O
  2.     this.health += amount;  // Увеличиваем здоровье
    . K2 l- e& M3 b. G7 j# o' N/ \/ G1 H
  3.    
    ( D5 M, g: ^. ]
  4.     if (this.health > this.maxHealth) {
    2 H8 e, D/ P6 b2 V" B$ `% {9 A- c
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    5 g  ]/ w/ t( e* ^* r* T1 t. u7 N3 _
  6.     }
    ; u3 a2 W/ @3 B/ n" G9 H
  7. }
    7 m6 i7 q" w% V" Z3 {
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    ' r6 Z1 F# k3 |% ^+ V, n) C
9 r  K8 }% S2 @  k1 a2 f  ]
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    3 G' N& }% ?: M: ~0 G
  2.     // Логика применения скилла NPC* r3 |# t- {  `* Y+ B6 ]
  3. }7 q. x1 g2 r8 j& _  r
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:" k0 c8 U' [- u, V) y

; A/ M; E0 A6 ?% o+ l& u. k

  1. $ l( n! j  M+ n9 e9 S3 q: F
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    7 ~5 ?0 D8 D6 n" q% J
  3.     // Логика взаимодействия с NPC
    - q3 N) z+ Q# e& f8 [* ~* H2 R
  4. }4 {( y9 Q6 N5 |9 ]
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:' H, A: i2 l9 K/ F
1 M$ c, m- h- @3 H
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок); p% `  s3 S- F9 E6 q( K
  2.     // Логика открытия окна диалога
    6 V/ ~- Z3 R, ]1 _! ^( R
  3. }5 U- |+ ]* }6 j, t6 m4 Q& Q
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.2 N; J0 y- m; x: s( g$ O( k5 \
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!( K+ D+ y1 K9 C) Q
! g& q5 s5 a, r8 k

  \$ |, M  L) U' k+ z5 K
1 s( _$ W$ }4 o* N, S+ a+ h+ X) M  v/ m' S9 m$ @9 S
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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