Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
  }( p5 J  _1 |& \% W1 [$ r1 i6 `8 h2 X: {2 ~) r
( v8 K  b3 U7 \! D: U
Шаг 1: Введение в классы и методы на примере L2j_Mobius
/ t. w/ g6 L2 {С статьёй можно ознакомится в разделе Обучение > Читать
' G8 X/ ^( v2 I; n# O- G, S: M8 X% S2 a. Q) f
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.8 @6 R' p* ]4 i1 j9 ?/ [1 }
# ?* f" Q* e7 w) h. J) A* G: E% _! b
Обсуждаем:9 i8 T' E3 W- x' f6 D! y
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    6 a0 X, A/ J1 v$ N9 i  i5 z" I: n9 R
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!0 e; y3 I$ G$ g4 k
1 S! n3 x/ U- l* L+ k7 a% n/ L

7 |  n( B; }) K% U9 K1 r, N1 X
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!3 r+ k5 ]9 U# U

: \5 \8 W' x, ~+ F! E7 W0 ~( `1 F$ ]- V

; t1 Y: D0 u  A6 A: ^& a
+ g& @3 y. C7 L. x% \8 V
" m- b# i' n, [

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?6 q! ?2 ~" B# O$ }) k  l
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
  P; L; T0 d. q7 V  C! U! z4 u- pПочему мы используем ключевое слово this для ссылки на п ...

5 K3 E0 [6 G7 P4 nКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса., B0 ?  D( D. T  S# M5 C' u, |! \6 b
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
' A) ?, U) w$ s8 ~2 w* r5 q) b& {; Q
Вот пример:
9 c0 l1 R) ]8 z) j$ t, n
  1. public class Player {5 }) e8 U  x2 G- k! {) z
  2.     private String name;
    # |- o) U% H7 J8 q, k9 J: Z, Q

  3. 3 q7 L9 \  P3 z9 d: X# Q
  4.     // Конструктор" W2 t* H7 Y; v( @& E: P8 |( I
  5.     public Player(String name) {! B2 f* `* z2 y! {; f- @
  6.         this.name = name; // Используем this для указания на поле класса6 _" _4 U; w8 R
  7.     }
    ( I1 D  o8 Q! c9 c# c; W
  8. ! N/ D$ E! C1 I( Z6 y
  9.     // Геттер для имени3 \9 }& }2 j. j/ ^' M# u' i0 q4 W
  10.     public String getName() {" ?2 u$ r: N8 {4 t7 y4 p/ L' J4 q
  11.         return this.name; // Используем this для обращения к полю класса
    4 b+ L3 x. U" l# S* K
  12.     }
    & }) h; k: m" o. E
  13. }  u& D1 b! `3 ^
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
& {2 u% V4 y. A" W9 j1 K
8 Q% [+ Z4 N  e3 ^9 j4 G! YКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.5 a3 w" s+ t3 R1 B: S% x8 L
' n* y. W' V  l6 r1 X* Q2 u
Пример передачи this:
* \3 Q, y( D" ^) M3 h. @: Y
  1. public class Game {( n+ W9 i' {! V# c1 \, P, J
  2.     public void start(Player player) {7 H: ^+ y' i( W" P, V4 h
  3.         System.out.println("Игра началась с игроком: " + player.getName());2 R2 M& X* w/ A2 g; k% x, \
  4.     }: V* Z& P9 a% ?- L9 D' c
  5. }
    6 R6 `) w" G" Z3 A
  6. 7 c6 |, u' \; n/ C  Q* m! ~
  7. public class Player {
    / ~/ n8 a* f% P, v
  8.     private String name;* e$ j* a6 e1 z  [: ]" v6 Z+ o

  9. % |# p! |+ ]# u. h# S
  10.     public Player(String name) {
    0 d# L1 X- @! R3 @! j5 N/ Y
  11.         this.name = name;6 x5 N3 M; `8 N% W1 ^$ H- K  ^' I
  12.     }
    - S+ d9 e6 x! Z4 r. d
  13. ) Y' o3 j4 m: s/ I; c) o
  14.     public void joinGame(Game game) {1 A: ~5 y9 y+ E0 r1 V
  15.         game.start(this); // Передаем текущий объект Player% }& M! H7 C. [( k; r: m' P
  16.     }5 \+ \! ~# y2 A6 H* M& C
  17. }
    2 a* h% s/ c2 }
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.: Z0 v' G1 @4 E


# B: J6 M, R# A: BПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?. [9 K! h4 s1 j% I) J( n) X4 U

% w5 z- e, [3 n3 ~$ t4 a+ N* K
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! 4 t9 O% h9 U' L* J* L; ~1 m
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 5 R8 j! [! X, p: Y' N, f
Mike123 опубликовал в 2024-10-17 20:057 Y2 i5 P9 f2 Q, G" q/ D
Добрый день!   Z; X; d- b: c2 s* D8 b
Как создаются и вызываются методы в Java? Мо ...
3 R7 l+ Z6 k; i1 B) ~
Привет, Mike 123! ?
6 q* H2 a' H, E  o6 c& o: vОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
* T% P2 {, M* D  M( Q8 j
* Z% e7 P9 h7 Y$ ]5 dДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией./ F$ k/ k5 z/ O

4 O3 U) h% ?/ F& d  X$ X$ W) S/ i/ N6 _# g4 F/ M" o
Как создаются методы в Java?
  P8 o& B9 M& s$ @2 @5 R( e1 i$ @$ d( F  i  R
Методы в Java создаются внутри классов. Вот базовый шаблон метода:# s% _: K' I3 d% U4 t% Y: O( q

  h7 z) }. e9 a* V; ^, r
  1. public returnType methodName(parameters) {
    . T: q- W  i4 ^5 @3 \
  2.     // код метода
    2 m1 J: w# V( R
  3.     return value;0 ~1 d$ Q! K1 G+ w
  4. }
    / t9 I. `) R4 j2 k- x# a  [
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).  k$ t8 Q9 K. ?' |! _! e7 _  B+ ]; X) k

0 R5 X; P- M& N8 F) S  k& bТеперь перейдём к примеру.
: D. _4 Z! b" I: g: |2 [, Q% l6 x- ?, x( ?$ K& u% N9 a
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода3 D0 |, W9 ~" S" \& K9 @4 B
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    8 @* m* U0 [: ]% y+ D
  2.     // Вызов метода атаки NPC
    - W2 g( k) K8 e) W7 K5 j4 k
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());$ l$ |/ v. l- [/ q
  4. }, J" k$ r# S5 n& |3 ?! Z
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).# @4 t4 w& m( |# S* R8 U/ W
4 b0 [% I3 K' ?

( F9 v; d( n- Y8 p( R  K+ X% gКласс Npc.java — вызов метода6 U$ v; h! l% s2 j" j
2 q% A: o1 S2 ^, u
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон), h1 Z; u+ k* O; H) m( z
  2.     // Логика получения урона NPC
    ) v* a+ |1 _! j
  3.     this.health -= damage;  // это.здоровье -= урон;
    - t% f, f& f' q3 f6 Y; ?
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  # I, I6 m# c- E$ V$ T
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    : F# P  g7 A4 y# U5 v
  6.    
    - M2 {4 C' Q5 o  E
  7.     // Проверка на смерть NPC  q0 J2 e' R  }; Z" S2 E
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    7 j3 e: v) |! e% n
  9.         this.die();  // это.умереть();& [* Z) E) X: E( D. p" M
  10.     }
    . }/ x7 y/ s" n2 U! I+ K( P1 B
  11. }" J  L7 ]+ u1 g) A6 I' Q
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).+ m# ^5 _8 _3 I, f
Пример взаимодействия (с переводом)" U1 A4 K3 ~2 v/ H
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    ' f: m7 L4 o2 x
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    2 D- K5 `, Z% i0 }

  3. 2 ?+ o1 j4 L: B% ^1 F6 k6 b! U
  4. // Игрок атакует гоблина
    . G! E2 r) r1 u' q- s
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    9 d: O0 h* i, e
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
* r2 z) m4 p' h* R+ f8 @% X: E& p' e2 g8 C* F% l' A
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.0 j  E. O/ @  i
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!2 p8 B% v# o% U2 M5 k' d
9 U  y, q; s: d1 A, t( o
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:309 W) a5 N2 g: A% n# a3 @, `/ {& V
Привет, Астралия! Огромное спасибо за твои разъяснения ...
6 q: [! y7 k* B; a5 H9 @- j2 j
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
. {& m0 r7 M. J/ X+ s; }1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    $ B6 @  @! ]# W3 s0 M2 w' R+ l3 k
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    9 v! U/ o: r4 N" `
$ a( l, Q% f  v! K$ Z& ~
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    4 Y) S6 a6 i: t5 O6 T
  2.     // Логика взаимодействия игрока с NPC
    8 X# t+ x, ~9 H$ E
  3. }
    : T8 t8 ?" b! H9 x, ^
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:5 r+ A; f9 G( f3 C" _0 J
4 n5 ?; z, B  p% }; D
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    5 q1 q5 K2 R4 R3 c( D  W5 R3 ^6 l9 i
  2.     // Логика перемещения NPC- h) T; Y" o1 ~
  3. }
      i! J- Y6 O: |& _
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    3 t5 \% [) @6 p+ Q' g, _! ~1 n2 ^2 v

