Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
) L1 x" G( {2 ^1 @5 Z
- h8 T: `' D* \9 j1 N4 G3 q7 ^2 D+ M4 U( o. e
Шаг 1: Введение в классы и методы на примере L2j_Mobius3 Q6 `! V. H: ^! T0 Y
С статьёй можно ознакомится в разделе Обучение > Читать
$ f5 v6 g! B7 `/ S  ^$ x6 E6 ~6 l& N, N2 ^! M; l6 n; [
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.: f: \6 V6 v4 M- |0 M

3 d6 p7 Q/ f7 Y6 C* a7 a3 {Обсуждаем:& {/ F, V" M0 R) n
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.2 Z, p) H2 r, z$ P  N/ B3 T# E
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!. }4 }8 B, Q9 M* K

2 p9 |: a" ]- j: [3 D2 k' G

  h( ~; e: y: l- J* I: DИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!0 v( r/ P' E  J4 H8 w

9 G+ Z0 U* v9 a, U4 X1 J9 N7 p% A8 l1 G  m4 \3 y, H
5 ], Y# U( D. C; ?. D) v* z" r3 j

; w; d: q4 w7 U0 L# a8 j  ?% B* c$ g; }6 K8 Q& X1 w) Z

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
2 l$ Z- v* x2 T# r
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
) y* d! w. Y- `& m7 d$ F, SПочему мы используем ключевое слово this для ссылки на п ...
2 T6 n5 Z& y! ]
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
  l6 X+ y: ]' w: L7 |* WПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.- O: F9 w4 y/ I7 p" s& w7 u

/ D' O9 N: V4 |Вот пример:1 ^4 k/ S1 x3 ]4 ~5 }9 H; K" K/ m% _
  1. public class Player {$ s' P  U) C7 X9 h' _
  2.     private String name;# _% W) H. x0 ]5 ]8 f- S, Z" z
  3. - q$ f. j; M' S; V( P9 c1 ]5 G
  4.     // Конструктор+ i% b$ m$ K8 C. u' O4 B: U
  5.     public Player(String name) {- i7 ~2 a9 ?, e: y
  6.         this.name = name; // Используем this для указания на поле класса
    0 |# q7 g2 q- w0 K3 R4 ]9 J+ h
  7.     }$ }  e9 n  ~1 h' p  G; q

  8.   @  {  n' L1 U( s
  9.     // Геттер для имени# P# i0 T! y, I$ {7 ]
  10.     public String getName() {
    % b7 X: e( G. G$ v5 A
  11.         return this.name; // Используем this для обращения к полю класса" }* R. Y1 C. U
  12.     }  E+ Z# |( V" ^' M( Y5 x
  13. }4 x3 B  p0 ~% o
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
! U( R0 B' z# G- H0 }$ u
$ P$ K; v+ ~' \5 sКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.- q' D9 A9 U2 T3 H
* W( Z! n( M0 \  X9 p) F" s: w
Пример передачи this:
, ~6 r) U+ z8 y) [1 M7 x
  1. public class Game {( D; d% ]8 p' n4 r$ L8 z6 ~: H
  2.     public void start(Player player) {7 H& m/ x6 s9 y& J
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    % F' T0 I/ t  w$ E
  4.     }; I0 _/ J- C% I
  5. }
    ' ?2 A8 C+ j1 B/ J

  6. " ^. k" n) O) J, c/ g' ]
  7. public class Player {
    , ]& I' V5 q5 ^* L7 h  j- y
  8.     private String name;
    % y2 g7 X9 \% K! @* V

  9. " o( l! h5 E3 G
  10.     public Player(String name) {
    ( t* ^* ~4 C. t- Q, \9 J; d* v
  11.         this.name = name;
    ! L0 T2 n3 c' [& H- b
  12.     }
    ! z- ~; |" y" B
  13. 8 l! t& k$ _; W# W7 J& i
  14.     public void joinGame(Game game) {+ `! p. K& X" V8 _; S
  15.         game.start(this); // Передаем текущий объект Player8 t3 |  P7 b& z8 H9 y1 G. a# c( u0 H8 |
  16.     }
    / T) @" b  Z, E9 E2 c$ }
  17. }8 `6 X. Q2 C. L/ O$ l
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.  p- E  l' r2 x( `) X, I


* f. H! R4 {# ~Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
1 _0 q; p: @1 V; A) ?1 l
/ @, D* e, z: Y7 Z1 M5 @
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
4 g* O# {) d" D, W6 EКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 ; {! k; S1 \/ D; k& k1 i! u$ A. P; D
Mike123 опубликовал в 2024-10-17 20:05
5 ~; P* o: f$ O5 x; `# uДобрый день!
, i" s+ @6 e  b2 XКак создаются и вызываются методы в Java? Мо ...

# N+ g) [1 N  z* v( m  b0 gПривет, Mike 123! ?- W0 b- }9 l* H( z! y1 i+ A) I1 [- A
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.# c" b# l9 e/ ]& a' p* K2 h* t
, J$ C: A  v4 Q( _$ k; w" ?* C+ w& {
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.- E# f4 @' ]6 r( C5 b# C
! u1 m; O5 N$ M
: n0 w+ E% s( W; }
Как создаются методы в Java?' q* P/ ]$ l2 j; H9 g9 P! f1 f# A! M

5 u, U, H- `( X: m6 YМетоды в Java создаются внутри классов. Вот базовый шаблон метода:% j& ]+ N, X( n3 P4 ^

% W* i# g$ \& \1 N1 ^' J
  1. public returnType methodName(parameters) {, {; q) K6 U; [" l0 |0 }
  2.     // код метода
    - \3 W' w; R  U
  3.     return value;
    0 R, ]9 g& K8 u6 y. g% S/ ]
  4. }
    & m+ G) A+ c* B  v( \
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    ! H5 M; N* L9 J& ?  M, P* e! z$ I5 u
  o: S  M$ {9 j3 {) C
Теперь перейдём к примеру.1 c. W  ]: v/ e0 ~* D8 `7 B! G
0 C3 X5 j" O3 @$ o+ ]5 D
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
) {5 m5 l0 K3 B. C& E( G0 C: P
  1. public void attack(Npc target) {  // public void атака(Npc цель)! z- n* Q' Y- z4 M& Z% e( r
  2.     // Вызов метода атаки NPC2 |5 v  d# T( Z6 A9 D5 a, m- \
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());% @- n  A$ E$ _% x- w2 _& W4 H
  4. }5 ]& m& q; u9 n& `  {
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).0 ?) K4 H+ g! |. p, G3 p; E
9 A) h- h$ j; w. d
" C) |! ?* e+ `& J$ q' E+ j' \
Класс Npc.java — вызов метода. l' y/ K: H# p- z0 O' g

