Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
' g, G5 s. z7 u( \. ~2 t0 J: d% H# r8 _& y
$ J* `- H* ]; V$ t% |- V! y: \
Шаг 1: Введение в классы и методы на примере L2j_Mobius
+ S3 c! c4 S" k' y" ^С статьёй можно ознакомится в разделе Обучение > Читать
* Z$ q- _8 j9 N7 c. M( g
: A- G! B, c: z' L+ M7 D; E7 W7 R& ?Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
) {# t6 Z+ r/ [: L$ d. E1 c. M" I- v9 r% I# U& D; u0 Y  S
Обсуждаем:' Y% O, C$ {, L
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    3 M& e1 Y. ]/ B: c
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
; b3 {3 |+ X0 w2 y+ K  I7 x+ |6 ~1 r0 M" P# o, O

! q2 y) q0 s; t+ S" S
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
+ w6 ^, ]# l( z3 i. s5 o+ _# {# `& }  Y. U1 a; r  M0 V# b6 X+ e9 v4 b

! E3 k7 G. ^3 ~% Y) E
7 g% }, {* ^( j, H5 t! {2 B9 e" {; J

# e( J" W) K! J7 E

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?# T$ c! [, r: e2 d$ u# t. [
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
, M# D' {1 M! W) f3 P% ^& `Почему мы используем ключевое слово this для ссылки на п ...
- {0 G% N$ f- D1 D; N: K) s) Q
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.: Y* V' V& r( S9 Q
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
) O4 ]) P- R5 e/ R% ?. h: \- p# ]  c
Вот пример:" @. r/ C6 E' a  R: u
  1. public class Player {
    " r6 l" s# H  o- J
  2.     private String name;+ z3 u' K5 u1 @0 m$ F  m

  3. 2 r; k# s( @3 }! }
  4.     // Конструктор' q+ }! ?3 i  a* H( t* g  O
  5.     public Player(String name) {# g5 D3 n: `1 g5 I7 e8 t" k
  6.         this.name = name; // Используем this для указания на поле класса
    3 {4 M" s4 E5 @' c
  7.     }
    ! J, a+ L1 H! J# k3 }

  8. 5 B# y6 d. F' {6 @( h. O2 K, K
  9.     // Геттер для имени* X5 }, t- c3 u+ m% }
  10.     public String getName() {
    3 _6 Q8 o) E- @9 ?
  11.         return this.name; // Используем this для обращения к полю класса3 X9 r( N0 I3 b
  12.     }
    $ R, n  k/ `( {
  13. }
    4 B) o. m1 `& k; ?4 C6 |7 [
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name./ s& n/ N2 `+ F% T! O  w
) e8 p& F$ ~; \5 F, l# s( f
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    , ^5 c" @1 c9 v  M5 J4 w! i: N
& ^. W$ E" y4 A, `& x6 l6 ]
Пример передачи this:/ w, ~$ X1 g" B8 Y3 }( r5 Q
  1. public class Game {6 H! W& H4 B( X3 o0 C1 K
  2.     public void start(Player player) {3 Q7 G2 T2 f: L: Z
  3.         System.out.println("Игра началась с игроком: " + player.getName());
      ?( Z7 o9 x0 y4 v
  4.     }
    " B9 L( x  R' k0 X5 B! x$ w
  5. }
    9 C$ c8 A4 _! |/ R; _4 a& R

  6. & m. s% o3 H5 N* _8 E) _- w
  7. public class Player {
    3 _3 k" }3 w/ s; y, e
  8.     private String name;" _, H: O, b) a- w
  9. 3 _% G) C. o% f% q, _5 ]' z4 F
  10.     public Player(String name) {9 A- V7 v  s* y- ?3 r* Q0 M7 d
  11.         this.name = name;! X/ @( a2 R% D  d* H/ u
  12.     }
    * z& s9 Q; b8 U/ g- k$ _

  13. ' P' Z! C+ _# ^6 z
  14.     public void joinGame(Game game) {3 S* W2 r9 l# b' k- o3 o) K  t
  15.         game.start(this); // Передаем текущий объект Player/ @2 w6 X' _! n8 u2 Z; [
  16.     }
    + z/ E9 X3 Z" r( T- n' D
  17. }2 S: C% }  {0 O8 ^9 I9 Z
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
$ K4 _4 d& q$ H# P3 h: }/ l2 h: Y

7 X8 L" }3 H' G5 @' v! a# Z/ tПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?' Y- [- W7 y: ]! y' P3 H; L% [1 M

: S8 w- {5 r' f/ e, W" [( x
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
4 J" v1 @* j" u( E9 o" wКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
6 }# ?3 J, B8 a5 d9 ~. k7 t$ H
Mike123 опубликовал в 2024-10-17 20:05
+ p2 V1 r: w' h  e+ b1 _Добрый день!
1 n" j  g( d' C8 \, C8 e) UКак создаются и вызываются методы в Java? Мо ...

, Q( l  e6 @2 I  }, kПривет, Mike 123! ?
/ U; Y6 o: `1 AОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
) Z  a/ i& G8 W$ a0 f: L4 R, |; _0 u) G7 d
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
* t( Z$ Y; c* n3 b) x3 u7 k) c+ }
4 j6 R2 U2 H0 R7 f. N
Как создаются методы в Java?
( `) a) E0 B. ]. C" u: `
$ r& w. Q$ H# o) s0 k! p( N* mМетоды в Java создаются внутри классов. Вот базовый шаблон метода:0 M) ^4 Y  N% W6 O8 u  ~( i; r

