Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
0 e1 F  K$ e4 l7 P' Y( Z
3 v% y0 H  ^; q: T# c3 h5 e3 Q# k! F0 i
Шаг 1: Введение в классы и методы на примере L2j_Mobius
4 h0 R! }, C, q; n) FС статьёй можно ознакомится в разделе Обучение > Читать
  J9 E% `* u" I# K
* N0 R6 p# s$ ]) R. [% r* ^* kДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
: i" `, v6 |, j/ e. ]# J' Z. E/ @: b4 ]) t+ n* t* {0 N. `* w
Обсуждаем:
+ [0 M# ^8 y/ F  P
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.  a4 t4 l6 B" O7 q+ I
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!4 q9 u# `+ u: i. G7 ]4 l

: a9 E! |  B4 j4 k1 X! @! x

, f% _2 X: h4 Q+ TИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!4 y% g- {$ D/ }6 b" }( F
; N0 L; ?* ?: D
  _& q! p; q$ D/ i% }  N

5 A* X/ @' D( j4 A6 l7 x" Y' i. _6 U/ y/ W

! k% b' P6 O# j, A! C

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
# J: \- Z2 h' Y  p# n& A
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
; H' K  r# ?7 DПочему мы используем ключевое слово this для ссылки на п ...
  v+ j( Z& `1 @8 P- P! `; _
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
' {9 }+ H- m8 l" i% k% w% p  ~Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.& F/ |3 _+ O1 y" a1 F9 M9 T

! B+ A1 S: O! z8 Z- |2 L, \4 lВот пример:
( s  F8 w  [* r$ x3 j! E$ p
  1. public class Player {( g3 G* f- V, X. U/ J8 T" x5 ~7 o3 D
  2.     private String name;
    5 I' u! f8 n1 _! ?- y) d9 [: |2 e

  3. 6 s5 h8 @( d  E7 z( s9 u
  4.     // Конструктор- B, d6 y/ m' A: {& J# p
  5.     public Player(String name) {+ t- ?) m+ n: `# A2 ?2 W) Y1 p
  6.         this.name = name; // Используем this для указания на поле класса; K7 I5 K8 @# N, _
  7.     }
    - K) o) H' ?: d6 T
  8. 5 T& y8 \% F2 \
  9.     // Геттер для имени' j; Y  e8 U2 P4 v; w4 g+ C8 _
  10.     public String getName() {
      Y" u" E7 D, `- y5 K) v* e
  11.         return this.name; // Используем this для обращения к полю класса
    - @1 g* f8 r6 ]
  12.     }+ a5 L2 q+ W- i& {: L7 J$ c9 Z( i
  13. }
    ; J' Q, T+ W: Y. L' y. X
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.' z# ^; a' p5 {5 `, f
& T; p5 A- y- q9 _- I
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    ( w- T, g( z1 J1 h9 Q: E1 ~/ C; K
: S% {9 ~- d+ c
Пример передачи this:% c' N. o: x2 t) ~8 t* D. S2 O
  1. public class Game {
    : @8 J9 Y; Q! b6 c. P( b; {3 k
  2.     public void start(Player player) {, I3 @. R" H; Y/ b% J$ I% B8 R! ?
  3.         System.out.println("Игра началась с игроком: " + player.getName());
      L' ]$ O& g8 o$ F( g
  4.     }
    5 S$ `* O9 ~! H# x" e5 ?# D: a
  5. }
    / {* s; N7 T. W( g1 M
  6. 5 j/ z' [/ s8 g
  7. public class Player {- h  c$ P& P* B9 {
  8.     private String name;" I' z/ Q% k( G6 k, k
  9. - U7 l; ]- D! V/ e2 \# I9 q: _, n  s
  10.     public Player(String name) {4 k& j' ?! r9 Y* Q  z
  11.         this.name = name;: D6 \2 _2 P+ a4 i
  12.     }+ w) X( R1 e& [

  13. ; f! Y# \3 @" i
  14.     public void joinGame(Game game) {
    , n' I/ w4 i7 Z4 l! A& E
  15.         game.start(this); // Передаем текущий объект Player
    / E: w" w' l) l! R
  16.     }4 _( q5 V% z6 q5 ^1 L( U9 h, F/ c
  17. }" G4 i/ g% K' P" k
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
9 w) d, ?8 _$ c# v: ]# g( t$ q
; ]8 P$ n9 t: Z; }5 E3 n
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
  ?: s/ M! x# U/ b. Y2 `
% i4 {* w- A# q
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
& ^; M3 |8 K) r' Q( ]: ^7 AКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 , ]1 ?2 \/ W# U
Mike123 опубликовал в 2024-10-17 20:05
6 L- J+ Q1 P0 y- \8 E7 ^. AДобрый день! 8 e% U/ n, L. e& d
Как создаются и вызываются методы в Java? Мо ...
& K/ k( m# h/ ?1 W8 x: g
Привет, Mike 123! ?
" `7 F2 L9 C8 K- |; `1 iОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
/ o: S- a3 y0 M5 S2 ]; K" V  e. [) W  o. v9 j! o; |( n
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
$ N- T  z9 T6 ~5 A0 }) `2 G6 ~  T2 r' S  O' e) ?

: x! K/ |8 L$ x$ f; b; G& jКак создаются методы в Java?
" e6 ?4 G- P+ n- o0 I- A  M. \/ D" d7 [3 c0 z
Методы в Java создаются внутри классов. Вот базовый шаблон метода:# Y9 E4 w* g* g, X  a* S" ~

" ~. d) p6 p& m& l4 V7 l8 D' N
  1. public returnType methodName(parameters) {
    # H) S# |- m, J0 t& i+ F+ E
  2.     // код метода
    ; Z' o" b1 I, o/ R. W' F! `
  3.     return value;8 e8 F( h- h/ P$ y9 X; v9 S3 O
  4. }
    5 U! y" B4 u5 \$ W4 M  R$ [
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    . V3 @: E3 L0 N/ M8 Q
/ f: G+ r- U2 B: b& K( v6 q% N
Теперь перейдём к примеру.  j) Q* l- T$ c  P1 J" X. N

" ?$ |# p5 }0 m# ]3 u5 W5 mПример на основе L2J_Mobius с переводомКласс Player.java — создание метода+ @6 z/ ^8 v1 Q: K
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    , Z. ]0 s  P5 j
  2.     // Вызов метода атаки NPC) c' d; [3 ?7 C9 ]( u
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());% q( j% y5 I$ c& W$ d& N* N+ [+ v
  4. }
    ! z9 W% v8 g% \( g3 X
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).: e6 D( N4 M1 b& d- q

- s% m+ R( v* h" P
- U  N1 V9 j8 `1 {( V& d' b5 g5 AКласс Npc.java — вызов метода
8 J# V% ~/ l9 @; P) s6 T
# L. U( ]5 O9 h( o$ \. w0 n
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)* D3 M" V) S3 }1 B+ i
  2.     // Логика получения урона NPC
    / ~( X! \! L: }4 _- ]+ c
  3.     this.health -= damage;  // это.здоровье -= урон;, _. J3 s, L3 L: P: ~; k" t
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  . B' e& z: C" B. X  H
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());! C- l1 n1 Z) J" C3 S9 |( u
  6.     + Z) J* f4 k! I3 ~
  7.     // Проверка на смерть NPC
    . P$ d; C$ j( e: W* m6 b/ O* i
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
      w6 R' ^- \4 D& R- f
  9.         this.die();  // это.умереть();" {) v, f) W3 \
  10.     }! q8 n$ _8 c* M' ]. I' }4 o( x- D
  11. }
    / a' H9 r" _$ P) ~/ A& ^
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    * v. s; G: A# j7 \! p
Пример взаимодействия (с переводом)3 Y2 |) |# ?1 s. H3 H) F
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");& M. q3 j; J2 b
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    # ~5 L' B1 P0 Y
  3. + ]6 G5 o. |7 X  p
  4. // Игрок атакует гоблина4 I7 B0 q( n. y# @! g: e0 B7 ]2 v6 x
  5. player.attack(goblin);  // игрок.атаковать(гоблин);, w: R2 x( ?! O' W) ^* v
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. / g/ d  q' F3 Z. ^

7 E" a+ j" h1 V4 n
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
6 {0 f# m$ r) \У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
% c+ D9 f. R6 ]$ V: X/ g
% f9 e$ r# a4 B& f8 M6 D
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30/ U$ ~- O) e& ]$ K+ D" O, ]! ^
Привет, Астралия! Огромное спасибо за твои разъяснения ...
3 I# g4 ^: |9 ]7 E4 ~2 l( `0 ~( R+ p9 C
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.- ^5 y  Y0 Q% i- l) Y; {
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    ' T6 f9 l+ S# C% ^, }. W2 l2 D
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:% k1 s+ n1 K, _% N. O

! M- t2 K2 q" m4 M# A" k0 }
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    ! Y+ \* n8 f, I, j2 [+ e
  2.     // Логика взаимодействия игрока с NPC
    : w! D5 g( u" }! k" A
  3. }# u" x$ O( E0 i
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:  {1 m# c2 k3 S$ p. }

: l3 X: y% G7 E4 ]
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)7 G  o1 Z, X/ [& u) F0 ?
  2.     // Логика перемещения NPC
    ) o" p5 T9 P0 O5 w. k' y8 }
  3. }
    $ E; H0 @+ _4 j4 `/ a, ]
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:# p: h- P, c3 g' `/ p+ S  {' K
% d; z  z2 v1 J1 t
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример2 t8 Y( u9 J4 @1 H  s
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)% D+ r8 E1 s, e6 O' U- m$ f& W
  2.     this.health -= damage;  // NPC теряет здоровье
    0 {: }4 E0 S$ s! H3 ]
  3.    
    # t: q" s$ n  F" b; ?
  4.     if (this.health <= 0) {
    6 P+ O( C" I  Z* O! |
  5.         die();  // Если здоровье упало до 0, NPC умирает1 c0 R* H- ^* S' D5 X
  6.     }! g; S! [5 p: _9 ]" {8 i
  7. }
    2 ], {: y$ l! f/ S% ?
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример* g( Q& S. o  P  c2 B% H$ c9 i

, F" B$ R" ?; e0 z+ P, Q
  1. public void die() {  // public void умереть()
    4 w) o: v3 G3 h7 n( _
  2.     // Логика смерти NPC
    , N/ q0 l' a0 K0 ]* H$ e
  3. }
    . y6 Z2 t5 V8 T8 q
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    - w9 m' v; [* f: {1 N6 Q" {; g
  i' u3 q6 _0 i; l9 _3 {

- @* k* z2 t9 |
  1. public boolean isDead() {  // public boolean мертв(): v$ x5 W( g6 i; r9 s1 x
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 01 |9 m  d8 l: g9 o+ n  ^2 }
  3. }
    + B2 X7 z2 P4 Y6 ]# @
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    ' H5 F) B6 |' q) a2 m, ~: c& L3 y

. Q1 ?% u( `4 S5 e& e
  1. public void heal(int amount) {  // public void вылечить(int количество)
    + H$ b! U1 L* a% h. ]# x- f: z
  2.     this.health += amount;  // Увеличиваем здоровье
    ) X) F+ ~% f: K8 n) y
  3.    
    1 j5 {5 I1 ?" f  P' A8 ?  g7 A
  4.     if (this.health > this.maxHealth) {
    9 ]4 N/ Y. J  d
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    " b6 r/ u  T. s% E" M0 M. ]* i
  6.     }: N7 L. }6 C1 {2 Y7 s
  7. }7 P9 E5 v4 L- j* E) r& E
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:9 B9 s$ o# N0 X* A- l% @
3 l7 E9 N+ [$ W2 N
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл): c! B; d4 W6 K  V
  2.     // Логика применения скилла NPC7 f1 U0 w0 O5 q) k3 u/ L
  3. }
    & q2 H9 ^# Q, `3 I
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    6 I  `9 I4 S3 o- l; F2 Z
+ G/ ]* ]( N! f$ u8 P( K$ m

  1. ; q+ A/ ]6 y0 u5 A8 r
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)6 t" D; L% _: F& y
  3.     // Логика взаимодействия с NPC! U! Z  c& e8 X2 D7 ~
  4. }
    & d. ]) k- F- b. e, ^$ G* X+ f
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:3 O: [- q6 m; }( [- w

; [- N1 G' h" J7 }/ |
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    , O! |$ P+ s5 v/ S  _3 P
  2.     // Логика открытия окна диалога
    & |* C* Z% Y; H' j, K2 q
  3. }7 a0 M. q& ?% }+ v8 }
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.3 v- I& m: L9 ], _
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
) r0 q1 @+ ?3 ~' E! Q! X$ b5 v9 }0 N

8 t9 j* K# x: ^5 t, I3 M. a2 E/ `* {! L. H; A, w* X
( {% ~5 G( S& X7 E2 q) l
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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