Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
# V' C4 c& p/ N- e
8 E! x! h) E2 A0 U% G4 Y
, B5 u. K% {4 Y5 Y1 q) nШаг 1: Введение в классы и методы на примере L2j_Mobius, p6 Y% @, T% ~. H7 B3 q7 ~7 |
С статьёй можно ознакомится в разделе Обучение > Читать
+ q7 O4 r/ |- G; X# ?0 f% v
* F$ ?; r$ o- `+ i4 KДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
7 z' D- ?* D* Y! L" t; K+ t2 K7 S" x4 W8 A/ J# ^# ?
Обсуждаем:& a; v6 a, I0 Q( z" B' q7 r
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    / L3 R+ p; W2 g5 `* [
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
  J* y% V5 S* s8 }" S
5 p& @5 ^. u5 \! P. M

9 `. i% y: W* h' n  nИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
5 P" m: ]. X3 W) r" {% W, e) h5 y2 q3 @: q7 h- f2 J! a
+ Q/ x  p7 }5 o! N9 N' j& ?
1 f5 ~2 C2 t+ Z) z
. r; g5 B8 I2 }) }* T8 I5 }

# P+ y$ D% [7 {5 L% o

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
! ^5 w: X$ y( t4 f3 k
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
4 I1 ]# D3 e9 f7 @# CПочему мы используем ключевое слово this для ссылки на п ...
9 [2 ]4 |( j5 x+ E' |+ d, b  u: q
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
% W7 ^9 N2 s# x# a. GПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
( t; y) G. J% y6 m4 z2 j3 F
' z2 D7 `+ c: n9 Q/ T( u6 EВот пример:
: T. y3 V' ?0 i  c) x, ~; A6 ^
  1. public class Player {
    % R$ w# r4 v4 X, }
  2.     private String name;
    / `* |4 ?, Q8 b  G5 y: A5 t9 p( n

  3. ' K8 ~+ p3 H9 A- m: x& s  C! J0 q
  4.     // Конструктор9 r2 F$ i' h. Q& ^
  5.     public Player(String name) {$ F8 Q# @7 U, k5 k
  6.         this.name = name; // Используем this для указания на поле класса
    . {$ p+ W( i& N" V2 m5 E
  7.     }
    0 Y! L4 b7 c: I
  8. 7 p- g. k3 e# g0 O) U" X
  9.     // Геттер для имени# j4 @/ U0 f" w  H8 A6 d
  10.     public String getName() {
    & Y0 Y- a! K* q# d- Z
  11.         return this.name; // Используем this для обращения к полю класса
    $ Q" @3 D" s! Z- X
  12.     }
    , }, |. C1 X) [4 \# {
  13. }
    ( S+ y- [. ^" ~8 }, h! X7 G' V
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.; d2 S1 T/ f) {% N9 V1 P0 G+ K
7 u0 ?8 Q6 X7 [( r
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    ' p- r# n; X& {3 X3 L
% x0 M3 ]3 x$ v6 L9 p0 Q6 ^9 L9 J* a% q
Пример передачи this:
# h" z1 b9 J# F
  1. public class Game {
    : M5 O; ~( q4 `
  2.     public void start(Player player) {: w6 Q& j, K6 z
  3.         System.out.println("Игра началась с игроком: " + player.getName());( z6 H6 R, a5 _/ e- y* @
  4.     }
    - b; Y' W, r2 d% J: N5 ]
  5. }
    # A- B% f0 o- e* l1 U, |* h
  6. * o: u5 G6 d2 A* f- x
  7. public class Player {4 r; e8 e( k/ R% C
  8.     private String name;& ~" o4 @4 c( A# q: S) y
  9. . r& T* J  w4 a: _" `  y' X; D
  10.     public Player(String name) {" f& b3 m  F. l2 S
  11.         this.name = name;. y& \8 K; J; M3 H
  12.     }
    , E  Y4 L9 [2 d: n2 B

  13. / }" i" U: y7 R# ^- c. T* N: Z* }& w* S! S
  14.     public void joinGame(Game game) {! }% k9 F4 l: @2 C& l6 n8 E- m  K2 M; K& z
  15.         game.start(this); // Передаем текущий объект Player0 y+ O* V  [, A: A0 y
  16.     }. V6 M. \8 V2 P
  17. }+ L, j: o- ?; e" ^4 ^8 Q/ S# [
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
$ s& T% b% }% z6 E

. `" h0 |0 I! ?# D% O+ Z* YПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?- R% }& ]5 t1 W. A

# {4 F: y1 P0 v  {! `
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
$ L3 Q6 Y5 F9 c) ~+ [Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 ( w: _0 L6 Q! n' S# R: H$ M- M5 r
Mike123 опубликовал в 2024-10-17 20:05
1 e4 [1 M8 j. e- n3 Y1 yДобрый день!
) V0 [: s1 s6 r% a% h% yКак создаются и вызываются методы в Java? Мо ...

+ d# `" ~: O8 o- M6 }' ?- g( xПривет, Mike 123! ?
: y% O" ~# P8 q4 a: }1 PОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
/ J  X2 V" I. X
! L" X3 D. q2 H. j8 r. C# ?! V% YДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
7 J+ t  h5 t4 o  c. ~8 Q0 H% L
7 l. _9 X2 e: x' r
- J! g9 j/ W- UКак создаются методы в Java?0 V$ o1 C) [* ?; p/ O; r% L
7 I: m* q7 T% Z$ \4 h
Методы в Java создаются внутри классов. Вот базовый шаблон метода:# O# ^/ S( M8 x: F4 X5 F
4 T$ y& D; [" ~
  1. public returnType methodName(parameters) {
    4 v5 Q8 [. Y( v1 v: z& |) f0 H1 n
  2.     // код метода
    . J" p5 a8 E. I
  3.     return value;4 O2 m0 u$ @, A" k5 T; m* l
  4. }) g) q5 }) O# L2 v, i6 _& K) h
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    - o! P# F6 ~2 [( t6 @9 |
- U* J/ B# N5 U+ ]& u- t9 g, I
Теперь перейдём к примеру." M( Q% i( I+ l

# {1 w8 S$ [9 b4 P2 kПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
/ F) y0 I) q% S- w& e% ?
  1. public void attack(Npc target) {  // public void атака(Npc цель)# }3 K- G& F# S7 \
  2.     // Вызов метода атаки NPC
    ) I0 [$ C. _( k7 J/ W
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());% _: W8 A  v5 r. r% F
  4. }
    ; u: _$ P2 O# y' H% y
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).( t2 m2 u9 |% A
2 d* e1 {# V% Q8 K, e6 {

( L- C+ s/ ~' i7 B2 F: ?1 k7 }% vКласс Npc.java — вызов метода
6 q; V/ \* v% ^/ Z/ T  d) ?# o
) O8 i$ S! V, m) o8 ~  q! r
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)1 v9 K# I' J4 |9 G7 Y- O( K
  2.     // Логика получения урона NPC
    . U2 D& w% o. U$ v& t
  3.     this.health -= damage;  // это.здоровье -= урон;' @! ~( c5 G) d8 R! u# J2 D* J4 Y
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    - \) I. d* C% S- n
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());! p$ S4 ~3 n! P2 x
  6.    
    6 a7 O# W4 S8 M, @7 u2 }
  7.     // Проверка на смерть NPC0 b8 E# M1 `4 C' b' y3 I6 ?
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)+ I' u' J. N# T( i; l& D. i
  9.         this.die();  // это.умереть();2 j% F) f% O$ V$ |- C7 \5 _
  10.     }
    & c3 W+ @  b1 v  r) p! Y
  11. }
      }* p8 Y4 K  v4 w8 U
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    5 D; K, B; v5 F3 R4 k4 q
Пример взаимодействия (с переводом)" @  j, y1 N% r+ v7 n
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");3 y. o( k$ s& l' [! K
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    " }1 q% q8 Z) g* M/ G9 i

  3. # u+ C! B/ z6 A; }3 J
  4. // Игрок атакует гоблина5 l. Y- l+ [$ D& D. A4 S  T( S
  5. player.attack(goblin);  // игрок.атаковать(гоблин);+ L/ t; }" ~$ q1 d( J
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
5 p2 N% \& R. A6 s, {9 w) ~/ F
+ o( ~8 x: `  W1 @8 v; b4 t8 `1 n
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.# A: P' b# X( u
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
0 n# p  [: B+ ~+ [8 F' R7 t( ^8 N
* K, N& a0 [) a1 M6 s6 X
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
9 M  c" V- o/ j" V" @- gПривет, Астралия! Огромное спасибо за твои разъяснения ...

8 U, p; i& Y4 X$ D8 K; NОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC., W, V( I: d1 `) X  s3 C  t6 W. K
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример. k! d" ~5 ?2 B2 X
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    ! k0 B. L& i! P' Q, j
* ]# T/ n, z7 a) j$ ]2 D
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)2 R, H! f# m4 R
  2.     // Логика взаимодействия игрока с NPC$ e7 w; l' J) [9 s. \( `, K
  3. }
      k; O; E" M( o+ c% }4 Q* t
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:+ r9 A5 R0 p) a6 f0 {6 d
2 F8 W/ Y1 b" j& y9 g- e+ U. p1 o( h
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)( [* o, Z8 \* `7 u+ G
  2.     // Логика перемещения NPC
    5 q4 Y% a+ q0 ?" Y% s
  3. }
    ; Q+ w( I5 F5 l% Z5 ]. D, U
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:8 a2 t# G* G5 k

/ u0 T6 h3 k- f
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример7 f5 H  u* a- Y* N4 X" ^
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)7 [% |, R7 E4 @+ b
  2.     this.health -= damage;  // NPC теряет здоровье
    6 ?, c/ z; \2 ~  _
  3.    
    $ I. z* x2 v# Q7 t- `) z9 m% u
  4.     if (this.health <= 0) {
    3 I3 W: q( U. d$ X) V; h
  5.         die();  // Если здоровье упало до 0, NPC умирает
    5 E3 s7 G1 g4 \5 w% ?$ f
  6.     }/ g: m% V% S. D' r8 p. h
  7. }- z6 l1 b, _. u* o: e6 y7 `
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    . M/ h. L/ m) N8 n+ k

4 b9 U; X, r6 r3 X1 O
  1. public void die() {  // public void умереть()
    2 I7 C4 I5 e: h$ F5 @/ b
  2.     // Логика смерти NPC
    * N  O4 B$ Z# `( g* F6 M
  3. }1 V' L  a; e! @2 n
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:: U' J: N& c' {6 O2 x
0 l' L+ U6 L7 r; n2 [& A& d

% S: @9 N- }9 p  \
  1. public boolean isDead() {  // public boolean мертв()
    + k: P$ G' ^# K( B  C& L  `- B) F0 I
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    % z0 }: b1 h2 x& O
  3. }1 B9 a" a2 V8 a$ J7 M7 U5 }/ v" e
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    ( d5 u. I: W& \6 q; ~% N
* y( _, C0 Q  }9 m
  1. public void heal(int amount) {  // public void вылечить(int количество)& D. c+ M; r3 H* h8 c
  2.     this.health += amount;  // Увеличиваем здоровье
    ( y3 B; Z5 K0 r# z! g0 c9 A
  3.     ; f- ~3 x/ d- U+ \3 y* w4 S
  4.     if (this.health > this.maxHealth) {
    # g5 H: D& [: N& ^! a7 c
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального5 _. |9 ^8 k  C) k. k
  6.     }
    , |/ J! l* k% e% |
  7. }
    9 ~& M2 H# H" T& s6 u
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:* e1 X1 l- o0 n% }- Q$ \6 i
- h1 v# j: j2 j# t0 }
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    ' a$ \) d, H" w& ~
  2.     // Логика применения скилла NPC. i. m1 x2 \) M* u( I
  3. }* z7 z% O% j# X/ J' o. |
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    . e* H5 N. ^9 a+ U
: x# M* Y" q3 T. [( N
  1. 5 Z) I& ~' Q; S# |9 r  b# p
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)( N1 J. b8 x9 i1 v
  3.     // Логика взаимодействия с NPC
    9 L; B, d5 Y$ T. P5 }
  4. }
    3 K% ]$ w! k+ C0 c
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:$ _; X4 p( N/ O' x2 h0 c: F: b  x

3 a* G' H/ [) b% O$ z' z
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    ! \% a$ N( f+ w& g$ C# A5 s
  2.     // Логика открытия окна диалога! {- T+ a) P5 d3 d$ u2 r: k9 k, T
  3. }( t- h; D6 [3 i/ R
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.4 x# p5 H1 j! P! j: {6 U3 p; T$ ~' C, e
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
) Z4 T5 V: ~5 l" |- L* Z- \1 M0 `/ G/ X% }1 u1 b7 W0 K

/ ~% T5 Z& C2 C6 z( A9 m
( `  ~1 m2 R- N
$ P/ h- o" \/ \) g" C; v" u0 K
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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