Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
  f2 d3 T5 W# e
( P2 ]. G5 @/ S! o: g2 d3 R9 X- x# B2 m, N
Шаг 1: Введение в классы и методы на примере L2j_Mobius8 m3 B% b( H; ]# B
С статьёй можно ознакомится в разделе Обучение > Читать& a& K4 U8 O, |! l1 h  W% A! U

! {: I; O: ^7 D: L$ B2 G2 p; V. hДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
. |1 z. n5 Q5 ^* Y
4 _, R6 `3 t* sОбсуждаем:
- \9 p; m1 p* X* S2 ~& q) _( V3 i# d( d
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    0 M% ?# V5 q$ d& E% b" C( {
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
/ T$ m! a1 |) C( _: s4 G* q" g5 D' x

2 y7 h- ?4 x" ?
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!0 a# U) b& |+ \9 a
0 s9 E8 H- q% T! p
2 Z& e" F: @1 u/ X3 \" E

4 l5 ^, u5 D& H* ]" R8 F5 B7 u6 g8 b9 J* q* P: g

! q+ F8 j: q% A( v

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
/ J# ?  X$ E) \) u% T7 j; `$ r
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17% N. N, s8 ~* O5 P% e( ~
Почему мы используем ключевое слово this для ссылки на п ...
6 Q) O4 \: }) W
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.% n# a' L/ _* Y1 U9 `8 v
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.7 \/ K8 m9 O5 a, B' U9 e8 T5 T
7 K  S+ ?( V1 P, z+ Z
Вот пример:: K) q1 j2 g, V! R
  1. public class Player {
    ' c# q$ r* I' u( f' K- Y1 E/ ]* g5 x
  2.     private String name;! {: X9 {+ R! M4 w0 Q# `
  3. 3 |: a: Q' x2 r/ L& V6 O/ Q" C
  4.     // Конструктор
    ' f! R+ Y! a8 L/ M
  5.     public Player(String name) {
    / v/ |' R5 j1 u
  6.         this.name = name; // Используем this для указания на поле класса
    0 @' E+ _7 H! b) j- c
  7.     }. d) Z2 ]" Z  a) d* e5 m  L0 [% J
  8. * G5 {( `; ?$ ?" r4 K& b# p5 b
  9.     // Геттер для имени
    * h6 C, o, }) V
  10.     public String getName() {- k* K6 v/ p) @  T: H; w& c
  11.         return this.name; // Используем this для обращения к полю класса
    - E  c' G) V  f$ N7 M
  12.     }
    & t! ?: }( c0 l, l3 x6 i
  13. }5 Q" u0 z1 W) _: O
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
6 u  @8 z' c2 b5 }: E
2 r/ T, S6 i7 W0 a5 ?2 M' MКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    $ J1 p: v& Y& b& g8 v

5 ~' Y; S: T+ n4 X5 ^  JПример передачи this:7 I" C5 @8 i$ G* i; p- g
  1. public class Game {+ V. \7 b6 S: i& ^, b) V2 q
  2.     public void start(Player player) {. x8 T8 w, F% F
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    1 j7 J  T1 ?8 t
  4.     }' c; A: S& b, v" k. ~1 U% b
  5. }
    . f1 T0 F" J9 {# J* [4 P% h
  6. : U. \' P8 y- H0 D
  7. public class Player {
    8 f; B3 N6 U( j  I' I3 i
  8.     private String name;$ n/ T) I  Z: B  T

  9. " K" {6 G: k& u3 _
  10.     public Player(String name) {
    8 W1 l* S) u. [5 E
  11.         this.name = name;& ?+ _( Y- R: F6 S7 d' r! d
  12.     }. g- K( ~5 k1 J3 i& D
  13. $ p  ?) S5 b# M! |  h; [
  14.     public void joinGame(Game game) {
    & L+ e4 d8 _8 A, X% k
  15.         game.start(this); // Передаем текущий объект Player  {" F( U& t! c! g: l$ i# _0 P, q
  16.     }# Z$ z' B, N4 K) ^' _0 w
  17. }
    4 f: W9 y( W, E) f
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.. N8 P6 I8 S) P1 G, g3 v2 l) p8 X

, B" z1 w: V) k2 y
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?# b3 o$ u4 C- e) o4 z

/ U3 R3 Z% |# X8 \! m, a* O- }
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! 7 D, I3 `) k) x% n2 }
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 ( B% v. Q$ b& S2 ]4 E9 |$ d* Y& O
Mike123 опубликовал в 2024-10-17 20:05# O, C# V7 |6 \8 _9 g
Добрый день! ! f: J4 i$ ]. ~9 F! U5 N. e
Как создаются и вызываются методы в Java? Мо ...
. d( F$ c/ U/ ^0 \: F/ o! I8 i& z
Привет, Mike 123! ?! l( k! i- U# e/ M9 h# N
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
& t2 Z0 t9 j2 q2 S2 H
) S( S8 p* o' z6 R3 R" wДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.6 q6 v5 Z* A' W- r% i( ]) X

; T) @, P+ L5 X+ [" P/ [
7 ]; U( s  o% M, ?  M0 X- |( J! _' ~Как создаются методы в Java?9 Z" B) S& |# z' @! a$ N3 u& f7 b
) R1 a; ]! A+ ~  K( f$ f& u
Методы в Java создаются внутри классов. Вот базовый шаблон метода:8 c: {- t, c  e
2 y' }* D8 c6 R: M
  1. public returnType methodName(parameters) {
    , D+ x- ~# F3 l3 e+ r( w; K: r
  2.     // код метода% h6 P2 W& {' Q; o& L$ I4 q
  3.     return value;
    " g) ?- B. i  r2 G/ D, K1 u4 Q: J- L
  4. }4 G0 M% E' f. r2 c
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).3 N; x) f; ~2 V; C3 G

