Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
! a' J: a; ~7 g/ {) m3 Z6 `/ A
3 ?/ [0 A5 R6 V( e* C" b3 l' O* e/ m
Шаг 1: Введение в классы и методы на примере L2j_Mobius) E) ]+ H/ C0 `1 s# Z0 ~$ B# ~
С статьёй можно ознакомится в разделе Обучение > Читать9 @6 I8 Y; H* X5 E+ V2 u! l* k

2 a( i( m4 n( ?8 p$ P0 FДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
' C  x( |# g) n1 }  v% q
! D! f9 ~% [' i$ JОбсуждаем:
. `& w6 u2 M& e
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    " s( \0 s6 D2 K( B4 t- n
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!4 u% z7 w" b0 _6 X8 L6 ~
' x6 e, q0 K7 t- A! P0 m


$ Z, }9 d- \3 d, H3 wИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
  _/ N7 C  j! P. x3 r2 H, r
) R0 t8 z& e4 E4 \. `$ g# Z0 d5 E1 k* y' O

% _, k' ~. J$ W# q' a4 z( N
( c2 |1 h, r0 g
$ l' t9 c. V% @' X. }/ t" }! U1 ^5 w

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
: ?4 s6 z  E" q# {+ U- q
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
: N/ E9 b, s7 B! l9 C; O. `Почему мы используем ключевое слово this для ссылки на п ...
, S: a. C2 v7 O3 E, |% }
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
' Q/ w) m" d' R9 s$ l* @Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
0 u& U- K3 g1 R! z7 i8 c2 F, V( |) b- \
Вот пример:
; j8 a9 U/ B4 X: f/ Q
  1. public class Player {
    / r# G+ D* \8 q3 K( W
  2.     private String name;
    & W( o5 |, X- j" G+ x+ j

  3. # H6 H3 l+ |: {* l
  4.     // Конструктор7 t( H5 Q; _# ?
  5.     public Player(String name) {
    $ T) T" j# R8 a/ I6 Q' I5 k
  6.         this.name = name; // Используем this для указания на поле класса
    # s% G7 Q- J' t/ C
  7.     }6 I7 a# F& L! \/ Y

  8. : N- L  a8 ]: U& z/ s7 Z
  9.     // Геттер для имени* C' ?9 f) U7 p9 O, \  Q/ c2 a7 E
  10.     public String getName() {
    , a% r9 W) C# K3 `# `+ `) I2 {
  11.         return this.name; // Используем this для обращения к полю класса  J6 _) P# z# T3 ]8 [1 x
  12.     }
    $ ]2 \+ K" `7 Y( A' R
  13. }
    5 U3 p. j6 K- W
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.% \7 F/ A: \& a' f/ E% c
- R/ B+ P8 y8 p/ B! j7 B9 i2 I
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.( W( D; ?7 Z) n5 u; i

/ v0 _, u9 p+ y$ N+ X- NПример передачи this:0 x: |' `2 z, S' F8 Z  S
  1. public class Game {
    2 B1 K; u2 w6 g
  2.     public void start(Player player) {
    , s7 v0 G) U1 G& c
  3.         System.out.println("Игра началась с игроком: " + player.getName());' W3 y  `/ X6 |) Y4 q  E5 Y/ j1 ^
  4.     }, {3 O4 G+ Y8 E/ P7 h2 k+ G: G
  5. }
    3 r0 a1 ]0 J  M. o: W9 _
  6. . |/ d+ o8 U. F; z2 _8 o) z: y# y
  7. public class Player {) X& X9 E6 m) U- }: E/ Q, @
  8.     private String name;
    % C( D1 d# {. f6 V3 P' L
  9. % z5 R5 M; q5 Q8 s! j- k' Z
  10.     public Player(String name) {
    : n/ \' v$ V0 n, U
  11.         this.name = name;
    % p/ Y" U. c9 d& U+ U' X
  12.     }2 [* P) Y4 `3 \! n0 Z0 I* x
  13. # i! K! V1 @0 y- d0 t* j1 Y
  14.     public void joinGame(Game game) {% D9 h8 `; m7 F% P
  15.         game.start(this); // Передаем текущий объект Player
    : C' _& {) ~& W$ |. r
  16.     }
    2 Y2 p: J% p% n
  17. }
    8 h1 D8 H4 S. o2 A  l" B
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.3 t* |+ h; g# c

