Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
2 @, b$ w7 \7 f' w! P5 P! d: j5 J
) u* P( Y. G( i4 h$ p# g
- B& g3 I4 J1 ?Шаг 1: Введение в классы и методы на примере L2j_Mobius" |/ ^2 ~: S$ t& h
С статьёй можно ознакомится в разделе Обучение > Читать* @7 p) r* e1 B: U8 N

+ t/ f' _5 W2 iДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
/ e7 V3 i  W/ C, ^0 O4 q# s' x, p& X" V
Обсуждаем:8 s7 z) \. D1 i- `3 \: q5 {
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    1 o% }, s. @* J+ {+ d' Q. I) y8 _
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
2 J5 U7 O7 j, Y2 c! V! w# m4 ?5 L6 T
  y) ]+ B, c+ \2 |5 X
. l3 p9 T- z( L! ^3 K
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! 😄 Но мы вместе разберемся!
/ x# t3 u0 x! }$ Q/ P7 z5 y; v% s2 r8 ~/ z) {

/ _  d# I4 E- ?( a* g5 f% B! y  V+ W6 u  n
" {. M5 M; W6 F, d; Q& |

$ x3 v+ T1 G) M

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?8 b' t, b" J4 O. i
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17: U7 d7 x5 M2 _. \% Y4 x
Почему мы используем ключевое слово this для ссылки на п ...

7 |  u4 |; v1 Q  i. c/ y, SКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
& b3 V( G6 }# mПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
( P# {5 f4 v# p
2 y) R' h) r! UВот пример:
  G* t, d" U, t4 R9 d# j* Q
  1. public class Player {" f2 ]+ Q: ~4 @
  2.     private String name;8 H+ @1 _0 }$ A' _3 J9 s  R

  3. " P% V( i& r9 e& u! ~( b
  4.     // Конструктор) K* {7 ]: ]+ [7 i2 Q3 Q) _7 ^# m
  5.     public Player(String name) {4 y2 G" m# p. Q# `+ F( ?: e, @
  6.         this.name = name; // Используем this для указания на поле класса
    ; U6 Q$ z8 s1 B: g7 g/ o% Y
  7.     }
    % c$ x" C8 X9 ^1 ^% @
  8. & R  P3 C8 H* q6 ?3 D$ [- d7 M
  9.     // Геттер для имени
    ( V7 f' U# P: g9 Y6 O
  10.     public String getName() {; r9 M9 c5 c# T0 I
  11.         return this.name; // Используем this для обращения к полю класса2 ]7 J' p5 A# G5 N: D$ g+ d) F5 g) v
  12.     }  N* W, |/ ?( ^9 _; [
  13. }6 J/ A5 }' w' u% U4 V4 c; t( r$ v) R
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name." {# o8 s4 j. R9 `' ]) Z: |

! j! F; b- ]: A0 M( A1 K  A. cКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.( _6 ]& M; |$ L; i  C$ u
' J1 v% C* l) e+ [8 {
Пример передачи this:+ o3 P/ @5 @3 K6 M& M8 M
  1. public class Game {; @4 I* a3 V. Y1 Z0 D
  2.     public void start(Player player) {  a; M/ y- P% k- e- y7 g
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    % d/ e4 v7 m3 u; r' f! \% p
  4.     }! y( P) S; I* \/ i% j
  5. }7 W, C5 w- m) T( a( Z
  6. 0 E/ _: ]5 o$ R
  7. public class Player {) w  L- n& Y! @! ~7 K& G
  8.     private String name;
    ! t' B9 B" Z. G+ W: G) Q
  9. - `4 w- G. y$ V+ G. ^1 q; T
  10.     public Player(String name) {0 P5 M1 j/ [" S4 X7 m
  11.         this.name = name;
    1 }3 x: _. }+ J0 y7 |
  12.     }
    5 x0 \" |6 L( ?1 R. O  V2 D1 n$ K
  13. ) h: ~  k+ H( X: g
  14.     public void joinGame(Game game) {
    % y( h: y9 ~2 b! {
  15.         game.start(this); // Передаем текущий объект Player( r: G  s2 m. K1 \& B
  16.     }3 l; ^0 j  Q4 w) Y( H1 ?
  17. }
    0 b# T3 {: D% T, H
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java." s% Y: D) {, p% ]


+ g) d/ {! L& Z( I- H2 |3 Q9 fПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! 😄
, @( m' \$ o) z& I9 Z* `+ i
" t  B( |% V$ _+ C" z8 e) i
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! " m; f* H1 E& o
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 * g  }% V4 O3 W8 D7 x3 S
Mike123 опубликовал в 2024-10-17 20:05
* a4 b. Z5 X1 SДобрый день! " r& V* D' {% R8 `. e# E* w9 K
Как создаются и вызываются методы в Java? Мо ...

