Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 % @6 _( _1 T% j2 A3 w- r* [
/ Y3 Q. y% `9 ]2 I: }2 S' A8 k
* K# X3 |* `* G$ o- h
Шаг 1: Введение в классы и методы на примере L2j_Mobius" s$ ~7 z9 H, A9 M+ E" A
С статьёй можно ознакомится в разделе Обучение > Читать4 z3 k' U+ y2 a' c% M/ X/ _

1 ^' c( H/ N1 L8 B1 ?3 oДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.. j& V+ l2 O8 i0 `# P* T

; o+ j+ s0 g4 f( cОбсуждаем:
! C: V- d6 a- W% M, h4 G( Z) x
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.: X& p" A6 V! K; A4 g9 ^* Q
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
) _, G7 z# _  R  `5 i" \5 y, b1 c8 ?+ u% F

6 {- b1 D0 L( T/ u# q
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!3 \$ _0 V% i/ z2 c" _0 Q( y; Q
+ \8 n3 M' b% N9 |8 q6 q8 u- K

4 ?" U  q2 X! o# p% H, I
2 W7 v# d3 c) h- z- y( x3 f3 `3 q# U* d; z& I- H/ K

2 x# T: V/ i6 n4 z

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?- P/ b& g0 d) d% `/ p& ?8 \! A
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:174 Q0 n, {! [- M& {
Почему мы используем ключевое слово this для ссылки на п ...
" X- e7 j$ f1 r. ]; u: R
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.! `- L; Z& ~' S: _
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
: N* G5 u- f# }0 J$ q- S9 P5 s+ |9 h9 [2 G
Вот пример:
; S$ L2 A( N: {* C6 \
  1. public class Player {9 k! B4 c+ W4 I5 Z5 Q6 O8 y- s
  2.     private String name;+ v* ]. J' a* `6 U: a3 u7 ]
  3. 8 w/ m& c9 F* q' @* v/ i! T% L
  4.     // Конструктор
    0 R1 o, e9 [% R
  5.     public Player(String name) {& s* N7 E+ L7 T; e9 I
  6.         this.name = name; // Используем this для указания на поле класса
      r; e) j1 d9 x7 d3 y7 w
  7.     }. s! j* z4 m% j1 G4 h. l

  8. 6 i- H, Q) }5 r, ]6 U
  9.     // Геттер для имени
    9 y( c! a4 q/ Y+ |0 u, U
  10.     public String getName() {/ S: y+ n! D6 B1 W1 W
  11.         return this.name; // Используем this для обращения к полю класса; L$ G3 i! v, Z3 K
  12.     }
    , `" D. f# m+ U0 a8 W" w% r
  13. }
    9 R0 j* `9 W/ s2 P$ R! b
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
- `' F0 f; [( Z
6 ~# |8 |* X1 P( Y$ T: f& R7 x. dКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    % g8 `( n" n2 H1 a/ O0 z/ z

- L% X( @2 j8 V; X- J2 IПример передачи this:
4 L7 V7 P% D2 z6 k" l
  1. public class Game {# c/ f' m/ q# {; K
  2.     public void start(Player player) {8 \$ T% T6 H, p
  3.         System.out.println("Игра началась с игроком: " + player.getName());$ p0 h: S: K& d6 t% t
  4.     }
    ' j! I% C3 Z' r9 o
  5. }( l' g' y" y" l, l0 |

  6. & _' j. Q/ s9 @6 A- A
  7. public class Player {/ ^& Q" T% @' O9 R  P. z
  8.     private String name;
    ( m3 l' ?' E. p- o' ]

  9. / Y, L7 d! N6 Z8 _# `' \/ C
  10.     public Player(String name) {$ B4 K; w4 j: X
  11.         this.name = name;
    : H5 H2 D7 _6 j1 [1 r
  12.     }/ W5 P2 q3 `/ e& b$ t% P  R

  13. " B5 ^% u" p$ s4 ~9 {0 E7 g
  14.     public void joinGame(Game game) {
    1 A: @1 E" F# i- H" T- R
  15.         game.start(this); // Передаем текущий объект Player0 Y% F+ v: b( l! p
  16.     }
    $ V- k  q+ _: B* R5 H. ?4 g1 t
  17. }% U; |0 n1 `* _/ A3 r
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
* v% z1 F6 s- D6 F: ?2 J5 H
( {, s. {4 a; f- j/ {& {# {/ F
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?! a" p8 c8 j( C0 Y5 J+ L
+ Z, Y6 }" Z3 E8 ?% N
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! ! E8 @7 R2 X! y- y
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
5 F4 L/ R) b& f0 f5 h# k7 }. e
Mike123 опубликовал в 2024-10-17 20:05" o' }: J# X) c% \9 i' x$ m$ M! N
Добрый день!
$ h( k' |8 h* ~, PКак создаются и вызываются методы в Java? Мо ...
. S1 a7 z5 E- H
Привет, Mike 123! ?! R3 K$ o2 ^( e, o" y2 w
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.4 _( K. i9 s: A4 `4 p( |% @
( T' a7 W! ^3 Y8 z: N) X
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией., ^8 P4 Q! _" y5 Y* L
& O6 \' ~! M& a! F& f; O

. U. D. \( x, `5 d; ?Как создаются методы в Java?
* v' h3 k9 A! J& h, x2 R1 G* ?5 o2 L7 {3 K8 C* x
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
. Y% }! t+ P) T
- l$ i$ D3 \4 F2 X9 Y8 K
  1. public returnType methodName(parameters) {9 E- Q2 x. b% c! B
  2.     // код метода
    + F2 A. H1 o$ r2 N) N$ t
  3.     return value;" l1 a1 k% W6 `0 h# x! g% G1 M0 B
  4. }! ~8 E# P. Q2 X* `, k$ T
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    , x# ^, G) L3 T+ r

; ^  P$ \; S, v* E* w9 VТеперь перейдём к примеру.
$ L2 L7 V# s9 y/ W/ a: Y- \, L* v1 T% {" i2 A3 R& o/ G9 F. n- `
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
# L, T& J% O2 d  K) z( m2 V9 s
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    & L4 o  n( P7 r, `
  2.     // Вызов метода атаки NPC
    5 Q& E: ^, F! k* X1 M) q: h/ S
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());" X' z3 h+ N, g* k1 L7 v
  4. }
    1 g% r0 X4 g7 Z( o* p0 J
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
$ S- a; Q, {9 d! k  F7 @
# M# T. q9 R% h+ w- v/ [* D; W& q% Z& l( P0 W, S
Класс Npc.java — вызов метода
# I6 }5 R+ p( u9 B  i; U7 ~" Y' @' C1 c0 O- e) A3 F$ z
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
      }  C2 i/ K; G/ A6 T% a
  2.     // Логика получения урона NPC
    9 C5 X1 v  P6 r" X0 x  }& D9 o" T/ n
  3.     this.health -= damage;  // это.здоровье -= урон;
    * r3 C  a( E+ n1 Y' l) w) h
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  % X6 p" ~* t2 Q3 w( e
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    3 q3 l* l' k+ M4 i( R/ @
  6.     . ]' t. @+ K. U/ ]: x, k5 h0 s
  7.     // Проверка на смерть NPC
    7 X- h7 `/ \2 w: e$ L0 q# M: m
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)$ N. f" {; H# H
  9.         this.die();  // это.умереть();
    ! S  l  o# ?# i0 m4 ~. A
  10.     }
    1 V, G; C5 |5 p8 B1 E
  11. }
    & t8 a5 y/ ]" g5 R' I
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    % v6 D9 G' @, Z; D6 j: z
Пример взаимодействия (с переводом)/ ]' ]  F2 q5 B# ~
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    : l* [6 v& ~) ~8 W9 S
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    6 ~2 _1 C7 s7 x% `) n# e5 F$ |: X

  3. 4 f4 P9 T$ ?/ P- K
  4. // Игрок атакует гоблина$ O) y8 D2 K5 H
  5. player.attack(goblin);  // игрок.атаковать(гоблин);1 F  X7 }/ l+ [. _$ X& l9 O
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. # t" k: \1 M2 Y* ?' d9 ]; Y
9 M' r8 y7 l; e' I
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.6 F' ^( t% P4 ?
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
/ h0 J, P( d# k, ?/ K7 C1 v2 R
6 o! c6 _( `- n" a
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:307 S9 Y; y4 H! g, f* H3 Y  p
Привет, Астралия! Огромное спасибо за твои разъяснения ...

7 I% T  n" |* ~4 o6 W, z! C! G: LОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC., M8 ]/ V9 J; X. |* T1 f* z$ @
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    3 _# E+ C7 Q0 p2 D
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:) j  H  n4 L; k. t) @

) t% ]3 B' x: |) t& q
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок); c1 u; @' l6 \  R7 j
  2.     // Логика взаимодействия игрока с NPC, H5 R7 X7 @. Q. M
  3. }5 X) \: a: T) I; T
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    7 b5 E  T3 m6 X6 y