2 d. z) a& d8 Z) s! n; B
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?) T/ O) Q  d: `9 h( A' i
0 b" X  Z6 B) V+ r* D  V
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! 1 m: ?1 t& G7 X* @& n4 `4 t, p0 z. \
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 1 L% w8 j3 n) |+ T" z" m% G) \
Mike123 опубликовал в 2024-10-17 20:05
$ a2 z' e( S$ `, J; S# @: {Добрый день! , \, q) D' F& y5 X
Как создаются и вызываются методы в Java? Мо ...

5 \8 T/ D& S" J. n' x; jПривет, Mike 123! ?
7 }  G" u* h2 [& ~6 O  |1 _$ N1 YОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.; H- c) `! G- A/ k8 K+ S
5 ^  _7 b7 X9 i( }9 |# K
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
* ]! L$ s. W2 J1 Y+ U% y1 W% M. Y( H+ E, ~
& R! [( r. r1 g
Как создаются методы в Java?
9 w) z9 ^  N# i" _0 |6 h  k+ B" [/ Q# G" P/ m
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
/ U! @6 V, A1 M
% ]: Y7 m( t  |$ o9 s5 c4 N" z
  1. public returnType methodName(parameters) {
    9 g9 t2 c+ j0 }! c  s1 n% C
  2.     // код метода! \2 S9 ^* ]" Y% }5 q" @
  3.     return value;
    . J/ N8 ~* y: y/ n1 X
  4. }
    # N1 E) L* T6 B
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).2 L0 r/ G+ \# |/ Q" M( X6 l

. h2 z" {" ~0 e! q. V. w+ lТеперь перейдём к примеру.' g! j* T) w5 Y

- s5 Y6 C& Q: M* B! F0 m  _8 sПример на основе L2J_Mobius с переводомКласс Player.java — создание метода, d& y9 ]) j' }; ^
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    ( d1 r6 p( `3 m) P5 Q
  2.     // Вызов метода атаки NPC( W2 U! R; ?  s6 h- D
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());5 j$ {# W/ {* J0 t3 @; t( M
  4. }& X. p# E" i8 p# f3 r
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).# f8 A1 ?& l6 I
% F3 X: x- W1 d- b2 a
7 V" T7 |+ a9 A; H3 T
Класс Npc.java — вызов метода% n7 s1 `3 z0 |

8 y# i5 x% }1 ]" F# D
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    ' D: I) a' k8 q: [1 f' t
  2.     // Логика получения урона NPC! t: e9 z! Q) J
  3.     this.health -= damage;  // это.здоровье -= урон;
    6 [# `, j- r, Y: ]* s
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    ) y. D: B! J: x% d' C
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());+ v8 i8 y; M2 E( Z
  6.     2 V4 r1 B. H- F8 A* U, j: C
  7.     // Проверка на смерть NPC
    ' m- p8 [6 h, `; h' X* ^$ E' K
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)" z# S9 v( h' M7 \8 O
  9.         this.die();  // это.умереть();" b$ }' R& K# W7 {, m. |
  10.     }$ Y0 e: {5 W) L
  11. }- T2 I4 ~4 X: P6 ~$ k
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    1 ]5 D' ]& O6 z+ n$ A" x. |6 I
Пример взаимодействия (с переводом)
* ]( r- v' @6 ?+ [, q4 r0 E- }
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");& x$ q/ }% F6 o+ n1 }, c4 V& Q
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");0 [  G3 G0 h  W8 H% n- f
  3. 3 @2 h, v* ^& C7 y5 G& h
  4. // Игрок атакует гоблина4 ~# u% }4 I4 |2 z
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    & k3 c7 w) w, [" o- P6 `
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
( [; l3 j) M& U' n! O4 m
4 U- k" v- w+ Y& K2 Y1 m
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения., h4 X' y% E) k: o( z4 q
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
1 u) @' n9 Z1 E/ b' W$ y' _3 c; c
. Q8 h2 {( S0 r8 |
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
) s0 O8 `) _( ~& T6 @& _: mПривет, Астралия! Огромное спасибо за твои разъяснения ...

  N$ K( t- N9 \3 H( N) HОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
; W4 B0 `+ b1 x8 d8 e1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример8 G$ x: O* ^. T* v9 J
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
      G* C. J0 P1 J4 U" t

8 t7 Q& }% S* X3 Z, g4 H
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)2 e4 D" m- l( R0 y
  2.     // Логика взаимодействия игрока с NPC  |) S% Q  a  s" n; K3 H
  3. }) y/ S2 _/ O* M# Z" C' M; b
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:( x1 U* C# O4 {" a+ `

$ D4 S! q: q6 F5 d; h
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    ; E. l0 U# K9 S" g. e
  2.     // Логика перемещения NPC
    ! H9 C# ^$ |7 j' l+ O# r& k4 U
  3. }
    - ^/ s- N+ i3 \3 n
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    4 y! s1 P. e" c" a+ l. O  X5 x