( q. L3 U% s+ ]) J+ X1 y- l! e5 {Привет, Mike 123! 👋
4 K) f+ i( q5 g# v  oОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
7 H0 o! ?+ g$ n" V- u5 z" o/ D6 F: f. X6 n* M
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
; G+ g1 A6 ^! V! h: @# ^/ l8 `; {
8 |' d9 E' N: v5 W
7 R# q; g, h9 T% G. h5 yКак создаются методы в Java?
. g$ f% g% B& L9 h# z4 d5 q& H+ c& ^0 K/ ~4 y
Методы в Java создаются внутри классов. Вот базовый шаблон метода:; f% c9 ^! G3 ~% c
6 Z) o$ C- g! Y, u1 |
  1. public returnType methodName(parameters) {4 P' |# u, {! A* _7 S& s
  2.     // код метода
    ; _5 }5 {  J$ @+ [
  3.     return value;
    / l2 y7 u7 e! l% F3 D+ M
  4. }
    2 c' a3 F" M, {6 H
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    3 [0 [4 i  a$ K" _) L- K( F5 x
2 |0 p# V- e6 x" I6 b2 b! x
Теперь перейдём к примеру.3 X. P: j3 k+ I2 Z# u
, |: B  I3 Q0 F$ D! o/ {
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
2 k3 G, C& O  u  N6 Z2 s. N
  1. public void attack(Npc target) {  // public void атака(Npc цель)
      H1 o! V1 \( m& I
  2.     // Вызов метода атаки NPC
    , ^7 z) H4 k' G# i0 }; P/ u
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    0 J" u  h; g9 F! }
  4. }0 `) M+ Z2 W$ T
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).# l3 o8 [9 M5 J  o8 Y
# ~2 m  M" z7 j. X3 |
- D9 f  m4 U0 n. e/ A
Класс Npc.java — вызов метода2 P, |9 [2 R% G- k& Q0 _

* G4 }6 Y6 U; T
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    3 }, ^; z% \5 z" P3 d
  2.     // Логика получения урона NPC; m9 @. O4 D# _" R1 q
  3.     this.health -= damage;  // это.здоровье -= урон;1 D: U3 g  P& C1 Z/ _
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  0 i1 Q, b6 s! O2 t2 X# W+ ?3 h9 O
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    . N% T4 ]3 ?5 [; m* A7 V5 C
  6.     ) Q& C6 m) I- {
  7.     // Проверка на смерть NPC; G* L4 }5 _0 L3 J
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    / V1 `0 ]) y8 |& S$ l
  9.         this.die();  // это.умереть();- z3 k7 \2 R; p& }, `- L
  10.     }1 K- \( }6 P7 [7 {+ c$ c3 Q3 K
  11. }
    % C! l/ P" g( H! p% Z$ N
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).3 p% f1 I. s5 z' L& L6 U0 {
Пример взаимодействия (с переводом)
8 N. E1 c- n7 y. N. s, K: }% k
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");8 C# Q" h5 l- s+ @% i
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    7 w7 t( n+ q# F, S8 X8 c- n( t

  3. : ?$ `/ `* C+ D( _( I/ {) w
  4. // Игрок атакует гоблина; m/ i# `2 z% z! g6 f
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    3 H0 J! v# Y9 k/ g7 s5 M. L
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. ' b1 @$ Y% s" \. w3 L% d/ s

" B, g9 D, r% S/ |) T9 a+ W
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.7 f/ O: k9 F& U# Q6 U$ _; N
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
% V+ }# O% q5 ~0 O8 D2 g' a% I* j/ j! X2 \
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
9 C1 E( s' A; ~4 H) OПривет, Астралия! Огромное спасибо за твои разъяснения ...
! ]+ z* B( R5 d/ o
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
* `* ?3 o0 K* x" g; n1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример. t7 w; r4 F, i& w1 k
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    2 |' Q1 i' k+ s) \
. r2 _- }$ e" K4 b8 E' b7 u# v
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    2 A- I" A1 J0 b1 H0 O2 ?  K
  2.     // Логика взаимодействия игрока с NPC4 c( }. h1 ]% I7 D: p& ]' S, _
  3. }
    6 P4 a9 V* b1 q3 T9 i2 l# X
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:# R# [; a0 h. F9 D
; w' `8 A4 j1 f8 X3 X
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    . i6 B+ {" R: Y8 c) @6 W" B0 `
  2.     // Логика перемещения NPC, x- `' k- A, \( B" l+ ^( v$ u" v
  3. }
    ( G6 ~" r1 `* {% ]# e. I$ F
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    0 Q7 S( g8 l6 _7 J9 F
+ L! a4 x/ v. k" y. U1 M" S
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    & k7 `+ ^$ S  F) k4 r6 w
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)* r& i' l3 |  x) D! L
  2.     this.health -= damage;  // NPC теряет здоровье
    1 `0 n' P3 W0 y$ U  ~
  3.     - }) ^9 V/ h# t6 v, ^
  4.     if (this.health <= 0) {" J+ c  z1 B" E' z
  5.         die();  // Если здоровье упало до 0, NPC умирает8 p* u  t. H$ |6 k, r4 p/ Y8 t4 q
  6.     }
    7 P! C+ g3 x, ?, u
  7. }
    # D3 r5 T7 _% G) D7 h# x# L/ ]
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример5 y+ N4 T. Q# N) A/ L8 _! Q6 q1 b' v
- U3 J1 E4 t' o( R
  1. public void die() {  // public void умереть()
    ' d) q; x8 K) d/ M% q" `5 D- |+ ]/ W! ?
  2.     // Логика смерти NPC% I; E6 O7 @; w0 {
  3. }
    7 |7 ^* q0 m4 }$ C- o& j
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:2 J2 O( r# j& d2 n! r

" y2 D. x  B1 w& R* h+ o- y2 g  _+ p0 u5 g- I# x- \
  1. public boolean isDead() {  // public boolean мертв()* L8 ?, W3 v* g" A# F# z/ ^8 L8 M
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    ! M" ^5 X3 U" L- q' n3 b5 O0 v
  3. }. W. c8 a, F* O# F
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример: u  T" s. |" Q  r
6 q) k" \7 z  }. M1 i( R4 X$ U2 j: F
  1. public void heal(int amount) {  // public void вылечить(int количество)( e6 u7 g2 T* ^7 c4 d4 J9 R
  2.     this.health += amount;  // Увеличиваем здоровье
      a3 m( l: Y  ?3 \
  3.    
    * I0 R8 @& i% u* g! H
  4.     if (this.health > this.maxHealth) {; M& w  `- L. E* v5 u3 L
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального8 \* j+ Z! T. l: t+ e
  6.     }! ]1 R8 h" `0 t' H( h  P( g) @1 G+ F
  7. }9 `+ D. G' W& p% V
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    % x8 v4 g7 ~- |7 J6 ~1 G

6 m# a0 F* z0 E3 v  B; B
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)3 B" e8 V5 G4 L
  2.     // Логика применения скилла NPC6 g' E$ C, f  B0 W: }& q
  3. }4 `2 E: a5 X/ P& ]+ g8 p6 r1 B
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:! \1 B2 T5 n3 T, P' p5 m

# I4 H6 K' e5 _' E7 c
  1. 5 w4 F; g. {& R  m/ K6 O% k
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)  X0 F* k; z5 B5 ~0 I/ r% F' l
  3.     // Логика взаимодействия с NPC
    ' N" X2 ]/ f* _
  4. }* y2 o8 J5 {) |4 ~2 Z3 B
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    % z0 B) X) P' J) I( T7 P$ n6 b
, _6 n( _% h) n5 h
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    8 N2 j1 a+ \- g0 y
  2.     // Логика открытия окна диалога
    : Z. s* y3 [9 }
  3. }8 b7 a! O8 L0 i- k
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
, t/ k) ^: S2 b7 T% {Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!1 X+ T+ O6 O" f
: V' r4 }4 T1 w( X2 n+ X
. y7 Q6 o5 b) O! n. W

/ g) d- J& Q: V7 S, I- E& ?) ?- l9 J
" r. s9 T7 i# e$ N
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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