Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 / L' n  ?7 R( X
' @$ _7 z( H% T' }

, _1 `* d9 v$ J. T* MШаг 1: Введение в классы и методы на примере L2j_Mobius4 t1 k8 c9 k5 y7 k6 n
С статьёй можно ознакомится в разделе Обучение > Читать6 A8 e9 g5 t! R( w3 P& z' L

: S; ~/ L. x" n  JДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.# q5 T. f! q: J0 R
* f6 _- A9 R/ J
Обсуждаем:
' \9 ^. U! E0 Q1 [: S! n- C# d
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.& j; U# L" W: B7 A8 L* M# {
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!* L3 |+ f, h: j" d9 v
- z* `7 C. H6 G+ g

, {5 O- {! o8 A6 H# G& y% A
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! 😄 Но мы вместе разберемся!
1 r  \& Y, b; q$ m/ A8 N; {' S" c
+ V* }' D0 P6 U" K+ ~

# f( x3 k& @# `6 t* M' k; l/ R: r! g3 G( Y2 J

* G, A% j8 P+ w6 u9 U" e/ `

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
# I8 Q7 \3 I, D, r5 c( l3 C
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17+ Y) ]- ^, e# S2 o) E) g
Почему мы используем ключевое слово this для ссылки на п ...
  p* k$ f6 Q0 V0 |* E' b
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
+ ]- p% R" U+ h1 SПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
8 v/ R$ ~1 L& L  w( P
& X( E8 F. H. X# q3 b6 PВот пример:
* `7 W( E3 \/ r4 k9 T" {8 V
  1. public class Player {
    5 `- d% v0 J& \% f
  2.     private String name;6 ]/ i5 P3 H1 t, L) c

  3. % |' u* A- A. b( A+ I  a" V
  4.     // Конструктор: j; ^! I& a- T' G! z* L( Y) v4 E) Y
  5.     public Player(String name) {2 A! u; l/ W0 }# ?$ O
  6.         this.name = name; // Используем this для указания на поле класса+ j; q$ p/ A) m
  7.     }/ ~, T7 r% p. z3 Q' K
  8. # ^3 d4 a" U% ~+ w
  9.     // Геттер для имени6 u8 d5 Y0 S& ?7 x
  10.     public String getName() {" @* ^( _2 ^  y& E5 H6 D0 h+ N% G
  11.         return this.name; // Используем this для обращения к полю класса
    # ~% d' m- L# @! c  N
  12.     }- V; U5 e8 H. \
  13. }, {5 x' L- S5 _- a* Z- V3 U
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.: d* q. X( m7 z! W2 n5 g! I

& _8 X+ I; _" L/ Y: @  J; jКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    # R& H1 C. z, T$ J* E* \/ A$ U. m- F0 C

1 T) A6 o3 z: g; ^+ ]& p' F) nПример передачи this:+ Q3 ~9 v2 E0 n$ K
  1. public class Game {2 X+ D2 c9 a$ Z1 `8 Q1 O* s" }
  2.     public void start(Player player) {4 C  E1 ]0 W5 S+ `4 _
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    8 t% {; K/ R3 I, N6 D) a. C2 a# C" D# |
  4.     }
    8 V: Z0 z1 g( X2 y/ @  T
  5. }
    + h6 {4 O: \  l: F9 x2 R* W  k
  6. 8 o( U! H8 y% R4 Z+ u
  7. public class Player {( J. y0 W, z- n( q- I
  8.     private String name;
    " `4 ?( S# Y$ ?7 M+ ]: t  b

  9. $ c) k0 v; V/ @6 v6 I
  10.     public Player(String name) {
    5 h; h( u6 k0 V! T. c6 S2 G! f
  11.         this.name = name;
    . L3 }$ p: A" }4 G; I  E
  12.     }
    ' ~4 u9 K2 G# M9 M4 N7 G# `2 V
  13. , B7 g2 D# |% o$ v5 e- h2 B
  14.     public void joinGame(Game game) {/ [' g. |: w5 Y. s; [! u
  15.         game.start(this); // Передаем текущий объект Player
    & z9 C' M1 E  k
  16.     }9 h! N% T# c2 K5 P5 C
  17. }& c/ b  Z1 K- i$ H1 o  o
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
7 q  o1 q7 ?3 ~2 D3 V) m& G1 c

5 w3 F* X( N8 n. s. gПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! 😄
. n% ?$ t6 o; v0 u7 r; X8 }5 {- @8 x7 {: B7 V% {( C  l
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! , b4 t& m5 [2 }! _; A0 u& i% F
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 1 J* ^" t# `0 G" m
Mike123 опубликовал в 2024-10-17 20:05
% K# W. v' p( rДобрый день! 6 y3 A. f  P( d% h/ \: W2 n; m
Как создаются и вызываются методы в Java? Мо ...

: L3 N2 g* `% Q& t3 D2 eПривет, Mike 123! 👋
, ]5 A  ]: r. a9 ]& uОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
8 Y6 \2 t0 i* x9 s9 w1 {( G
) k2 @2 m% o; G2 o  V. g: ^Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
. `3 J8 A/ F- l; }3 a8 {* r6 r% l6 }1 C( {. T* `' c( L

" O4 Y& E4 l7 IКак создаются методы в Java?' ~' u8 w3 M7 q; s2 q

" f# A! F! D( q6 `! Z: R+ Y% }Методы в Java создаются внутри классов. Вот базовый шаблон метода:% ~! ~8 F% \5 R1 x5 Q' {
! n; ]- B7 b0 N7 w1 E2 @
  1. public returnType methodName(parameters) {
    : }3 {% W1 O4 Z# ^, ^
  2.     // код метода
    - w$ b3 x; [' o: o
  3.     return value;+ G7 y# y, _; `8 q5 R
  4. }
    / R/ A# U6 t: J1 ^. c/ x
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    2 u% [5 @6 t+ a- q8 L

2 ?' T2 [9 `: F, c/ R. m5 EТеперь перейдём к примеру.: ?; s8 O# r8 P! y9 D! D6 k

" \; m+ X8 X: o! HПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
! m# x* a( w* L; }* P5 R. c) R7 \
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    + c) q/ i+ P; j
  2.     // Вызов метода атаки NPC1 {9 @% t! L5 `9 x4 X$ h( x
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    8 a! S8 ^4 h6 j' D
  4. }0 G# k% B: p/ h* W* N$ S6 u
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
7 \% l" k6 ^5 i: M5 l( ?0 A! O4 n8 C  h3 P# ~# R' d
1 c- Z- K  J8 [% K# ~1 o6 \
Класс Npc.java — вызов метода
9 }* G' }5 \1 ?# B/ A& f0 h3 p9 O
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)! e. m3 H9 u6 b5 p# M/ g' ]
  2.     // Логика получения урона NPC
    / W" }% `% ?5 N0 D; P  Z5 o
  3.     this.health -= damage;  // это.здоровье -= урон;! O& ~( E8 L: ~+ s+ s7 W
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    % V4 k3 G4 L( l! m' ~. Y$ g
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    * G# \  ^0 P' i
  6.    
    0 A! v7 ~3 b5 T+ ]0 G5 P- C
  7.     // Проверка на смерть NPC
    ) z8 E* k# u. F$ v8 W  j
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)) N0 i2 c  P1 k
  9.         this.die();  // это.умереть();" s5 B9 _# [; L3 k6 P
  10.     }/ j3 a# r7 R6 v9 @" H
  11. }
    - m" F! K  I& k: g8 [: o/ ^
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    ' i5 H4 Q; q! u5 h; k& p  u
Пример взаимодействия (с переводом)
: H7 R! o) R( ]8 u# T/ y4 ?
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");6 S& D0 r! J) G4 V
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");( b* k" E5 S0 O3 s* X+ ], k5 D
  3. . _. u! _5 U0 ~( u
  4. // Игрок атакует гоблина
    * \. t& g( K8 F( T* |1 M: n3 U
  5. player.attack(goblin);  // игрок.атаковать(гоблин);# m' f8 V! B, m- d
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
; Z! j2 Y5 ~, o. L. q3 T: _3 _) W& _2 w! g: h
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.# }: C% D1 [# E% k6 C
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!6 A2 J+ _; A% t4 o
0 d( l5 P  `" ^5 e: @
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
* q8 ~8 L& P" E" }/ B% x7 ]# gПривет, Астралия! Огромное спасибо за твои разъяснения ...
+ X2 `4 W9 O- Z
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.7 F" U2 p6 _3 g1 Q5 P( A
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример/ |* M$ D/ I8 x9 {
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    - ]" I* G( g+ Q
# [+ [2 Y# @& T$ P
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок): s7 P% M" Y0 k% G8 k7 k& D% G7 V
  2.     // Логика взаимодействия игрока с NPC
    2 m7 w7 |. O; D/ G
  3. }
    1 n8 T# S' E9 G3 |
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:& Y9 r1 C+ m7 M! P

, ~6 k& M9 x5 v8 s- f* q
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    ( ~7 A; k/ h8 L  _
  2.     // Логика перемещения NPC9 b2 I* X6 |/ D
  3. }
    ) e4 x% D& G* a! m9 A" W6 s
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:4 G0 g7 _; W5 A3 W  H6 I  }

