Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 # f3 |& f9 V" F2 P) y/ b

, v: I, f- {7 {7 q% _
" ~, ^1 y+ G  K9 o  Z/ {3 \3 j4 MШаг 1: Введение в классы и методы на примере L2j_Mobius8 Y( J& P; `# W5 N0 f/ m
С статьёй можно ознакомится в разделе Обучение > Читать" @: [1 E! a$ {' c& D, n

: z! }! Z! u2 u) `( p, WДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
4 Z: J; f  I" t! r+ W: s0 L( p3 q6 D4 h3 |
Обсуждаем:' H' z6 `5 |4 ]( e3 F
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.5 t3 Q: _" d* h) R5 A9 Y
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
/ H3 C; \9 L% S( H1 U7 l" b
; E4 v7 S1 C8 f3 M# v
) V: V/ W( g8 E* ^
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
7 J0 c' `2 B* u1 w6 ?5 a9 I7 |" T+ G! e6 p5 M6 e1 z
' d( E, S% q  r* C! k+ R1 l

1 S! n6 f5 Y8 Y) i% O5 h3 c* W  ^$ Q+ P0 U* \

2 J& J' |* P, m$ a3 s% d. l

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
# o. w, v! Q1 }  h
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17$ \& z! r- x* c
Почему мы используем ключевое слово this для ссылки на п ...
+ Q6 V# `7 T+ \8 X& a+ f
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.. Q% X2 F$ Q2 U+ j+ X& w/ Y
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.5 [* @  k% U, S' k# w/ X

/ v, o1 ]# i6 ]0 @7 iВот пример:( ?. Y2 e9 N* Q
  1. public class Player {" y7 x$ h' p  \! |
  2.     private String name;& o' R3 g/ k* x) Q6 @
  3. 2 l) Y" u5 e( P
  4.     // Конструктор3 |: q: W8 x+ Z" D0 f, k
  5.     public Player(String name) {
    3 o  V$ f1 d6 N5 ~: J1 V% X1 v' M
  6.         this.name = name; // Используем this для указания на поле класса( J1 G, Y  Y7 |0 s3 d* x
  7.     }! u. ^3 C( Y! u9 e8 i2 V' j; v9 X

  8. ) r! o) l4 V  Q1 s9 r$ Q
  9.     // Геттер для имени% S6 \. m$ p2 U1 r7 Z* N. l
  10.     public String getName() {
    7 S: n: D% \, b& \' t
  11.         return this.name; // Используем this для обращения к полю класса7 n% F/ I- ]8 C6 n# v, ]) Z
  12.     }
    ( F- T" p. l- W, T
  13. }
    0 K2 d; V6 J* n' V9 u* N  D
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.7 J6 ]. y2 z* E* _/ h) W