. W2 f: y  j0 d( ~( [. G! z
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    : U, F; K) Q8 u( }! g, e1 ~) k. k  p
  2.     // Логика получения урона NPC2 B# i# I- ~  L3 r3 N7 e9 p+ i
  3.     this.health -= damage;  // это.здоровье -= урон;
    : p% Z, Q8 a2 u
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  . G) s) ?" M9 Q9 m! g
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    ; h6 s; A% |7 Y6 L5 J$ K6 H
  6.     $ _. b# c5 ^# A% V) ^4 h
  7.     // Проверка на смерть NPC4 V/ n7 f3 z3 }/ S2 t/ {8 e
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0); m7 n6 B' h/ y1 C. k
  9.         this.die();  // это.умереть();
    , h+ h+ _1 u3 }# v
  10.     }
    , h; `2 A  a0 q; L6 ~7 z
  11. }$ c" P% H, |! d
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    : r# x8 M1 F: C6 _8 A% v
Пример взаимодействия (с переводом)% }. Z1 L( Z. z% O: F  e6 P% f
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
      R1 I2 A# }* R- [4 f) ]
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    9 W4 W5 m% Z+ u, r- x

  3. # V8 |; N: H- d/ t/ I% a
  4. // Игрок атакует гоблина7 t% h' S& a0 {; U9 ]  U4 m7 \
  5. player.attack(goblin);  // игрок.атаковать(гоблин);! G& f- _  i+ E' W( c( L
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. " i5 Z3 _9 k2 Y: ]! ~& n6 B

, Y0 \1 Q5 [* V# N
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
7 ?# A- ^! ?4 I) @/ `. oУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!+ \5 y- a; p& G* M5 I3 J

+ ?) D6 H# D1 S' e7 m
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30% ]* R7 d: o7 O
Привет, Астралия! Огромное спасибо за твои разъяснения ...