- S' `' n4 h  W& Y! y: \& h
  1. public returnType methodName(parameters) {# j2 w& h" ?" ~7 {+ q9 [) M
  2.     // код метода
      N0 @3 H7 l) w0 y9 x% G  H
  3.     return value;6 z6 X! y$ W; E9 |* ?$ |
  4. }+ \2 w- ~& n# t4 h$ N
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    0 K, Z, Q: d# Q# A4 c/ D. B
2 j- f8 c" z0 ]
Теперь перейдём к примеру.+ X3 u4 z1 C9 o3 `
8 ]4 g* M( e2 C' _1 ]
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода; v" T. g8 i6 K$ e! t% |& Y
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    4 e  T, p: y9 Y1 ?4 L
  2.     // Вызов метода атаки NPC! N* A- F3 Q# v5 i7 ~
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    + v2 T# b/ H0 o* v, F2 L+ q
  4. }
    , e: F/ h; L0 N8 I( p
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).; F3 K) c* N8 ]8 {! `

8 M9 e' w" |+ ]
/ h5 I$ `, g: N, tКласс Npc.java — вызов метода
: U9 Y1 I4 s7 y! ]' x) h; `9 B! f  v3 o. A( E, K) u
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)% n/ m7 h: b2 S' z/ N) S
  2.     // Логика получения урона NPC
    0 S! C, d2 j3 A2 L
  3.     this.health -= damage;  // это.здоровье -= урон;  s0 o/ x- f9 g9 {0 f2 |
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    & Y' r- W4 [# q9 l2 s' z6 E
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());. Q9 y; a0 q; E0 d  b# R; o; q
  6.    
    * S7 a  `6 [' V4 \1 v; j  @
  7.     // Проверка на смерть NPC' e7 X% W% s. i" S# M2 r
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)9 k# S" \1 R0 ?0 ^+ ]. d- j1 v5 _+ L9 N
  9.         this.die();  // это.умереть();
      m3 h1 F7 @: `. p( k' v; b' _
  10.     }
      S" g: z5 m/ X5 q( R% N0 `
  11. }$ A$ D; E4 a1 L7 \! g
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).6 p1 a/ K/ v' z  ~' u3 i. h
Пример взаимодействия (с переводом)
  P* q/ K: ?3 D
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");! ^( b) v+ I8 X& G2 M; m, @: V
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
      U- D( A  C- {1 z4 ?# i7 |# O

  3. ! U$ w7 ]: N6 ]& S2 C
  4. // Игрок атакует гоблина
    9 U: P8 |4 G# Z7 y, `. I9 U
  5. player.attack(goblin);  // игрок.атаковать(гоблин);/ ~8 `" v4 d, T* i
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
5 z$ _/ A! c6 C" a  ^3 g# p% x
8 n, Y- Z  Q4 A* q7 X, V. K4 ~
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.$ i& J5 f; T) `" [+ U& `
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!, J' X2 R. O' Q1 _

