Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 ! }! j- K' Q. d, p. a

) T9 D3 b, A# D4 W( D" O
: u) c7 W, k3 @) f' Z1 U! MШаг 1: Введение в классы и методы на примере L2j_Mobius
' J# k7 r9 {6 ~" i% j" u& N7 D! ^% CС статьёй можно ознакомится в разделе Обучение > Читать- B9 B3 |/ k# J! V  h
  {1 n6 i  q- l/ w2 F5 _
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
; }0 L7 g4 h5 K' _1 l" ^& c& E8 R% ^3 m) L/ M8 {
Обсуждаем:
7 _4 W/ J9 d' G& Z
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    ; J4 R7 _8 p% L+ V2 {
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!$ _* U7 @/ A; ^# l8 G% U! w& p* G: J. E

& m6 w% X! @) ?' _4 {( y
/ m% k8 c( V$ g: g0 P( ~
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
' Y. C2 q: s: ~' W" t
+ D, u& C; O7 r* k* j& z7 V3 H) C' ?9 p
0 z  g5 c& f# U7 \. @- I

& }: L- l+ g& ~- z1 N
) t3 k$ X0 C5 p) v, A# M  @

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
. ?: o8 W. Q4 ]2 L1 L
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
5 l: |3 ^9 B0 E) Y  WПочему мы используем ключевое слово this для ссылки на п ...
( c: K2 w) d  Q- ^9 J
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса." E" `+ Z# ?7 i8 y  K5 h1 _7 F- w
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
3 C$ _' o3 x- z! Y7 r, ?; ^
$ v3 d& I, u; P8 o+ m; k" j0 GВот пример:- u1 W5 A( K; @) u
  1. public class Player {+ L# O7 J4 a* @2 D( e) ], J2 S
  2.     private String name;1 ]  r4 }' v6 X, l; w

  3. * Q% y1 e+ |; }9 C
  4.     // Конструктор
    ' S; i4 r: g3 U! ~
  5.     public Player(String name) {
    % i% [8 ~3 W( w! x, g
  6.         this.name = name; // Используем this для указания на поле класса
    : C3 |1 r/ ]1 r* e/ Y+ r
  7.     }) s- A6 e* r# F3 i2 }3 T
  8. 2 E4 r& X/ f# V& K+ M5 P+ ~
  9.     // Геттер для имени& Z  P; H: ?1 }) B
  10.     public String getName() {
    & j' y% y4 ^2 C% I5 a- g
  11.         return this.name; // Используем this для обращения к полю класса  M2 X+ O; y# K( i' W
  12.     }
    : p7 U- l2 _* r; a; B
  13. }0 o+ r, P  |* p; S
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
: @/ u8 Z8 }2 h0 @3 H3 [1 L# ?- q
( x; A/ C# b6 s; pКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    + {+ H- p/ k3 d
% p/ p& g7 w% A- I
Пример передачи this:
3 F* g1 v: \1 y, ~, V5 [
  1. public class Game {
      X. K# `4 c! a4 o
  2.     public void start(Player player) {
    7 M; F: ~5 L( n9 ~3 T
  3.         System.out.println("Игра началась с игроком: " + player.getName());2 |6 U, [( h5 T" i  H* j
  4.     }: {+ H2 i; X! o# M
  5. }) B/ v4 O( Z6 l$ J6 c* p

  6. . p4 C( b/ X0 t: `
  7. public class Player {7 u! G7 m2 o" j: f. ]
  8.     private String name;
    $ I% `  e; N7 O/ A: o& T# f

  9. 0 }! M' U8 V+ S! I
  10.     public Player(String name) {! j/ W4 x/ o0 X
  11.         this.name = name;
    0 `& c2 ~: u( d2 U% s/ b
  12.     }% F. g1 H8 Y( ~( @" H

  13. ' Y& ^" x2 r' c9 T
  14.     public void joinGame(Game game) {
    # |9 j& v( P6 z6 D+ e; e
  15.         game.start(this); // Передаем текущий объект Player
    6 ?( q* r5 F/ v
  16.     }+ w2 x; Y; A. C) f' n8 D" r
  17. }/ M4 `* D7 S: M
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.8 c3 ^$ p( U  ]1 I

1 J. `; y3 u& b9 T4 N' l# O) H
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?6 u  ~: H  q4 z  N

6 Y% i$ B- t( W5 P/ V
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
( v# R  E3 A9 g$ A* }Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
5 Z: O4 F# Q" Q. E/ b9 a
Mike123 опубликовал в 2024-10-17 20:05- b: r2 X# m* m& }( X* i4 T
Добрый день! 6 f% R$ X* T4 v. L6 s
Как создаются и вызываются методы в Java? Мо ...

( R5 X9 H' Z7 i+ S" |Привет, Mike 123! ?
' v. l9 O6 @; n( X7 j# f2 J9 WОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать./ K; i+ q. X% d# u8 r5 Z3 z# _9 |
+ r+ G4 J+ A- S" G! }. M( _3 F
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
2 G9 k8 e2 Y% t( t; }  I
9 G: g4 j* v% m# `' |) x/ H* W: a7 ?/ i6 U9 Z
Как создаются методы в Java?4 v/ z! C$ |, q- s! F

; M- `6 Y$ v- R7 aМетоды в Java создаются внутри классов. Вот базовый шаблон метода:) e1 T& J: K; p+ x8 o, `

+ S  B% j5 q) q
  1. public returnType methodName(parameters) {2 q6 I! y, G8 `/ n+ f: P3 h' @
  2.     // код метода3 U5 M& x0 a+ v$ C2 r; }* W
  3.     return value;
    ; E5 p4 X" ~: y! T6 A. A8 ^# J7 I
  4. }
    9 ~7 T8 s1 q9 e) e+ r. ]
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).( a& S- s! `, e0 Y& P

( b2 b! B& v" _- e! i. zТеперь перейдём к примеру.% h, O3 e2 [6 d/ c

. Y2 d' G+ ~8 `! u' z$ yПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
8 M: U8 f% A0 T( J8 T2 C7 _
  1. public void attack(Npc target) {  // public void атака(Npc цель)! M1 ]+ f1 E' b9 P/ c
  2.     // Вызов метода атаки NPC8 ^- m* V* L& G8 _0 W+ |  e
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());" x: U0 y* \  z3 |+ I
  4. }
    " J8 M# O  y/ @8 g
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
7 T) T8 n* C, z3 A! e6 C
) N( g/ ~# H2 B" N8 N+ b) L8 A) i3 o5 }4 k7 N% r
Класс Npc.java — вызов метода
2 R0 K( T; P  F  l& l8 a: K4 ^3 Y0 ^: `7 I
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)( a8 U& w, S! a9 }4 o  B" |
  2.     // Логика получения урона NPC
      v! ~  D+ t: ^& z$ F
  3.     this.health -= damage;  // это.здоровье -= урон;
    : ?" L  }0 o4 l( L& c5 f9 E
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  % C5 I' ]2 t& N6 s9 _, v
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    # D$ L( P5 _/ ?
  6.     1 V2 }( }' H  _
  7.     // Проверка на смерть NPC6 R; O) z; i( A
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)2 i. I3 C9 g/ j9 c" V* M7 a1 g
  9.         this.die();  // это.умереть();
    * m! d! ?- e8 u
  10.     }) _4 c9 ^% |- D" Z
  11. }
    - L% T3 r4 @' l, W1 x. t- _8 `  z
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    / i: [$ U& \9 @' n4 z
Пример взаимодействия (с переводом)
& t- N$ W. k. e2 t
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    ( A: E4 j, I1 _1 ~9 e
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");7 h( w0 e7 }# Q% ^- M. }+ M
  3. / j, Y" \0 T1 c8 H
  4. // Игрок атакует гоблина' J4 p' P& ^. {1 l- j  Z  A( X
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
      E8 I* ~5 ]6 P  q/ |8 I6 F' Q
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 4 |# S7 K+ D0 c, `+ B+ q
5 y/ ]/ t( R" `. n( w8 c" F
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.% C9 I5 O; Y1 _7 X* D* {8 I2 T
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
0 q5 n3 R" n4 v( s6 r+ ]' }8 g4 C& \+ c6 d% p. V& B' j* c& Y
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:305 d- O; {6 l$ E  J
Привет, Астралия! Огромное спасибо за твои разъяснения ...

* X$ V+ Y4 k$ S5 n0 uОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
0 @% s0 Q) n( |1 Y& a1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    3 F- i' `' G+ {8 U  ~1 @
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    - M! D; K/ ~/ L2 B

* ]& b5 }8 P' |3 l1 x
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    % C6 |6 n6 P( Z; y, R
  2.     // Логика взаимодействия игрока с NPC
    ; V2 t* W  B. n: D+ d
  3. }
    + L. C: Q4 ^- K- {( [: F
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    4 u+ A& x' l" p7 j! R1 z
9 d6 u0 }' }# Z/ O
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    . W- q( \1 N8 j
  2.     // Логика перемещения NPC
    8 g6 S% l' N; S. j1 ?7 r
  3. }/ ^' Y+ g; o  ^
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    6 O( J/ t' a; j/ E) L
) y7 u4 ]. k$ I0 n7 G, O1 y
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример/ L/ B6 J5 r$ Q
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)  g9 _3 e' d) D2 P4 v: j
  2.     this.health -= damage;  // NPC теряет здоровье* F8 q# K, U; m% p7 l2 i' e6 n
  3.     / r2 L) }2 i0 t
  4.     if (this.health <= 0) {
    7 I  c1 i; L; U  G5 g( W% {$ w! F
  5.         die();  // Если здоровье упало до 0, NPC умирает
    8 S. m5 T: C. b9 n2 V# ], f
  6.     }
    ; m7 Y, [( Z) ?* a* \# o
  7. }' K" z7 y" R  c; S( e/ _, X6 l
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример- G: |! p3 Z8 h# o8 R

4 L! m* Q" m- D+ ]
  1. public void die() {  // public void умереть()
    5 R2 d1 i. w" V! N* m
  2.     // Логика смерти NPC
    % b' z9 N" l+ Z% y
  3. }4 ]5 \8 v3 s$ W8 L  B
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    $ S- X$ _+ s4 S- F
' A5 u* v  G2 _) D  x$ z' H
' d! n4 l) n+ l% w& D8 N
  1. public boolean isDead() {  // public boolean мертв()
      ^. m! F6 c0 C* p% _% z' K$ n
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 01 n; p, N- y- s/ F! a
  3. }6 H  {1 u0 i; C( J
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример) z8 V1 O8 G, a9 z5 F

" H; F! H0 e; H' |3 J% U
  1. public void heal(int amount) {  // public void вылечить(int количество)- L: E9 x; [1 \. f1 u2 ~5 ?
  2.     this.health += amount;  // Увеличиваем здоровье+ q0 T8 N( n2 @, l1 v
  3.     4 b2 _0 b) C& u# R2 l
  4.     if (this.health > this.maxHealth) {
    0 b) E' A6 w+ j6 k; l
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    , `# K; I" B8 ]3 _* q* J- l
  6.     }
    ! Q  [0 j/ {7 Y
  7. }
      Z3 n" w6 \6 Y5 Y5 \) }+ J  M0 Y1 R
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    ' J) u& p' k7 w* E- f3 a' e
6 y3 A9 w3 z  H- U. }# ]6 V" X( `
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)- s! b" a, P! \! A6 _7 v
  2.     // Логика применения скилла NPC3 C1 z! I( n+ s8 J% _" h) Y* m
  3. }9 c  s6 z# u3 G$ e' e! I
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:3 p1 L; B' A4 b$ ?& y8 W6 o- a

" V* h" M2 q6 [6 g5 w. y9 {

  1. ! l, D0 S2 L+ u) c* d' c
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)# k; ]0 T' g8 n% }  z) e
  3.     // Логика взаимодействия с NPC  K2 j  y# [5 T5 b: s
  4. }% {' L: L) g* v; E
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:, H5 z  l- E) @% p5 u. g( {

& M1 q! _+ V* x" N- |) z( Z
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    & h. F$ p$ f& h
  2.     // Логика открытия окна диалога; z  X3 L: o, Y. `* {) _
  3. }7 L/ v0 `* [% C9 K6 e& A) M' g
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
7 P' d( z& u2 h; M  BЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!5 h% {4 }: A' q7 S. `5 F

6 q& A' o  O( g4 J* {5 Y
5 Y' x. p; F, Z* r
$ W& z3 ~9 ^6 K" ^
9 B, b0 B1 p) ~! \1 z7 Y
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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