Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
: h+ T7 S" E9 g: Q6 {- Z" t) F' b# @( z

6 D, E9 b) D: K6 E6 |Шаг 1: Введение в классы и методы на примере L2j_Mobius  Q$ d/ _5 U7 P
С статьёй можно ознакомится в разделе Обучение > Читать/ \" T$ A. Z6 H# C! a0 w: T) H

' B& E3 Y5 d6 E+ z- ^9 nДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
8 q$ J4 b4 ~; R! y
: y% X; B7 N3 o) i" `0 qОбсуждаем:
  F+ O) o7 B5 f% H3 B2 z. j( e9 |
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    5 d: B7 `1 n$ ?2 ^* p! E1 F: X. Z
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!2 k. {( ], [+ ?- c" A. I

7 O' O  [  H! E% X# z) w$ T

2 C3 |  o6 j6 W4 V. qИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
" Y) k& q7 M/ n: Z* Z2 A9 s! ?7 e. w! W

. a" a, F& [; k+ G) R. ~6 F
2 h( L( j3 x; J
" S9 Y0 U. x  n# \- N( B% G2 ]
- G1 k0 Q- {6 D3 k' ]+ [. I

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
$ Y+ r( U; O0 }' ]& r
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
& P+ K4 h% ]0 R  E5 h6 m$ xПочему мы используем ключевое слово this для ссылки на п ...
3 C; e$ F9 `' ?+ f7 e! w! B. S
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
2 p: L' m: g, t8 E( W# W0 Q: o" Q; F! zПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.) m7 ~' h( J( k* f- c0 k  Q! t; m

: q4 P" W! [- C) T/ f, ]Вот пример:4 T. U* O* V5 T. b; g2 M+ U
  1. public class Player {/ F3 K( l0 a) ^/ h7 i6 \
  2.     private String name;
    4 _1 V- \" j3 ^4 R! Y; |
  3. / G- o3 a; P. J5 t  N/ }0 }
  4.     // Конструктор  ?) ^6 X5 k) f% l5 Q9 S5 H
  5.     public Player(String name) {
    % b' T8 C2 Q6 Y2 u* u0 A
  6.         this.name = name; // Используем this для указания на поле класса
    . O% l1 I3 n. l. w1 V+ y4 Q
  7.     }
    6 Q: Q1 v6 g% F2 V: s, O+ g
  8. 4 Q1 O9 l. `. m
  9.     // Геттер для имени6 Z2 f* j& B- b9 i8 j
  10.     public String getName() {7 H: C" y- _/ j0 Z+ A6 A
  11.         return this.name; // Используем this для обращения к полю класса
    ' T) B6 s- h) H) v
  12.     }
    5 |% I/ j; d& E( }1 n- y
  13. }) ]6 a, s$ ^4 Q
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
) J4 ]) F: J7 C" @. k
5 C( }' z! S( ^& r0 i5 l, f8 @6 fКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.$ k, q4 v( o  q
: G2 j1 ?, ~* e2 I0 o3 A; ?/ @8 }
Пример передачи this:
; d2 R9 ]1 Q( F# O
  1. public class Game {
    9 k2 I; A0 L, O- [2 D7 @) ]9 |" ~# f* Q
  2.     public void start(Player player) {
    / i7 G4 u' I: o$ R- }+ o* U* W  O
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    . O9 j! h* M7 [" k* \
  4.     }9 W- H( \" T4 s
  5. }7 B% v! z- z% u2 O: H; O

  6. " e: R1 l* b' M9 t3 }
  7. public class Player {9 q8 D0 T- X0 [
  8.     private String name;
    8 M7 K8 L! C, g8 ]
  9. " m7 @7 S: y- q0 ]
  10.     public Player(String name) {! L4 g% x0 z' s& s* D
  11.         this.name = name;
    + `$ w5 l6 q; R- F. q! k  i2 ?
  12.     }
      t; }, ^" s$ Z6 ^
  13. 2 ?# ?1 f! O+ u1 P: r4 g
  14.     public void joinGame(Game game) {5 c/ ?* {& `# e4 T* \$ B" z! K$ s( u
  15.         game.start(this); // Передаем текущий объект Player7 s3 u+ j: H8 w2 c! |- {
  16.     }9 U) H! }4 e" M/ ?/ I
  17. }# C4 v/ j3 q* n0 ]
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.! ~6 e. i( r8 z( @* G, R; Y


8 n) R) O! ]7 ZПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?5 u0 R8 q. V0 m
" n7 p$ [/ Q# r! Y% e) o# U, n
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! ( Z7 a" J; a2 W" k
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
6 L( g7 ~; E# k8 Y8 y* c, ^
Mike123 опубликовал в 2024-10-17 20:05# I" v& A5 S. W# t" C$ i
Добрый день!
/ k4 ^2 \, [) iКак создаются и вызываются методы в Java? Мо ...
( n3 i1 ?# M+ I; O% m% W
Привет, Mike 123! ?: L2 C3 ^  S( E2 i6 F" U/ ~: \! j5 v
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.0 ?9 T3 {" p. Y- E5 W

/ Q7 ?0 E9 \. Y/ H4 L8 zДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.! @9 _8 d! E  `2 j" A9 `( p
. c% ?/ j, v3 i/ A
1 P' r* C  e1 x5 z
Как создаются методы в Java?  H5 I7 b$ o+ E7 B: V% x, C

2 R0 R. w0 O2 R# wМетоды в Java создаются внутри классов. Вот базовый шаблон метода:$ ]1 ]8 ]; W. _, o

! G  F0 e+ f% M. A# ~1 Q
  1. public returnType methodName(parameters) {- q/ r3 R- b$ f1 p% o) Z
  2.     // код метода
    " O, g' D/ D' ~& r. R1 Z( M6 C) q8 I3 x
  3.     return value;8 m* v7 |0 T& J3 c
  4. }- h+ T# N1 r3 F4 ]
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).* m* X# {' ~8 }# z+ h4 [
$ U5 l, O# m6 j# x1 J
Теперь перейдём к примеру.3 b, _/ ?- g: b2 F! I# w, ~3 i0 {" m- R

