Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
: G0 ?4 O2 Z( P% u+ j: }) H+ e, C! g8 }; V5 }
$ a' b1 u% q* l& k9 `$ M4 k) z
Шаг 1: Введение в классы и методы на примере L2j_Mobius" n% |0 ^6 d% I4 K( P1 v7 d
С статьёй можно ознакомится в разделе Обучение > Читать
( u0 |! f" m4 o% W" W( B/ Z8 _) o1 C4 b" |: T* A
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
, w$ k; J8 E) P3 V! l
  l! m  u$ K% {Обсуждаем:6 c/ N2 a8 }! A/ ^- N
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.. ?( l8 l: b" `
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!; d2 T$ A) S3 {
. X8 {1 c. y- F2 g5 r0 X# {/ m

. k- c" w6 Q7 w2 k
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!9 L$ A: K# J. F! a; ]! F5 X

9 e# }) u2 R* w. @/ L
) Q) d/ B5 E$ `: D2 A) f8 D
; ?8 T, x7 }! H3 a  A, o% b
* ^8 U$ s2 }" \3 x% B. @+ w2 j5 d# p: ^0 E

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
% I0 G0 D; O8 x. D
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17$ O% f5 g% G+ X* g' q% t# U6 z4 z
Почему мы используем ключевое слово this для ссылки на п ...

  w0 J+ ^- w+ V. o; {Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.3 E, e/ T% n6 ^( V* p
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.3 n: F. s& Z" f/ _! ?( V& F" d
6 y0 a+ V. A1 ~
Вот пример:
# J- y! ]) _& |! r# f, u& M
  1. public class Player {' m" T: s- Z6 T/ ?
  2.     private String name;" ~/ c5 u3 l. ^6 e6 `
  3. 9 V' y* T( z( T, }  w
  4.     // Конструктор# r* `5 _5 Q' M7 A; ^
  5.     public Player(String name) {
    9 s- A/ ]3 ^  [" k4 C9 d
  6.         this.name = name; // Используем this для указания на поле класса
    9 A; V) Z/ \3 w
  7.     }: x" ~0 O! S% v$ U3 q- S0 ]8 l* L

  8. " e1 Z' M+ V1 @7 O
  9.     // Геттер для имени
    3 p$ B$ t/ r* [' x1 D3 Y. L2 i
  10.     public String getName() {
    ! @4 m( I9 O8 l# w, V
  11.         return this.name; // Используем this для обращения к полю класса
    ) d1 l8 j, b6 P4 V( P
  12.     }; j* @9 p$ q8 C2 E. z! o
  13. }
    8 c, l9 q' u6 \0 ]5 W& m+ @
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
) a, d. O  D/ E( K1 k0 J  i7 m! n9 ^" T
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    # D& Q  W$ l* R; h

/ E3 M6 S- Q) `( FПример передачи this:
5 n! |5 v' T; W% t" y  m; c; n0 L' |
  1. public class Game {
    ( R1 A) h* U/ E. l
  2.     public void start(Player player) {% Y$ ^+ o) y& l: \/ w1 z
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    ( [/ w. B4 f0 [0 `- @8 t# y
  4.     }
    7 P: r: t9 [  s- M3 @2 B2 u7 O
  5. }
    : }: l* U! p" Y" J5 {! }0 I

  6. : I" ?$ ?$ `8 a: q
  7. public class Player {& |: ^) B7 r! ]4 [, |
  8.     private String name;
    4 k, i5 u# C) y# I

  9. 5 {( j) b2 {$ K$ k7 D
  10.     public Player(String name) {
    # Z7 e! g0 g' L0 N& S
  11.         this.name = name;, r0 I" M9 R, ~- j; U" Q
  12.     }
    3 b' ?) O, B. f7 K% W, H
  13. " K- i) C) V3 e$ t5 D8 c6 B; G2 J. I* E
  14.     public void joinGame(Game game) {# ]" B9 L( c* s3 k8 \% d
  15.         game.start(this); // Передаем текущий объект Player) b3 N- A' Z, _! _  @
  16.     }# a- Q8 o& P: K: A
  17. }9 r5 j0 `2 N+ g. \; Z1 j
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.' R, Q- _1 ]3 V% i1 Q6 ~1 f

9 D# H  p( Z2 ~% @
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
3 y% Y& a+ u4 L* e4 G, T2 o; I
& U5 R3 v/ c5 t9 g: ~. Y; }
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
. [. D/ {+ V0 r& n9 N0 nКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 8 S" o* l) ^; r1 ?1 R; T
Mike123 опубликовал в 2024-10-17 20:05
4 w& s& K# ?; `2 o& O& w+ S  c9 IДобрый день!
# P+ Z; L9 b2 JКак создаются и вызываются методы в Java? Мо ...
6 ], f" y) M1 C9 C1 X
Привет, Mike 123! ?
& G  [/ G! ]. V4 ~0 s. o+ TОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
0 |& Y1 |6 ]$ t2 A1 h
: o, ~" W% ]+ e$ b4 R3 B: HДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.& a, q7 R- i1 Z
% V. F9 T& }2 f5 {

( w$ K" R+ M8 NКак создаются методы в Java?3 i8 J5 y2 f0 T5 z( R6 ^/ V

6 R) a& q( f( j6 M: `# z2 vМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
& p* ~; c" Z: F- Y  y) v& Q& t, I# T5 |. L5 P) z1 E
  1. public returnType methodName(parameters) {
    . C$ h9 E3 l3 e4 {/ m
  2.     // код метода% R- i' L* O7 ?- h* W8 y% u
  3.     return value;
    % k4 x8 {' z6 a; q% g" V
  4. }
    ( z4 t; B3 T9 d% i/ \. z
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    ; l  g1 M( ^, ~& \5 _- }  Z

5 k# d* Z$ S$ s3 ?% oТеперь перейдём к примеру.
+ H8 i- Y; d, Z1 L! e. L. f! m+ A. b' \5 P
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
' X$ k7 ^9 W" f! |# I, L& c# Y
  1. public void attack(Npc target) {  // public void атака(Npc цель)" |6 c2 z; y. a0 j& ]! Q5 c7 i5 r
  2.     // Вызов метода атаки NPC# d& Y3 F, T9 t/ p, ]: a2 `
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    : S# z# ]6 Z( a; F2 w, Q1 \; u
  4. }3 v& z! B, ?! M
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
1 p4 J  w  U7 u6 ~& w. J  [5 T+ }1 v* j: i+ k6 Q
7 A$ j9 d; u8 K. s* b. z' l
Класс Npc.java — вызов метода* O9 ~2 P6 w* a+ v

- _! m0 R2 J6 S) }
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    0 D" W5 \# p5 L3 p
  2.     // Логика получения урона NPC, m) q. a: w, ^0 y, \
  3.     this.health -= damage;  // это.здоровье -= урон;
    ' f& k5 f- C; E2 f* {# a6 e  y9 w7 j
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  . o* w' l9 x9 D# y- w
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    ! I, p( J4 }/ V( U
  6.    
    # Q) v( {, C! `& f, Z
  7.     // Проверка на смерть NPC
    ( C" f/ n2 c' P7 a! V. x& Z  o
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)$ f. f, M' u: D) G* d1 _
  9.         this.die();  // это.умереть();0 k( ~$ A- W& a8 L* M3 S3 ?$ U
  10.     }
    ) k6 Q" c9 a# \1 @
  11. }3 w  C5 @8 A( W0 W, y! J% N
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).1 o  g8 w/ S: o0 E
Пример взаимодействия (с переводом)  m. A* u# G- m
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    + r8 E, W! U. w: U7 n
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    ) m$ {: T% r. F& m7 \: O) o

  3. & @2 X; s& B* G- C' W1 B/ a6 P
  4. // Игрок атакует гоблина: [  q8 a7 S7 K% l
  5. player.attack(goblin);  // игрок.атаковать(гоблин);( h" @( O! D+ X8 J( ]& y# _
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
* I5 X$ w, e; s9 I3 @! B  v, n: Y/ @# M, q
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения., g( {2 B% z  y
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!. \- v. r* q1 ]( c4 Q( d

, k1 n9 Y, ?0 T" D
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
* b. Q% Q" p+ ^/ _" l0 L9 r& FПривет, Астралия! Огромное спасибо за твои разъяснения ...

/ C- S+ {+ d6 M0 Z% |; BОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.! ?( V  r1 W8 a/ f; i$ W
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
      a3 O! G- T3 _
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:9 d3 `3 u# j9 i" J1 U+ Q, D
: w6 _- C4 s. k5 Y
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    9 o0 ]9 W8 C, Q
  2.     // Логика взаимодействия игрока с NPC+ u3 i2 A$ i" E) D# j
  3. }) R  ?& c. w+ e8 n+ B, ]
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    4 E/ o1 q2 t2 j0 F. ?
6 c5 m2 m8 w" \' c
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    , R, X; q2 c# Y7 |4 j; g7 w  E
  2.     // Логика перемещения NPC
    5 o' z8 x$ y0 d3 h* S
  3. }
    5 m8 R+ Z' T" g+ c
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    : ?7 D0 U3 s& u7 ]2 W* C
! U0 |& d) [* u1 p7 W
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    9 [3 Z6 `  w$ g" Y
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    , T- @8 a+ u9 w* O9 D3 u& ^
  2.     this.health -= damage;  // NPC теряет здоровье7 [% y6 {  ?/ o; I9 e# f
  3.    
    8 i5 f7 I0 \5 F' s$ T' X+ G/ d
  4.     if (this.health <= 0) {
    , B. V% U4 e+ X( e! _0 A
  5.         die();  // Если здоровье упало до 0, NPC умирает
    3 _/ \8 S6 }) K) O3 H; b
  6.     }8 x! W/ p" h1 v8 h
  7. }1 {3 V* g2 e( b' D6 Q( x
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    ! q- I! m$ [9 o7 g- V$ U. v. ~9 x% }
2 o  U/ p+ M% i
  1. public void die() {  // public void умереть()
    ! X; S9 C. ]/ |6 X( A
  2.     // Логика смерти NPC
    5 A& e+ N( C. u% K
  3. }' T; `/ E$ L- A) H
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    : ~) O' w  f$ H% w
4 S* l$ R4 `0 c( N2 ^$ ]

8 J& |- V) Q: c& w
  1. public boolean isDead() {  // public boolean мертв()9 O, b6 [: K+ Q1 X  b3 C) _
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
      a1 x) N+ I6 x  u6 x8 ~2 W
  3. }
    1 X# Z- W) d' G8 p: I. b
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример. l9 @+ N2 @; n  r: a

% L9 r1 @) b8 n! C
  1. public void heal(int amount) {  // public void вылечить(int количество)1 j! }3 E. x) O' i- O$ k
  2.     this.health += amount;  // Увеличиваем здоровье
    - a1 S9 X$ B6 ?# Y: d  J/ o
  3.    
    ! U! }  L1 o9 W/ I" V8 q
  4.     if (this.health > this.maxHealth) {
    ! Z& ^. i- c. [
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального: b" i8 ?$ D, Y' X% r
  6.     }
    7 ~  e" G  i! S1 a5 c: O& ]
  7. }8 B* i9 Z4 _- I, h* x6 X; \" d. T
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:) j5 T% U; Z  |
8 z9 Z6 Y& N2 |) y8 T3 E5 a0 B
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл): F; u" [# T% D3 z
  2.     // Логика применения скилла NPC
    + f; ^1 y7 t9 R* \3 O
  3. }
    " l3 `9 m/ a$ |2 X* Y$ v
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    7 {# N& I/ ]( _! k' O

8 ^- `4 C" m" g1 n% m; h

  1. ' K4 T+ u+ n5 ^  L* z
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)" D/ F8 |0 F' c  U+ w* L& D5 E
  3.     // Логика взаимодействия с NPC% E' t! ^( s7 j0 d: m0 J
  4. }6 }  S1 e2 p! I9 q! b* K
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:/ m5 O- `. F  b. ]
1 v7 X3 T. b0 B6 v: O" D# r
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    ' t6 S' A4 B& s0 _! t
  2.     // Логика открытия окна диалога  |# k3 g- h% h7 N4 @4 m
  3. }
    4 Z: z7 n7 D$ o2 ?, }3 q
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
& O  G) D& \9 `: s4 c( lЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!' @% N. a. ~8 Y! r4 M/ ?- Z4 Q

. g5 v9 A# g+ z* _# M: `
; Q. v8 u2 Q; C, a4 @2 t; t1 g& l1 H! J( a

3 J* _& m0 p: J2 m! \
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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