Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
" h- l% ]5 Q& m9 _. k7 n, o8 K4 q+ M/ ^) f
5 A2 X; ~, s) s/ Y
Шаг 1: Введение в классы и методы на примере L2j_Mobius
% w1 {3 J% u3 b3 e) `$ oС статьёй можно ознакомится в разделе Обучение > Читать
' r, Y0 x. E$ v# ]8 D& B- b6 K
1 f* x9 H0 ~+ p0 _Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
% X  e) l2 Y2 z% e4 V* B: c* X( Q% V: o' M
Обсуждаем:0 n; l9 ~- A6 C0 b8 H
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    - o; J% @% `; Q" O
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
; c! b+ J& I  Y
( i% g  G  f  d( q( {. r

! a0 i2 A7 N% y+ i4 @5 PИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
: C, A& F0 I8 [9 I& {; ]( P! x3 y
1 a' L% V0 z8 C2 o$ m$ ?& r! }
& H8 V# l$ e1 o7 s
, `3 @/ t0 h* ?: ?3 w% {+ y0 @" t- C- W- @2 u3 b& R
7 y* c1 M! K* J

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
7 j# B$ M# z4 i8 B- B9 N1 ~3 J
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
* u7 ^* a+ o: l8 ~/ v9 DПочему мы используем ключевое слово this для ссылки на п ...
# O$ z+ W1 p/ S3 A( M
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса./ E# s. U* ?  n: H
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
! G8 _0 m3 Y' y3 Y2 n0 d
. k8 D+ B. Y/ l8 @. z8 F% yВот пример:5 i5 l: ^# h0 `/ b/ _
  1. public class Player {( r! y. @" R# ^/ c" w0 d
  2.     private String name;4 I. w5 H% G7 E: z) \
  3.   P( P% ~" ^+ ~. i: ]6 p4 W- P
  4.     // Конструктор% B8 Z. M1 }# }+ o2 n7 ]3 @4 ]4 X% r; R" I
  5.     public Player(String name) {
    1 l3 Z8 h, |( n% K
  6.         this.name = name; // Используем this для указания на поле класса6 n0 t& o! M& N1 U' C
  7.     }
    ) M/ Y+ S6 j& f& A6 ?1 |

  8. ) F/ i+ ~; {! O
  9.     // Геттер для имени
    ! O+ ~9 d" \: K* X7 J" \* m+ |5 O, \
  10.     public String getName() {, @3 i) W- V5 r( `
  11.         return this.name; // Используем this для обращения к полю класса
    4 B4 `/ v3 B7 |* Q
  12.     }  p/ J+ e7 a* ]1 N
  13. }
    0 ^* j# M+ ?, i" W
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
- y4 l+ n9 {. C1 @
( n0 X% _+ d5 K) W/ GКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.6 B: K1 E% A, ?

7 I- j' q9 X$ lПример передачи this:
, a% s5 c4 V4 h4 i, V6 B/ x
  1. public class Game {
    # k" H* o6 `6 U( l
  2.     public void start(Player player) {/ z$ Q! S- {% O- o. n5 [9 o
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    9 d# g% L/ ]7 Q% [7 x& L
  4.     }$ W0 v5 J8 i- N
  5. }! @/ M' [2 R& d! m, ]

  6. 4 D3 p" L5 b  S6 Q5 A* N8 v
  7. public class Player {& x7 n! m, t; N: M3 J) r5 i9 c3 T$ C
  8.     private String name;
    ! F/ R/ M8 W0 b; S5 i$ W* h
  9. + B; I7 |2 }- U) P. T2 i
  10.     public Player(String name) {' _- b) E8 `' c* @
  11.         this.name = name;0 P! x0 h7 h6 c  G/ B" S, a/ l6 ^: X
  12.     }  H9 F0 t2 i: H) ^$ V

  13. ; K, ^4 s, V( ]" w. v' u
  14.     public void joinGame(Game game) {
    3 d2 [" p- @7 w6 ~4 q1 N( |1 M& {
  15.         game.start(this); // Передаем текущий объект Player
    ( Q" N7 G. q7 l* h0 r6 @; H  u* G
  16.     }$ c" i, r5 e' a% M: {  H
  17. }$ q/ n3 U/ W4 r1 i; d
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
4 o+ [" [& Q' S
7 t/ W  a: t6 q' V
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?; Z5 |. q! o6 u1 V
# U" ?/ G# ?3 Q% |% a
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
; A4 @+ \3 B0 z& F' `$ ]Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
7 ~! L+ q1 V" a+ B
Mike123 опубликовал в 2024-10-17 20:05
  A' [2 D# H  w/ ]2 z4 k3 IДобрый день! . v$ d5 Y0 g, `* m+ t8 x
Как создаются и вызываются методы в Java? Мо ...
0 M1 A) N( ~: Q: z
Привет, Mike 123! ?
$ t5 r# t3 Z; O3 n, ]9 ^: gОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.% a" E, a# [7 {0 C$ K
, \# d/ B3 z" z! h! A' w
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.* \# w) n$ L) A: Q: ~4 o/ R' P
  O+ R- C3 G, \( G( D

6 S1 ]! c/ k: H2 p& x9 A9 LКак создаются методы в Java?/ d. ~* k) y; k: _9 g
" q. b7 h. z9 i" ?2 X9 E
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
) o; @5 \9 f: f* v1 O9 u+ x
' ]" f. U/ ~5 `
  1. public returnType methodName(parameters) {: t2 G# d8 G3 }
  2.     // код метода! Y3 {1 E# B8 O9 C1 W! U' ~3 M
  3.     return value;
    , \6 O' x% a: t
  4. }7 W" ?* r2 f" j) f) b
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    8 E( a' ?. J0 z4 q* J; h! T

+ Q( Y3 o9 v" E  C% P) yТеперь перейдём к примеру.
, z' E7 W- |7 u+ {
9 ~- d* C8 P& o: aПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
3 {, N& W1 M, w$ H4 x4 z0 |1 a- G
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    ) V7 E- f2 N' a+ a. `
  2.     // Вызов метода атаки NPC3 f; k9 G9 Q: l0 ?6 I0 P3 S
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());$ o9 X4 j  c, H6 L
  4. }: e- a! j4 ~: `1 _! Q( ^
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
% E: |# Z' g4 [" Y! v3 Y( f
& x5 }; z" S  M9 p
8 E! s$ P8 S( g, f* e* Q/ qКласс Npc.java — вызов метода/ g, F4 D2 j6 w! @; {& ?0 M
/ C) H8 o+ m) U+ U  j
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)& I5 u% n9 _1 Q) {4 p& m3 c
  2.     // Логика получения урона NPC! F8 ]: k  T" B: Y0 z1 A
  3.     this.health -= damage;  // это.здоровье -= урон;
    " R! }+ w: h! W2 B5 a  ~
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    * _+ m* _' j- V- s. @
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    $ T/ I) i7 \$ b+ u- v4 W
  6.     % `! ]4 `& z# Q" o! p& ]8 f% x7 b
  7.     // Проверка на смерть NPC
    / _6 o" P( [& ~4 S: D
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    / c7 a. S$ }4 l* u
  9.         this.die();  // это.умереть();
    $ @# D% `$ ~, X" e; ^' F0 Y( _; j
  10.     }
    ( i1 e$ ~2 G# r- T
  11. }
    5 a1 s# G3 x$ G
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).: D% ]1 _  d# K
Пример взаимодействия (с переводом)  M, f8 k7 K. F0 G4 Q2 Q
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");5 q1 }0 _/ b' H( \( P# P8 ?
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    * ?4 h- z. ]* e( c9 ~7 v8 C

  3.   v! o5 ]9 C% ~4 w1 _* x' D! j- B
  4. // Игрок атакует гоблина7 e( N4 t  g1 y* K7 K
  5. player.attack(goblin);  // игрок.атаковать(гоблин);! d3 @. t% B1 L$ ]1 }, |
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. ! v3 F2 z1 U5 S  ^3 m+ U
. I& r5 `; [; `8 `' U( C# U
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.. H; W" i3 a+ n/ b2 u& X- P
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
8 b4 r6 H- V# j: K: s; J9 ?5 A1 q; K7 B% A' P4 O
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:304 _; a1 h$ o' p
Привет, Астралия! Огромное спасибо за твои разъяснения ...

+ C7 `! O8 l5 ^1 y& [( K; ^% c8 y3 UОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
3 H" e' ^8 I5 C: f* Z+ u1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример7 M. h+ n$ m) T" f- T
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:& M+ Q# D7 p" c7 O
0 X" j5 w! m4 |
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)7 o4 L9 u" O- ^8 g% O. e
  2.     // Логика взаимодействия игрока с NPC( {6 i/ u/ Q6 ~
  3. }' ~. V* g% m: B8 h$ W0 ]
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    # b) x7 F+ K: j7 L$ Y

