Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
6 {) h% R: N3 p+ _% z4 V! N0 g8 o+ T" b( Y2 w

6 G4 y- a5 A( uШаг 1: Введение в классы и методы на примере L2j_Mobius0 Z' z9 O# S" m* H' E
С статьёй можно ознакомится в разделе Обучение > Читать  Z# _- C1 \7 x) |/ f

' Z2 E/ B8 [+ J6 O( t5 zДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.: [; n( m* m+ T) h& e6 B6 u4 g

: T8 q7 N1 b; z9 q" X& QОбсуждаем:+ ]* N' A+ E6 P+ ?7 I
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.3 n! s. y/ p% f9 [- Z. r
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!1 g4 A' C' l6 @3 W) ^/ j5 Y' b
3 r: s& _5 C4 F( W

; \) a! u% y$ a8 V2 J
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
4 O- {, z. a' ~( r$ z2 L6 y) {9 Y3 ~: f0 H) y0 ]! N: e: V

. n: Y" S  F3 }" a/ Q( F6 i- s- d" |4 ~* N& `6 N$ n: O  N1 ~* D( r2 G
) i% c8 i9 l# L& b$ a" c

2 j1 V+ y) C8 `: r# j

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?' u  {4 v5 L2 P/ j) W
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17- q5 w. E. W5 v! L4 R
Почему мы используем ключевое слово this для ссылки на п ...

$ R+ I+ G# B9 fКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
! n# P, l  f/ C& x& ^9 ?  LПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
- u: k" o6 X; C7 s  F
: m9 C3 l( P/ ?( c: g# T8 Y" W/ ZВот пример:
1 I# Z, K; Y+ n/ w/ b
  1. public class Player {3 u9 j4 X, C5 ?0 [( o  f6 ~6 Q
  2.     private String name;" h* O! c5 Y1 \  f: w( E

  3. 4 z# A5 t' h7 Z  b' t
  4.     // Конструктор4 F( z; V' r, V' K
  5.     public Player(String name) {
    2 c& {6 j) e; {( y
  6.         this.name = name; // Используем this для указания на поле класса
    # Z6 f% c, N1 [6 h3 `
  7.     }
    : U( h1 |& g4 q! }. B$ m

  8. : r! L  z* W& P
  9.     // Геттер для имени
    * n$ Q$ N. [5 I6 ^
  10.     public String getName() {
    2 ]/ v( G! ^* P9 O
  11.         return this.name; // Используем this для обращения к полю класса
    ) k- @. p- Y. P4 e# q/ `
  12.     }+ E) _8 ]+ I) s) b. D' Q7 h
  13. }5 L; J1 p0 b' O/ \5 n# ]
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
6 |" P7 S- h$ P+ |9 }$ h4 B8 A/ Q4 r* x! w6 X
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.. Z, c0 {+ B4 L# Z- u0 ?. {2 p$ s

: V! s0 O1 w0 xПример передачи this:; U/ h7 V  x  r/ a2 p8 Q
  1. public class Game {- C( g8 M6 \. [$ e* w
  2.     public void start(Player player) {
    6 O6 K4 D' h7 n) f- L
  3.         System.out.println("Игра началась с игроком: " + player.getName());/ T2 D* L8 ?8 D9 |( N# S
  4.     }% [9 T4 N7 x' A2 A' [
  5. }( v, }7 U1 b6 N9 b7 i1 L2 Z5 `
  6.   ]+ m0 E1 A+ E
  7. public class Player {% ~2 u$ w. P4 E9 E) T
  8.     private String name;
    , r+ C7 h4 C0 V- a

  9. . r; o& Q9 J' N  E# t. E  X. s, u
  10.     public Player(String name) {- e: d$ m1 ^  ^# l! \
  11.         this.name = name;, `. u! _* L8 W$ V$ }3 p0 a5 w
  12.     }
    + `7 Z# \* G7 G, {; M

  13. % }8 x, U  ]% u$ G) L" F
  14.     public void joinGame(Game game) {
    $ D% f% R/ z( F- {( j+ L1 `
  15.         game.start(this); // Передаем текущий объект Player$ Z5 u  }) Q# r) m6 z# H
  16.     }
    + Z4 u! o( z# I" Q% w* R7 n: @
  17. }
    7 [+ Q. s9 _% ]; V8 `8 p" ?( Y
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.& n" t2 j  Y7 f9 n' ]


6 P+ \. d% ?# Q3 |# i- PПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
9 M% T8 \  u( t' N3 S: {3 J" {# O0 J  u9 k+ \8 Z# t
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
  f% w" c7 l9 o* j3 z" }Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 ( L' n' ^% O1 q% }. H
Mike123 опубликовал в 2024-10-17 20:05( K' U4 u4 @# H; X4 j& }
Добрый день!
, I  J. g" e9 o  N; H! U) D3 ^Как создаются и вызываются методы в Java? Мо ...
, k; _5 z1 m3 A
Привет, Mike 123! ?
4 ?5 Z8 M' c# z$ nОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.3 ]& p1 X8 a6 K, v, D

; C9 S: N! ?; }1 R0 NДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.  `; x( r, u3 g6 C) M& Z4 U

9 L% T/ z! ^; Q& V2 J- ~% i0 V) P* T+ U4 z3 B2 j
Как создаются методы в Java?" B) b0 g, v! g# ^

5 ?- k4 d8 z# O+ }Методы в Java создаются внутри классов. Вот базовый шаблон метода:4 _: p# O7 |+ C1 K0 p
8 B6 u! @' a4 S3 R3 S6 k" p: S
  1. public returnType methodName(parameters) {
    2 X3 m% Q" J5 l# ^
  2.     // код метода
    1 P- \! V& o! V' s) z
  3.     return value;( w  i0 M. t! e. J! a
  4. }
    $ ~0 J* B, a! A9 y- I
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).9 }, F& j5 r# S+ `% |$ ^

9 g! y# j+ T) p( l' W9 e( JТеперь перейдём к примеру.0 S0 k6 Y8 h7 V" E7 a3 v! Y$ k
& {/ d  C) h9 L2 [) g( k
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
7 Q# u, u( h; l. i
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    * P' ^, m* j5 O% u2 t
  2.     // Вызов метода атаки NPC
      P  b( f3 O6 }! S' Y3 A# w/ n
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    + B9 I8 }( v5 ?5 G) h' r4 n7 C
  4. }
    9 a4 [) T8 }, f2 r  a( Q
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).) [/ J% d+ e' Q8 Z* G% B7 m

) s9 t$ M. o) T/ Z9 i
4 r) E  P+ m3 S; sКласс Npc.java — вызов метода0 A8 H( h' z: T5 e( i
2 I5 [8 b* a' p) S7 ?7 q" H9 q
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    1 S4 _$ Y- c1 j4 R0 |
  2.     // Логика получения урона NPC
      E! z/ s) P; W$ Z" a! E' A; [0 V
  3.     this.health -= damage;  // это.здоровье -= урон;
    - ~3 B) W1 R' u* @& M1 e
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    3 ~+ v8 u, Q& _2 i# E/ O: b+ o  w
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    6 n) j) _# ]* Y! K2 a5 e/ ?
  6.     8 d4 [$ _, ?( |" m% B. |: ~# `+ Z
  7.     // Проверка на смерть NPC& }. _5 W* k2 ]! [0 z% b( O3 X
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)( t- T9 C# r. H1 S
  9.         this.die();  // это.умереть();
    " C) j7 j2 Q2 r: j0 E; \8 d
  10.     }
    % o1 r. L( Y+ x" Q- A4 m
  11. }& h9 `  _+ D; W; ~. o% x
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    8 {  W* D* f7 q) k
Пример взаимодействия (с переводом)
, N7 _% _0 O) Z
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    7 ~; j6 A* F4 `1 V2 [
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    . Q- ?8 d! {& w) Q/ b8 ^$ j% q. t
  3. ; r' u9 N4 F* S) e1 h+ U
  4. // Игрок атакует гоблина
    4 A) s* e5 B& ~
  5. player.attack(goblin);  // игрок.атаковать(гоблин);) M8 X! W. S* n# W+ h* \5 W# a
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
+ @% r, H9 ?- ~/ Y4 P+ J" ^6 X
, V' p# h: [: y. E$ s. `5 e+ U# j
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
/ B7 Z, v" v( L9 t1 ?9 X5 fУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!9 ~  Q7 V- Y+ \$ l
- E9 S! w: ]" [- S
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30! }: B6 G, {2 E- m& R0 h" k
Привет, Астралия! Огромное спасибо за твои разъяснения ...
; K7 ?$ J+ `# _3 g) H$ {7 \# W! k
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.. ^/ x4 k8 }; n/ w, s
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    ) d5 P6 g8 G  c1 V- J
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    ( r, M3 g; K" s/ \4 P' @7 ~' [
: E) S  H5 D+ L1 Z3 C8 ~2 p
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
      B. j8 w" b* }& ~/ D
  2.     // Логика взаимодействия игрока с NPC
    # z! u+ J2 J# ]* u9 j0 L
  3. }; |9 M5 n: k! G0 h8 i
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:% V6 b0 X% ^  @& d. i) g( y$ x

! l; @# j% T0 U. d4 b4 A
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)! J# U% v8 O0 L8 ^, l- u; n
  2.     // Логика перемещения NPC
    ; ^; P. A; z0 e4 `/ {3 [
  3. }
    1 l: I5 g' I: [( f2 m+ t/ @
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:7 m8 E# x6 Q6 T% E, d) k5 n) f
$ @/ V+ S1 ]0 X# O" h7 C
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    * M: S2 ~  z; r* ?" M7 }
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    8 b& V8 a# s. w9 v  U4 e7 \
  2.     this.health -= damage;  // NPC теряет здоровье$ j* g; C8 z% W! T% F7 Y5 ^
  3.     2 m; L) d$ h3 _% u* \: [
  4.     if (this.health <= 0) {' N1 v5 q" E. W
  5.         die();  // Если здоровье упало до 0, NPC умирает% l1 r5 C  s' K! N' A
  6.     }, }* ^* K7 P9 l5 K- f$ \) H) t6 i
  7. }; t. f. g; B8 P7 P+ [' D
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    & \; Y/ l) p: }* I, _% G