* X% A- C, p5 n" {6 H
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример" l& E# H, A. a4 T4 b3 [
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    8 ^% J. x1 e2 V, k: S* N
  2.     this.health -= damage;  // NPC теряет здоровье
    " S6 e% F/ v4 M' A" A# b
  3.     9 V( U  J# R4 ^7 H4 q0 [8 y' U
  4.     if (this.health <= 0) {& w. H6 v8 a  f6 [' I% C3 R
  5.         die();  // Если здоровье упало до 0, NPC умирает( n$ g& e$ X1 C( o. r6 f5 r
  6.     }
    6 l4 v& s0 ~: n& n- @3 r: v0 w
  7. }" V9 x: }( q' m* p0 C) d. a% U
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    # u/ h- A1 Z! N7 W& _1 j
0 j# P( H2 K: A
  1. public void die() {  // public void умереть()+ L/ j  i3 k3 [0 X' t6 f
  2.     // Логика смерти NPC2 Y5 j7 d# K# t  D" W* w
  3. }
    9 U# M$ k# Y3 M
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    & Y7 b# Q4 p4 ]' t

; Y; h3 W# i* z* O& e. ~* Q& [/ T7 U* W2 m
  1. public boolean isDead() {  // public boolean мертв()
    1 Z+ u* g4 M3 r( C1 W$ m
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    . ~: D9 G, A, l$ p0 H, I
  3. }
    " q7 j# M2 c' m& ]& X
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример% J0 G) R2 J1 {4 x
9 q$ G) T* A5 Q4 _+ u$ `# l
  1. public void heal(int amount) {  // public void вылечить(int количество)3 w% G3 M3 i' B' ]3 R0 R& T; Q
  2.     this.health += amount;  // Увеличиваем здоровье0 ?1 b3 J# v" t! F1 g- r9 ~1 r' @9 Y6 v
  3.     & N9 r, i1 z* h, I. ^
  4.     if (this.health > this.maxHealth) {' B9 X0 {) v7 t7 Q, d) i9 F+ f5 [
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    $ Z0 K5 m: A, Y5 A# Z! k5 I; J6 H
  6.     }1 N, v+ o$ w8 k2 p. P: b/ h; {! F
  7. }2 k5 K- v& m6 R6 U4 u. c% X$ f! s' r
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    ( L/ H: E) T" K; a8 {+ W. {4 V
6 `- [" r- H/ R; _& R# l. n9 _
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    4 c' _1 Y9 _. n' H2 |, E" N
  2.     // Логика применения скилла NPC; t. I/ e, A# l# Q
  3. }" m) I6 L4 r' U, ?6 _
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    ) C' U  k; s1 d+ ~

" v+ v# ^8 E% w7 G' {

  1. / @7 ~: R  n# o  p3 L/ A3 W
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)1 U" [; c0 M+ y2 J9 l
  3.     // Логика взаимодействия с NPC
    7 X+ e$ ~. h$ c  t
  4. }
    - `/ W4 o" i- h  i. M9 R
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:; B  N+ P' ]$ c0 J& E6 h, Z
9 k( y/ z9 X) A& Q
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок); @( l" j& w* t- A
  2.     // Логика открытия окна диалога) o* q: y4 _/ w2 h5 v2 d
  3. }) o6 }, `7 d2 G) t
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.1 C( ^# O  v. ]3 X6 ^: z, H
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!! M$ ~- o9 P9 G0 t0 u
6 m/ q1 N/ ~% e, s. t

6 u7 [( M3 B$ j7 m' J/ s0 g) b; i1 t& @7 X! J/ W& H

# x! J: Q* @" S2 i/ ^: C
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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