Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
# S' l. J' P; h, c7 }7 e8 l/ \, l6 q$ e: O  i
8 Y7 Z0 k2 `! u- g
Шаг 1: Введение в классы и методы на примере L2j_Mobius
6 x1 `, M- o$ h: F4 p6 QС статьёй можно ознакомится в разделе Обучение > Читать1 c& M. C) S  |0 w! H. U( }/ B) }
  W5 G% P: }" x; x5 O+ b# {
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
1 e! r: D9 T0 X2 N$ S# p
/ U" z; [) w0 V* G4 R' y& XОбсуждаем:
6 Q1 ~5 e  Y: K  t' S6 `& U9 E
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.% s' S5 k% F6 V9 o! X/ q, {8 W1 a
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!9 p/ Y; {  P- `6 V& x

9 S+ n3 X) W) ~0 |, z+ H" c
: R4 R8 t) n! }" x* a
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!: z6 _: {# L- C  v" m. _, b7 I% ]6 A
3 C+ g1 [2 d1 A' U+ B. F' {

8 I( V& t. x5 f$ W
0 l2 t* s" h, l' W$ J4 ^' M; p7 {8 g9 X$ s1 J$ P( }% E

) [. H/ R  l! i3 B  c

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?# H' E8 B  g5 C
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17* i  i/ K+ t+ ^7 T7 H
Почему мы используем ключевое слово this для ссылки на п ...
( R( \# O5 {; V
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.  }* A0 M$ ~3 p2 {% A' E; ?; m
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса./ T1 v( i1 E" Z# x7 Q8 c
: C6 d& k7 c* d' c$ a. B% p' r
Вот пример:
5 }/ k$ \' Y6 u0 m' g! X
  1. public class Player {
    1 x4 \6 w* [( A1 ]$ q4 j
  2.     private String name;& y( {- G$ j& T3 H- i

  3. : T- d5 o+ C; W
  4.     // Конструктор% l: x3 j7 _9 b0 N
  5.     public Player(String name) {
    ( y! C5 m4 D5 G2 [! V# D$ M, q
  6.         this.name = name; // Используем this для указания на поле класса9 e* N0 D4 _/ g6 K4 t
  7.     }. h- E3 e- l2 Z- I' ^+ Y

  8. + I& @" a% `' p9 H6 }0 k! Y
  9.     // Геттер для имени
    % B+ C! h" b9 V" |. h% r0 k
  10.     public String getName() {* J7 _* ?. A' {/ Y9 Z
  11.         return this.name; // Используем this для обращения к полю класса
    & X. q2 l' D' o# N# o/ C
  12.     }
    0 D5 U) c" _9 Z: D4 c% y- s! H
  13. }
    ) y4 [7 j8 ^- k( a1 {  Z
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.! @' A9 [9 g5 P- |, C5 U- T
6 _' I9 v/ C' ~( R+ @
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.3 x. l0 A- Q% N  @$ F4 ~0 F

* o9 X; d( P4 V3 NПример передачи this:5 j, F  o+ n- x1 J2 z+ s# N, L6 {0 o# ]
  1. public class Game {
    ; U6 P. p1 B+ z- \4 z+ u3 G
  2.     public void start(Player player) {
    - v$ S  X' X2 t/ @
  3.         System.out.println("Игра началась с игроком: " + player.getName());3 H! [/ g0 ]8 d
  4.     }
    2 t$ W3 s/ h3 M3 S" r( `
  5. }- S7 g; g, Y4 k1 i: W; X; z  T
  6. 8 j, B/ k6 i7 ^9 q4 J+ Q1 x& Y; Y% R
  7. public class Player {% F6 Y& z  w4 q" m
  8.     private String name;
    2 H: ^" V& a! j
  9. % S$ b) D$ d8 E6 F1 g0 x8 Q
  10.     public Player(String name) {6 k( o. J& j3 e, Q: r9 {
  11.         this.name = name;* f. s5 M8 R9 T' s3 z. z
  12.     }
    ' t* {) b. d# p0 r

  13. 0 X2 P1 n2 y, A: e4 p% X* M1 m$ S
  14.     public void joinGame(Game game) {
    % I* V3 ~" R+ {" N' Z" @
  15.         game.start(this); // Передаем текущий объект Player& p! U8 w# `0 X. n5 r/ f. i" B
  16.     }
    - v' s& {* B/ j- |0 S
  17. }6 X& j$ `# m8 P: u
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.2 ?+ k# C0 v+ b1 l$ e

9 }( a1 p% X9 V9 f7 h, `
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?2 H! u3 c- Y" W
9 v. E! e) Y  }/ _
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! ( g9 l" X0 c9 r& S0 H+ G
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 6 t5 U" q% D( p+ R2 k! v; N, A
Mike123 опубликовал в 2024-10-17 20:05: `* Y" O* }( G0 p6 Q- B0 w
Добрый день! / w4 |/ J5 T! s
Как создаются и вызываются методы в Java? Мо ...
+ Z6 \; Y; u3 W9 `
Привет, Mike 123! ?
# K& i) o2 |0 }/ [Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.! C  N  w3 o" v, X7 i3 _

! `3 f, v2 W. O! Y* LДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.' M) h# |! j' }- w+ C
8 Y1 q' Z& n7 i$ {% {
$ S8 X' u( m: u/ o: w/ w' _( W
Как создаются методы в Java?
* J% \9 W3 m7 I$ P* M1 Z* t" S6 {& v: w2 {# r/ _8 Q% O
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
, T" ~% }  _" ~. Y) D$ b$ z( S! w$ z4 @$ i2 D
  1. public returnType methodName(parameters) {
    ; ~0 [, D. i6 @/ a# m0 g; O* }
  2.     // код метода# ^4 i! f5 p7 j/ U
  3.     return value;
    - t7 |5 \$ j% t8 q
  4. }: T' h. l  y5 P" D
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).: q& O7 u( E+ d4 j& w& y
$ W- E0 \! O; S" Z( n% S. a: u# Y
Теперь перейдём к примеру.
' ^9 H8 G& o# v1 U9 o
2 v5 K3 t. `) ]Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода+ o% W6 E, @: @3 m
  1. public void attack(Npc target) {  // public void атака(Npc цель)6 d5 S" ?' p& K' I) S7 m. K- m$ _
  2.     // Вызов метода атаки NPC; E! n9 }! R: d- A$ L5 P1 v+ F: D
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    ; l. ~: L- L2 J3 z* i+ v4 Y# ]
  4. }! t: y/ N1 a' C- w3 ^6 h, s
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).2 u+ X% Q) W9 A0 I$ I# W
# P3 K: Q0 j) r" H3 k
5 x5 D8 I# ]: m5 B
Класс Npc.java — вызов метода! [  C& o# [0 B* G8 q1 R
' m  T$ ^& k. g% N' [, a' Q
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    / c8 _; K; \9 ]: x# c
  2.     // Логика получения урона NPC
    . }, M! |$ @* D
  3.     this.health -= damage;  // это.здоровье -= урон;
    5 [: ~" _' m& {& [
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    ' Z( _& k5 w- O- W
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    2 |8 T4 Q/ \, o
  6.    
    : ]  ]: D6 V7 K2 @# ~
  7.     // Проверка на смерть NPC
    7 H( y, r. S* i5 @: o
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)- u& n! T* ]$ R+ K: Z- d0 D$ D
  9.         this.die();  // это.умереть();
    ' N( k4 J" _3 f! X6 i0 r
  10.     }
    2 Y# `% @. P% Q1 _
  11. }
    5 z+ v& N# [( ?- N# x6 H: e8 [8 r
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    / B+ V5 Q3 ~! r+ v( y
Пример взаимодействия (с переводом)
; J  `0 f' L% R& i+ H
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");6 ^4 o: w& g% }3 `) Z: h# w, n: Z
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");( I- J- k1 Y0 j

  3. 9 x  n: f! \" s3 V% H7 P: j0 T
  4. // Игрок атакует гоблина% h4 t  ?  m5 Y2 {8 D
  5. player.attack(goblin);  // игрок.атаковать(гоблин);8 I; H/ L& P" }, d- |: V5 x
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
8 m/ k3 a/ H4 S0 d; Y7 O" e
! n' H( J, Z6 r6 O1 J" d* n
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.. m$ u. u% u8 ]  J4 Z. P' {
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!6 R3 k$ @$ T7 V3 i