: _, F( O8 Q3 z  C
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z), R  E/ b: H8 s( N# R4 ^! H3 x
  2.     // Логика перемещения NPC! s( c  D, P+ h6 o; M% s* ]8 x
  3. }& ]! G& W% q: Y7 b2 U$ E
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    + g# ^2 G- M6 s' o$ r( L: J

* H  Y# D' V- u4 N5 p
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    / }! z1 {+ C! g9 e1 _6 t9 l
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    # ^  N! r/ v+ F( p) }
  2.     this.health -= damage;  // NPC теряет здоровье' I0 Q  m- X  }
  3.     1 X1 u" |& t. l8 I6 F
  4.     if (this.health <= 0) {0 ]9 R8 x) L4 L* k0 e9 E- G" q$ u
  5.         die();  // Если здоровье упало до 0, NPC умирает0 C- R  O. l# s7 f+ s) a  w. W
  6.     }
    # L! D; y: O+ `2 O
  7. }
    5 {+ _: \2 w+ v! Z: E& c. B6 x- i
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    # \; u- |% e" Z, Z% X$ t2 U% L
7 F0 Y2 ?' o6 p, ]. p* K$ G# f
  1. public void die() {  // public void умереть()
    8 z7 O8 w0 k% \% b0 W# ~6 J2 D
  2.     // Логика смерти NPC
    . D! u; r+ {3 F1 Y# b' L
  3. }# K! a" \, X6 k2 H
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    , p' J1 R% _5 y9 [5 A& I+ d

3 G% a4 l2 {* E8 Y3 L( X7 c! p2 @' f
  1. public boolean isDead() {  // public boolean мертв()
    1 n3 E" s% P3 E  r* X4 \1 \
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0; h& {1 a% G2 c' V; a) |6 h
  3. }& N4 w2 j6 w7 c( Q# O
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    * u9 N& }, G  m% z( A5 B

8 x& _6 t, f" c. Q8 S3 f% G; }; T0 L; E
  1. public void heal(int amount) {  // public void вылечить(int количество)
      M! ?" Z0 y* E6 x/ F. o7 i' L' S
  2.     this.health += amount;  // Увеличиваем здоровье
    # S) V7 L3 F5 p& g, Y* w
  3.     ' `9 b- \, F, S7 z& R5 y
  4.     if (this.health > this.maxHealth) {
    ; P; h/ d- a: Y2 W# @# I
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    # J2 H( c" T- k4 y1 O, R% V; \
  6.     }
    ( w+ d* \( _4 ~; a% D
  7. }. j; W. a2 u  k3 x6 E/ F; p6 k
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:: G) p& A/ T% W% g' J7 g- _  B; w
3 [! u* x8 m7 y: _! o
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)/ F! d$ \, w" Z2 F5 z0 i
  2.     // Логика применения скилла NPC
    & p! C8 X: z- g
  3. }
    4 B/ h5 h- d) E. b/ K2 ]
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    5 I; {" y: @( ^9 l

4 x) W. e( R& b* ]/ \
  1. 3 M( a0 n9 G% O' T. Q5 R
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    8 ]2 j; u2 S* P) _
  3.     // Логика взаимодействия с NPC+ D: j% n3 i3 X. n
  4. }2 ]* \/ c" b! c: I; a
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:" K$ _8 {, v0 C' `) h5 c# s

1 Y1 u% R4 i+ d. \; z& k
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    : v# `% I0 x, h8 M2 Z5 k) g4 i& b
  2.     // Логика открытия окна диалога
    4 }' R2 ~! z# y  Z9 y3 p$ }, r
  3. }
    ; k1 H# s/ M* Z- L3 S+ e0 x
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.2 I( b0 K0 R! U4 r4 ?
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
; R9 Y7 g. Q0 ^$ G4 o0 P* a$ E" ~
# i# p" I3 G( X# v
2 O+ [4 j& {, y" t' P- o3 n* y" B7 ~1 z  Z9 O& O) ?+ P8 w

4 @6 E; O5 t4 h( A" v
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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