Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 9 y3 F, P8 |9 g4 [2 l' [

9 V0 n" ?" A$ q% y0 H, a" k8 G+ j$ S
Шаг 1: Введение в классы и методы на примере L2j_Mobius1 v5 F, U5 Q; T( s
С статьёй можно ознакомится в разделе Обучение > Читать
- @" W% m9 @8 Y- m7 g# |- X' h  N$ [# @+ u: D9 z9 M% x
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
7 j8 Y: }4 v- T: o4 _: _/ _7 p2 B
  [( t5 U3 W9 W0 K, d! wОбсуждаем:. ~; U8 `: W! V$ Z& ^- [
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius." F+ I7 p( T' d; l
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
8 `/ ^/ ]1 r" Z/ X' Z( B; E& t! T0 Q* V

* m, B" S5 z! a
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!1 k8 ^& K+ B$ w/ q. G

' P1 u6 ~# ~) K
; t# m6 }1 i4 ~
& ]. C2 q" t6 S$ I5 W8 Q% @. ]* f: Q( y

- K# O  {/ D7 y3 b( E

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
! U0 ~% s  ]/ Z! K, g. s( U: K
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:177 z: J: t, E* U2 R$ G* a
Почему мы используем ключевое слово this для ссылки на п ...

+ L& E+ @$ |6 {) C% O+ nКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.$ l' v3 P9 o0 c0 |# E9 {
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
, D4 K+ y" h: l6 E5 i, y
# P% u2 ~* X9 M7 w, e" R( hВот пример:0 U4 c0 D/ H6 o7 w3 u) F
  1. public class Player {/ S+ g4 J. s9 a8 c
  2.     private String name;
    1 [. z( U; j, g9 A7 a" u
  3. " R: }$ a$ Z# x/ V  v0 v
  4.     // Конструктор
    ) d1 \0 B$ y4 o& c6 r  @) P* ~/ k
  5.     public Player(String name) {: C9 @, x2 L: ?  f5 F- [
  6.         this.name = name; // Используем this для указания на поле класса6 L  E  I  P7 s; b8 Y6 s2 I4 N
  7.     }
    % N0 _: A% v" y6 W
  8. : W$ F4 c$ e/ y5 M; v9 N8 K
  9.     // Геттер для имени
    & B9 k8 g# x2 j' U  t0 H
  10.     public String getName() {; Q: F9 {- ]! S. B
  11.         return this.name; // Используем this для обращения к полю класса4 M0 I* j$ C% L# w* ~3 e
  12.     }4 c( C$ c/ j) j4 r/ s
  13. }' w) q9 [  a- C( |: X; ]4 u% o# Y
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.( S2 N1 K5 j. k; o2 ^. U2 \! [
% I  a& \8 @& R: B
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    . ]9 ?5 q) B- A  w; \& `7 C/ m2 k

- T1 X9 z5 Z+ O, R  e, C/ vПример передачи this:, y" p) s1 j& M% R! k# V
  1. public class Game {
    / o! \3 L; H' t! n  b- O& m
  2.     public void start(Player player) {- ^' n/ W. m6 k! {  o% c9 }+ p/ ^
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    5 U7 L  e8 u1 `4 v0 _: w
  4.     }8 l! A; c+ C, h6 ~" V1 K  P
  5. }1 }& o8 q* O: o; j) G# N* Z
  6. 3 ^1 h; Y7 T- B6 M1 y) m) @( u
  7. public class Player {
    & d) @" V, b0 R* Y$ Q* W- [7 `' t/ u
  8.     private String name;
    $ I1 a% _- q4 N, ^* H( t1 I# h

  9. 1 @# R2 D! T; K8 ]4 D) N- w" S5 e
  10.     public Player(String name) {: v) p3 k/ v6 q1 u! V* m
  11.         this.name = name;
    9 }) q& G1 l/ v0 V
  12.     }
    / J. ^6 N" q+ j( \/ k- i4 ~) H
  13. & x! ]: B3 t9 W' a! B/ C' J  A1 A
  14.     public void joinGame(Game game) {" a; h* Z) l2 n9 e) R! @+ Q
  15.         game.start(this); // Передаем текущий объект Player
    ; k2 C  A5 q" \6 y* }- h" F+ q
  16.     }% L, F6 c6 c% Y/ u: x+ P0 H
  17. }
      `- Y- m# \( o. \: M
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
) j% I% G; S+ @5 v1 ]
1 o+ Y; b. O; U. [8 m3 V
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
( b' Z1 p, ^1 ?
4 ?9 ~: [* y% M9 P4 P
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! " N- N' x  P' @% F
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 4 H8 q3 a8 L! |" r7 o' E
Mike123 опубликовал в 2024-10-17 20:054 l  P1 K/ d2 S. V
Добрый день! , J) s7 K4 z1 H
Как создаются и вызываются методы в Java? Мо ...
+ X0 B0 J& I* G
Привет, Mike 123! ?
0 R: ~9 T7 A2 c- i7 ?Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
, e& l1 n- y" S' t& G" {* T! d# H  I, e3 U. ]8 i4 [
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
+ \' f; L7 P) A
$ W$ S3 E3 C/ V: q+ S7 j8 P2 Q  D7 ~. O! [
Как создаются методы в Java?% T& ^- u. o& \% D- \( e, j

* I6 e% x- g5 b) l9 }Методы в Java создаются внутри классов. Вот базовый шаблон метода:6 t: B0 K1 S! ]
9 G. v- C9 s! T# k/ O9 V
  1. public returnType methodName(parameters) {
    # ]! H. z. l* M( E0 p4 E) ~
  2.     // код метода; g4 z. Z% m) d0 |
  3.     return value;
    : y* y" ~; \; d6 N3 j
  4. }
    5 D4 Z/ Y! R- ]
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).2 m0 R% T( i& w$ ~  B
. Q7 u, z6 d& E: `& J" X
Теперь перейдём к примеру.4 \) w9 q2 T5 k0 J/ j7 V
( ^7 k5 o/ ^% S( N0 L# q1 n9 t
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
: V# c" T$ O% b" ~0 o
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    # Z0 Y" v2 o, A! T( s) Y( u# H
  2.     // Вызов метода атаки NPC. g/ C7 r/ v8 T
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());6 f9 M5 X/ h% @* W* G2 j
  4. }
    ; W9 B! @! G; M) e9 {
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
% ?% T. l* B# i. `. l) i+ E& G- `1 T, B) L( T. i/ N) B( P
& W- h8 g. @. V, a) k* w5 L" A
Класс Npc.java — вызов метода0 Z* y# p- w. g$ U5 M7 L
/ z, x: P* O6 V) L( m/ F
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)+ }* B$ S& K0 c+ g+ S7 y2 }% C) q
  2.     // Логика получения урона NPC
    4 k0 B& m9 Q" a% E( o. i
  3.     this.health -= damage;  // это.здоровье -= урон;
    ) o' l7 p$ Q9 I* ~
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    3 y/ E9 `& Z! C  e% p2 I/ L& n
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    : \3 Z4 T4 `3 ?) W. K1 G; t
  6.    
    - }; V! k$ e. c; B7 V, Q5 R" E; M3 ~
  7.     // Проверка на смерть NPC7 q6 Z2 I6 E- i8 o. Z
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)7 ~+ w+ C: X: r' G6 W
  9.         this.die();  // это.умереть();3 k+ k& {- `8 x' r4 J1 ]
  10.     }
    2 L2 p: R& }  s+ J% l. p
  11. }
    / j9 \5 X7 o* W  o) j' d
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).# t/ j7 j  h: E* P$ c/ E3 z2 q
Пример взаимодействия (с переводом)
- C% B& z' Z  z& g/ M4 n/ ]3 ?# A
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");, L8 C; u* Z* @. U3 d
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");- @4 ^$ e  q7 @
  3. * S8 g9 p  d$ _! H! R+ ]
  4. // Игрок атакует гоблина. P: G2 I5 N/ o6 v- R- G
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    ( r0 w2 w! e8 y1 L; o
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
: g4 s( _% _) H, K. d- ^1 t
" B7 f$ F* B6 I3 y( f' h; ^
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.7 q' q9 `7 s5 Y- j4 W! ~$ u; v$ V
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!5 w! {8 I4 P5 p
& ~; _1 `% B3 Q( l- L8 t1 q
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
) @+ P, N) m' s( y" y9 E0 j/ C8 ?Привет, Астралия! Огромное спасибо за твои разъяснения ...

1 m9 i: O0 K1 H' o) BОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC./ {) s( e7 C' ?8 ~
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    1 l; {: R+ z. a  Y3 F8 p
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:$ P0 d; w. H! m. _3 C% w' _9 L

% Z6 ^- k1 |1 S1 ]
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    1 _( w+ m& }) b$ U& B
  2.     // Логика взаимодействия игрока с NPC$ P% d8 d9 S4 T) C. W& k
  3. }4 P- v1 I) r; V
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    , G- Q$ c, j, I% O& E; n

& T8 x, a; S4 H) s9 M; l
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)" T8 y! U; Z; v* J# `
  2.     // Логика перемещения NPC
    8 y1 |! Q4 r1 }9 d3 [
  3. }: s( J- s0 x( S$ F2 ~
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:& I* \- M) C% o+ F- a4 n

6 v% P+ l' f3 W
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    ' @8 Q2 `8 j$ b* k' I$ S
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)2 E7 L  @4 L3 S/ ^8 }
  2.     this.health -= damage;  // NPC теряет здоровье
    & R2 X3 }& A. i3 O8 M3 {* _* d8 }
  3.     + D( E9 X+ U. ]% q& R/ m
  4.     if (this.health <= 0) {# t) W7 j  A) _/ j" O
  5.         die();  // Если здоровье упало до 0, NPC умирает
    ( n* K+ T3 n, @3 s( I+ d
  6.     }
    1 `8 F7 S4 e- R; x
  7. }
    ! q1 \9 ]7 @) ]
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    & D' I# w+ u* N1 W) a) Q9 \4 C

( Q4 O( c; q7 R4 v5 F4 b1 H  H/ v
  1. public void die() {  // public void умереть()% g% |! S& S; {! d
  2.     // Логика смерти NPC8 ?- W4 o/ [) u4 Z! t# R5 s
  3. }
    0 r$ v3 W' O% E0 s
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:. |+ Z% u2 m/ b8 X8 }" g% J. E/ E
; P  p: _0 T# |5 t" W+ Y

  J6 }/ o3 T  p% Y$ w, a2 p
  1. public boolean isDead() {  // public boolean мертв()
    8 }! a% y# f( @. K7 `/ ^! j- I, ?
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    ) U+ q, t' B4 Y2 x6 V0 i
  3. }, |- H( [5 J: B. f7 r1 m" M5 ~
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример+ q/ Z) L! G4 ~8 G& ^* ?# }; o7 n/ }
. I/ B% Y" H+ b; k8 b
  1. public void heal(int amount) {  // public void вылечить(int количество)' z% M8 b5 ]/ l8 A, q3 b% V
  2.     this.health += amount;  // Увеличиваем здоровье+ G5 v/ v3 H2 E+ Z) B
  3.    
    * \. R/ ~7 ?" A- l# o0 P6 Y
  4.     if (this.health > this.maxHealth) {
    5 v4 u" d1 v) {3 N  A+ Y
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального5 p: P- M# S+ g! C
  6.     }' z9 d# L1 q) b3 S
  7. }
    ! E) P) o, |% ]: m8 A
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    , M  g0 H5 Z. F! W* ]! x5 O; J# V