& G9 g; }6 F% ^8 W; B% n
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример2 t7 H. O5 F3 U% @
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)+ W' Z4 W$ U, d! R# I/ X/ ^( N2 V
  2.     this.health -= damage;  // NPC теряет здоровье1 D$ q, \) ^, t1 q& v
  3.     ' e4 `2 @8 i* d6 ~
  4.     if (this.health <= 0) {
    ! v9 F& T1 M+ k
  5.         die();  // Если здоровье упало до 0, NPC умирает1 d, \# g4 _8 b
  6.     }
      n7 h8 \5 e* H8 z4 o% N
  7. }8 u4 }3 E, z' z
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    & v  K4 q% B3 e0 s

+ L) L# i0 U5 G' H3 D$ S* I
  1. public void die() {  // public void умереть()
    : ?, U4 R1 Z- ]3 ^
  2.     // Логика смерти NPC
    ) ~7 T" ?2 m3 Q: K. ]. a1 v. {/ m
  3. }
    # ?+ ?" ]0 o6 I" _% X( D* I, _9 a
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:7 o0 a+ V: |! G5 }6 G. t! b  ?5 O- N
0 |1 ?  S  k+ j9 w
1 W( d+ K: x- C& m" h/ f5 h) ^
  1. public boolean isDead() {  // public boolean мертв()
    5 j5 W0 z7 d! V) ?& L8 q) X/ S
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0' |  O* M; ^6 T
  3. }
    ' K7 C: x' ~. C) w* u
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример* i# ~. `3 x% O- ]: O; q

