Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
% `/ @5 T3 [# ^: d. h
9 t7 e; v, N4 v# X1 ~
7 {+ w) V% M7 T8 D! LШаг 1: Введение в классы и методы на примере L2j_Mobius4 N/ p6 {  P/ U4 j/ j  N5 p$ o& X5 x
С статьёй можно ознакомится в разделе Обучение > Читать1 S0 W* O! j/ W$ o+ C2 e
; ]; _8 d4 a  h
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
. I" k4 F/ D( s* M; n1 W# H3 Y7 _# J7 m: V
Обсуждаем:% B# }/ W' ^4 t, Z3 O) g
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius., Y# [2 Q7 |3 o0 B
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!( g- \" r. }4 M/ K7 l4 K
  e* ]6 L9 z  |/ [2 [. n- W


( |, v8 n9 L2 E1 f& l3 U7 IИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
& U3 [- V6 @8 M. T. ^. o5 K
7 V  j* U: M$ x4 i4 F4 k% g& y. @! k5 r* q2 b" M! Z/ A; S

; ?+ P0 h+ X$ t& {- [
; O) u" G( f1 m
) o. @$ R5 f: V

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?; Q( U7 d- y: H  f
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17" V  A, D% @" n
Почему мы используем ключевое слово this для ссылки на п ...
, M) \- t8 b/ n; l/ H+ m
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
/ F: h# P& R9 F1 l4 |Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.# Q% x; t9 h5 `$ E* L( H- |# V
3 g1 W1 X# A, ]8 @- R
Вот пример:8 k* L4 l  D+ B. Z) T! T2 A5 W/ q
  1. public class Player {
    4 o/ ]( ^( p7 t6 x. C: n7 ]
  2.     private String name;$ f$ O7 W: ?* v. X

  3. * \" P3 H1 C" j  m* F
  4.     // Конструктор8 q- b$ h+ `5 P
  5.     public Player(String name) {6 V0 ]# N8 o; o4 m, @/ ?* D
  6.         this.name = name; // Используем this для указания на поле класса
    # S/ Q# a) P. j# x; ^6 k
  7.     }
    . c' _5 |. o8 U8 K% U  N; W$ g

  8. 5 n7 C1 i) ?+ v- e* p+ R
  9.     // Геттер для имени
      a+ G$ ?9 @* a0 H+ H
  10.     public String getName() {
    3 j) n* {4 Y/ i9 a4 {
  11.         return this.name; // Используем this для обращения к полю класса/ x: k0 [3 s! T* R
  12.     }2 K3 s1 p. i! i4 v
  13. }* s& x( L# E: w  ?6 s
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.7 Z1 ~1 y4 g) N- T6 }

