Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 . d+ F6 u* Z6 Y  V, ?7 @
& G" z  ]" G7 Z* z; D  a2 m

3 C8 `1 D$ U  I, g" ^( a# [Шаг 1: Введение в классы и методы на примере L2j_Mobius3 G8 J6 B6 J! w9 b) R6 r
С статьёй можно ознакомится в разделе Обучение > Читать/ l. ^+ B  l$ w& E5 E! r/ {6 M* E

# \/ u* ]6 v* {' b$ [- B  D- PДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.# B& ?' |! A0 @6 i1 F& ]

  _* r$ ]- Z& Z  W9 ?" |, F! WОбсуждаем:0 ~" T9 H7 k8 ?( l  D# P5 U% W6 ]
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    4 ~1 b8 ?; ]8 I
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
) T4 l, ]1 B: |1 w4 D
4 j; Z$ h" f8 P, F4 o% I0 G

* b1 V" H% O+ WИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
( Y) F, N; {, U4 Q' x3 P% D6 E8 v5 P! |5 [. M+ n4 c8 D

0 l& \$ C* S$ M1 [4 R# f
: V& [9 v+ B, n+ ~1 L8 ^
$ [5 i' Z% ~6 T; t
+ }. p. ], }6 W1 _

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?( P6 \9 V9 N' @" c- Y' ~- N/ b
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:171 R$ S! _% b. ~2 w$ b
Почему мы используем ключевое слово this для ссылки на п ...

. Q8 y# t3 l/ q, FКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
, ^& v- O; h" V: }. [, k3 K! TПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса./ Q  r9 f! k: c5 v/ d3 S4 X

+ R( g# a/ e2 a# K- x/ R& g6 UВот пример:
# S$ g' v/ q: V% F* L% ]2 a) n
  1. public class Player {: G, s2 W4 v! T1 Q8 |4 Y5 P
  2.     private String name;
    3 r1 `3 J! n$ h9 a
  3. % S* S( D7 l/ s1 b3 v$ Y
  4.     // Конструктор$ A2 C6 x8 c8 q8 a
  5.     public Player(String name) {
    2 {+ M9 w4 j3 p; y, M( w! h
  6.         this.name = name; // Используем this для указания на поле класса* ?! P! u, C' _7 V' f* h$ L
  7.     }8 F  L2 V  {; a! w1 n

  8. * e! b7 w' D1 a" g
  9.     // Геттер для имени* a% _% E7 l$ H  w, }( ]. S
  10.     public String getName() {
    + d3 V- L& D+ j5 F
  11.         return this.name; // Используем this для обращения к полю класса6 l0 h4 t5 e; a1 L
  12.     }
    0 Y) u  W# V0 w* K& v
  13. }! A) e0 w- K) |; M! _- C+ ^/ v
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
9 s, A$ U  o/ \8 ?1 G' o+ _! c3 o* ^3 n/ s
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.3 X, _% j; I5 y3 ~

" @. x) w) w! rПример передачи this:( o0 ]% B3 k/ D: E4 X7 r
  1. public class Game {* r6 u5 K' l; N2 X
  2.     public void start(Player player) {. k# X9 h5 ]& C5 Y$ w1 Q6 e) Z* F" p
  3.         System.out.println("Игра началась с игроком: " + player.getName());2 Y0 x! P4 |/ r; F
  4.     }
    * T; @7 [( v0 x# Z4 P4 l
  5. }: X2 b) M6 `' n% P9 M

  6. ; i% J0 t) x% T+ M
  7. public class Player {
    ) \6 L1 D) I1 y+ H- u/ _
  8.     private String name;
    5 A+ G, X" P# |+ C

  9. # ~; d6 L' z- I) |8 F
  10.     public Player(String name) {
    1 |$ C5 J) w5 ?' k( `
  11.         this.name = name;
    2 y/ v% a* H2 P
  12.     }
    # n/ a, F, S# i& n! G; y, l  q9 l1 P
  13. . h5 o5 B* |" G6 N
  14.     public void joinGame(Game game) {7 [! ~+ H2 W* Z  C: u2 {4 i% f
  15.         game.start(this); // Передаем текущий объект Player" i0 K- C2 G- C$ I
  16.     }0 t9 w5 C& M0 Z4 U* B- B$ C4 m
  17. }
    4 A5 D) ?" e3 j3 e4 z
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.6 m7 ^0 N: H' `# N$ D. S3 Y