" s# v$ P2 h: d; OТеперь перейдём к примеру.  b) `! W9 p3 `& i* z& d
3 o# K0 f. D. D! L5 W* B6 ?
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода1 c4 t; O7 i$ W% ?# E
  1. public void attack(Npc target) {  // public void атака(Npc цель)0 [2 T$ \/ ?% w8 R4 W
  2.     // Вызов метода атаки NPC
    * L0 Y9 M( \) g) b9 j" F
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());( d. |5 q$ |5 @$ B
  4. }
    2 e4 s8 ?$ `3 ~- ~$ u! ^
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
* y- Y# F( B, F) |
5 u5 G' F' Y* O4 J+ |* p" p) F3 n! g4 @& d) c
Класс Npc.java — вызов метода
& }* ]4 \: A: r) C. y6 ]4 D9 G6 V8 T8 C  }% q
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)/ c7 t' L% g7 \  \! E$ j. f
  2.     // Логика получения урона NPC, y( c4 n% L2 D8 v6 P
  3.     this.health -= damage;  // это.здоровье -= урон;
    5 ^; C! _* i' b7 L5 i6 B; x5 u3 Y3 T
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  ) b4 Z+ O- L& `! Y0 a
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    ( l2 x" u& `8 P
  6.     0 O- M, O. p- k: d+ \
  7.     // Проверка на смерть NPC! |6 E/ G, ^  |6 L0 J7 E
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0); b  F  c. A! B# n2 T' C  y' z) J4 ?
  9.         this.die();  // это.умереть();
    + V% ?2 `, H' a! C
  10.     }
    ; |6 j, Z# |- j( X# x& M" G
  11. }
    8 V2 r( c3 Q7 G: }
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    8 h! b# V' j% R- H* m0 U: z
Пример взаимодействия (с переводом)
: w3 g) o, }! p2 y0 y
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    ) w$ I& v$ s5 r0 W6 N) L
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    7 E0 U0 z4 E; |6 O2 z
  3. 0 @. J' @, ^  A0 E9 i+ `; ?
  4. // Игрок атакует гоблина; B6 L8 N+ D! d: ~; C% ~% I0 |
  5. player.attack(goblin);  // игрок.атаковать(гоблин);& E# j( z* \3 K% g
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. , @7 X! X6 Z) `8 A6 ~

6 s/ A' x: l4 z+ R" ^; ?
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
1 |% H, d: i; u3 QУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
$ E" E- U5 }. i- A9 ~9 E" `6 L/ y5 B$ L1 |, J5 B3 C
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30. I% B8 s9 i7 a  l! Y5 ~7 d' K& l
Привет, Астралия! Огромное спасибо за твои разъяснения ...