3 y; H1 ^% x# l! y  o  q6 o
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)/ y# G& Y! G4 S+ b3 b
  2.     // Логика применения скилла NPC7 J; x& w' Z2 L8 h
  3. }0 c/ j+ A; }+ P4 Q
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    + C1 K4 {5 g, m3 R

" }7 w, Q1 r/ B: M3 A' J) c# D
  1. + d; ?+ a$ s8 D  W' C3 Q
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    ' E! y0 `) T4 J3 N0 i
  3.     // Логика взаимодействия с NPC
    % G) d" L4 _. H  Z, Y' l0 o
  4. }
    + z& y9 m6 P# F" U1 f
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    - Q) _" G! u2 V

" d$ T! m/ t  o: Q, W) l
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)6 q' d: C$ j3 R; Y7 f! h
  2.     // Логика открытия окна диалога
    ) z+ ~+ l' S, V# |. Y' p* ~, m
  3. }
    6 J; W% D+ Z9 K" z" L* j, P
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
4 M& f- @1 e6 x6 U# V( D8 T* AЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
3 D1 ]! [( a# b0 N
2 l8 s) I0 U9 V; q& i+ z
& Q5 m+ L* d$ I" L9 b! D- ~
5 C% F  T  [4 H  S, q& c
3 V% a' k: O7 _
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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