# z7 S) Z  D' |& X/ kОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
  y6 l) g; e8 o( l1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример8 t. F/ S3 K( e) ?
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:, @& J' Y6 N# h4 M* q

" y% I$ A  x7 H3 d6 |; w
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)1 ^0 X& S( @# J" H- E3 P) d3 B
  2.     // Логика взаимодействия игрока с NPC3 r8 |% s: _* F+ _2 m
  3. }
    % `  ]- H3 c& P% @; D
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:& D: P9 ]% u  u6 Y8 c9 {

6 `1 Q7 e- \$ U0 h
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    $ e. Y) d" P3 t. R+ S
  2.     // Логика перемещения NPC
      k1 \; E3 C% A2 D3 t
  3. }
    * c) R4 m$ Z; K) ^
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:/ z& I: P6 J& Z- y  @
/ r. V% u' ^  g: i+ v
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример8 w2 I3 Z8 h  k0 Y. ?' ]
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    ( Q! |% W* d9 Z, p$ P4 {1 B1 O
  2.     this.health -= damage;  // NPC теряет здоровье
    ) o" C) n9 l) q2 r/ D  G
  3.    
    ( h- J2 p$ R$ x
  4.     if (this.health <= 0) {
    " h$ i& G# z/ y7 F4 A
  5.         die();  // Если здоровье упало до 0, NPC умирает9 U5 c9 l% `! P
  6.     }% n5 q( O6 @$ T0 h0 G% j
  7. }
    2 r: [, C  X) S6 M7 G; E: r
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример! `  r0 @; S' M% S4 W; n9 b, O+ C

- v0 @) a9 ?  f# o+ L6 A5 N
  1. public void die() {  // public void умереть()4 n! L2 }5 @+ e
  2.     // Логика смерти NPC
    / m6 D0 h% {' @6 }- j
  3. }
    7 c% [/ H  I4 t* I
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:6 \2 p% P5 C: a% C
+ B( _! E) o7 \3 {

. o' ]+ ?9 L. G# U
  1. public boolean isDead() {  // public boolean мертв()# d' D! i% t/ v
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 02 {) w' S6 m: v% e1 N4 F& j
  3. }
    & v6 i8 y4 V8 l) u
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    * e3 h8 l" ~7 `7 q

* a# \/ T3 Q5 o5 U
  1. public void heal(int amount) {  // public void вылечить(int количество)
    + A" o' J" y& ?4 e$ _
  2.     this.health += amount;  // Увеличиваем здоровье
    % K* |* p% P, i) n7 ~7 i$ O7 i8 G' h
  3.     4 ?: B- d0 v$ y; _
  4.     if (this.health > this.maxHealth) {
    ) R9 c; N. c& P0 W
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального5 D3 ~0 W# B: F+ f3 i1 A
  6.     }1 a2 g/ q- U, i1 |, y6 A" q: X
  7. }! M/ T# `6 z! R7 M5 `8 @7 A
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    8 A- e2 u4 C- Y" Y  Q% r! v
( _( }5 [+ Q% y
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
      v" D/ K3 F5 W# z' E
  2.     // Логика применения скилла NPC
    / W0 w8 f6 N) o! ~8 H) o
  3. }
    & U' O4 P( d; Z+ l
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:0 ~3 Y3 U4 @1 A) M/ p
  n! B7 g/ n3 R6 u7 ?# |7 L8 ]7 G
  1. ; r! c2 d9 e" p4 r+ q3 ]/ ?5 H5 J/ y
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    # V; X- T8 F) V- q
  3.     // Логика взаимодействия с NPC
    2 h: o# k+ `( v- `9 f0 u
  4. }
    3 P$ P, [9 e) t6 k* _( k; i2 D  y# R
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:3 u; t$ _3 ~6 T6 z) Q; W
; F: W5 `3 L" {
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)1 K- g# `( Z) B2 H7 h
  2.     // Логика открытия окна диалога' u( P; @3 \* L8 X/ n
  3. }
    - R' n/ y4 O+ ~- F0 N
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
: V2 ?' v. q7 h9 W6 L  c+ ^Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
0 T7 u+ A( `1 \( ~' j3 |: N1 T- D1 s4 }  Z6 g7 Y
2 O9 h  C# M  t

: ~* A% b3 }6 {3 c& ~
1 N% i0 \0 k' h; I* V! T$ K
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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