Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
8 D. _( d: b6 z& e7 w, F* f+ {8 l/ e8 R, E

% |' N; R( }! H, ?1 Y9 AШаг 1: Введение в классы и методы на примере L2j_Mobius! j% |3 B0 g9 A. p1 h# x
С статьёй можно ознакомится в разделе Обучение > Читать2 u( _9 m- f2 l
, X- u' [. t3 W8 X6 P
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.6 P+ L) b5 u/ g: e- _" ~3 ?
+ ^5 R+ I$ P, `& ^( p6 f
Обсуждаем:# b, F, x* H9 O0 I# U
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.* j4 _; f; n  G  l2 D
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!4 s: J& u) I# ~- s7 c+ e4 e9 P0 P

8 J! D( K5 D1 n' U0 {( W

0 @/ u" m  m( U( c8 w% K; S- L, ^И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!+ R/ u) j. H% j. x5 F1 z! {  K9 _

5 O& _& S* W( k, H; F( N. Q8 L
& b5 g, G9 R8 b4 l0 r* j; b; ]  @1 C6 q: c  q
+ }: i; y3 l. Z4 T
4 L" t1 Y2 z3 R7 N# r

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
1 Y7 R( F& [* T% w: b* \# v6 O
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
6 l9 r  p. ]) P) ^" D  _Почему мы используем ключевое слово this для ссылки на п ...

) a1 z0 X% U0 JКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
& H& l9 U. D6 e9 V5 L1 l! r7 h7 K0 _Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.. N9 `6 I9 n" b; \4 y. b

1 K3 ]+ ]% v$ J4 G4 C% }" sВот пример:
/ v1 ^4 m+ Y1 X% L0 ?
  1. public class Player {$ `% I& g, M. j. o! ?! j( Q
  2.     private String name;' m) x4 p) F7 o. a

  3. 3 k& f3 ?! B  k- j# i  _. M- G) q
  4.     // Конструктор
    4 J0 `+ \6 X/ P5 ]+ @
  5.     public Player(String name) {
    2 Z0 ~" Q( `+ ^& o
  6.         this.name = name; // Используем this для указания на поле класса1 ?( }1 M6 |9 M
  7.     }! O) ], n4 \# H- L
  8. # ^8 u% d. z/ s; ]& S4 S
  9.     // Геттер для имени& N# M! |6 n7 e+ o' X$ e
  10.     public String getName() {8 h: V! x3 o( B- k
  11.         return this.name; // Используем this для обращения к полю класса
    # ~% i* Q  e' Y4 ]% F8 m' ~4 }
  12.     }
      c1 o. Y1 T* U  b# H& g) |# J
  13. }: ?1 Q9 ?6 C$ p# t# @
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.  |' ^4 J3 v& b* g

( ~+ V" t) `9 ]/ U: NКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    : N  l5 n+ t$ P: r: J& a! i

/ ^7 E  P( E* R9 P* u. E+ K% eПример передачи this:/ \% V% l7 Z. `, m1 E
  1. public class Game {
    * p: c. P+ l+ y, z, h
  2.     public void start(Player player) {
    ! A# z/ A0 H1 I. S" Y5 S
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    6 S. r7 B/ k1 ^/ O* S# W( M
  4.     }# Z) ~4 u7 j/ y, ^
  5. }
    2 x) ~( _2 u$ D+ _

  6. / f! i; Z) V% _8 N0 ?0 k
  7. public class Player {9 ^" U3 f# M) h. @
  8.     private String name;) v3 Z6 n: u1 M" Y0 J; j3 M4 G" A

  9. " \8 F& T) \9 O! S- z, T( ^$ y
  10.     public Player(String name) {
    ; O! M. v' v5 ]) }7 v& A
  11.         this.name = name;
    + Y( J7 c2 I) Z; R
  12.     }# ]5 R& A; l# x) ~) p  u, o: _

  13. ) p6 l9 ^1 s* L/ l: A5 ?
  14.     public void joinGame(Game game) {& i" _% M  o: _2 z
  15.         game.start(this); // Передаем текущий объект Player
    6 R+ B8 R: I' j; c( Q( `
  16.     }1 r6 P+ k& u: K% x# \3 z
  17. }+ |/ q- M5 s- G7 h( s
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.% M; y" z2 H! Q/ F* Z% m

) Y7 t, h$ p7 }6 L0 [
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
& M+ D+ d; ]% y& x$ l& C9 c. ^1 C# Z" [
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
* |5 X# N7 Z& Y, {2 d- LКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 5 E7 v! P, B3 x; X6 u. |- p
Mike123 опубликовал в 2024-10-17 20:05
" l1 |3 U' z. q. GДобрый день!
/ q) o! x1 Z: K& }  v* cКак создаются и вызываются методы в Java? Мо ...