( s& @8 n* r% S( i. u2 c! `Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
& t% g( c! K$ m2 e* f1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример9 D0 e8 C4 K  [( u6 ]
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    $ d. j/ r+ V% M7 ~
  N8 z8 T% q; `( m( ^0 ~
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)- q7 |/ [, n) `( B
  2.     // Логика взаимодействия игрока с NPC
    6 ~" m" t" Z8 A" p7 S0 C" z
  3. }$ ?- w; W& F, ~: U
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    1 F( G  ^3 W# v# b+ y7 \! t

) a2 K: K' h) _/ Q2 Y  k
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)* z; R- r6 y- N( f' t& }# c4 A
  2.     // Логика перемещения NPC
      N4 G7 F' p8 p, P7 e3 @: f
  3. }9 o2 h4 Q$ J9 A2 I
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:$ J0 ?& Q; J2 C6 X
1 z# |/ U5 [. \
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример. i: E, S/ D4 d" _$ e# J
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    * ^0 q# z2 r% u7 K2 l
  2.     this.health -= damage;  // NPC теряет здоровье) I  l' w2 w5 ^' S
  3.    
    7 s3 {. s" U7 `8 g
  4.     if (this.health <= 0) {
    * F, ^8 ?3 i0 j: L9 o. B, S
  5.         die();  // Если здоровье упало до 0, NPC умирает5 O/ F2 \( ~' V; f- h
  6.     }
    , K7 R  @0 l; y  c9 h
  7. }
    5 m4 y8 Q. ?# y) `/ t6 ?
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример) u( u8 D+ M' X& c; z4 P

# Y. h2 Q- A* I' l
  1. public void die() {  // public void умереть()
    6 v0 q6 }' o9 X
  2.     // Логика смерти NPC: g) i+ k" Z4 t' m1 ~# Q
  3. }+ j! H" \) P( z8 J! l# s
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:9 t- J% N9 z0 I4 j* p5 v

) ^3 B8 a" S6 O2 ^3 ]/ X3 p$ P0 C
  1. public boolean isDead() {  // public boolean мертв()
    + d6 _  _" n5 V: u
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    " q) M( i, C1 }/ I2 a
  3. }8 d$ I" {  U& v5 G) r. p- z$ n
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    7 O6 s3 R& K* _! y0 k& y" \2 Y1 V
8 ]( j) a& d8 _; W/ ~8 o8 W# c2 D
  1. public void heal(int amount) {  // public void вылечить(int количество)) r) V  }. E- U, Y
  2.     this.health += amount;  // Увеличиваем здоровье
    2 T# z* t7 v% z8 y7 l
  3.    
    ' {* D3 w+ G/ J* E
  4.     if (this.health > this.maxHealth) {
      W% `& l2 N' J- I5 K' Y
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    ) ?2 u* N9 c9 J; R8 _
  6.     }! k9 E* R5 u" W6 O% ~
  7. }
    . k% a# k4 P( E  I( w/ B
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:% g7 V# v9 r( B1 W

; V: @* Y0 U8 u6 A. `# k& F
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    * C& N# @% O! E3 f6 U/ P
  2.     // Логика применения скилла NPC5 Z) h! w9 L% H7 E3 {
  3. }3 U* b& W+ i# o  K- z/ a0 v
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:& a2 b0 \! ]. W9 {6 g; g( L
( d4 e2 n4 A5 l9 P" V

  1. , T' ~: \& y& i2 L/ _
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    , \) l  [3 {3 @: Y' t
  3.     // Логика взаимодействия с NPC
    % S) F% ]' ^; S, b9 f/ v: u* p
  4. }
      v+ v# `  A. w5 @8 x# L( `
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:* n' c& W; s& l7 @# H

9 w* t8 h1 c  D0 c" O
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)1 `3 a5 i* ]5 \$ m4 F* U
  2.     // Логика открытия окна диалога7 @: \7 U6 U* |, n. h
  3. }
    " J5 K0 H9 u( s; d5 U/ N# V
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
: e  x; s% Z; T/ u$ YЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
- _4 S9 k' C( G: P% u4 b3 f6 l
5 u4 T' C& u# I' q' x6 A5 O  P/ M- M: }: v8 b: [/ p" V$ C
. f0 j6 q8 a# J( `6 t3 Z% Y5 T4 U& E# \

# _1 G" j- ~8 f5 [; m0 J( w
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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