Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
+ Z: N/ {: [% e1 l, i1 F5 K. j8 W* a' P$ e, T3 T
! Y& q, N7 {/ ]- x4 k3 f
Шаг 1: Введение в классы и методы на примере L2j_Mobius
7 F! z6 P. Y9 l) f$ p4 Y9 mС статьёй можно ознакомится в разделе Обучение > Читать
+ ]; i4 M- R4 n  X7 ~/ R
+ e2 d7 O: `2 }9 r9 O) l  P: iДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.! n' ~' K: ]/ v8 @5 h
3 |/ y' m$ @0 Z7 |) o
Обсуждаем:
5 R# f4 K, q* C! [# b4 t; M6 H
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.) N7 Q) _+ m' P5 ~' M' K7 i
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!  k0 a# V8 {1 F9 k

/ j5 W8 O/ P* f0 u* b3 c; o

5 U7 i) v, t/ k% A7 kИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
! [5 B1 L. z9 i9 g# h  Q& b- \$ D( b" W# K# [$ H& Y# V
( `  g, k8 s6 a4 k

) X$ v7 R0 l' G, w  O
; N( ^/ h' z$ G) \0 _. V, i* F. I  I" E6 n9 q0 H

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?3 }, j+ M7 g6 U, E# a3 o
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17/ G# G8 }* [+ D9 R
Почему мы используем ключевое слово this для ссылки на п ...
* u% m7 b: h* d$ g7 D
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
  [) P: z8 g2 x7 _Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.6 B3 M9 [+ y/ u3 L9 M

$ ^) T0 Y4 {+ ]; M: @  I0 aВот пример:. Z/ ~& U7 W+ ^; w8 |2 O, J
  1. public class Player {
    * C- j- ?/ m3 \7 u% C
  2.     private String name;
    1 t' I6 D2 I8 w4 I+ T8 ^" q, S8 C1 G
  3. + D  m5 C1 ]) X
  4.     // Конструктор& h# \9 `1 N) M& w  z! o" N
  5.     public Player(String name) {2 r7 d6 y2 N  j# j$ n/ H% v
  6.         this.name = name; // Используем this для указания на поле класса+ G. f# `' a" w1 l" @3 g+ B( }
  7.     }" [2 e, @- \4 U. \7 g5 M2 {8 T( b

  8. 2 o" o. s: o4 c+ ]
  9.     // Геттер для имени. E" N7 O0 g  m
  10.     public String getName() {* k5 ?4 Z0 g2 @9 ]8 D9 c
  11.         return this.name; // Используем this для обращения к полю класса2 a6 s0 i8 @, L4 k
  12.     }) n3 y# i' v1 i, w+ D- L) ^
  13. }
    ; I) H$ A1 h. j3 q. M, B* Y
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.6 j, ^; W0 K2 }
5 s# v9 d0 g; [* [6 Y0 w/ q4 O
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.. s; R5 T; T# [6 W2 _
; w$ b7 i$ O& Z7 l( m
Пример передачи this:# Z  Y3 T) P6 I( q5 n' Q% Y
  1. public class Game {7 `8 ~/ _. _6 G
  2.     public void start(Player player) {
    ' @5 X: D5 `6 e6 l% V" t
  3.         System.out.println("Игра началась с игроком: " + player.getName());9 `; b8 D2 D8 R: F  K; Y, ~
  4.     }
    ! ?* g4 |: M$ Y3 l- |' A* k, J
  5. }
    / g: C: w0 T9 `

  6. 9 d( v; n6 e( X& S/ s1 [* P9 o. @
  7. public class Player {
    2 v: \7 |( |" o6 B1 {# Q) R
  8.     private String name;! H' d, i( V! H* p2 X$ `# U

  9. / F3 [& M0 ^  x' }
  10.     public Player(String name) {
    0 d8 O0 A+ Z! ^; R* O- B8 n5 T) D/ Q
  11.         this.name = name;
    . W# K1 X4 ^/ ~
  12.     }0 j6 u: {2 |2 C, _7 o( O7 a' |4 Z

  13. 5 b6 Y5 m$ m: q
  14.     public void joinGame(Game game) {$ M2 |! w2 o: E/ i7 r8 n1 Q
  15.         game.start(this); // Передаем текущий объект Player( z+ q( N# K& C; J7 }' K1 d( m
  16.     }  E3 q  t9 m/ O2 O: q. }2 K; U
  17. }
    2 j1 n! V+ R; F2 n8 o. ~
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.9 c. Z8 ~! `8 V% t. n# y


" a" @: ?7 Z: D4 g# A/ n2 G! QПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
2 s( f1 z8 M, ?; v( s2 x9 ]3 N$ m3 j' ?1 c0 W: [$ b4 c
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! 9 l- N6 l7 f9 p" `
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
: P0 y- l' v! d6 m# x
Mike123 опубликовал в 2024-10-17 20:05
& Y' E8 C0 U# B8 t3 A8 _7 v! u: {5 dДобрый день! & P7 ~0 N# }8 H- K$ z
Как создаются и вызываются методы в Java? Мо ...

0 p6 t+ `5 N# A7 C8 |Привет, Mike 123! ?
1 L4 U1 X& C% \+ u1 k6 fОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.# ]# s/ ~4 W) W8 E
( A7 l% G8 z0 X# s
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией." R" N# ~! T  K3 m3 I

1 b5 J6 q, n$ c% X. [' S  P9 a/ M  ]- Y$ z
Как создаются методы в Java?: J8 K  t. w' B0 P  R

5 c9 Q8 F0 B% _! C" qМетоды в Java создаются внутри классов. Вот базовый шаблон метода:3 ~7 N) x) K8 x) Y4 b" S' B

) H7 S, U: O& X( O! f" j0 w
  1. public returnType methodName(parameters) {* L0 t( q( @- D& \3 K
  2.     // код метода
    ( R( u+ a" ]5 ]& t9 r) A
  3.     return value;
    & P! w7 X& {, k/ m5 N( R
  4. }3 }" s- \: m6 S0 s- f3 Y" O
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод)." r4 \8 `+ i9 f5 ^" X  f0 M" A7 C3 a2 F

  U4 |! H  X' tТеперь перейдём к примеру./ a# A8 `5 d" ]3 w
7 t4 g; I8 S( I1 A/ u% \
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода4 U- y, k; G+ j/ z; a' O& \/ |
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    7 D0 U& D; I5 J1 n* F7 T+ {
  2.     // Вызов метода атаки NPC
    ! B# d, H. f* _, u
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());' M4 l: F5 A8 b; e$ a+ Y  |7 h
  4. }) l9 i) t( s2 _  s1 ]
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон())." G* r; z, f6 A& k7 g: t; B
4 g) E3 {; f, E, P

& ^/ ~( L7 n) Q; ^Класс Npc.java — вызов метода
7 c/ y- B  R% y3 p7 |4 k; \* E) a( t+ P* K$ G6 s
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    ! m& I7 V- m9 d3 w" `, k7 v4 t
  2.     // Логика получения урона NPC' m7 ~' ?/ z# A3 H
  3.     this.health -= damage;  // это.здоровье -= урон;
    . m& o8 g3 ?, @
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    . `% r  Q% G! h, x! J- T- t
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());# \, S5 U6 E9 F/ P5 h
  6.     ( H$ E" j$ W  i$ V2 j3 N( e
  7.     // Проверка на смерть NPC; q' D! @5 d6 w8 M4 q
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)# x3 U: i) Z& ^! w4 A+ y2 S! V5 ~
  9.         this.die();  // это.умереть();
    & N# L6 R- y9 G, f7 ?4 k" L
  10.     }- w6 R9 p% ]+ q5 M& H( y5 o! q
  11. }  w" r: B1 o* @1 `& r; J
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    : U: Z) e* g6 X# ]
Пример взаимодействия (с переводом)
5 n1 w9 ~# h& E1 j
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    6 H2 N, ]2 r3 U0 q1 @
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");, P) k% Z# G4 b" x# G# y
  3. . y$ b, F: w  I4 v: v- L/ h0 L
  4. // Игрок атакует гоблина( c, Q4 V9 {6 S3 p  P7 ^  @
  5. player.attack(goblin);  // игрок.атаковать(гоблин);/ L9 R9 D9 k$ A# ?7 X1 a' ]( m) ?  E
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. + e. ~2 D2 @- u5 p: j! f" j

3 m0 M- w  x7 H4 L3 D( r5 k' p
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.9 m1 z5 f3 B+ N5 b0 l
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!! Y- H- G# g3 {
, O) Y& P" P- W# i4 _  J: C
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
3 h' f; K1 N, G# OПривет, Астралия! Огромное спасибо за твои разъяснения ...

) s, U6 m( O6 T" }7 DОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.# t2 J, H5 q6 ~
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример) P/ t$ M# q1 U6 q# h; E6 y
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:! u/ b1 v/ z+ C+ J. _& O

5 L  N* q* R% J0 ~8 H
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)0 `$ X0 m5 Y3 i) J0 P+ a' H
  2.     // Логика взаимодействия игрока с NPC- c9 h1 q) ]& a% @* E" y" R
  3. }
    - V# A% k/ Y& ]: [8 Y
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
      p$ Q" |) q# a& |" Z3 b

1 v4 t5 X2 j( C+ c, Q- n( c. l
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)9 g4 F2 U. u/ {
  2.     // Логика перемещения NPC" h, O; Q3 D" g* h
  3. }* X: e) c, ~" {& Z( E/ Y9 v
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
      x8 Y6 \3 x  A: s
' _, W' o$ w+ F: v% |$ ^0 T0 B
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    ' O. W# o) Z' h
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    ' p( _, R  V+ o7 ~: e
  2.     this.health -= damage;  // NPC теряет здоровье& B, e- f' t$ S: P
  3.     $ _/ M+ e2 h5 H
  4.     if (this.health <= 0) {
    & l) `. s+ I9 Y0 K+ L& ~1 Y8 `' @
  5.         die();  // Если здоровье упало до 0, NPC умирает
    . a3 {% p5 l4 V; |: K3 R( w& f
  6.     }
    + `0 u7 X; W5 U6 \. D( s6 ~; V
  7. }( f0 {3 O0 O- V% _+ E; C  X( R
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример1 O$ ?3 Q& _; W' ]; s
9 v# R* w; g# a
  1. public void die() {  // public void умереть()8 s( g8 c0 x* r( _  [" m
  2.     // Логика смерти NPC5 U5 y! v( F% b  H$ x+ f
  3. }/ {9 [3 k& D. `7 p* \0 h
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    7 j" E3 d' T, b0 J
, p8 u1 z6 h. H& M; E

$ n! z( }2 ]: ?7 H6 `0 L6 y9 ~0 I9 F
  1. public boolean isDead() {  // public boolean мертв()* v+ c- \" G; i3 X1 H; R/ l) T
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    ( T) k  G0 N$ o2 ]7 D
  3. }9 ^, T) q$ I$ T2 ]) C3 a% W# k
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример1 |8 Z- r! ?6 y: @) l; }
2 ~- Q1 X/ T' w) L
  1. public void heal(int amount) {  // public void вылечить(int количество)
    $ }) }. p7 b: n1 W- e  X
  2.     this.health += amount;  // Увеличиваем здоровье: D) J0 {* O& q" g5 e2 d$ L
  3.    
    1 l: \% {+ Y3 Y
  4.     if (this.health > this.maxHealth) {
    ' p4 h* v5 L  j$ l, z+ O+ R
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    - e* O5 Q3 E4 V" J' l4 F
  6.     }
    9 E% t1 ~& |5 G) ^7 E
  7. }2 Y8 A; g1 |1 R3 D' ]# ]
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    , D! |  L( O( J+ I; C/ _* K# V+ g

4 A+ d9 J6 w" s: y8 j# t
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    ) E+ m% ^' s5 U. b# ^5 z
  2.     // Логика применения скилла NPC
    1 }9 e* y+ n3 b+ z' w% q
  3. }
    : R/ [$ |: q! d0 z. C+ }
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    0 A- s6 p; t+ i
, H: g/ x. X& U3 f( {7 F5 X! G

  1. 6 u2 o) J! A5 W9 w' g1 Q
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)% Z# V2 _. u  B: ?2 X' b, @, i( t
  3.     // Логика взаимодействия с NPC! u# m9 J0 [# U2 i1 M. W
  4. }
    * k4 h# i. a& j4 d* h- A
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:' O# b0 U% r2 ?# h9 E, i5 g+ w
) _* N  S! i) a
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    ' Y: x1 L: |+ |5 S( V/ q& B
  2.     // Логика открытия окна диалога5 w' e0 R4 f. n9 c# G
  3. }  t# u1 c, i% H* J: d9 _1 q) r
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.# R% h/ W1 h0 l$ T6 B
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
: \* b: A0 e& @" m& T
; v( E  @5 C6 Y7 d6 Y8 ^$ \: V6 e: Q2 g1 |

) N9 y# [. D/ Q/ o" T- c( B
3 _; ?3 y  \) H  u+ Z
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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