3 Z3 F8 A* M$ w# k( e
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:309 X( [# \" O/ U. [$ `4 L. x
Привет, Астралия! Огромное спасибо за твои разъяснения ...

/ B% W! a( U- s. NОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
7 t! X: G, x8 ?! O. _, _1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример3 X0 H* i! m# M: w+ k
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    9 i  Q; ?. }" e, N

6 @+ H3 r$ Q! j8 ?
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    ) V* {3 M* u0 f8 ]: B
  2.     // Логика взаимодействия игрока с NPC
    " j+ U) `7 N7 \/ J! l+ |
  3. }
    / T7 g& y1 b$ n8 N4 f
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    & B$ G0 d3 t. b) l! n
% @& Q! [* f0 a5 U& i9 c9 i1 Y
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)/ e6 D& i  y7 o( }& H
  2.     // Логика перемещения NPC6 l1 P( u3 D% [
  3. }$ ^) Z# e: ~( A" @6 _$ }6 ?5 J& z
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:- f3 C( K& M5 ^% [8 Q! U
0 t, f' h) e$ M1 U/ i+ u
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример$ K- w/ o0 K: k+ s
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)  _0 C. m9 {" A4 }& i+ X
  2.     this.health -= damage;  // NPC теряет здоровье
    # \2 Y5 s5 f' U9 @3 ^, v
  3.    
    * e# J. Q0 U3 D0 R- D: X
  4.     if (this.health <= 0) {
    7 }, Q0 g; |  a5 g' T! y
  5.         die();  // Если здоровье упало до 0, NPC умирает* ^5 W5 M  _- o  t, e
  6.     }2 x5 k# k; L. S1 t- w7 y
  7. }
    0 P( `3 t. e% _" K) k
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    # c) ^% W7 F# l+ U% ~* F# T

, M# `2 F; Y; h0 R
  1. public void die() {  // public void умереть()
    6 |4 ~8 g9 N. v7 C+ o* k
  2.     // Логика смерти NPC) b( |  J8 c7 x2 E' ~* ]. q
  3. }6 E- M6 O$ i! Z" d0 m9 L
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    ' x' N+ l: d7 D0 y+ S
5 q5 |( D! ~, y% A
3 E% O* q4 {# c! f# q/ L6 e
  1. public boolean isDead() {  // public boolean мертв()# m+ h; Y& x7 L: R
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0# P" c+ m. }+ ]
  3. }/ c0 p0 D& {& H# M* u
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример! o# M7 W8 Y' e2 J. k5 L/ v
; J4 `- u! P3 t2 k
  1. public void heal(int amount) {  // public void вылечить(int количество)0 A# b: z+ h7 _  h6 b
  2.     this.health += amount;  // Увеличиваем здоровье" T' m6 U- i; o- p
  3.    
    6 F/ W8 ^8 O# C2 H; s! @# L
  4.     if (this.health > this.maxHealth) {
      Z1 `: X! _7 R1 @2 S0 [# A9 l
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    7 V/ i& x- b' r
  6.     }- k. n' f) f" K3 N; s: t. `: |0 ^
  7. }
    : i$ G1 g1 v7 w% L9 @
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:% q+ y( K' A4 G. O; [$ g4 D4 d
- n- U+ L$ W* C  o! H5 s
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)3 R7 J+ E0 e& \# _: b! |. q3 n, c
  2.     // Логика применения скилла NPC
    ' t; V+ @" }) l
  3. }1 n6 Z# M6 j7 N
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    * V# _+ @! N/ {  O  s- N1 z

9 @+ b7 i' c: Z( I. z2 I- o6 g
  1. * K7 G1 K" Z% X+ K3 _) r1 P* j
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)1 Q; _( i& T, w
  3.     // Логика взаимодействия с NPC7 \  K2 c3 r2 G/ ~# P; ]
  4. }3 x; \4 f. C% |  E" `; m6 a
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:$ Y- M! p. e* p% J" Q2 a
3 f7 X1 j- U6 C" E
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)/ T0 ]0 w( w* O) B5 g
  2.     // Логика открытия окна диалога
    1 d+ J: W, C" a- E! Q+ P
  3. }
    3 ~+ ~/ N9 U" s& @$ ?% N
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
0 Q# @: N, [9 M# _& i$ \Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
: ?3 b9 t# b5 Z( G( G) O& p2 K$ g9 S+ ?3 l( V9 [; f: k9 D

. q1 T/ e/ a& q: }4 q6 z7 G  W5 j6 K7 S

* c6 g, r. A, i7 s' t
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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