/ `' t# X, |( P1 j, _  `6 hПривет, Mike 123! ?
& {2 m9 i$ d, }( VОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
* a9 ^" I6 N; l  E
4 [, G. `- b+ {6 OДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
2 U8 _1 j+ ]& L: L- @! _9 K% Q( L/ S0 A+ a1 p5 W

5 U, x+ p( J5 \# w- K) FКак создаются методы в Java?
9 u4 Q# n1 t; K
* J5 ?9 \" l6 a+ x' UМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
! ?# K" F8 {. i: o
: A6 c6 c* j/ r6 r8 N
  1. public returnType methodName(parameters) {
      l4 R; n# ?+ Y* }5 a% |
  2.     // код метода" U5 N' ~" z1 W' _6 s
  3.     return value;7 I. n1 I6 n# T  }+ ?- L' w3 }
  4. }  Z! B1 C' L& a- L; Q
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).0 ~, X' D5 l& _: g
9 p* d2 k& {; L# U) S4 J
Теперь перейдём к примеру.9 N$ x. W2 \$ O* z, E" F1 _, B
& D  L; y2 B$ y$ Z. b# Z+ Q- f/ D
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
% c( v# ]- A, n: n. ^. E" L2 O6 ~/ b; o
  1. public void attack(Npc target) {  // public void атака(Npc цель)5 X$ p& X: I: n$ U
  2.     // Вызов метода атаки NPC
    + L# L5 v/ k- g& b; \' _% _9 {- H% X5 n
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());4 L, Y. Q' X6 I8 N7 Z
  4. }6 s+ m2 S$ e* a8 e
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).7 X" K6 ?3 ]/ g5 E  Y& M3 o) l4 q

# k8 o# R' m) |  C) A+ c1 T" s7 H8 f& N$ e, I
Класс Npc.java — вызов метода
, n/ i$ ^- j. X* R( P. y  d! G. z) A. P" R. s
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
      |& ?) S- X4 L- t: }" K  x
  2.     // Логика получения урона NPC
    - |8 q. H8 q: }: X2 |# v5 u
  3.     this.health -= damage;  // это.здоровье -= урон;. A: \' r+ U+ O3 y& o1 K% c# t" C
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    , k( N7 r# s! ?4 A) x4 I: i' y
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    ' J& u4 d% u; D2 }' X5 ~; @
  6.    
    % J5 q4 k9 M' B1 C
  7.     // Проверка на смерть NPC
    , k: ?% z+ u& A8 D# z. C) y: j
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)# O5 ?! _$ ^  l% Y; I
  9.         this.die();  // это.умереть();, F& h0 P- J, k: m
  10.     }
    / F6 d0 d2 f6 g
  11. }7 |6 ^, R4 D, g/ i* j
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    * i+ {$ F3 Z! H) L# F
Пример взаимодействия (с переводом)
$ v7 e% Q+ `7 v6 p
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");* r, l: O' P" g4 d/ S* K
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");9 d# C1 c: \$ j: P$ c* i/ ?* k* X

  3. 7 E! Z/ V* j) f; r2 s7 Q/ ~
  4. // Игрок атакует гоблина: k# a& ^5 T8 b# c% z5 I5 O! D
  5. player.attack(goblin);  // игрок.атаковать(гоблин);: V6 }$ t; v* t, N* V& z( Q2 e4 T
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
3 C; i' y* f4 _1 E2 K3 k- Z) Y: z8 j6 O
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
( g+ ]8 k/ e& @) gУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!. z: H, M  L; y