: y8 b! n6 q- n, `6 t( A
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример1 ?( b0 i% R0 o" p9 G
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)1 {5 _9 r! m7 ?
  2.     this.health -= damage;  // NPC теряет здоровье
    : W2 {; v  Z* {& l" t3 w7 m; ?
  3.     ; R- E/ {1 G+ W% i- H  y
  4.     if (this.health <= 0) {
    4 I* ], o7 m2 I. Z/ ~6 M7 W
  5.         die();  // Если здоровье упало до 0, NPC умирает
    9 k7 d0 F9 g  O, p( t
  6.     }* v& h5 H1 Q. {4 L, B/ k" c, H9 y
  7. }
    # p+ X- r2 O3 X7 q$ i* d& r
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    ' \0 V% A5 |# P
9 T4 Z" X5 ~. t5 @+ }
  1. public void die() {  // public void умереть()
    4 `6 e+ i! n; d. N; |6 n
  2.     // Логика смерти NPC
    . j# H: R% Z! {1 v1 y# x* j+ d& w
  3. }
    4 x2 ]% U/ ^* m) c
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:0 }! p* ]8 p; z+ \
/ s/ u* F9 f$ o
: X8 `3 |6 W# s; }5 t
  1. public boolean isDead() {  // public boolean мертв()
    7 n2 q9 G8 \, h9 K+ u$ {8 R( w1 Z
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    5 Z8 d" H# G7 F* I
  3. }
    ) ~+ c; X& D, L+ i
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример$ u4 u( [: Q0 @0 Q; G- n9 n' C4 n
; p) ^' z% R$ J( F. K
  1. public void heal(int amount) {  // public void вылечить(int количество)
    * b6 x7 Z# e# T( ~: u
  2.     this.health += amount;  // Увеличиваем здоровье2 X& Q2 t9 G# y9 r* \6 ]% N9 A
  3.    
    4 e( s7 L0 u* J7 r
  4.     if (this.health > this.maxHealth) {# F" d( Q, _- i6 U, W5 c! \
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    ; V# \% W3 V8 r) k7 F$ S
  6.     }
    4 J& ~$ F9 ^3 d# o
  7. }
    : U- B0 p7 k3 t& E( w# P
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:1 h' `6 M3 h7 ^
4 O; G9 P- N: I' a9 ^6 _4 B
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)! v$ E* h+ Z3 _3 j7 S  e# H
  2.     // Логика применения скилла NPC
    # v6 C! L9 y; D7 Q  i/ _
  3. }, `( X) N4 [: [: R7 `7 S( z
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:; Q5 Y& P3 x6 Y

8 O. _* K' F, n: ?9 e8 u9 P
  1. ( f  Z; {1 B7 z, f
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    8 l7 a. [$ r- i! ~3 I
  3.     // Логика взаимодействия с NPC
    ( v, Z7 A" L% [7 M6 _
  4. }
    ) L" z  [5 Y, r+ b$ L) E# N
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    2 q. l/ `& e: w( _; }; ^+ U. j
3 y" c) G- z8 W) B7 }$ X
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    $ W* g% f% I2 v8 u) t4 A
  2.     // Логика открытия окна диалога4 O0 @: O7 w3 u* C8 k  G
  3. }
    ) y: p# k6 S+ w$ {% c8 W
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.8 R2 K  H' {; Z( U( ]. ?+ t7 ~+ W# U
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
$ R/ Y0 h; L# L9 p6 K+ {% X2 Q6 C1 B
8 _8 B+ m* }: x+ e3 R* m( F! @+ c+ D

; u; e% _7 }, F, K
8 w% B$ V1 H5 U+ F" L
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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