- `$ n1 L4 b4 w& c: x
  1. public void heal(int amount) {  // public void вылечить(int количество)( l! b/ g: X& _: \" A( [$ K( h, d
  2.     this.health += amount;  // Увеличиваем здоровье' e! p2 ?3 s3 Z$ H
  3.    
    5 {0 H! n4 [) z5 N& D! s* }+ ]! g/ Q: h
  4.     if (this.health > this.maxHealth) {+ @: r8 P4 S8 y4 G/ a6 ]0 s0 M, s( A
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    " |7 B# |6 w/ Z1 ]1 b8 m
  6.     }
    - {2 L  |4 L" x; E
  7. }* a, M5 j$ f& ]! E* E& i4 s
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    & @; L; c2 l/ M
# f" m8 z; C5 C1 F, Q
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    $ c  K+ Q- K* |
  2.     // Логика применения скилла NPC% D0 D7 {) N6 Y1 {0 `# R! w
  3. }- I3 r! z0 {+ S& o! W- ~
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    ; r* L/ ~9 ~( b6 j- e
, ]3 ^# W/ M6 e+ O  b
  1. $ W. q0 J0 m( i: q8 L
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)2 G0 V) H0 |; N
  3.     // Логика взаимодействия с NPC
    2 Y5 c& d& @3 E% Q/ n
  4. }; Y% k! j+ t, V% S* `( A
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:/ K2 Y" Q! f9 \  ^
5 B7 C! Q) z1 ~% S& a
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    " t# Y$ {; d. f# Q! }4 r  c
  2.     // Логика открытия окна диалога. Q; M2 s& l  u" `- K
  3. }3 i( H9 @: A3 l( M! Z" _# X
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.3 H7 Y( i/ p9 S$ W" ~) |: l- G
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!; S" p- V7 K2 `1 [& q
1 P3 U+ x( ~% Q: c! h

2 t5 E  x* d" ], i
1 E5 [, t& n$ O, q2 ~" {
! U$ v* y& Q- K' l2 C; M% p, g# C
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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