Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
+ z7 y( ?, Z7 S8 [% }* S9 }4 A
+ |. C% E3 R+ N; f. m4 \7 A" D
, }7 {8 r: y  |  @, W* U: SШаг 1: Введение в классы и методы на примере L2j_Mobius8 w5 O( ~7 c. ]: S0 z5 h, `, v; H# q" j
С статьёй можно ознакомится в разделе Обучение > Читать
; b& U8 V) S! y# z  y5 q" ]0 l
! F  h9 `! |6 _: [& V$ UДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.. I& q  c; ?& }% K

# _: K7 T0 n$ M8 x. @2 ?1 rОбсуждаем:/ N1 V4 X. }% [5 S
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    / A2 d, o) ^* s& c9 C8 E
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!3 ]8 i+ b8 G0 ^. t

9 s! `# Z8 K3 f: g# A
- b3 i7 k6 ?/ U6 x& G, g
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
$ l$ X9 B7 S0 s  y5 O+ V& H9 `$ v0 c" [5 H

, P( r6 n4 D& y- o" I: _1 Y2 {. v- P, z" o
5 G, Q0 h! P- a$ U8 \$ N
- c$ t7 ]$ ^; \/ S  l3 q9 ]4 I# _( B5 o

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?/ @" f$ q6 V$ ~) T- y5 p2 }
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:177 g1 f2 ]2 X' E* |7 E2 J$ T! k) @
Почему мы используем ключевое слово this для ссылки на п ...

