Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 ; \% H: }# }% M* ?. Y

: F/ w4 O' T) a( i' ^3 `
5 q/ Q% I! N, l0 M6 Z/ U! eШаг 1: Введение в классы и методы на примере L2j_Mobius3 W9 ]3 O* I* q1 Q$ h  L
С статьёй можно ознакомится в разделе Обучение > Читать9 o6 V8 Y2 g, J# h" r0 t
. F7 M: ?* @  d$ [
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
' e# p8 ~' p! c
! F% o( s2 q: D  H5 b" _Обсуждаем:
. e; J7 g% X2 s2 ]! j6 {" u
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    # r6 `) k9 L$ v, X# X( w5 I
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!8 T2 W; M; ~; X! t* k

0 B3 p* l& S8 z4 z3 A

" S5 f6 ?, f+ l/ C. bИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
2 H$ W. I+ [4 |" y+ @8 r: K
. }7 u' I4 z0 q
. x- ?) m. K; O# B
! i2 u5 n8 @" ~% X5 i$ O/ L5 b- [- @* b. `: y9 K' H

3 v* G5 V. j0 j' F7 w# F+ a0 C

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
! `: g' c5 I9 J8 f3 r  V5 U
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:177 r/ t. k) Z/ b* f
Почему мы используем ключевое слово this для ссылки на п ...

9 m0 X0 V6 N+ @1 jКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса." T( S3 X  t5 v. y9 \/ n/ T
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.7 r9 `$ U0 z" I0 r4 q
$ G! ~  }+ I0 c; d8 u1 W/ ]! Q& C
Вот пример:
. e! M& T7 A* I2 X8 d
  1. public class Player {
    ( k  L1 m6 @4 |. a& Z9 f- R
  2.     private String name;
    5 B9 m8 p+ w% e: B

  3. ; [& ^, J! H7 B
  4.     // Конструктор) K' v7 R1 Z$ h% j
  5.     public Player(String name) {
    5 x5 X8 J5 K, }# x. H3 H
  6.         this.name = name; // Используем this для указания на поле класса$ I' g$ W% [1 c2 [- o, u
  7.     }8 ?& N3 j6 S! @$ q
  8. 5 ]( n( B3 {7 `
  9.     // Геттер для имени
    5 l' r# L: N+ w- ?
  10.     public String getName() {
    ; j% {4 W! \" c; g0 r( f
  11.         return this.name; // Используем this для обращения к полю класса
    ' |" P: W# l. u! M* ~1 J: j" q
  12.     }6 c; u/ t  S& J& o7 l
  13. }
    7 u2 m( B. @; u- g' g' b0 F
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.4 O" D, G$ r! w# I2 @- S5 w

. M) O  c0 Q( z. }3 K+ n- ]Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.1 ~; t% K8 x  [( P5 f  h
3 [, [! V" w( }8 N. N& C$ F& t
Пример передачи this:4 ?& B% X; s9 |7 e% H3 _+ _6 d1 D
  1. public class Game {
    ( d: M1 z" @1 A8 f% b
  2.     public void start(Player player) {
    2 w8 f3 p( E" @
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    ' q7 U1 `$ G9 n8 i  h& s* _: J4 ?
  4.     }5 x" H9 P: H7 p' r1 X' }2 h
  5. }
    5 f! ]) P% r% B* F

  6. / b  t1 M3 D  Z  J, P* B
  7. public class Player {0 o9 A! ]! V, K0 a& i& x
  8.     private String name;% }! h) e  X. J& V$ g$ C# k& E4 W
  9. * f) u$ F' L, G% L1 h, w4 A
  10.     public Player(String name) {
    ) {3 L$ L0 l& T6 D# N; ~3 @7 |7 }& g" P
  11.         this.name = name;8 v2 |7 t7 C" I
  12.     }( Y/ S* j) Q4 `$ P: ]7 n

  13. 5 K8 d* H& ~; L# H% M% d, h8 a5 f
  14.     public void joinGame(Game game) {
    - Q" V# ]9 A2 D3 t* u- G/ h
  15.         game.start(this); // Передаем текущий объект Player( W! u/ D7 U3 U  W. v, d6 \, r/ L
  16.     }3 d- g8 D* \$ ?
  17. }
    9 \! Q9 a1 p" p+ P2 p
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.1 v% L& p/ Q: ?* o: N( m0 T3 f" x6 U

- Z6 D7 C1 k( Z0 Q: X( J. g" q) z: f
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?6 C* U* S: M8 g2 A* e

/ E; H" L( H  y3 u* R, j
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
# M1 c0 M1 `8 U  b" GКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
5 ?3 U% h0 @  e3 j; c
Mike123 опубликовал в 2024-10-17 20:05- o: G- y5 t& J( s
Добрый день!
2 l, o# m9 X9 s  W% T5 VКак создаются и вызываются методы в Java? Мо ...
% }2 g) K1 F/ [, u0 [" V$ c
Привет, Mike 123! ?
- t2 v: ~, w/ k& e* o1 j5 x  `% tОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
: x7 J& ~) }5 `5 B5 }+ C; ]7 a$ O6 p! ~7 e  p( W
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.6 n0 A7 D5 b7 o

, v; J; C' B% m: X7 N4 k: @( ?! w- T2 {3 |9 M
Как создаются методы в Java?$ v- C+ o8 V, v
- G2 ^2 A; S, u. ^' R# g& H
Методы в Java создаются внутри классов. Вот базовый шаблон метода:! ^$ t2 ]1 H  P& ~( N
. Q! ]6 e% I2 x( W
  1. public returnType methodName(parameters) {
    $ J. }# I$ ]  n6 J5 b9 ~5 d
  2.     // код метода
    % e. j1 s  i3 e
  3.     return value;" ?  ^: c, _) f. p" M
  4. }- X4 L4 k- M- S5 `6 i0 e' x
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).: l" e$ J: \0 H- v( U

4 c  k; ^/ i8 \" B9 {Теперь перейдём к примеру.
. R" U; `& J% w& K2 E# z8 @! o( w0 z" ~! a3 v% c. Q- \' D
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
. f6 p& a, M" {9 ]' a$ n
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    0 e' A; `' f9 C% z- y+ _
  2.     // Вызов метода атаки NPC
    2 z; x. C7 x( U! X/ c
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    , _& _/ `0 t# D, v: y$ u. ?
  4. }/ C8 e+ T" q+ O" ?( D
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
; y9 |) I$ y! w% b/ ]9 q" \- U
% G4 V6 r1 X/ ~, ~5 \. ?4 m
/ l  t5 C" j3 m& @; N5 j' a' ~3 HКласс Npc.java — вызов метода+ A  x& E% _; A! o0 d/ |/ N
$ b; p  [0 g+ y: j  {0 p
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)2 t3 B) n8 C7 [9 ~7 R( g# k4 e
  2.     // Логика получения урона NPC+ `  F, d' k4 r8 U' `; x+ [
  3.     this.health -= damage;  // это.здоровье -= урон;0 F: i- o/ Y, }4 I7 x) P- a% |! m" y* [
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    * @8 n/ |* X8 d! d* E
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    $ H1 S' {: a3 H; h2 j! Z0 {
  6.     9 N1 D+ J% N% T6 _  v
  7.     // Проверка на смерть NPC; N) W; Q9 ~6 F) q
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    7 l. _9 r# C, C+ D3 u! T
  9.         this.die();  // это.умереть();
    * C; q; G2 \" Z6 s$ \' }: K
  10.     }
    ) Y9 y! n1 L5 m; v& U3 T
  11. }
    4 Z! m+ k* w. d9 ~- I1 v4 K
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).* z6 I' @$ Z3 I. T( K9 ]! n
Пример взаимодействия (с переводом)( o, X: {( b& o1 |/ e/ T
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    7 d# N. I) i* P; B* h
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    3 l: J- B  N- a2 T% l% s
  3. * f$ ?( X5 f4 G  Y
  4. // Игрок атакует гоблина, {2 s7 y6 L9 F2 T3 x+ C* {
  5. player.attack(goblin);  // игрок.атаковать(гоблин);6 t0 }3 K9 n; d( O/ N
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 1 O' D. P5 n' [" b
! t; e: f/ t; S- s- `! P% M
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
8 Y$ Q& x7 R9 t( V  `; }# _% J) j6 xУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
- `; H0 U* r2 {; C; B; u, D/ j4 S% M2 k6 l; R. B# \7 {4 B' V/ |
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30* X5 ~" Q/ A; }
Привет, Астралия! Огромное спасибо за твои разъяснения ...

3 Z; h  `7 A. U: _% L: \Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
9 B2 z9 u2 K8 U2 d- R1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    # a, R' @( T* e9 p+ n/ J
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:1 P6 q" Y8 Z* S) u) N2 G

( S9 w9 }% r# {9 I. A0 Q
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    ! m) e- \. N; b1 J
  2.     // Логика взаимодействия игрока с NPC
    5 j2 P. ]8 T7 R, @( a
  3. }5 J( h. {% N6 n5 ?% d2 ?
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    8 I% Q$ o* x) {/ p7 |4 S

8 N- `; [; q9 ?4 q: N( P
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)$ }# Z# x! C" p" d: A
  2.     // Логика перемещения NPC9 X: B% ]! k& o6 M- \6 D5 _
  3. }  O" {4 l. q" ^8 O, v2 @3 A1 b
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    & k# }0 e" u" X6 k6 H

  x4 T- x: G# r" e$ U" V' e/ u
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример% m* v& _" \" `' }
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    # \* u* k+ D* k/ B" |4 H
  2.     this.health -= damage;  // NPC теряет здоровье; t  Z9 N6 T0 y- t% v% X1 f% H3 ^7 Z
  3.     & ?9 A* J) h* G
  4.     if (this.health <= 0) {! f2 x0 b) }, ~
  5.         die();  // Если здоровье упало до 0, NPC умирает: b, {2 o$ V  n: o* a8 K
  6.     }8 y1 m  g. ?" l) m. D0 d
  7. }
    4 t4 o% F9 e! s! M
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример4 h, X8 E9 i3 I0 g