4 r5 i( Y+ i% j/ R) V9 s  O2 W
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30- r- [& Z7 Q: L: \/ i
Привет, Астралия! Огромное спасибо за твои разъяснения ...

5 p1 T% q( V3 b. K: k9 nОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC." l: X5 {+ }8 d
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    " W0 h  ?8 T  k( c) ^
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    & l  ^/ j& J. D/ G; n" R

5 z; B# v+ ~' ~# T% f
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)- Z* Z/ x' B# s9 ?
  2.     // Логика взаимодействия игрока с NPC8 n. t# o, {$ F% J. x
  3. }; E; z, U6 _2 q: j8 y
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    ' d% e5 ^6 M1 h, V1 {6 k2 P

8 s" r  ~. ]& k: U4 P1 N3 M2 n
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z); z: @0 I3 I9 Z( I; R2 @
  2.     // Логика перемещения NPC
    . q9 O* f+ G4 {  q
  3. }
    * N/ a1 g" e- W; O2 h- m1 U
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    8 V: w9 h2 O: }

# ]( _4 f$ K( T9 X4 y7 ^. ~
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    + l$ K4 N! I5 k% z6 Q
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)4 S) w6 V" ]4 i: U- Q" Y
  2.     this.health -= damage;  // NPC теряет здоровье
    ! C$ t0 Q- Z8 V# Q# f
  3.    
    6 m4 ^0 M/ v4 ]( v* K" Z
  4.     if (this.health <= 0) {
    # |. u! i0 {! |3 a* K
  5.         die();  // Если здоровье упало до 0, NPC умирает
    ) J' c1 U4 ]5 D0 K5 N: D
  6.     }
    1 m+ h& U0 h2 v  e, _1 E: D
  7. }2 ~$ ?" Q' }% b9 R$ o
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример5 i! j( E: s/ `. n6 j

/ |3 B: U. k1 f3 p
  1. public void die() {  // public void умереть()3 \7 Q5 g; t% _" Q* C
  2.     // Логика смерти NPC5 U9 `1 `2 x( b. P% P# I' n
  3. }
    # K( `" n% X$ ^4 \
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    : |0 g$ X5 A  R
; h: g$ n7 U& q# _

1 K0 T: @& ?2 `& s
  1. public boolean isDead() {  // public boolean мертв()
    / V) y0 }! C7 p, p4 ]2 }4 e5 ?5 K
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0! r) L  R3 R7 G" k+ Q
  3. }
    7 q% Q: n* x  f7 X
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    % a, ?5 {5 w$ g9 ^2 Z9 n

; N  ]' i+ y, W
  1. public void heal(int amount) {  // public void вылечить(int количество)
    ! Q& z9 |: O& P3 }+ x3 L6 x
  2.     this.health += amount;  // Увеличиваем здоровье
    1 v' Z% r( ]$ r
  3.    
    ' ?! h* R7 q  D8 t0 ^
  4.     if (this.health > this.maxHealth) {$ }. D% m3 K* v: y& h$ Z0 P. W
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
      b1 M4 |9 {. V: B
  6.     }6 _$ r1 K" ~) A* E9 c1 D. Q7 D
  7. }
    6 [) y% q/ n9 S+ ^3 I) {
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    % K7 U8 i; C$ y" ~- N. x; P, N  a+ U
: N( `9 t% c& e! D( L
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    ' V1 S5 l, G/ N7 U
  2.     // Логика применения скилла NPC" v, c* r  @9 W% P4 l3 J. V/ H
  3. }) {' l- D" a$ [: [
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    ; I" v  j' f$ {5 b0 D

" M; E% b6 I/ F( G

  1. ) A/ ]- F+ A" c7 C
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)1 }( k" q' K: O$ p# G
  3.     // Логика взаимодействия с NPC
    + E7 T1 T8 \! Z; z
  4. }2 w3 k* S5 Y5 a" `, C9 D& q& X6 ~- x
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    & M! o. `+ O9 C. @8 V* g! P2 f. \

$ @! P6 p, ?5 Y: F. ^+ S1 M
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок); O1 ~2 B8 J# x8 U  _# A
  2.     // Логика открытия окна диалога
    ; |3 Z$ L# B; I4 H" h% t' ~
  3. }  ]* p$ B1 h0 \$ y- d! [
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.) F' g/ E) s' }$ i/ P
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
7 G; f! ]. l& X# ?- S; P5 j) f, i
! l" g$ ~% i( M: X! Z

6 V; t) y" O& ]; P( {3 k% j  E$ W8 j
6 ?5 m, K4 o9 t& x; \5 W9 E# E
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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