Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
! @- Z' i5 C: K/ {6 T9 z
- C* `0 n% Q) G9 L+ f# s, m" c5 E" k4 y- I! A' e
Шаг 1: Введение в классы и методы на примере L2j_Mobius# R# k6 v5 }  w: M
С статьёй можно ознакомится в разделе Обучение > Читать. O( C2 z/ L2 V2 F6 ~, l
% w' n% U% ]. O. r+ `
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
/ _1 ]. B) U$ S
+ p7 x3 u" b4 X$ Y; i$ SОбсуждаем:
  j" m, V/ R- u% i8 C
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    9 A7 Z) w" z$ a) ~
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
8 n/ ^6 J4 P' I& U% Q
, `% l3 q. {- E( H! F- _

( F8 b; `4 j( a: \+ EИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!7 @. R1 A! M( O" \' u& e4 H6 H0 L

4 V0 a+ ?8 ~, s; {
% W. p: B' c- O/ x7 H4 x( f$ e1 e9 F' ]6 M% V" c. p& b
6 \$ Q1 w! K$ U" ~; b6 L

/ Q# ]# O7 Z3 n/ z& n& Y

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?' D( u; Z1 y# R% F: N
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
2 A7 m- j6 O4 z6 L6 @8 K) a/ ^Почему мы используем ключевое слово this для ссылки на п ...
" }0 j, B  P' y  l3 d
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса., I4 i4 I, O% @; O& W
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса." @$ T% \% I2 ?$ T5 i( m+ u
! u/ ~6 o1 X& V
Вот пример:
- B+ {4 c# {! ]& G* A
  1. public class Player {
    5 Q2 o' E' W  O. P! C/ @
  2.     private String name;. |: ]8 r- t3 a

  3. 2 t% _+ _: D. o, b: I
  4.     // Конструктор
    ! U% `* T8 A/ C' s- w
  5.     public Player(String name) {; S( v/ g6 J* Y5 T0 T
  6.         this.name = name; // Используем this для указания на поле класса
    , p5 ?/ W: ]! n4 ]" J
  7.     }9 j0 n( O* t7 A( V6 v2 n

  8. ( W! t: t3 C& J$ d
  9.     // Геттер для имени1 j5 d( @* K# J! Y
  10.     public String getName() {7 [% E  [$ U) M
  11.         return this.name; // Используем this для обращения к полю класса
    3 |: o+ h  G+ v$ L# U; M
  12.     }
    : S$ Q& N0 ^6 T9 C0 \8 @" [
  13. }8 _; h" x$ z& z. v; c' D1 }
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.: i, j- q, e- w' P* {

/ Y, J% s1 u% W- s0 U( W( ^: EКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    " U1 @' S' k' y2 e9 l7 Z

" i& O4 t+ S7 kПример передачи this:
& B/ N8 g( W5 `9 @, ]
  1. public class Game {! G& a& J/ S: L! Y' k" ^3 S! l
  2.     public void start(Player player) {
    9 ~+ w1 J; j% ^: f) P2 y( f
  3.         System.out.println("Игра началась с игроком: " + player.getName());7 s, C  P6 s) n: }6 y+ X( G
  4.     }
    , G$ t5 Z/ B: t/ H2 b/ }5 j
  5. }
    * Q8 P: @8 x6 r
  6. / m/ I" e4 g! ^0 x
  7. public class Player {
    : j. {% {" N7 S# N! P
  8.     private String name;
    1 X: y1 y& z  |* J& f

  9. 9 b# N1 b- X  E5 e0 v0 H0 f
  10.     public Player(String name) {6 h! M2 K. u, \8 e2 B
  11.         this.name = name;
    * t" g- `5 p5 D# n3 d# c# u
  12.     }/ Q+ \8 m& t* G- i; n, |! t
  13. . [5 w& L/ y. U( y, x* T) I+ z4 _# L4 ?
  14.     public void joinGame(Game game) {6 k) ^1 n) y3 r1 x
  15.         game.start(this); // Передаем текущий объект Player
    . A1 v( d# k: S% D( {
  16.     }  G5 F; Z: A0 P- D! k( {$ o, Z
  17. }0 Z0 I. K% E1 E  b8 m" M: V, p% R
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java./ h% Z: _6 A/ i+ Y1 S" O9 g


7 O- B! j- s  w+ h& M, L2 r! dПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?, v" `& \5 L9 z( K. {- K

" Z9 l3 W8 P" P  Y4 s9 Y+ V
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
4 S: R1 D% K  l" N- m+ A3 R! @Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
5 {9 C) C; q/ n$ m8 C2 h
Mike123 опубликовал в 2024-10-17 20:05  ]3 |6 F* L* u$ s4 k6 E
Добрый день!
& G' |% [8 r5 X) }  j0 `3 [1 JКак создаются и вызываются методы в Java? Мо ...

4 U2 d3 @9 r9 ?$ q/ _) k; V( BПривет, Mike 123! ?' Z* f" t/ y$ W. g* e
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.3 B  I/ P0 i" m( M. O. c
9 l& _! I: u$ t, Z3 k3 w
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.6 \! K1 E. j3 y- h% o" _

1 F" n! V; v& r! j0 D( E5 K; o8 h0 u( V- G0 a  M/ B: y* F
Как создаются методы в Java?* G8 D$ a+ G! u

3 h+ R7 X5 L, f  PМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
: V- y5 u; G7 H2 n6 A8 n! L7 w# x- ?2 j$ p* \6 w9 v, h+ h5 C: f
  1. public returnType methodName(parameters) {! r, O6 h! S9 T1 l8 n
  2.     // код метода3 L+ C% V: I9 n
  3.     return value;
    # o+ Y; O) Y. P6 D9 i' Y  c$ I5 K
  4. }7 d& [# P# ]( {  j
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    8 r9 z) l9 x/ v" W) H  a- n

' o' H+ u- b. `' @Теперь перейдём к примеру.# h! J; d, L! N6 L; y

+ s/ z4 @* M& e5 {: YПример на основе L2J_Mobius с переводомКласс Player.java — создание метода8 h3 [1 q; o4 c, t- z, M
  1. public void attack(Npc target) {  // public void атака(Npc цель)- {. v6 ?0 C, T/ b' e1 h4 }
  2.     // Вызов метода атаки NPC
    / Y) n- p& P/ e* ]9 C2 O9 G" [  O; n
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());' T/ f/ y  M' m& E! E! A
  4. }
    " A0 @/ E! @. a% A! m: D# e
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
! `, Y) b( @: i, j. h) [
/ j. d1 u! r3 c9 q+ G6 Z  t1 d& u
Класс Npc.java — вызов метода
& M, K6 Z" ?' M: ]9 Y& V/ M, B$ t& ~; `5 _
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)! b! E1 D* N. N0 J+ P
  2.     // Логика получения урона NPC
    # V9 B) u/ d+ C" b: p/ ?
  3.     this.health -= damage;  // это.здоровье -= урон;
    8 O/ Z1 ^: E2 Z9 s7 {
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  ; G% k$ ]# Y) d3 C
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());3 _6 V8 m! |) A' j
  6.    
      W$ {( K( t& A0 r
  7.     // Проверка на смерть NPC" t1 K2 M1 q  v* O
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)6 L  s2 @; O- f, q" Q- H- F
  9.         this.die();  // это.умереть();5 _9 \. q8 f, c2 T* O: u2 Y
  10.     }
    4 h. M* ^, T, b- y
  11. }
    6 c) f9 i5 y: O: X
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).2 |5 f+ {" }6 @
Пример взаимодействия (с переводом)
3 u+ k- W7 j. o% t8 \% X
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    1 F) E* i; I0 l4 y' u* U
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");$ _7 _: w3 ~+ j2 \( e
  3. 8 c/ w  [0 B; C1 H( K& v# z& Q/ [' J/ V
  4. // Игрок атакует гоблина
    ) S' c8 k( ?9 @+ V7 e) z
  5. player.attack(goblin);  // игрок.атаковать(гоблин);' R3 U0 _! j0 e* `7 `
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. # H5 B. n/ I/ v6 W
" C8 Q+ M1 Q* p0 t/ V
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения./ o4 x* t2 P  e+ [
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
, ]8 B1 u2 l  J7 u; v2 w
$ S# K, V/ n% C6 x" d
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30, G/ s* H+ c' x6 r5 S
Привет, Астралия! Огромное спасибо за твои разъяснения ...

) _& k" V2 P9 kОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
5 k- J7 O9 M! d1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример% i- F) J( @/ ~3 x' x
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
      N7 L  ?6 l5 i; D3 A
" t% A% V4 C# {7 P6 T6 j, `
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    ( ^5 |2 e% m1 V! R& K
  2.     // Логика взаимодействия игрока с NPC
    0 F0 h: P: h" e* ^% r
  3. }+ p0 Z4 y; Q9 h! f( i$ M
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:' p7 [6 T( M5 M2 n% _3 i$ @7 P% |

3 h( P8 f3 I& G( {
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z), f  j! @' |7 G' G2 g
  2.     // Логика перемещения NPC! F8 C+ z' H# ?0 ?
  3. }
    8 A3 L7 l$ c" ]# q5 y
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    " j+ U# `! q6 r& M/ y& g
0 s4 _5 b, o4 J3 B% z% m% d- H
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    & W" T+ R1 h) a* G2 W( l  W( }
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)+ l; R% f: h9 L3 I: l5 q; |9 G- P. I% ]
  2.     this.health -= damage;  // NPC теряет здоровье
    . d: v: V5 b# f: C5 z+ V
  3.    
    2 _  B! `/ u$ Z  s8 l
  4.     if (this.health <= 0) {
    $ x6 |% n) e4 D
  5.         die();  // Если здоровье упало до 0, NPC умирает" L" |/ n# t& K
  6.     }+ V. f! L5 y5 }( n7 n9 R
  7. }' [  E0 y9 P1 Y3 |/ i
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример& n/ |* p4 T5 d! N1 l' c' P

: `9 p, ]+ P2 q1 w
  1. public void die() {  // public void умереть()" x: V( t3 }7 \: V
  2.     // Логика смерти NPC' ]# t  }( c# l
  3. }  r0 A# V# k, ^2 G4 C/ r. a* J
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:) P* I' H( C  @9 K. G4 Q8 R0 j9 Q
  m) P' G) t: O7 M8 N