% u3 S0 Y' Z) x+ W
  1. public void die() {  // public void умереть()/ V1 i& D. }1 I" x$ L% x# `
  2.     // Логика смерти NPC# V% j+ ], W+ A# L4 L+ v
  3. }: O8 U$ p7 K- ~
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    ) N% U. Z+ X$ u+ t* B
% z+ A9 ^8 f3 p
) [7 L' H1 W4 B9 ^
  1. public boolean isDead() {  // public boolean мертв()+ c8 }4 J# D/ U# N0 n$ p4 C7 p1 u
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    3 t- k6 A0 [6 I1 G$ ]& Q& H5 G
  3. }
    % Z" O. |4 z% c
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    % s7 w3 B6 ^2 [4 `  u

; g& f1 W- D: [" e
  1. public void heal(int amount) {  // public void вылечить(int количество)
    - g( k0 ^9 V. L) z  h
  2.     this.health += amount;  // Увеличиваем здоровье
    0 t" E9 f3 v% c  c' h$ E3 G6 ]! O
  3.    
    : Y5 I4 B7 p, g& ?6 D
  4.     if (this.health > this.maxHealth) {0 C/ \& w7 k0 B
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального" i) Y; C0 f% z7 c+ ]
  6.     }
    : i. j1 q! n0 D9 ]2 X9 u
  7. }9 n- K( s, e% {  y9 l( G! J7 d
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:0 v( A2 g; k+ E

! N1 r) Y1 E. L# q4 U5 I# \
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    - S8 i/ \( h* B4 M1 [- y
  2.     // Логика применения скилла NPC( w4 z9 D  o+ h5 ?2 o5 x. T
  3. }
    # s! y" g1 t0 _/ p' F3 k( ?
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:% X# `  B/ h% m
+ C9 V1 W5 C# _
  1. $ j3 A" K' _% n. P9 T
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    ( n3 y2 X  |6 O
  3.     // Логика взаимодействия с NPC
    5 x3 I* ~$ [. s
  4. }
    4 \* q: g: g7 r+ \
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    " U; ?% L4 C- {: m5 z  n% k$ H

$ a/ m1 ?3 H, w) c) q& j3 L
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    2 z4 v( a( B( Q5 P/ t6 d
  2.     // Логика открытия окна диалога7 h5 ?9 ~. d8 x. {# Y8 }& I
  3. }
    ( h% ?& b6 j, v' a9 |/ r# {0 M
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
- }3 v; P+ G+ M9 zЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!) p: G7 I% @3 W, p: M; `
/ p& Y( R+ x8 l

4 X% t3 L8 ~* l5 j1 P; K0 k, z5 G4 i: e* r9 a

) g: d+ z/ ^" h* ~- u& G
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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