6 S1 E. b" ~* |' _7 \+ UПример на основе L2J_Mobius с переводомКласс Player.java — создание метода; l9 ~4 S9 R2 {6 @+ }
  1. public void attack(Npc target) {  // public void атака(Npc цель)8 \' S0 f: `/ N9 O" u) t
  2.     // Вызов метода атаки NPC
    % O6 y; ?5 k- U& M
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    ) r7 R, f5 i& g) K( K
  4. }0 I/ `- f3 z8 L; i. ~6 P
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
9 L, Q+ R9 m3 Q1 r7 \& _. t: v  o6 L# w" J) T
7 v; Z/ P% R% V- A) H
Класс Npc.java — вызов метода
; g; a' r5 O% n3 V* {4 S2 F6 A- w; }% i0 ]! d
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    / e; D( p2 Y0 }# x/ B  c5 Z- E0 T6 z
  2.     // Логика получения урона NPC, W. c, a- Z0 J& s0 B: @, L  d
  3.     this.health -= damage;  // это.здоровье -= урон;
    - w6 U& N& x: Q
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    ' M8 i2 f# _8 |3 \
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    ) E8 C4 `/ z* ~3 c
  6.    
    8 K$ u. X6 g$ R: ^$ L( C; a, x
  7.     // Проверка на смерть NPC
    + B# [: H, Q2 G, i( M1 M" _% t
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    0 a2 ^" H! r( _  L5 x; C, C2 B
  9.         this.die();  // это.умереть();
    $ K* t3 X% i+ J6 \3 k
  10.     }5 u) b: d5 k4 K2 D, y' r
  11. }7 c- p: }1 W; x4 T, V
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    ' P6 Z3 m" S0 s6 c3 x3 V! R
Пример взаимодействия (с переводом)
; t3 T9 T$ T6 @2 }
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");7 J: D( O5 w7 ?
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");4 D9 O- G% ?- i
  3. ! @& c, l8 ?9 K8 v: L& M7 P5 \
  4. // Игрок атакует гоблина8 ~& p% _% [* \& U; q0 @
  5. player.attack(goblin);  // игрок.атаковать(гоблин);5 W  q) S6 [8 @" T' c! w
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
" U3 |+ w2 A. t+ t5 J7 Z' X! S; Z+ t* l1 D) o' `2 g
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.) G5 |$ P; B4 Q
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
% t; g, x7 {  e3 c7 \5 a7 \" o5 E" \4 p8 _. k, i! C) |
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
$ q. ]' |4 A# A* j5 fПривет, Астралия! Огромное спасибо за твои разъяснения ...

. e4 M& |" O# n  z# z; n( A( c8 rОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.2 b$ @; n+ A: }! J: @2 @" m
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    / b5 L9 T$ G8 i) z. q
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:4 Q) L5 j& r$ N2 ~