0 z5 E0 ]- Y5 E( m9 _- BКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
. K# ]/ h" c0 `0 L' E4 aПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.- x* C( B' M2 s# T4 J- P+ \, |

9 P  Y8 F. r% o4 kВот пример:( d0 }- Q) U) g: j" V$ S2 u% K
  1. public class Player {* |) m5 J4 c: y' k  {
  2.     private String name;
    " b2 J1 f  z; U1 n. G8 f

  3. 8 i8 F2 j8 w% M- g
  4.     // Конструктор+ e6 k! l8 ^& l2 X* G# t8 F
  5.     public Player(String name) {
    5 L2 \9 k9 x! ^
  6.         this.name = name; // Используем this для указания на поле класса
    ) e& t; n; Z; }4 ]) d0 Y
  7.     }% W( w$ y+ c& A7 p: Y( x
  8. & w9 @4 a0 x9 R6 O6 l! M
  9.     // Геттер для имени
    8 j7 P5 B4 q3 G7 }# @# ]
  10.     public String getName() {
    4 h# b' Y' s1 g& {
  11.         return this.name; // Используем this для обращения к полю класса: y/ y5 J& h/ Z2 X
  12.     }
    / K" f( o& S/ e; ]: L6 s: H1 b+ f
  13. }8 ~9 [' r$ V3 ?1 ^
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
! {5 `" z( E0 x4 W" P% I
' o' x" m) x4 [2 VКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.  H, D. l3 ?' N6 U9 w! f3 {  H

0 y# P6 m& N8 x- u1 a  _6 LПример передачи this:% A/ r& a" H9 |9 O
  1. public class Game {
    8 }2 i' P6 f& A: w
  2.     public void start(Player player) {
    9 X+ m+ m4 B! ]! ]4 H8 o8 m
  3.         System.out.println("Игра началась с игроком: " + player.getName());8 S, f$ ^4 a( a  I) o/ ^( Y5 K
  4.     }/ B1 |8 C& U  G
  5. }, Q4 P. D1 w0 b* m, g! m& B& Q

  6. + P/ P% W: U/ s3 t
  7. public class Player {
    / O! g' V; d$ J' v6 d
  8.     private String name;
    2 q# F4 o6 b  y! N1 Y
  9. , G% s, @8 G6 o1 H, O% s& }- k
  10.     public Player(String name) {5 o7 F* z  t1 g% P$ b" Q
  11.         this.name = name;4 j6 K/ X" q9 z/ o
  12.     }- N) f: E; y1 `. I

  13. + U) G2 p# B0 ^, \  h
  14.     public void joinGame(Game game) {* i( S  C" a- V$ N( `% D8 d
  15.         game.start(this); // Передаем текущий объект Player
    5 N8 `" x( c+ X4 W" T, ]! A
  16.     }; [* `( |! b% j' s4 v+ p& X9 c
  17. }
    : T+ c. r! D0 x3 t. p* u, K+ o
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.7 M+ Z: b4 q- t! S) Z2 E

7 P4 n3 s5 `  P/ o5 p1 W
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
9 {' c6 c5 _: C2 X; H4 H
+ \* l, B' e0 U( F
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! 1 \8 l1 Y% \; v! B
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 ) J: D  G7 u* |7 o
Mike123 опубликовал в 2024-10-17 20:056 Q6 V0 p- t# m
Добрый день! 7 B# ^5 u8 ^6 N; ~5 M
Как создаются и вызываются методы в Java? Мо ...
1 b% v  u$ ], z8 W
Привет, Mike 123! ?, B/ @& s3 A. B6 t( r
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
6 w; N* `7 F! P) [* S* s7 y
0 R: I* ~. h/ w0 B' \Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.* M# {1 r3 L, b9 A
" _( `6 N; s. e) V1 c- l
! |: L9 B$ F6 s9 |2 P- ^+ y
Как создаются методы в Java?2 \" A0 E( @( F0 x) R

9 M, _/ s1 A: }4 T0 p- qМетоды в Java создаются внутри классов. Вот базовый шаблон метода:0 P5 t4 y; {- Q( g

0 B  ?5 @) }/ ]  d4 m6 v+ z9 f
  1. public returnType methodName(parameters) {
    / }  |7 n9 j* w% j0 i& U, P7 U9 [
  2.     // код метода
    4 w" |/ @; A- g; ]" p! @/ b# f! o0 _
  3.     return value;, ~# L9 C0 b. [5 g& e' h6 s. q
  4. }
    3 H7 x3 v0 Q1 R
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).: |, F0 ?) K$ `2 [9 c  d/ p- l

/ E$ t0 O0 f& _0 H" V. t4 JТеперь перейдём к примеру.
4 i" M5 t% o* p4 T& G8 w1 w$ d
; l7 A6 H/ O  ?8 V! N1 g! ?Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода$ U3 ~5 v# \7 e* k8 u6 b3 t
  1. public void attack(Npc target) {  // public void атака(Npc цель)' |; L) `/ u' ]( R" T" X
  2.     // Вызов метода атаки NPC
      ]# E; W, B+ F* x# P8 \6 W$ Z
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());. \! \6 H' U; V0 i
  4. }
    ' v: F/ G9 f7 A( [, F
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
: M, L, P0 \* D! B2 \2 t) H, i9 J
0 g0 b$ M, \- ~4 [/ [# @& Q9 T; z: t/ O
Класс Npc.java — вызов метода9 h6 }# f0 s4 r7 ~# Z, }/ a+ m

; H& ]# ?" j+ z1 r. ?0 Y2 O  R+ `& [  Q
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)& Y$ Q( S; T% h' q% I0 @; |
  2.     // Логика получения урона NPC& L1 H! L+ g( W4 e5 U6 t( T. m
  3.     this.health -= damage;  // это.здоровье -= урон;; L  S. O7 t6 r/ @
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  / u4 }; ?8 T/ [: J7 u% A
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());+ Y3 ?% ^) q* Q6 C- i7 `
  6.     8 f* d$ ~: d2 y& x2 |! V
  7.     // Проверка на смерть NPC, Q4 ], v) C: J: O+ O
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)/ w' T) ^: W/ W6 {8 O! _5 g
  9.         this.die();  // это.умереть();
    ( d' H7 n; K9 [
  10.     }
    ! Y5 ]; f. K. E" s) n
  11. }
    7 Q# d0 A. ]- |. |% Z  v
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).: |! N& P3 F: E# [
Пример взаимодействия (с переводом)7 X2 X2 I6 B/ Q% s3 C" M
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");+ _/ o% s3 A2 ?: X' f6 T
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");9 \; c, d1 {0 e  F! O! J8 a4 T
  3. 3 g( e' S; \/ E" k& v0 q
  4. // Игрок атакует гоблина* B5 i- T) e) a. ~; ]. Z' M- s
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    ; h0 z" w1 x/ G  Q: X
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 8 b' x3 K- ?5 D6 K
- ]+ U5 H' ^/ L: s: _, {$ `4 ~
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.& u# z* m, H; q7 R1 h# m' P
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!0 u" Q6 Q9 j9 V# N; {2 }; U* C

