Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 ! y! {7 R! z4 x5 X/ ^! r8 R
$ ]% M7 b# k+ G4 L' s; h# l& s2 R' ]
7 g  Z& s* t, V+ g6 s( B' E
Шаг 1: Введение в классы и методы на примере L2j_Mobius4 D  r0 V: S. V1 l, s; s
С статьёй можно ознакомится в разделе Обучение > Читать
' F$ _1 r  g2 g" F3 M3 ^. r; F5 O  a0 b, ?
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
0 `4 D3 ^4 _3 U- i& ?$ P: N$ y+ V# w' |6 s  d
Обсуждаем:4 d2 L4 j3 ?- n# Z
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.9 j: X8 y8 D: l/ Q) y7 }
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!1 A, }3 K* _5 n" y" _1 H

% Y2 k+ o" [- D4 J5 z

6 L6 o+ Q! P2 e* T7 e" hИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
  l8 y% ^# }: T% W' B% B3 ~" V
) p: s; Y" Y6 Y% l& _5 u" E( U, h6 d5 c6 c& M9 ?3 C' }( p! e! [

- T- i/ {% ?8 B! l0 ^
* V$ {  x; u0 n$ @% F) q$ N0 N6 h8 `% T+ f% W2 y

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
5 W; o; W, }6 `# T  i
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17" V+ |. a& R* Q0 S& S# _: A
Почему мы используем ключевое слово this для ссылки на п ...
4 P. t' C4 N9 O* p# p* U# [) u- S
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
+ f% x, ?8 N1 s4 L( `+ y: BПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
" \. x3 M/ a2 q; b% ]
1 }$ v2 b: A0 S* @3 hВот пример:* m1 v5 B7 G! g( p# ?% a
  1. public class Player {3 r$ m' u# ?- g& w- q  w
  2.     private String name;' g: r3 W, e: X/ Z' ^& }
  3. , ?# N2 F) G1 T4 u6 n: D
  4.     // Конструктор9 z& D1 _. u+ y4 G  Y9 K' V
  5.     public Player(String name) {
    + y8 k' ]: D7 Q, n- C
  6.         this.name = name; // Используем this для указания на поле класса
    * G/ e2 R& Z; k
  7.     }6 K1 |, H* {' J' o  t/ x

  8. * q  {: O8 Y1 Y2 J. y  F
  9.     // Геттер для имени
    ' l" `" h! s% v# M, |! l
  10.     public String getName() {$ \) ^, O) W1 ?# ^
  11.         return this.name; // Используем this для обращения к полю класса3 U- P" x6 @% c* ~. g4 N
  12.     }% s) k& G. B/ W& }4 c/ G
  13. }
    8 |& N2 f3 w; F3 r7 |5 S. G2 S# a
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
" D  ]0 e% x  a8 x1 v% @2 x1 i7 E# w$ v8 s& V
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.7 r# S# m+ h5 x" `0 D4 p
$ D. K$ q; c; G, p* k
Пример передачи this:
2 ~( w+ t1 T: \% L' ?( @
  1. public class Game {: h. ?( B% N+ W  ]& i0 d5 u# _
  2.     public void start(Player player) {) f9 [  V( r) Z& ?1 {
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    , V! `4 W4 L  j- S" }/ N
  4.     }
    + ^1 V9 ?% U# b. e; V! z3 V
  5. }( f7 X9 G6 v: H9 D8 V+ o7 B- V

  6. 3 D# J- J$ i3 y
  7. public class Player {% h$ L. F2 R# c+ _5 h/ B, ?5 t
  8.     private String name;; C0 B. _' T' U* P  U

  9. ) ~6 e0 c- ?" L$ }, L
  10.     public Player(String name) {
    * ^2 l- L0 H7 J) o* }
  11.         this.name = name;2 I6 `( J+ }' \
  12.     }
    3 V9 W# _: o& ~" {" r
  13. ! S, q9 r$ r: _6 k( I4 C: ]7 P) D
  14.     public void joinGame(Game game) {: V; s+ [& r% P6 y
  15.         game.start(this); // Передаем текущий объект Player, s9 ?7 K9 h7 A# U& i
  16.     }
    9 k/ ?! S3 e# Q; D
  17. }- d" r- l9 c* x( \: m  V
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.3 W; h! |% U* F* q$ I' k


4 e( F+ U$ o7 n+ u  z8 V- AПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?' |) k* V) w6 @7 P6 A- L. M) e

/ o' ~! y0 }/ S/ p, ~6 W3 o
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! ; _  G& H* Q3 `) D0 k
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
' q" z& B% b8 `6 f% f$ @
Mike123 опубликовал в 2024-10-17 20:05
6 p' C. r- ^+ j* cДобрый день! 9 L7 N5 P6 A( ]4 a2 h
Как создаются и вызываются методы в Java? Мо ...
$ H6 @% b4 C0 a& ^, V+ q% `, _
Привет, Mike 123! ?
  G/ `& C( W+ b' ~Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
0 f% _. y7 Y; r* D2 `0 t9 Q6 H6 Q- @# T. b. q
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией." r3 V: ^1 }) L3 ]9 ]  \0 f
' Z! ~0 X1 b5 B5 p

- [2 W- v. g6 x2 c$ GКак создаются методы в Java?+ P5 @: ?" u* Q

# F# F% f2 Z2 `) w" q1 ZМетоды в Java создаются внутри классов. Вот базовый шаблон метода:8 N# Z- \4 Q5 q  E9 o
2 X2 {# ], |3 K( r) y
  1. public returnType methodName(parameters) {  ^$ ]8 p* }2 C2 h7 q
  2.     // код метода, p1 ^7 ^) \% k; X+ _0 G
  3.     return value;5 L3 o4 V: ?! g0 s4 a
  4. }
    7 u3 e0 }+ O5 u2 y+ N- Z
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    9 u5 s- q( f9 x7 V! ?& j; g

% M" b4 G% H* e, b2 `Теперь перейдём к примеру.4 v% M/ }' |* |$ l) f' ?+ G2 \1 F

2 d, U$ B) o! a! O* QПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
) f, m* v/ v. R) U) S% \
  1. public void attack(Npc target) {  // public void атака(Npc цель)' Z3 S, @" C! V
  2.     // Вызов метода атаки NPC
    & Y0 m1 s* D$ m( v4 q. A
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());% O7 ?7 c: F+ Y7 J/ y3 _$ z
  4. }
    + Q1 @4 l: g% h
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон())./ B" v7 N5 e0 ]( a1 |