/ ~6 U1 \7 r6 n  c
  1. public void die() {  // public void умереть()
    % \9 S' Y7 ?" B+ i* F. i+ ~
  2.     // Логика смерти NPC
    : Y& O: Y: k* E8 Z% g0 t" I6 F9 ]
  3. }
    5 _8 V# [: J8 o7 \( i! g
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:" r( w( N1 W$ H9 F. s: R
8 L; s% M  M$ ~7 t' x$ j

7 @' U& ?0 x. Y, [$ Z  b/ D
  1. public boolean isDead() {  // public boolean мертв()
    / y- y8 G! O7 m; H+ i% m! q" ]
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0( Y5 |4 ^4 O9 F8 e2 Z* U6 n
  3. }" e1 c# p$ s, X# T" r
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    # \0 e! I8 P; b4 c9 A% X1 ~
9 l( B6 K7 L. ^9 T# s$ p& R" Q: h
  1. public void heal(int amount) {  // public void вылечить(int количество)6 V" j9 q5 r0 ~
  2.     this.health += amount;  // Увеличиваем здоровье
    + w0 t0 x  P+ ^, \$ [  Y
  3.     ; P& U; L0 V& X3 [" u! w5 E1 X$ w9 m7 j' W
  4.     if (this.health > this.maxHealth) {0 W+ w0 k6 X# P+ ?1 |
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    ) ~" A$ Q* g8 \" j
  6.     }- i, c8 l4 ^3 D& F
  7. }8 ]5 B: n" ^2 w" H
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    8 J& J: |, D" h3 d
9 X* u+ t- p, f9 }; r8 v4 m
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)% Q# \" `1 G& }" k: w' e0 G
  2.     // Логика применения скилла NPC
    " `8 u! N4 }" d6 G8 e
  3. }
    0 [; G* F! n* q
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    & o+ @0 z% W( m8 n! K) c

) L1 b, k) s; x/ q$ z

  1. 2 p' \( ?' {* @9 \
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    ) ^" {4 J5 s  e9 b
  3.     // Логика взаимодействия с NPC8 o( ]$ X- {5 g
  4. }5 V1 E8 Q5 L0 N/ h8 x( O
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    ( L0 _6 A. E+ x) U' @! w* v

  e5 }! W  E; u5 ~
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)' ~, Z% N, U( x/ B7 W
  2.     // Логика открытия окна диалога3 w- n3 \( J: l5 s
  3. }
    $ X+ {; {3 D3 t- k& f
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.: F8 m# B& Y+ t. A! i
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
6 e( |5 u! W! h$ Y" s1 n- J  `7 U9 g) V: O

# v4 V- k; b' M& u) N
! P. L( I( p5 |3 x) I
9 n7 f! b) c2 y2 O0 B
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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