' L  L+ d: b4 Y& J& X
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
6 T- y% Z8 j- [5 `& P2 Y' n8 rПривет, Астралия! Огромное спасибо за твои разъяснения ...

' A7 O. C6 M! P1 H) A- QОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.6 m$ `* m* x5 n3 A% H" |& w  H
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример; @& a5 n& S. t: u( c. o
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    ' u8 O7 u4 X7 h3 R8 ^

. h5 f, {$ r6 _
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    $ Z9 z( H6 g6 q7 {$ t5 f5 t) X/ [
  2.     // Логика взаимодействия игрока с NPC
    ; Z( x9 i% ]; H
  3. }- r5 N# L! {+ ]# s8 C2 }# t3 @8 h
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:7 e' H" b! H9 L/ Z1 u" n! y

) j8 f9 y( m, D1 u# ^) H
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)  d# K2 C, s  T. M" t0 |/ w
  2.     // Логика перемещения NPC' v9 s- d  Y( L* T/ i
  3. }+ l$ V! S' N' C' z  d
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:3 V( I/ b/ j; G( g

; K- P; H8 F$ A; l9 W/ s
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример+ X, m* \$ r( _! b+ C1 W3 v
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    & }/ @! L) J5 T
  2.     this.health -= damage;  // NPC теряет здоровье* ~4 f7 }7 B! A% S5 t' s7 W
  3.    
    $ h6 B( ]! F5 q# F+ R
  4.     if (this.health <= 0) {# J# p% P8 }( L5 R! R2 F% }' i
  5.         die();  // Если здоровье упало до 0, NPC умирает# x: ~8 _: [$ Z% N
  6.     }9 m5 W- S6 u$ M. @+ B5 l
  7. }1 s" B5 H# o. F6 L
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    ) v, K% u; F: Q; ]0 I( E

) k) r- e, s' Z+ E; a9 Z
  1. public void die() {  // public void умереть()/ i7 {! R. ?$ ~  u- e
  2.     // Логика смерти NPC2 n# h" O# n* a
  3. }
    ( W: ?. {; T5 L+ X+ N
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:. q% V3 V. T+ ]! f8 H2 t. ~- f9 g. D
' c# X; A# F4 D! R
, W: W, s4 {2 j; `
  1. public boolean isDead() {  // public boolean мертв()
    2 I: N% E$ H! P6 |" H# R; j7 o
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    9 P3 E, [+ V) ~8 E; {
  3. }0 E  K, Y" a; D6 C
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример! Z$ N. n- U7 Y- R. q7 M! F
0 m: V$ O( N! |/ C* B
  1. public void heal(int amount) {  // public void вылечить(int количество)8 M! V) z4 q* I: I3 b+ h# d7 ]
  2.     this.health += amount;  // Увеличиваем здоровье4 L' V' V. d2 h/ ~' ~3 z. f
  3.    
    0 e9 y9 b6 `/ Q$ G3 Y& g3 R
  4.     if (this.health > this.maxHealth) {
    7 J# `" }/ B& ?- D0 U) v) s
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального7 y' ?$ j' V9 ?: L* e
  6.     }$ o3 z1 x. X" P4 F/ M5 W$ X
  7. }. x6 M0 M* ]- G3 t) ?2 |: c% y, A
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:- v# v; [  I- S4 l; ~
  `- b0 U3 q1 t6 Z
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    # K( w2 k7 g; |; H& e4 \
  2.     // Логика применения скилла NPC$ @# a7 z6 S' E* T+ V5 ?+ ?% C- z
  3. }/ S$ q  d0 N8 _, x. q
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    ' _, a: k- l/ D  }: [% w8 m

+ x4 |3 O7 R, O: s8 a0 m7 i5 R

  1. $ ~% l9 U# L$ Y3 F
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    $ h4 J. y# @9 l1 C+ _
  3.     // Логика взаимодействия с NPC
    * ^2 U2 G. ?( y7 {: q+ Q" z
  4. }* P! w8 [; a  }. K/ g' v/ S9 E
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:! t, R4 n! I' v# y9 }# ~

& m! ~* x) E4 P  l2 M( n
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    ) e# ?2 }0 b" ^/ l; U* }, u
  2.     // Логика открытия окна диалога
    % i, X. t# k; }$ v6 Z& S! I
  3. }5 }) a$ i" O3 g. p4 q2 e
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
+ Y& {% b. i/ HЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!# `: }$ y  m" P* `9 C+ D
: w+ @6 M" i4 D( Z) P
9 t1 _# h' ^& d$ h; E/ I! t
2 d. e, G0 R' s9 i% }, F9 V3 l

; m; l4 a) h  K& P5 D' n5 L$ F; C  o+ o
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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