0 D9 q: H; V) A+ O: _8 Y% Y0 {. e# @
/ w5 e( O: q7 QКласс Npc.java — вызов метода7 G3 T+ m5 c# U0 ?$ U4 J- r
+ Y# K/ ?' K  V- }% e4 O$ f
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)9 J/ m: l6 p# P
  2.     // Логика получения урона NPC7 i8 ~$ J. g( W) e8 R+ t. a
  3.     this.health -= damage;  // это.здоровье -= урон;/ {. Z9 Q& E0 @6 o$ ?7 i
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  5 U. |# |9 F4 f
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());- q# l9 u4 I* \; P( j9 W
  6.    
    9 g6 w* j: q( k* A8 D
  7.     // Проверка на смерть NPC
    & p3 K! n: m2 R. I1 @. }
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)4 X- g5 K3 Q6 f: A* ~& g8 i- D. y
  9.         this.die();  // это.умереть();
    : I6 I5 ?3 q/ P6 h
  10.     }
    1 X# v9 i, f( L( O% K  J
  11. }
    2 A/ ~% ^- X, U
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    1 Y; [3 I  @: S6 h" ]
Пример взаимодействия (с переводом): J! s, j1 X/ o- P6 F  }1 L# y
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");5 p9 `* ]( Y) A* S' h
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    + w; P/ d6 s5 w9 h0 P, a; v& t7 V0 \2 O6 W

  3. & o+ |  a, I* ]) M3 Y. j. d
  4. // Игрок атакует гоблина0 _8 y7 ?. s' s- x* b% u
  5. player.attack(goblin);  // игрок.атаковать(гоблин);0 J& y  v, P7 G& R( V2 h: k9 d
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. & W% k5 I/ v3 r0 b  ?+ l. ]  e1 _3 j  T
) V( k9 A4 H6 W1 M
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.2 f' q. q4 l1 Y4 t. J- i. e
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
. K/ Z4 {) R' |9 E3 I5 @' c
4 g2 D" A& T+ P8 Q8 t; _
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
" C2 z" @5 C( F" {# ~Привет, Астралия! Огромное спасибо за твои разъяснения ...
- y9 r  C# F" f
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.  s% w# W! H6 `9 Y, k
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример2 y% d0 o) o$ n' q8 n" G1 {
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    $ q9 D' J7 X& ~8 l' H

% Z! c$ C+ L  {1 K/ u' o; R
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)* f+ Q3 u, Z9 |
  2.     // Логика взаимодействия игрока с NPC3 F. W7 J3 f7 r# X4 b) p8 }, l
  3. }  M! V4 _% {) u! n9 A, W+ d
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    : R! Z8 Q! p' R" W8 e# l! L
' z3 O* S' u3 G7 ?5 D
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    ( r, Y* s, n1 P' @1 G' Y1 }
  2.     // Логика перемещения NPC
    & D* h& B2 k5 {2 s. g4 n
  3. }
      G3 {: J6 W( ?8 D( |/ _
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    6 v$ @2 x/ d" G% L

8 |( m0 t8 p: h4 ^0 `
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    & l/ \3 K. k; ?: j5 H' B/ r) O. R
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)2 S' B" f/ D! b# n! G8 j5 u
  2.     this.health -= damage;  // NPC теряет здоровье
    ) j8 `- ]& r+ ~# Z% _
  3.     8 }* y5 |8 ~' h0 B6 o, h' k4 n
  4.     if (this.health <= 0) {
    3 u, H. I4 J! e
  5.         die();  // Если здоровье упало до 0, NPC умирает
    , N# M( P* @' p
  6.     }# l' f3 m! S3 \
  7. }
    6 x' R3 G: d; d/ s( h0 Y
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример6 g' m6 A8 a, U' U8 E
* j5 D3 g7 x: s# r( n1 U6 V) R
  1. public void die() {  // public void умереть()6 A. \$ m, R- n/ i
  2.     // Логика смерти NPC
    5 R2 C6 D7 g- {3 z: g+ `
  3. }
    ! L0 B4 i) ~. b9 z1 x; Q+ F# v# Q5 p" K
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    , v! N! b! A) |
% o( T+ Q7 w- g5 d/ Y0 \

% C0 _8 x& g3 V& q9 Z# L  q
  1. public boolean isDead() {  // public boolean мертв()" h: y' s1 K7 w( R1 {
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    % N3 W5 y) z% Z! t
  3. }
    " |$ m( ?2 x1 ]* d, @8 k% \" d3 J
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример: X9 E2 h) T! h' L. a1 ?
$ X- E$ i; k; h9 O3 |9 O6 R
  1. public void heal(int amount) {  // public void вылечить(int количество)
    " T! G2 V) C& U9 j: B
  2.     this.health += amount;  // Увеличиваем здоровье6 c( G) u* f- H. j
  3.     * X- Q# x/ X& Y# \% s# r& n/ ~
  4.     if (this.health > this.maxHealth) {
    5 h2 Z" |0 a) q5 Q# P/ ~1 |) R7 |6 ^
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    & j; Q. o8 Y% e; z
  6.     }1 x0 S% x) w1 M' c
  7. }# B4 g: y" V0 K5 l9 W  ]
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:) g6 i. J' R  a( O/ L
" @% {  ]+ v' b( Y$ _
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    / {2 J) O+ p+ @8 Q* T# l, ~
  2.     // Логика применения скилла NPC
    * z" f! ], a0 B# B6 C" o/ c
  3. }5 k& f) v5 t( ^
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    , ?$ R6 @5 _- R1 s! P) z( A  D0 X
8 d& G, Q- `5 h0 u( }# k- j& L$ v

  1. - k6 P0 L% V% v9 ?: c2 H" ~; T
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    % O. G* b8 I  ]$ Z
  3.     // Логика взаимодействия с NPC+ u6 R4 D9 Y' h$ P! H
  4. }+ l& w" t: e$ N* c5 q, U
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    & a5 h3 E( l6 T) Y
+ M5 C" y, t. Q& Q" W$ V6 n/ V
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    6 S1 ?+ T7 y- o: W& S4 a0 S( G$ X
  2.     // Логика открытия окна диалога7 a! ~# U5 |+ S, Y. j: P% W
  3. }2 v" C8 W8 }) x1 x$ }
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.4 c2 ^  x2 |; t8 u1 |' K* g
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!4 Q* E& \5 f0 e* i8 v8 H
. B# {/ C0 N6 x' U
, W  N% M' K6 I7 C; P

$ y! [3 }+ l# Z' _( {
% Z$ J6 U5 c, h5 Y$ S6 T8 J
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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