3 e) w. i. ^! \! c* g# ^) L
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
      E' Y: \- Q, r- _6 B1 a
  2.     // Логика взаимодействия игрока с NPC
    * @  ?3 D# ?  C6 E
  3. }
    " u' k; {0 Y7 T# F& t
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    5 {  W& M% y2 G" ]( x/ [

) z. \; x; y" `7 ]1 ^
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)# l4 Z- M) Q0 M9 y
  2.     // Логика перемещения NPC7 p. Q3 O' d% z  ~
  3. }- S4 ~+ k/ x: c5 m! ^/ J' X
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    & ?9 ]5 Z$ u" h: E" V4 a8 s

2 R) E. S* K# Y: K7 v) K" o+ c  Y* C
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    6 h; E1 p" I0 E# K6 D9 z
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)) g- {) \9 Z; |' D" _
  2.     this.health -= damage;  // NPC теряет здоровье7 K' i3 j4 V& I' f
  3.    
    5 z8 F9 ]2 n( u
  4.     if (this.health <= 0) {3 H, R9 K7 @& n0 F9 ?5 }
  5.         die();  // Если здоровье упало до 0, NPC умирает
      x& m* c# K; L5 O0 U4 Y1 O
  6.     }
    ' ^) R; n) u* [7 I2 j( |, u
  7. }3 A7 C3 _' _& l7 y' n  h# R
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример+ R. {: Q+ r- H

  ], h. M  b* d0 r' M, y
  1. public void die() {  // public void умереть(), E, h# w  D% e5 o; E/ q
  2.     // Логика смерти NPC' N- l5 D) F/ s( I* d( G
  3. }5 r, }; u. x9 O! [) |# V6 c+ Y" \1 |
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:& P3 V8 c' w1 d, f! l4 O( C
! H! B# p& C, o. k( a' E

) Y. S  E1 k' |- e1 O# q" ~% K
  1. public boolean isDead() {  // public boolean мертв()9 X) d+ e# ^  w. g/ S# u
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    0 @9 M! d  S: R
  3. }6 u/ J& b+ y3 T0 ~  Z
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    + n3 {% \- g4 l$ C( f

1 c1 m; W$ g, @  j7 [
  1. public void heal(int amount) {  // public void вылечить(int количество)* g+ G8 _0 L6 A  ]3 I  A
  2.     this.health += amount;  // Увеличиваем здоровье
    7 Z" D2 a4 ]2 s* d" K* u
  3.    
    2 z: U- |2 v: @3 ~
  4.     if (this.health > this.maxHealth) {" L$ U* v1 |! D& y+ B0 D* K9 w
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    2 B$ K& l! d2 J
  6.     }
    1 u- k8 @- x9 r* t% Z
  7. }
    9 V2 H  o! \6 f0 m9 Y2 x, H& `+ t1 B6 t
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    1 l- G# A+ U* c1 ]2 u* D6 X' h6 T
$ y- F& y3 e" Z: J5 e9 N0 ?7 h2 c
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    6 Y8 I+ S/ ^) s9 o: u5 L
  2.     // Логика применения скилла NPC4 _+ Y' @5 ?" B6 w
  3. }
    8 V  A! M, @3 p; m: E
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    " _. V& o3 {/ K9 ?5 Y

5 V9 F" R& [* i' {$ o
  1. 8 I, U5 |6 y! L4 l# Z
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)$ n' D0 q" H+ l" w3 O7 B- p# r
  3.     // Логика взаимодействия с NPC. C$ x9 l5 m4 t
  4. }
    4 O% h, o$ o/ v4 \8 D; i
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:1 f6 q6 P$ {0 u! X3 z( R3 |: [; y

  H5 ~; }+ A3 g$ l# q" \
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    2 Z4 V* L- `5 O% `% ~# T
  2.     // Логика открытия окна диалога
    0 G4 K7 a6 H" M6 [1 F% e: N
  3. }: F2 {: P6 j- L' y! h$ h: C
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
+ s- A( S8 I* |6 v  J6 U$ d1 q# h$ KЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
, H; d' W* \8 t7 D- _6 X$ N" j
( K: d, o" u. M2 ]% Q: H6 ]; U: m8 d! i4 U% N
! p; o% b2 ^0 T: x+ m0 c. M4 U

* B. F- T0 X$ r8 t" ]; f
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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