% T" B5 i, `( R
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
1 C$ E+ ~4 j, D* V2 [" x# I. O% iПривет, Астралия! Огромное спасибо за твои разъяснения ...
- R+ U7 k/ c1 s* h
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.8 q  n4 K7 f% O+ e1 l+ \. S% ^
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    ( h/ f7 A4 [* d7 U
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    6 C. \6 n5 T1 X1 Q4 B' i
9 v5 E3 y% |  n: f+ ^
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
      P* x& ^1 z: {* P3 [' n
  2.     // Логика взаимодействия игрока с NPC8 P5 U; I& ^2 T0 b
  3. }8 o3 j3 B  O* @  \4 I# p9 W" m( R
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    % k: W- H" N  a
- n. K( |) S( ?7 }1 R$ @
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)% ]% e" d8 u( }  M0 [( T
  2.     // Логика перемещения NPC3 E- t. W4 ?- ~
  3. }
    8 c) C3 I$ }9 p/ v5 {- u! a
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    ) L/ ]1 |$ |" u+ G- q4 O" q

' r. I: u# S5 ?# a/ M8 `
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    , m) ^: M/ q6 @4 ?- N) Q0 X. f
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)  {! [# `1 p* ?3 C0 h
  2.     this.health -= damage;  // NPC теряет здоровье$ W6 ?, ~$ }. ^( q
  3.     ; m0 l; D! X3 ^1 j7 A# ?1 B
  4.     if (this.health <= 0) {
    4 k; D2 t, L/ p4 H; @7 c
  5.         die();  // Если здоровье упало до 0, NPC умирает
    " [) O& u. Y7 b1 |: d6 N! A; O
  6.     }( F0 M. j2 ]/ |9 @% ?
  7. }$ m, s; e( d- {+ h) e6 v/ t' k
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример2 z3 _' R8 t: d$ u+ z. }4 d; D1 a
5 Q4 v% f7 e* u: Z
  1. public void die() {  // public void умереть()+ s5 V: b! Y( |, k
  2.     // Логика смерти NPC
    4 b4 ^9 {" ^. u, [' v+ F
  3. }
    ; u8 y' E  K' G$ K; Q* x+ i5 R. ^
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:5 @2 w) z- C4 b, g2 ]6 ]

+ q- z$ D1 v+ f* v! R% X% l% l( k/ k; k; D0 T# M  r
  1. public boolean isDead() {  // public boolean мертв()
    / e$ H5 o2 g/ Y( R9 S3 m9 I
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0% ]6 r9 P& m2 o1 ~; t3 J
  3. }. j7 U! T$ {; T3 \1 _3 J' S* N5 M4 @
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    4 s& ]5 d( j& H! M

: W7 C+ Y, q$ D# U1 V2 p
  1. public void heal(int amount) {  // public void вылечить(int количество)
    : s, K8 t3 y9 V. J$ t0 n
  2.     this.health += amount;  // Увеличиваем здоровье8 V) _. u& e6 M' R& x
  3.     / b" t" ]4 ]* e# ]% h! X+ W$ l
  4.     if (this.health > this.maxHealth) {8 |; B7 f6 n# [0 a, u4 w/ V* x. O$ |
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального3 i; u# i5 s3 t( l
  6.     }
    : x1 |( \: }' S% {. ?8 }
  7. }) X9 M" Y0 X7 M# S/ Q7 r' Z
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:7 r5 l  o0 y( g9 i5 R
( u- \- ~* G) S& c5 a
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)9 e7 C0 h1 J/ Z- i# b* Z) ]: B
  2.     // Логика применения скилла NPC
    , x  g$ d' U9 \' P2 D( D, `0 G
  3. }8 a- B# G9 F" E! K+ ~0 z/ Y4 E
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    ! d, I0 {% Z* i( _

6 x6 i. ?* I6 P
  1.   I" X' B+ [$ G% W# P. m
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    3 H+ o) \" X" k; v6 @  |
  3.     // Логика взаимодействия с NPC8 s9 G3 x: C, e
  4. }
    $ y, p& u. a( B3 h) a- l
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    1 N8 _$ u4 K1 Y  W: S

( V$ j, j' Y' T1 B; n, o9 W3 U9 `
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    8 ?0 q: b( j0 {0 ~
  2.     // Логика открытия окна диалога1 I* [4 y+ |& F8 R" ^  I& S
  3. }
    ' {# b2 l, c) W& a0 J* a9 d
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.9 |2 }. T: r" c8 L6 \
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
. D) W  |# o. K- X+ W% C
4 s4 f& @: p% P4 }3 s- R# ?" h5 F9 E! J* }6 q! r$ E: M( w4 E
) N) z* ~6 w' V8 O4 I" V6 x

9 G% s3 u8 C+ v- f9 P$ D
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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