Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 & i( v& m9 ^6 O5 z  Q( ^. v
7 l1 K* Z4 q2 a* ~

7 |! W/ Q$ _! I! zШаг 1: Введение в классы и методы на примере L2j_Mobius
' {2 i& r/ j* _4 c% }С статьёй можно ознакомится в разделе Обучение > Читать2 S4 q( e5 @! L: p, i! M

. V: P1 z2 ]/ x# w& c; k# H7 YДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.9 t$ ~7 `5 w+ X9 r& _: n9 }

0 }" a  Y0 A( Z6 XОбсуждаем:
, j( T  m, t3 c  H$ ?
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.4 V& u7 `6 b: p$ C5 d( ?
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!, l- j; o! [+ W( I3 D$ O8 b

, L1 k' _. @, _; L& a. o& {) ]
! d& t* l$ y+ l$ T
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!4 z( \" `) r$ M2 |0 ^
$ b3 E" {% P) t, ~- X& J8 T1 P% x
, V! Y" w  Z9 Z4 _! {

) c# x7 `' H8 f0 T" x) Q, B& U  }) A3 G' s

; j7 z. Z: w6 h0 w

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
) Q! D# c  x* N( t) w! c) J1 c6 m
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17/ D6 I* {* ?% k. K! z( R
Почему мы используем ключевое слово this для ссылки на п ...

( j- [. [3 t* Z, IКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
9 P# W$ M$ h: r4 b" z$ J* MПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
9 ?1 z1 F4 |  D; u7 {4 M& g% c: R- s4 ~) s: ~
Вот пример:
6 C/ t7 k8 E: ~2 a) K4 r
  1. public class Player {3 U$ J; y  s9 P3 \, ?. P- Z2 b$ e
  2.     private String name;
    " g2 a" q7 _7 t, O$ f: ^
  3. 7 k; {+ y$ b4 a5 u- M. |
  4.     // Конструктор
    . O# ^1 B& N) G* i5 a+ f, b5 G( E
  5.     public Player(String name) {
    " s7 J) }+ D$ h. V
  6.         this.name = name; // Используем this для указания на поле класса& q$ n. H. m% i
  7.     }" `$ z# v- ]$ h

  8. 1 l1 @# }! h, z- A2 _; }  r
  9.     // Геттер для имени
    # ~4 i' D, x! r0 g& n
  10.     public String getName() {4 s1 u# j! d( B( ^
  11.         return this.name; // Используем this для обращения к полю класса$ R: x' \% A. k! @) j% C9 r$ o, L
  12.     }
    1 V) t) n: h2 \! U- {4 G4 J- C
  13. }: j1 E% H6 C! Y1 W! {; I/ s# W4 ]: z+ ^
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
& [5 L1 @1 M9 d/ Y" l+ c0 K. q. ~
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.+ @7 k" k9 |% B4 n+ j8 M
8 Z" k# n' g& [, N
Пример передачи this:$ `' _6 ]9 w9 g. I$ f; v7 t* [: B
  1. public class Game {
    5 X) r- H% w1 F1 k9 c
  2.     public void start(Player player) {
    : m2 \; ^" ]/ j+ U4 {
  3.         System.out.println("Игра началась с игроком: " + player.getName());  f  V. Z# q& y3 c% S: j  c
  4.     }( j% R, L; R+ P2 x" o
  5. }( c; n, }1 W7 M* f$ a4 p8 n8 Z7 {
  6. . c, E: o- Y& t  z) V; B
  7. public class Player {3 |9 _6 m0 C& e! p$ ^
  8.     private String name;5 Z2 }& x$ K/ U9 n) _
  9. 2 \4 |, v1 K5 `! x4 j! ?0 I1 q! I
  10.     public Player(String name) {% M3 k: _9 R, C" K% c6 g+ R
  11.         this.name = name;
    6 Q; f$ T6 l  x" b6 d1 Y4 ~
  12.     }6 ]7 b4 t1 @! H( s
  13. & T& e" k7 _$ [5 [/ u
  14.     public void joinGame(Game game) {1 c1 |) U# ^. ~! @
  15.         game.start(this); // Передаем текущий объект Player3 H6 T' _1 T3 h
  16.     }( \9 n# u( g! H$ x( u9 ]
  17. }
    ! \& X. `; }. m* i  ~2 P8 x' Z
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
( S- U3 W( m8 c) a5 x/ q  H
9 T& u- p5 X' E0 @4 U8 |/ t) q
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
# O4 [: j2 S9 Y0 K9 ?
% m9 b- V( z& e4 I3 @$ O
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! - |, t" q3 q& A8 Q: F
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 - b& E3 c$ F# a% v9 V* M2 i
Mike123 опубликовал в 2024-10-17 20:05: p# ~% M( k8 h( n7 J
Добрый день!
8 a0 K* o. y7 BКак создаются и вызываются методы в Java? Мо ...
& y3 M& y6 t% Y' V) a9 Q) U5 K
Привет, Mike 123! ?
. l/ C& X! e3 c5 D5 vОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.: Y7 m  i% J4 q6 W- s: U; N

3 ]! d& ~8 n2 l# gДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.6 p( F( O8 a: N" k

0 w# W) w3 |7 W, c
: G; l+ \. X% _. S2 i/ i0 WКак создаются методы в Java?
5 p* A' @' X- }  r5 J, f) s* d* h  w; E" B" _: \2 A
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
# W+ `/ {! S. N: H7 F8 N
  y8 O; R, N/ ^
  1. public returnType methodName(parameters) {
    & k  i& P, \! V6 w7 N. d, E
  2.     // код метода: Q  \; g' `8 [
  3.     return value;( y7 p8 L% ?( ?  I
  4. }
    3 d5 z9 X/ C7 v9 P, m" F
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
      L( S, Y: |  \$ ]; l/ f- j( ^, T$ W; d
( E4 s9 P8 S1 H6 ~9 g
Теперь перейдём к примеру.
' ]9 S- l0 g) C; x. {# B# n% _5 V  a
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
9 u- A* J# l% A! b$ [. M- Z
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    ( d: B) N1 e6 f) b- x
  2.     // Вызов метода атаки NPC9 L$ @( }0 D/ G: W( O- \( `- J% P9 \
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    5 P# `" l. l  r# Q( @7 B3 V' S
  4. }, `: S4 p5 b5 j- l
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
4 V6 C4 G; f1 h1 u$ M
3 S8 h2 x. B( j* f& ~# N* k  O
6 q2 G% \2 }, N3 LКласс Npc.java — вызов метода
7 A3 Z# e9 G* u- O' W6 {3 l
# S! t- }8 x  e2 `* ]
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    0 Q( q4 |  N8 e/ d/ `8 g
  2.     // Логика получения урона NPC
      h5 v; T( s. v9 [2 Y
  3.     this.health -= damage;  // это.здоровье -= урон;
    1 @8 Z/ I- |9 E3 p+ |& v* ?
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    1 O+ x" w  g: r- H0 C" \" v
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    * g8 F1 C8 H- s; `! V0 K1 `
  6.     0 b( G6 L7 H! o# M% _1 S& ?
  7.     // Проверка на смерть NPC
    ! V( e+ N9 B* l* z
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    ) S8 N) v" m/ t' P6 W
  9.         this.die();  // это.умереть();7 N2 r; x1 z5 p& L) n- e7 a$ W
  10.     }$ J  D* v' \- F" W  ~; E% A  F
  11. }
    . {: b" T1 x- V2 B" h& V3 U" B3 g
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).) z% D' y5 J4 d4 E0 H  w
Пример взаимодействия (с переводом)
+ a, K2 ]8 ?( X5 d8 ]
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    7 c8 l  H4 @. m& ?
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");4 E) G9 h, Y8 t  u! j2 D1 w

  3. # f8 i  @, t4 X" h
  4. // Игрок атакует гоблина3 b' k; s+ \" d) H5 L
  5. player.attack(goblin);  // игрок.атаковать(гоблин);1 A' Y5 W1 |7 C. G. F- \
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
1 p1 }5 a0 E- r( M$ i" c) T+ t. G9 n8 M4 |. k8 a% H2 V
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
: N+ k8 f6 K4 j: p# s9 `У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
, u$ l! c2 }0 w& J4 [) }' \
' V  j- B) H& V
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
. V8 |# _0 e& AПривет, Астралия! Огромное спасибо за твои разъяснения ...

! q% x4 ^/ F. BОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
* D; X# A) M6 Y0 N1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример" |- H! b- t# i
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:9 q! f0 {3 h$ F

# R" ~9 E( d( Z1 P
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)2 B& h, r% j- m! k. B( q% u
  2.     // Логика взаимодействия игрока с NPC0 l/ L' H+ \4 T! o- Y! }
  3. }
    - T4 B' E9 W4 C. ]2 m! |
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:1 Z$ c! ?8 `1 ?+ l& x" U0 W& u" d

( l. Z- ~2 c% n
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)- k* Z. P5 [* v, @4 {, w
  2.     // Логика перемещения NPC. O9 a4 h' ]/ d8 n
  3. }  D4 \9 _2 O! L7 d6 o; B
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    4 V0 i+ \6 X: G- c

- h. p, v- P% y9 o
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример: }+ l; `( m7 s& Z
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)3 @& U& A9 q4 W
  2.     this.health -= damage;  // NPC теряет здоровье0 z! ], Z( e' V) _( j
  3.    
    # {. p6 j' Y6 v# x, P  I7 x. K
  4.     if (this.health <= 0) {3 l, Y  R: X# ~. e! b
  5.         die();  // Если здоровье упало до 0, NPC умирает
    , K) d2 x, v* ?! S- w0 `6 v+ i( b
  6.     }4 `: s6 I) e1 o, ~! [- R1 y: g3 Z. X
  7. }
    6 a* b* L* L1 X5 l! J
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    * h( T" O# s  a3 L
' q3 J9 f+ u( \; V( T
  1. public void die() {  // public void умереть()
    + [: }, b2 S+ Z% r& W7 p
  2.     // Логика смерти NPC
    ; ?7 ?0 b0 d1 D4 ]4 i
  3. }
    1 X- f3 ^/ p. P( h6 c
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:9 L" t2 j9 W8 O+ F% y

+ x4 Y6 M  m& s, c+ `6 _( a! `* a- v/ B- Y
  1. public boolean isDead() {  // public boolean мертв()* b8 h' x/ Q$ z: P% x; x
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 04 |9 Z9 {# [* E7 P; m
  3. }, R0 T: H! J& ~" d1 N+ |
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    ! p5 v5 O7 e% d/ {. A
; [* A2 l* x& h5 ]" k7 n
  1. public void heal(int amount) {  // public void вылечить(int количество)- i2 M# y0 y  W8 B, A
  2.     this.health += amount;  // Увеличиваем здоровье
      R- b! `0 R4 }& z7 M8 i' {2 @) l
  3.     + g0 p5 B7 L) R( D! p" U
  4.     if (this.health > this.maxHealth) {7 a) I4 f+ r1 m+ c6 M. x
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    * y/ D! `  s# k7 V. r) E
  6.     }
    & w# b0 [0 p' }9 G! R/ c, n
  7. }# `7 x$ j& B; M$ s" ^
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    3 ~8 |+ h3 N$ E5 E' b

. a4 Y. d1 ~/ A- J+ N
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    0 `2 ~& Y3 s- W# I) J2 e; o
  2.     // Логика применения скилла NPC2 Z: a! W: Q) |+ Y, z  O
  3. }* Y: s" p  G9 A8 j0 h
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:4 h2 s8 i- H( c, O
3 V! l: r" G) s$ P9 y5 ]( i
  1. % h& f4 o2 w1 g  q, x+ D4 m
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    . ?4 k& l2 G- \; B, D
  3.     // Логика взаимодействия с NPC: L: P0 C9 G0 D8 b, k
  4. }
    2 N2 s: E6 G. q4 O% Q- o
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    2 [; x1 I. S+ X, Q5 E8 h

" {; L5 }1 e; o# E9 Q; R9 \# r
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)0 r( ~, v8 D# W" N1 ?' `) a; F
  2.     // Логика открытия окна диалога. I3 k- t' I$ C0 z( u% H. g' S
  3. }
    ) B0 L; t& W) s5 U8 l( U
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
0 ^3 W7 V0 n, T+ d, n8 ~3 C# SЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!; `4 z; z  k% ~2 \6 m; o

& ?& I2 z& i, p; {- Z/ D4 _+ t; k1 l9 n. U" m
4 J% w( y4 ~" _4 m8 P3 I
! I1 {$ M; T2 p# l$ h* ~4 I( }! p
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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