' C! G( r! {" Y
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?; w4 P# V( x+ ]$ z8 m9 v: y: H' J

7 ^$ j, H7 ?( ^
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
$ R( N6 H; r9 KКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 2 b" g+ _8 p  M4 h3 T# t8 L: I
Mike123 опубликовал в 2024-10-17 20:059 ?2 t. T) L' F6 E' ~7 V( N
Добрый день! ) I4 m- s3 m4 |7 w2 s& {5 {( k
Как создаются и вызываются методы в Java? Мо ...

- O( U" }# J' u  ^; MПривет, Mike 123! ?9 }7 ~- m9 s- m: p" K; Z
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
" l" A. t4 @4 E
2 K7 P" I: ?# A& HДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.; R0 T2 K1 o4 Y' O
3 M6 E' _$ o; y4 L/ U
7 B" Y( d& E$ M! K# B
Как создаются методы в Java?, o' y1 j" Y: Q( _5 ?/ ~$ a

8 G3 l6 W+ P* G" eМетоды в Java создаются внутри классов. Вот базовый шаблон метода:  v; q1 ?( u0 r2 ^
9 c: T9 a4 [0 O
  1. public returnType methodName(parameters) {
    8 V1 `& m- m- v5 I8 v
  2.     // код метода
    " S1 N6 L$ n& k/ {' T
  3.     return value;
    : A3 b8 _8 W9 V- K: ]
  4. }4 g, p4 a* t! O1 ]8 C( X
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    ( W3 M8 D4 ?7 o2 K

% R0 ~2 C2 }7 a" }9 z& R5 e5 h1 \Теперь перейдём к примеру.* l3 m) s: t$ r# \
0 K5 A- E' J5 j7 W
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода4 j* w+ r+ C! Z7 N2 j8 U5 O
  1. public void attack(Npc target) {  // public void атака(Npc цель)% e2 y! X* t3 g6 A; h2 A, ]2 P
  2.     // Вызов метода атаки NPC' I/ O' f2 J) T7 u
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());" c" G% p- t" d
  4. }- e' k: P4 I- c- j8 o' W: y
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
- `+ z1 I4 r. g: V6 a
( x+ L5 Z& s) z# k# z) V
) y3 F; H7 _' o; m7 m/ TКласс Npc.java — вызов метода7 C$ ?1 u9 Z& R3 L" r
& u, {6 Z7 q7 i! _
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    * e& w$ e' S4 q" r5 X* W
  2.     // Логика получения урона NPC% x) Z4 z; m' D5 n3 B
  3.     this.health -= damage;  // это.здоровье -= урон;
    3 y+ W0 h& `6 ^
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    # d( Z/ v) \( l8 S! O  C+ b
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    . n- Y) F9 Z& Q& E
  6.    
    5 N8 \) V, l7 }7 D5 i+ E% Y
  7.     // Проверка на смерть NPC: N  T5 d) E( ~& Z) x2 q) [
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    & h% x! X9 Z/ p- f- S
  9.         this.die();  // это.умереть();
    7 ?$ l; y/ i6 K  _1 z
  10.     }5 N$ f; @1 `" t% [( b2 A
  11. }
    ) w1 f, ~: K5 X7 n* o) t6 S
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    & j  o% ]& A% a% m, m1 u+ o
Пример взаимодействия (с переводом)
5 X+ ^8 q' ]$ {# z) S6 ?0 u# O
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    " r4 f' j: V5 q5 W
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");9 O' b/ r3 X: C; S
  3. . B9 J. g$ S& h  d, t
  4. // Игрок атакует гоблина
    0 t3 R' {$ U. N" Z0 O8 |3 ^
  5. player.attack(goblin);  // игрок.атаковать(гоблин);/ d3 S9 m6 L+ x! J) W& b
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
7 C0 h" ^! a! K0 @: A+ e8 p+ V% f2 j  w2 J' p5 @8 d9 s
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.+ \1 i- M" B: M: J: s8 H5 o* g& s
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
. x% @& W2 Y8 }7 n4 {7 g$ r7 o3 K1 Q+ w5 v
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:304 H7 s; H% q) x% X0 H3 i
Привет, Астралия! Огромное спасибо за твои разъяснения ...
( o% n2 }9 u1 Y; e6 N
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.1 i9 H/ B8 g% X. g
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    0 V9 y# U% a. {
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    ; n, v+ n+ Z- d: ^
8 [# y$ i0 }+ C! V. |' V
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)* T% A* b( F4 w; h3 [" i
  2.     // Логика взаимодействия игрока с NPC
    2 [' r% V6 Y7 }, F
  3. }
    : Q- |" v! A: \8 E' d
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    - T; ]$ Q& X: l
4 P2 E5 M6 L: b; |1 U& @
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    0 M+ s2 _$ U2 S6 v& @/ j
  2.     // Логика перемещения NPC
    7 c9 W" u* X' n9 M: b/ k  \
  3. }
    # c1 z6 f0 J. t/ Q' J- l
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    & r- f2 w: G, h3 n# \$ j
2 H, ?$ g: Q/ {( r1 k4 y: |
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    5 V8 \; ~$ B- E# K6 X. `& V- u
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий); [: t$ h" W4 B$ Q
  2.     this.health -= damage;  // NPC теряет здоровье% W  M: Y: d. C1 S
  3.    
    ' _/ W) v0 f1 i. x: U6 _
  4.     if (this.health <= 0) {6 [. j% J; Q" P( H, ]+ l9 D
  5.         die();  // Если здоровье упало до 0, NPC умирает9 O' A5 }( E  f' |
  6.     }
    ! q7 J3 R* p- p+ a" }8 H/ z! C
  7. }
    2 {" q5 s5 O1 b/ d) x
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    8 E' E9 q4 J* t2 `( y
$ E" B. |: j7 A( k
  1. public void die() {  // public void умереть()
      r2 ]. e; n- Q+ Z+ V" n4 B0 t
  2.     // Логика смерти NPC
    8 H/ _; w' X5 N# B* ~$ Y
  3. }
    * S& T2 `0 `' n/ S' j8 W
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    2 I5 r3 P2 A" ^
# I, w; Q! w- O: a

+ K0 N/ T0 y. H4 t$ m8 x
  1. public boolean isDead() {  // public boolean мертв()
    " q0 ^$ `4 M  ?
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
      k( p" ?1 O) _& z3 O' |) e
  3. }1 S, g; X" V# e  [9 ]+ h( P
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример7 G- E1 u- O$ h; m& }
) q! Z0 A! x1 T
  1. public void heal(int amount) {  // public void вылечить(int количество)
    & R$ O, L% N+ Q9 h3 @# h
  2.     this.health += amount;  // Увеличиваем здоровье
    2 d! V* ]# M7 |. k0 Q1 X
  3.    
    " n( }$ P9 z" q+ I2 q
  4.     if (this.health > this.maxHealth) {: ?: b: {- R) g
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    / O, F8 g' p' Y7 }: ~' S6 j
  6.     }
    ; {+ M( Y- g. s5 D( s# V$ d1 ]
  7. }) n- }( A' ^* ]5 D' Q/ D( j
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:* E- J4 ~  P( X) ^9 B
+ I4 M) K. M: Y. }9 o
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл), t/ L  ?, o6 ?
  2.     // Логика применения скилла NPC
    : m6 O1 k" J$ e  p  d
  3. }0 w7 _  ]& A! @; j: A# g
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:1 E! w# f0 l+ R* N
8 f2 A+ |: s& Q8 U6 B
  1.   z5 E9 c, l0 S
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)0 C8 U$ h- O' p, l9 X& f8 y, U$ Y
  3.     // Логика взаимодействия с NPC5 ~( p0 G' K8 J5 u. Z. I/ T. O( n9 K
  4. }2 T, j3 ^* O7 K' _% l4 S. Q+ }
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    , D3 b% N# a/ h" }4 o
. j8 c1 `8 K$ Q/ M
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)9 m% h2 M8 w$ z0 G/ H1 I7 f% S
  2.     // Логика открытия окна диалога/ E7 }* [0 s4 p
  3. }* R: R% R+ `( y  V2 |& D
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
% X) z+ q  a- h% l- t! MЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
9 O' m; N3 J* @' H! d9 |6 P% U1 a% Z5 k. T0 H

& w5 V: a/ _7 S/ e4 C4 _* q2 ]- B, D7 r" R+ Y( C, s, T" N
2 f' E4 g; R1 v0 F7 H" t  L( `% k
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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