' A: Y3 \" {: m/ L- b* K% @, [6 w
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)  f; o2 i; c3 ?! ?5 h" w
  2.     // Логика перемещения NPC
    $ g% N+ r3 @* C! v
  3. }
    - M7 r/ o0 c0 O+ k- Z" v
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    9 b( ~. A- Z& u  J- @9 f7 t
+ r) Y8 Q9 `2 f2 m
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    + e2 b6 F2 Q" k: @) q
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    9 L  ~, u- a# Y: `( F( M7 x
  2.     this.health -= damage;  // NPC теряет здоровье1 Z+ c/ s* N+ ~8 k
  3.    
    6 O0 \) n/ Z! m7 V( c" E$ N
  4.     if (this.health <= 0) {) a& e) x. q$ E* f+ `( p
  5.         die();  // Если здоровье упало до 0, NPC умирает% f. n( o# [2 n0 _. T  u
  6.     }
    # o- l/ `$ K% |4 t
  7. }
    + f0 Y; j/ \9 @
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример! Y# h; S) C; C  Q/ L9 c

" P* C% _4 @1 z$ x  l. |
  1. public void die() {  // public void умереть()8 @3 x2 n0 a% J6 ~2 N7 Y* z6 }% b
  2.     // Логика смерти NPC. D( u1 `2 E1 \3 C& C. T9 _3 O
  3. }+ `5 w8 c* h5 l3 B
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    / C6 m5 v, V9 O/ D# J% ^% L

7 B2 V8 H* o; t' X7 O( I( X6 C" p* ]8 g& m; l  ]6 ?1 ^
  1. public boolean isDead() {  // public boolean мертв()
    6 H9 z% _) x. q
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0, Q/ z$ S7 s- r* e$ G6 F0 P
  3. }, g  u, E/ N3 v; f) F
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример9 Q( ~. I* D0 c6 ]* t) g, Z

, P0 P. J7 a5 E( a# X- O/ P
  1. public void heal(int amount) {  // public void вылечить(int количество)
    & ^  L0 w) b+ a) \
  2.     this.health += amount;  // Увеличиваем здоровье
    * `0 O/ Q4 e& u0 u9 |, P+ k
  3.     0 H5 C) o4 T4 R* h  ?6 Y
  4.     if (this.health > this.maxHealth) {
    $ R4 I* e! \9 g. ~. W! v5 C+ T
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    0 O% u0 K: ^  H1 k6 H) y0 H; J
  6.     }
    0 c. [9 }- q7 k3 V" J* e- u. [
  7. }
    8 y* ^2 Q8 ]/ Z/ p
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    $ R5 {6 R3 s% O4 A: C6 w9 I5 _( A: \

: S. L3 X3 T. k
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    ( W! L2 i2 W+ N( ^
  2.     // Логика применения скилла NPC& l" J" Q! c+ ]1 _0 z  b0 @
  3. }: B+ t" G& [, ]' d
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    9 U/ n1 w5 \1 H  W* q+ }! a1 ]0 m

7 ^8 b! L. d6 u& w) ~8 P

  1. 0 e& G# ^5 J- r
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    8 u8 p, \: o  ^. t  o
  3.     // Логика взаимодействия с NPC9 B: [1 G- b5 N; T3 y0 g% s1 t
  4. }
    ' h- O' }& S0 C8 a- m) z3 [. Z" e: b
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:+ s) P" W' \. }$ N: }
9 p% c! p5 n% d7 _7 _: ~0 h7 g
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)4 q7 r! s+ b7 P/ B" n4 e
  2.     // Логика открытия окна диалога7 z2 k) Q1 Z+ z7 R' ^) w
  3. }8 E. z4 K0 a! p: Q" E) ~- m+ a
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.1 B( t5 {5 U6 L! i- m3 w, |, _
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!9 f5 S( e1 [6 E- _9 ]/ }
3 R8 b+ C2 i/ c

. j$ f! o+ _# L
  x' b% u( L' x9 w7 ?: `- \' k
& @2 e* q" k# m, p& [4 R1 W
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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