Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
1 ?9 O) b6 y& {! K- B7 P" j$ _; O, d) x

/ I6 v$ A& t9 J9 y  \* b4 S3 T  kШаг 1: Введение в классы и методы на примере L2j_Mobius+ z8 r* u( ^+ E) f5 o
С статьёй можно ознакомится в разделе Обучение > Читать2 g6 r9 t6 ?7 ]# E, I
/ M2 ]/ s, E- Y. }6 Z
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.) U. r. [# Q- |+ n" E
* C  N( x% r) ~4 S6 C% X$ a
Обсуждаем:
& C  P, }% e& |
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    % S9 d. [4 j2 }2 W
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!0 D" i9 g/ h) F% L, O9 o
' F% i7 G$ b6 j- m" v0 M8 o


; O* g$ f% e$ C( N3 Y: @2 M  Q! wИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!/ S( d( O( `9 F4 @6 o
/ _6 n% j0 ]2 P& J! m6 B. E6 ^% Y0 a9 l

  E3 _" \. X& I( j9 ]2 N3 E1 J( ~1 X( V7 k( ~; A; G* g
/ @6 @9 p! f  I

& v/ g) b) W( K/ n# m

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
! b- X. R+ j9 m8 L) b# G9 s$ k+ A
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
3 ^. _: k/ T/ X9 j, y; sПочему мы используем ключевое слово this для ссылки на п ...

& g. _1 x6 w0 P7 `( eКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
/ _: x- d: L& [- m4 n; pПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
- y' e1 x6 v5 L% v8 H8 l; t' l4 h6 v/ a  q" F5 S$ w- o/ c
Вот пример:, n, B4 e5 Q9 [) \
  1. public class Player {+ h/ ?8 i& J4 i8 [. n4 w6 a7 n3 F& k
  2.     private String name;( g3 S9 U0 N/ o9 m# D5 r
  3. # }9 x' g; h' L: o3 Z$ L
  4.     // Конструктор( A1 P" |1 B; d' r$ M9 S
  5.     public Player(String name) {0 c' A; _- ?! d& E: O; [  F
  6.         this.name = name; // Используем this для указания на поле класса) [3 ~* S- E! u5 l1 k
  7.     }
    ; v/ i& U9 u8 A: B8 g

  8. . d; u$ _* v! k4 Q/ L, x. G- o
  9.     // Геттер для имени0 G3 h1 i* b; T" ]2 T. a" ?
  10.     public String getName() {# I5 b9 l8 Y4 Z6 V" P
  11.         return this.name; // Используем this для обращения к полю класса
    ; B- @9 [( C" \! L; F
  12.     }$ P- x. d, V3 c9 F% ^1 j% {0 G
  13. }/ e+ S( m; L7 Y
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.* l( a. F* o0 w( w' k  v. w! w
: i6 m0 E2 J7 W; B2 ?$ ~3 X7 {
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.& ]2 l& H- X! a4 @! B: }" X

$ @1 Z9 D- F9 o, V! q: g4 A1 ]2 jПример передачи this:
4 _6 z& K4 _# T0 N) K' x) W1 H
  1. public class Game {
    : ^) D6 B0 I( t( z# k% A5 y% W
  2.     public void start(Player player) {" t' X  W5 E7 j) |' C1 c
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    # ~& P$ z2 v8 r$ {# w1 O5 B% n
  4.     }
    , w+ Q1 @) \0 H8 F; g( t* t
  5. }9 ^/ m6 n, ]! j) V+ o

  6. / x# \- [6 y" `
  7. public class Player {
    ) |. H4 r3 E4 y: @' D4 K
  8.     private String name;4 ?( a, {: i4 F1 o
  9. . e% @  N2 t2 T# `9 V, o6 y- F
  10.     public Player(String name) {, i7 i! P) z# ~' ]
  11.         this.name = name;! p; b6 C4 u. e: R
  12.     }
    3 T/ Z: P* e1 I! m

  13. + _, w6 h5 o) k$ h' x
  14.     public void joinGame(Game game) {; }8 G& A/ i3 R2 ]4 z- H9 [% O
  15.         game.start(this); // Передаем текущий объект Player2 S4 a, `# v/ n" \, v( L
  16.     }
    / _0 R  Q2 E6 q( R
  17. }+ l9 w) Q3 ^' e' h4 l' E
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
* [2 J( A0 ^- A# X
  Y# g# X+ }$ n8 D; d" U
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
* \6 g7 K( F' ?6 w9 K4 d5 ?/ Z+ n0 {( {. c/ O6 h
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! & Y* x! e0 M. ?- h: e- Z
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 * M5 g& K8 [& y3 i3 f
Mike123 опубликовал в 2024-10-17 20:052 M# s) i* z! T  w5 c
Добрый день!
9 `! K# K9 C4 G2 NКак создаются и вызываются методы в Java? Мо ...

3 ?# s" C. A+ e8 fПривет, Mike 123! ?
. Y4 K- W- b! G2 j$ s4 w* XОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.* @; Z% p8 `# f  w
6 K& L3 }* E# ^. _, i/ x
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
; a0 k& k9 e" y, u  s% U; b6 }* I, F- _2 g. a5 n7 X

% H. J. s) ]4 c) SКак создаются методы в Java?. I$ J4 M$ ^1 B

" r4 {* P* ?! W' BМетоды в Java создаются внутри классов. Вот базовый шаблон метода:. W- y9 T1 D& \9 j7 U0 _, b: `
6 y+ F" I+ r6 N$ k0 D
  1. public returnType methodName(parameters) {
    7 v7 X9 m/ S0 `* \9 P6 C6 S
  2.     // код метода
    4 l; I9 k' h8 h, g& P
  3.     return value;7 u5 y: U* |$ t+ f+ i2 t
  4. }
    ; I6 J* l2 G+ o: A/ G# M6 G
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    ' w, I$ E2 T" ?. Y; @- z
( Q$ x, S" r* {  O! H
Теперь перейдём к примеру.
5 @& Y0 x5 M$ k# r+ p, c" t- k6 `: v' y% c5 ]
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
  ~/ g* q# O: _% ~/ w
  1. public void attack(Npc target) {  // public void атака(Npc цель), E7 ]; U3 N; u" z
  2.     // Вызов метода атаки NPC) D9 ^* }7 U9 ~* \* \3 i
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());! P: T6 C/ w5 N' n$ k1 X( A
  4. }
    8 F8 T! `0 `, c/ C& X4 ?  }
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).3 D) J! Q, C1 ]9 o0 V
8 }: n. ~8 w# F1 c) M, d- j
3 @, K( G' `9 F, G
Класс Npc.java — вызов метода8 N$ M1 f5 `0 p. h* F7 X8 [! M! M
( G/ ~( l  j+ ?( ?/ `
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    2 ?3 A+ i( c9 x! z% [; I+ i0 N' M; Q5 b
  2.     // Логика получения урона NPC
    # T4 u  Z. e  I! o# r5 h# m# L9 ]  J
  3.     this.health -= damage;  // это.здоровье -= урон;' v& k2 _8 ^% O1 j! U# H
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  ) p0 T; u5 g  U3 y' j
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());6 L7 h1 _: ~8 t2 J: U
  6.    
    7 g; W7 u# o. }! e& V
  7.     // Проверка на смерть NPC* U% j4 ?7 R* S
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)% M5 M+ O+ ]& y8 G% L. S/ Q
  9.         this.die();  // это.умереть();3 Q- s, c4 _8 j5 n% l$ m& Q
  10.     }
    , E9 k  A. O5 Y0 i$ M- a. D4 Q
  11. }0 k, w0 ^9 w/ T5 b' D$ m6 v0 C
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).  f- b: a6 _$ B4 q7 @8 Q7 o( |$ G( }
Пример взаимодействия (с переводом)
: w$ H% A* I9 s# O# J6 `
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");% n9 n- Y+ u  p, D( F6 R
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    + {  }' a+ z: e4 \

  3. $ s' `2 }, B4 B! B
  4. // Игрок атакует гоблина5 `& j% G' s$ ~  _2 O
  5. player.attack(goblin);  // игрок.атаковать(гоблин);. \  ?2 [  @9 p3 T/ X. W0 d# t
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. . A9 e) l: p6 H: @. h7 H

) y0 [' m7 i  Z! q3 L, M
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.0 u/ k, G% Q( Z1 S/ i( s
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!2 {8 F7 S. [- m$ x' m

7 ~+ v: K% T% a  f0 X, X
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
' `/ Q' f+ t, J6 JПривет, Астралия! Огромное спасибо за твои разъяснения ...
( n' h/ U  \7 v, d* x& X& ]7 ~
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.2 M$ r7 M+ G8 n- c, k# U; G
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример9 p' l2 d- w. J
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    4 w( I$ x5 h, P- n8 E1 e
5 B$ D) }) n2 u$ f5 p
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    , F! j/ c# Z0 x; e+ W
  2.     // Логика взаимодействия игрока с NPC% o8 d+ B, `0 _* A
  3. }
    5 o  {& ~: R. d4 g
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:# m) q! q3 D) f1 E  w4 C( `) _

4 l% {7 x& S/ j/ @; Z  B
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)8 }7 ?+ c2 \  U# P8 d: h1 H
  2.     // Логика перемещения NPC
    . k/ ]2 ~) r. L+ U
  3. }
      b+ p5 r9 L8 b, ?3 Q
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:, ]' j$ k% ~, r6 x