: n& H: ^) b" h
  1. public boolean isDead() {  // public boolean мертв()
    : U' K4 z6 h7 m4 ]# i
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0: m# c) X1 z# g7 c8 ~9 u" |/ s
  3. }
    $ q' q2 J5 b  s- l' P( {5 d
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример! D$ S, z. L. _0 k* S6 y$ M
9 r" C- c* M/ X" }7 _
  1. public void heal(int amount) {  // public void вылечить(int количество)
    * {( b( S* }6 z  H# f: W
  2.     this.health += amount;  // Увеличиваем здоровье$ V% V3 S2 n4 l& o
  3.    
    % q) _( f/ _. F
  4.     if (this.health > this.maxHealth) {
    * J5 k* `& P8 ^2 ?/ C8 s  t
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    9 J) k/ W& ?; h  j5 o. ?2 J- E
  6.     }
    1 J8 ]6 h2 V  G" c6 m8 i! m
  7. }/ s4 s; T8 C* L3 m% K4 {
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    4 V5 ~# I% y& q4 Q" M. n0 t
( D( |1 [6 o) Y) g7 D
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)8 z) s% y6 [9 k  m9 L
  2.     // Логика применения скилла NPC7 {5 M: i# z/ V" U
  3. }% V/ Z4 @, X4 f" I% O
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:7 ]( j6 i, R+ S2 \( `4 a

% r9 N, l& e% ^* O: \/ B

  1. 1 I; T; j8 m0 B; Z, _6 D
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    * J9 X5 M/ C) R) s; E
  3.     // Логика взаимодействия с NPC" M8 Y* v. a1 C" @  c7 R
  4. }2 `# F6 i* |+ W: d4 ]
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    5 Z8 Z1 o3 u" u/ N' u, m5 i

! r0 h) v! y6 W3 T2 [# @  P
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)+ l/ J- K. S5 S. Y, h! Y
  2.     // Логика открытия окна диалога7 c5 e6 M* Y: f, P5 R5 q
  3. }8 i& V- S+ h( @" B& k+ a* e3 t* s
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.- P( Q2 |( P1 b0 W, t& P- _7 }
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
0 U- u* b) W2 w) ?5 Z, N7 D! ?; z. u

3 K1 p8 `3 D! `' ^! ?) D
8 e$ d) }1 Y. F4 ^) J* x
. \' s- y/ N! m. D; ]& j! Q: @( j
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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