, X" F: A# q/ h9 YКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.. {& W* R& a7 }4 n8 T$ J
! u; s) \6 Y6 H0 d- P
Пример передачи this:( X7 S+ `5 i" @; x3 v4 |/ {1 q
  1. public class Game {( Y5 H3 T9 k, s% h; ]$ d1 w: S" V, j
  2.     public void start(Player player) {
    2 g; e/ c- y/ `; Z- w7 i
  3.         System.out.println("Игра началась с игроком: " + player.getName());- ?% b/ a) m7 B& X5 ?
  4.     }
    : K5 H. V1 ^4 \' j+ s2 e: @
  5. }; S( e! h! k+ k  S

  6.   [1 }( x; |( S
  7. public class Player {% h8 B6 [+ M8 C/ H! Y( W. o; J
  8.     private String name;' F) X2 t- c$ R: M

  9. - ~" y* H, K7 n: M- n
  10.     public Player(String name) {7 I: z/ J& S3 J$ i
  11.         this.name = name;
    ' L/ P3 z+ I; e: V1 y
  12.     }8 j/ r; Z8 ]8 q- P" i8 B

  13. 7 c6 d+ o& Q$ X4 `7 v6 p
  14.     public void joinGame(Game game) {+ W' o! V, O' a6 v+ F8 B
  15.         game.start(this); // Передаем текущий объект Player
    7 ~& R9 T" Y, {+ ]4 x( X' w/ c% P
  16.     }
    6 y& E2 _6 r% H( j- l
  17. }. a* ~6 G! N1 m  K, S
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.$ T4 s& }' h* ]+ `1 q


2 B( S8 N7 ~) Z% [Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?+ h. Y4 O/ r+ b* F
# A) ^, I6 c. y5 S) X; x9 L2 A
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
- U2 }2 T: |+ \# t* U% C; aКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
6 G8 H4 }; r. I5 [* g
Mike123 опубликовал в 2024-10-17 20:057 @# X; Y: Q+ g. T6 [0 P5 |4 e1 Z2 `
Добрый день! ' h; T0 h* A* a$ w: E
Как создаются и вызываются методы в Java? Мо ...

9 ]5 c3 J# x/ _2 RПривет, Mike 123! ?
) _6 l1 y, I3 `" L; HОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
  A! W: G1 Z- y1 x5 x
( J' a$ Z; F' M! p% v. hДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией./ E( x# m6 o- i: s- Q5 r) ?
/ ^7 x: Y7 C- u8 Y4 U$ C

! U5 R' C* S" J  y, hКак создаются методы в Java?( ]- H! H+ o! R3 Q* w5 B7 V* q
" N2 S/ P' V6 j% d+ R
Методы в Java создаются внутри классов. Вот базовый шаблон метода:" I/ p1 t. e& B1 `7 ~7 S
) ]' @8 x5 D! ~8 k) W) o) L
  1. public returnType methodName(parameters) {
    1 [/ V% h$ K' }5 h- {* d% o
  2.     // код метода. C3 x! [) C; k- r- p- L
  3.     return value;
    ) d( p4 G$ Y5 {0 K
  4. }
    4 I5 ~: b  _+ w2 m8 f9 h
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    3 O' |2 O# `* P

6 _: C' ?% _' ?, xТеперь перейдём к примеру.. ~8 l# Z+ i( Y- r6 c

3 o' {% O/ O2 C2 Y: M4 v1 rПример на основе L2J_Mobius с переводомКласс Player.java — создание метода' v3 g5 P6 c+ d: B
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    ( o  @# n  v! T/ ~- T5 b
  2.     // Вызов метода атаки NPC
      K0 @+ U+ ~5 Q
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    9 U" [9 w4 o; p; a- k, i* h
  4. }
    + w  E* g: v$ ?  N3 m
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
' D4 T$ X2 ?( a& X9 y  ~) \- _& S5 i6 `

0 O7 C( \' r- \, y# }$ i) B* mКласс Npc.java — вызов метода
. I. b  O: s, t
. w2 d, N8 \+ V, x- C  [
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    ! l  `! i; [- j  G( V6 S+ F2 \
  2.     // Логика получения урона NPC
    # T& ^0 ~5 f6 E" c( X
  3.     this.health -= damage;  // это.здоровье -= урон;1 H8 w, v% v3 w  X# W
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    ; `: s+ c8 {* g
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    9 @1 s$ Q; ^( \$ M2 K4 m, ]: d
  6.    
      C, o+ p0 `# G1 x8 W/ u
  7.     // Проверка на смерть NPC6 @! ^1 s9 t9 l7 S) \
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)/ G8 {2 F2 e" F5 U: ~# P
  9.         this.die();  // это.умереть();4 n5 |1 W$ T7 o5 d- I
  10.     }: @. x& g3 E+ V5 l* p+ M& I
  11. }
    . H" L. Y6 f. d3 f2 M! s$ Y$ _
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).8 j" l  F" ~8 ~$ O6 }
Пример взаимодействия (с переводом)
9 ?4 S3 e: \' C( ~- I. ^) q
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    ; c" ~9 o: F# F9 Z$ q; D# j% ]3 i( Z
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");' y/ K, T- _4 h1 g% {) o* C: I2 |

  3. 1 X4 U$ c1 P  Y+ W6 h% h
  4. // Игрок атакует гоблина6 R, r# ~0 r" Z9 E* v
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    ; c3 r: r7 [5 z/ |' A
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. " o4 L5 L& Z, t9 C7 f2 G: i
, e' Z# @6 ^. v& h
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.! o, ^3 \" o# ^4 j
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!; R9 r  ]" U# H4 n& F& s

' o7 {9 h' M5 m8 @9 z6 G3 \; A
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:304 X: X' H- ~% B. C
Привет, Астралия! Огромное спасибо за твои разъяснения ...

2 S0 U; L% Q3 Q4 _* b- U$ m. N7 A* eОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
. N( {# K9 Y4 o& W8 q1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример  T9 a' x5 {* L: d6 d8 x" W
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:# E  c% \/ C  p; F* }- h+ {

* i7 D# G* U( _, v3 B2 v4 U
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    8 ]5 d/ ^8 _6 v0 d
  2.     // Логика взаимодействия игрока с NPC/ X5 S5 j* T8 t3 t
  3. }
    9 ~2 h# ?# C% I9 i$ u) h0 U; K
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:* D+ E; E  y( R! [7 ]" E+ R

2 q. k9 N8 r! l5 I: l
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    6 X/ q3 d  ]) r" j5 X& I
  2.     // Логика перемещения NPC
    , P# y, m8 Q" r# a1 ?( R
  3. }
    5 S2 H; q8 V/ i; z. o7 f
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:8 x, x; M( f8 c

! F9 Z) t/ u4 t) M4 \5 }. u
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    0 ^: f7 a! |" y6 s5 `& |5 F% j
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий). g# |& M; X; |2 I
  2.     this.health -= damage;  // NPC теряет здоровье
    - @9 d1 d9 o( _! A; t1 ~9 v4 u! a
  3.     / ~( X" m* v+ N2 h
  4.     if (this.health <= 0) {
    8 A( `$ P, M/ t, p3 T
  5.         die();  // Если здоровье упало до 0, NPC умирает9 c7 C: b2 b3 {' t3 _
  6.     }
    " B0 ]$ ~4 ]0 I- M6 L5 b6 Q
  7. }$ b2 y5 T5 g6 @! z, d0 M4 b) y
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример/ U( j1 J6 _1 S9 f' F% I+ }, m  t9 x
5 l( [# G* B" l* f: w7 r: M
  1. public void die() {  // public void умереть()- \' j2 @1 Z5 B! H
  2.     // Логика смерти NPC  Y! k8 }9 u1 F: k7 Y& p( ~+ z
  3. }
    " U' ~% A4 v# J) ]# s: H. w
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    " H* Y3 Y# n' d- m# M
- Y9 v& k* b. V# K

- n$ k  S1 D* e$ _# a* e
  1. public boolean isDead() {  // public boolean мертв()
    - d) B3 Z" h3 D2 g/ |
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0- w+ S  q' M& Q3 ~+ S
  3. }$ S, G) T) I$ v: ~4 [( ?- a
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример5 O3 Y* ~# ~* o& j& s
: s& `, e3 w6 e. K
  1. public void heal(int amount) {  // public void вылечить(int количество)) m% o% _5 c. p  @3 e8 l( b7 }' R
  2.     this.health += amount;  // Увеличиваем здоровье5 U; v- V9 O/ y# E- L: H
  3.    
    9 |! L. }0 g( H% }( o1 P
  4.     if (this.health > this.maxHealth) {
    / y) y' s) G- a
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального% \, u) f* m" g# \0 ^1 x1 o
  6.     }* B( T4 L: D, ~
  7. }8 P, H: K8 f9 O8 ^
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:  C8 b; P2 f& l9 `/ c6 C
- g1 _5 s: `3 ?# n, Y" m  A
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)- A, q0 `6 B, q! W  x
  2.     // Логика применения скилла NPC
    ) b, }- \2 k# a- M+ J5 P
  3. }
    $ r. R. [  s: L  U7 @: t% K
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    6 J+ D, C( C1 r1 L8 n( H

9 q" Y7 \7 }; l0 B2 @
  1. 9 H7 f- S& B, [8 u
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)$ q# f. t3 U8 c$ u6 h; e# B
  3.     // Логика взаимодействия с NPC) O# I# [, {% f1 @( z, W8 l- M3 `
  4. }, a- x' E2 l* T0 a+ k* s
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    & w7 f; Y) j- K2 K3 S8 e
9 |7 R: P6 s2 W& R
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)5 A4 _+ F5 E+ J+ g* ~% j
  2.     // Логика открытия окна диалога
    6 u4 q, M- _3 a) e
  3. }4 r8 t; y5 y% a# f+ \, u
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.& w/ e7 z4 J3 [- E
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!' {' m5 {! n$ c& h# \
$ J7 @1 n0 g. s
7 B3 U% I8 b* |5 Q1 l* a

$ N% ]0 m2 s5 E- N. |2 o# \0 H) C1 E
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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