7 u# E) g# D+ t! Z
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    + j( s, g: @0 D. ~" Z5 d* v4 g' x6 @, O
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    4 ?0 c2 o* w) I- b" u+ o, N
  2.     this.health -= damage;  // NPC теряет здоровье1 x, }4 b) n9 q" V
  3.    
    ) ^0 h. g- j/ }# k  A2 D
  4.     if (this.health <= 0) {4 t7 E: P8 T: u
  5.         die();  // Если здоровье упало до 0, NPC умирает5 V" `) U6 i$ `/ B
  6.     }
    1 }9 I( n5 R; _1 ~- B" S
  7. }% s- K$ n6 h0 j: u) k
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример+ L* ^: Y1 {. U) P3 e; |

5 W3 O4 e3 z  @
  1. public void die() {  // public void умереть()
    * ]1 D) ]. _- A" I1 q; ~! m
  2.     // Логика смерти NPC4 b8 K" ^* C5 v8 Q. O
  3. }
    : G" C% ]" @% H
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:. V- k2 i1 o  v

: @+ ]/ L& Y, C% \2 q: a- U9 w  i# d' p9 u8 Y& z6 U
  1. public boolean isDead() {  // public boolean мертв()
    6 P' ^6 R0 h8 {# Q
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    : \6 k. q9 h: H9 G
  3. }
    * ^  s9 L$ _* {3 ?, x) k5 d# I+ {
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример( A$ r" W: H- J$ I' g# h- D4 D

: Z8 U2 a9 {' |: i
  1. public void heal(int amount) {  // public void вылечить(int количество)# z% f& o" ?( f4 I  q( \* f7 E
  2.     this.health += amount;  // Увеличиваем здоровье
    - W; N' |8 O& \! P6 ~& d9 m5 ~# v
  3.    
    , X1 t% r& N9 e
  4.     if (this.health > this.maxHealth) {
    % i, c% M% z- i3 C4 C
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    ) A! U; S% ~3 g6 C) r# d
  6.     }
    7 Z. D) H6 I4 }# i5 G  e9 y
  7. }
    " R4 S" h9 d( s  _& g: F% M! ]/ w
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    # C" H, a7 b7 r; m/ C) y

8 P# `' x$ R+ T
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    6 V4 T  M5 J9 K' D, D1 {2 \7 `4 H
  2.     // Логика применения скилла NPC9 X  ]) r& [. O
  3. }' L. n; R0 J" ]: [
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:( S3 ?' B; C4 s) r
+ I+ V% f. B( f: Y
  1. & F( P/ t: \" h4 \
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    / p3 U! ?8 a0 P4 y2 U
  3.     // Логика взаимодействия с NPC
    1 d6 S- w: ]) z: S
  4. }3 P3 n6 B$ ?) E
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:" m5 A& W6 r5 f% x! R) ~
; C. i. H' y+ B$ n: J8 }& K3 q
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    / }4 q( v2 @* r5 d* c' ~
  2.     // Логика открытия окна диалога. b# C  ?0 R+ D8 F5 r! C( X7 R
  3. }
    4 n# J! o( C' _. K' p. j; T
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.  _  g' M; ^# _$ C/ n
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!" o+ G  Z0 j8 x  ~9 e6 U  ]+ e
2 o4 u. t+ i7 b3 s* b& r7 A

) V6 u* M' t+ i4 L- _4 j% H3 m7 X7 P8 g

. w4 ]: i3 q$ S( J' M2 y& W0 h
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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