, v( L. g' F8 ]" ]1 r- mКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    , Y# {/ {9 v/ |8 N
" o0 U" O* j2 L: v% c
Пример передачи this:
; g3 H& H$ D8 D. |$ P+ i9 z. z
  1. public class Game {
    0 Q8 S& C. z% l, H: `
  2.     public void start(Player player) {" o* ^1 |3 C% `' |! v3 X, f
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    8 L9 J) S, i/ [0 P$ E3 m
  4.     }4 o4 u2 d- {( d2 L
  5. }
    ' w& a0 k6 |# J* Y% A1 ^4 q
  6. : R: G' k3 i: t* b6 N
  7. public class Player {+ A, e9 t5 k; ?# B& I0 H5 S
  8.     private String name;
      e. l* k8 l0 f7 d8 M
  9. . b5 t, {! ?! b! {0 h' C6 _6 u: _
  10.     public Player(String name) {
    # X1 a5 @- D2 ?  H, J8 m7 i
  11.         this.name = name;+ r7 D+ I/ E( x
  12.     }
    ( m! B+ u: C2 P/ k5 x. @

  13. 3 |% y- F0 {+ l7 d, j
  14.     public void joinGame(Game game) {0 ~9 w2 {' I7 I( a" {
  15.         game.start(this); // Передаем текущий объект Player
    4 o- r; V; Q+ h6 _/ V! K, ^. @
  16.     }. }$ E6 a( e1 g" H. \1 i9 D7 h
  17. }
    ' w6 t# T. [3 t. q7 y: e3 K
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
, I$ b! K2 B! z) N  b6 D3 e5 o
2 o$ V! p# I# x0 S
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
4 a+ ~6 b: B' Z7 q7 }5 p
5 ^6 P$ I* w1 n
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! # e4 S, Z" F+ C: H" N2 {
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 / c& E1 v% p  S* h2 ~. V
Mike123 опубликовал в 2024-10-17 20:05
/ f% v+ L- A1 G* T, k& a1 mДобрый день!
! e0 y& W/ u) y* A+ YКак создаются и вызываются методы в Java? Мо ...

: t9 ]( J5 M, b4 o: Q! h3 D) k& YПривет, Mike 123! ?
9 `/ t; W$ P) c( mОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
. o: ~# e( e5 W# n: K8 Y4 f+ B2 P9 `2 X% O
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
% ~. _  ]1 B8 Q1 J9 m2 Z) _& i1 \# y( u' g+ p
- ]4 }" a6 j! t" Q1 _8 X
Как создаются методы в Java?" `! n! f- G9 k# s: x1 \
% d; P7 R% \' @; v- H9 Z1 y+ A( W- v( n
Методы в Java создаются внутри классов. Вот базовый шаблон метода:% D8 |  D. d9 _% ^8 \  N  d. p# ?

7 I- d% C4 Y: ^; Q+ ~
  1. public returnType methodName(parameters) {; j' B7 }9 u! T( Z, s* T
  2.     // код метода3 O2 t% w: s+ _6 |6 x$ G1 _; ^
  3.     return value;! ~0 D! U$ }1 t  V' _! r' L0 b
  4. }7 x3 W% e* k- f; }
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    , r. v4 I/ b& |- z
# A7 h4 `$ ]2 {6 s5 S" a/ @9 B7 U. t* p
Теперь перейдём к примеру.
$ p1 q( M6 r' h# y
/ ]" s, }- f" {! S$ Z8 Y6 CПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
3 Y5 R5 g- d4 L6 c+ V- N
  1. public void attack(Npc target) {  // public void атака(Npc цель)' h- y5 x: [* x8 O. A& I* h/ R8 u
  2.     // Вызов метода атаки NPC
      o& ~0 s/ {1 L: [: v
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());4 e' L' B" l# E; Y% F3 N4 A
  4. }
    ; _! U, m: J1 b% Q& S' z! Q3 i
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
/ e% ?- \/ S& v7 Q6 t& W; |4 j: ]  H; o: f' t( Y

+ u/ e. _2 x2 u: IКласс Npc.java — вызов метода
- t2 w9 F: n7 v9 V' _$ j9 ]2 C9 S$ j6 H5 _
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)! _* n6 V+ s5 y7 l  |8 Q) ?
  2.     // Логика получения урона NPC
    : B8 p0 N9 ~# t5 }' y
  3.     this.health -= damage;  // это.здоровье -= урон;1 ?# z! b6 Z: h
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    8 q6 Z8 W1 q: d5 b0 `9 @
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    , q4 F. V( k. \
  6.     , a( C" d- r, D: n5 v
  7.     // Проверка на смерть NPC
    - I2 O$ S: G# Y
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)( _+ e4 P( K3 a5 a% x
  9.         this.die();  // это.умереть();% d6 p6 d2 I  z) G( R( s
  10.     }
    5 T% n/ J3 [  E
  11. }
    , ]: C  k2 T; p: _( x
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).: W; U/ c) @  k& l
Пример взаимодействия (с переводом)! a. |2 I, L; t4 [1 u7 N
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");, ]$ B) ]- c' ^; Q
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    9 F( r3 v+ z$ O! }

  3. ) d4 Y% E3 N4 A+ p2 G
  4. // Игрок атакует гоблина
    : n8 a% |1 r, ?( u* n3 |4 Y+ O8 p
  5. player.attack(goblin);  // игрок.атаковать(гоблин);: n& l" ?& E$ |* X$ Q/ |" b! \
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
% C5 k1 W  z( T- R( Y2 d! C2 y8 m5 j2 p
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения./ J! Y/ Z3 U$ @" m9 d9 Y6 p
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!" k& N3 |& b+ U5 ~6 }5 `
' K6 D% H1 S8 s* C2 c' M- j
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:301 G! _( f3 |; J  ?; [2 I
Привет, Астралия! Огромное спасибо за твои разъяснения ...

- J0 q  e* ?% H9 N/ R) NОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
1 R( c: r" D) B' |: n$ T) ?$ O. M& g1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    6 h) S, ~1 g1 W! W/ j
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    ) `( o- l1 F, P4 f% \: l6 G. o) R

/ e$ e+ ]. b7 u
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    6 z4 E. Q; P' n) {/ ~
  2.     // Логика взаимодействия игрока с NPC7 F3 D6 w1 K. s, O  l5 T9 H
  3. }7 S) U( Q- O0 b9 t2 P8 K2 m
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:0 }6 }" L& I# z$ I% y5 S2 ~
% V  n* S$ ?, E) [0 K) G6 [
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)) v+ W9 `3 s/ b1 |0 Y
  2.     // Логика перемещения NPC
    2 M2 f3 M0 Y% m  w3 [
  3. }7 e) D2 d& M  Z7 f  h6 k% R  Y
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:5 `' R/ Z* |/ R% M6 C0 l& f

9 U8 z- A* c, q7 ]1 \% n% P
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример9 v5 i" e2 ]( y' e( ]2 [: K. @/ V
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    . `: @) g+ {8 z7 J& a9 [
  2.     this.health -= damage;  // NPC теряет здоровье
    0 b6 T- A0 F0 {" ^& q' q% t
  3.     9 J, z, V; n6 U4 ?; r- R8 T- g
  4.     if (this.health <= 0) {7 A: [% Y3 g; `! `1 a
  5.         die();  // Если здоровье упало до 0, NPC умирает
    # y! e9 [0 ~: a3 f" K! ~! I
  6.     }
    5 C" X, k/ G% |% _1 L; T
  7. }4 y) x0 h0 x$ F" H( D' i; t5 h
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    9 @- P" o; l+ `2 J" p

# p6 A( T3 I$ l* v. S7 J8 G
  1. public void die() {  // public void умереть()9 \5 @4 f' r6 w
  2.     // Логика смерти NPC
    : _) v: L0 D; v8 h, E, _! C
  3. }
    : y9 D: u# J, |* x  x0 e9 L
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    - e, T9 h9 U7 Z* N# M$ C. k* v7 y. t

6 r+ |7 n$ u% [; f7 z, B: w( g
) V& C8 v1 R% V) \2 N& z; f8 O
  1. public boolean isDead() {  // public boolean мертв()6 Z9 \) ~% d5 K8 z3 C1 J  u) s# l
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    9 q, e) k" E; H. C8 g, l- B
  3. }
    1 v$ z+ r1 M: d* ]5 v8 D' [
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример$ q( }; k& ?9 R4 {5 b

4 E& `5 i. [+ [
  1. public void heal(int amount) {  // public void вылечить(int количество)& @: ~% A9 W$ ]% X! b/ Q8 H- q
  2.     this.health += amount;  // Увеличиваем здоровье! A8 ?9 I! ?9 b) R$ i
  3.     " f% f( ^3 o& e% N3 U, ]
  4.     if (this.health > this.maxHealth) {+ P3 i% [  P6 g9 i
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    9 {+ F0 G% \) |5 z! n! K
  6.     }: G( W+ l( d( |
  7. }
    0 W0 v. u- P* x/ |8 E* t
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:7 K* T) c! d, m/ ]- e
$ r6 V* I& j  w% z' `( B
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    4 l3 }- b, m* Y! v2 F( R! B
  2.     // Логика применения скилла NPC
    & Z' \" n3 p1 K7 p+ S
  3. }
    ) S' @) I" ]! |9 k
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:, ~0 {1 ]6 p) e7 W! G3 r

- I" Y' W7 r. M6 h- p6 g! M
  1. 8 i" r2 w2 K+ v
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)5 F9 N# g, [0 \. v, G2 p+ A: U4 t7 m, U" ]
  3.     // Логика взаимодействия с NPC) }+ o* Z% k& {
  4. }
    & j. [. m: G* \
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    & B, X; x" b8 d- N" w
7 b( w6 R# {: y/ C. t2 e8 z! |8 c
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    , k' }' T3 o  M4 @5 y( \$ X
  2.     // Логика открытия окна диалога: \/ H$ s- r) M/ o& h! Y: z+ C
  3. }5 V5 ?  T) |( K$ j( ?
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
/ ]7 b0 ~6 l, V; fЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!1 }5 e2 h8 ~* |& ?  e4 r! X& ^$ p
7 l6 X! g- y9 h% W4 w( J

; ~! [6 ]: g: z8 M8 S1 e) U9 v2 I- |# ]  X/ @. s/ K4 p3 ~1 a

& H5 X: F5 s% [
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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