Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
1 `) m5 @% T- R6 w' h
. _1 @% N/ b  z5 d9 P* z* f5 q8 y, s: f& P# ]3 ^8 I1 s$ B% ^
Шаг 1: Введение в классы и методы на примере L2j_Mobius1 u) E" I9 W! _$ f4 j8 A
С статьёй можно ознакомится в разделе Обучение > Читать9 e2 f6 |7 |6 a& Q; N
; D- |- I. z7 e* L: u* p" Y
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
8 L0 ]: A0 l: N9 q+ E+ k( f1 D3 m0 b+ W# [# b8 t: e
Обсуждаем:8 G  S9 A% D! F* a+ N( y
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    2 x- M5 i4 {9 o% `
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
/ c' Z1 X0 B8 [* m
& ~$ Y2 s7 y) X5 R
0 @9 a7 r# T, C+ r$ }: `5 T
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!1 y& S" N% l; C' o
* ?/ j' E. J2 n+ q8 f% _+ Q

" c: M- l3 ~- E4 V4 v
. H3 d0 h3 C+ W  S: I+ ]/ s
4 ]* X" }: X/ {1 E  w. f+ \9 R
2 w. Q7 E( G2 G: \3 V# Y6 t( w; _

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?8 Z' M  I1 j9 @: G- e& |1 \& v" B
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
2 g! T: a. H; ~, }Почему мы используем ключевое слово this для ссылки на п ...
( n( o" t  I& P; Q/ d
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
, \6 {+ a; D/ p/ b$ L) ZПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
6 W% g8 ]6 Q" J/ e# u9 h0 ]( ?' h) |5 X+ |3 d6 C$ m
Вот пример:
$ `) T: w8 ~5 _5 \& l
  1. public class Player {
    ) F. q+ |' O1 W$ Z2 m
  2.     private String name;7 w4 A! W3 v/ d) L0 \, F2 p

  3. 0 W7 o( a& C# a% h1 K1 F: K/ q2 L; |
  4.     // Конструктор
    ) N  _" }" f  S0 c( I6 K
  5.     public Player(String name) {4 ~0 o3 E6 B& @
  6.         this.name = name; // Используем this для указания на поле класса
    7 ]$ T; |+ |6 Z7 ^9 f( n
  7.     }
    # _6 `* ~4 L' J# b6 s1 x( j
  8. + \" `6 m5 ], V
  9.     // Геттер для имени0 L( L' t* ], f' L4 |4 \9 w
  10.     public String getName() {1 z5 M: O$ p. r5 V* M
  11.         return this.name; // Используем this для обращения к полю класса
    1 X: Q0 B8 x  d! E. @& z( Z
  12.     }& [4 b+ l$ n' D* R9 W
  13. }
    2 k5 U! t( ~/ D" G4 q! T- D/ b; `$ n# |! w
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
/ |; e) p* Q5 {6 ?" f; H- x  K6 ^& r) q$ e
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    9 f5 p0 w) E" c+ q) |9 X- g0 O

1 v6 e) r. N. X9 f/ p- u/ xПример передачи this:
. W6 }: W5 F$ Z3 o% F% F
  1. public class Game {, }( U- A. n0 `7 s2 u+ {$ f
  2.     public void start(Player player) {
    5 Q: k0 ?8 t* L' ^1 J9 m% x0 S
  3.         System.out.println("Игра началась с игроком: " + player.getName());3 a, F( D( t: K# ^5 ]6 X3 M
  4.     }$ {0 M6 c9 O  B: u
  5. }
    ( K' I) f4 y$ f5 s, v" S

  6. ! z% P  f! u4 b: c9 D7 V
  7. public class Player {$ i, g6 a# O3 H' ^/ b+ _
  8.     private String name;; g+ ]/ C  |& F  [( x( d

  9. & n% N+ `) T. ]* V$ h0 R
  10.     public Player(String name) {1 d/ t/ {- ?( }3 f# y3 i# C1 P
  11.         this.name = name;
    ) Z8 C! f- Z! z& v) V7 j5 y
  12.     }$ C, @3 C$ D6 ^$ v3 t
  13. # k! N6 i+ n$ E+ U! Q; k
  14.     public void joinGame(Game game) {
      W7 m* c& V! r! q, u. p3 C) f
  15.         game.start(this); // Передаем текущий объект Player# w) D2 h) `. |2 Q0 x& F- h$ o
  16.     }
    4 q  S* I' l' v. U3 ?+ @: g
  17. }
    & k7 M5 G3 G2 a
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.! _  d  v) R1 |( N


/ J$ K- K  X: o0 x/ t8 d2 s1 c& bПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?$ |+ _* P6 H; ^2 K( R

+ A* L1 ~6 t- j  b
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
1 T7 G% J% }, x; `- gКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
+ ?% q+ a/ D3 S* a1 F
Mike123 опубликовал в 2024-10-17 20:05
" P: D' `6 y6 D! K$ TДобрый день!
9 a( v( U: S) n0 o5 k: B9 l9 @Как создаются и вызываются методы в Java? Мо ...
5 q3 i1 A5 q& Z0 |$ `
Привет, Mike 123! ?% V  w) X4 j$ H0 ^6 U- ?
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
9 O3 _! ^0 a/ u# y# Y! J; ~3 Z9 P/ N, P; |& {- \  n
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
; C8 ^5 o) E( f& U9 Q7 W* j& X
+ P0 {; n: D0 M$ R( Z
Как создаются методы в Java?+ O8 O& Y# h. I% r

. N' I" O) h  n8 n( F5 BМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
3 j) o' O: P* Y: H, e: t5 B8 q! _5 x1 F$ Q7 v6 l
  1. public returnType methodName(parameters) {
    0 i. g( _9 s% d+ q7 ~  F* m
  2.     // код метода
    * d3 J8 e" R3 Q7 W# I
  3.     return value;+ ?1 r4 d1 U! ^
  4. }. s+ o$ m: l/ A2 F* n
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).% O4 A7 ~( `$ M. r$ T8 H4 E

* h# r/ O0 g* KТеперь перейдём к примеру.$ R% I* v: d# e- k* a3 r

" Q* T2 h8 {* k3 PПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
, G3 T; Y4 M. D! Q- J, V
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    * J3 {, L( e4 m/ j9 p7 C
  2.     // Вызов метода атаки NPC: q1 `8 z8 _$ [1 J2 s
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    4 O8 M# V1 A* Y3 }7 N: O. p
  4. }
    6 f( V5 `* ^7 a! I
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).; d" ?/ [" D+ P- N6 b& h6 p

& }" |0 u( \$ G: N$ u8 C6 B' A6 P1 p6 {% }. B0 v. _
Класс Npc.java — вызов метода
% [( E! p0 y" L$ {' n6 |$ Y" Y% Q4 u' T5 [. s8 o  O
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)  F9 y/ e7 l- @4 Q$ J
  2.     // Логика получения урона NPC+ W# L+ L: s0 V, Z% C
  3.     this.health -= damage;  // это.здоровье -= урон;
    ( f! p( L- z8 W0 n" Y2 g6 `
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());    [! o, h( d1 f/ M6 \
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());% j( C; L. u! h/ A% Q/ ?) b
  6.     ; N1 ]# S# P3 q: ^3 x0 Z0 ~
  7.     // Проверка на смерть NPC7 J, ?4 J, \& S, X
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    7 V4 D8 [9 f' o) V; T- Y$ r- S
  9.         this.die();  // это.умереть();0 G$ x4 J- Q) L
  10.     }4 |  g- R6 s/ q" d
  11. }
    # J3 U# s0 P' h/ T  g2 O: f
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    ; m$ B: x' v1 o7 Y# O
Пример взаимодействия (с переводом)& k7 u2 W. L0 s
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");* c5 F  V8 K$ m- m" W9 W# D) ^
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    - P) p& T8 Z8 P; f

  3. + }$ r1 B/ p# `* v. S
  4. // Игрок атакует гоблина
    ) E. |1 f) K  x% g
  5. player.attack(goblin);  // игрок.атаковать(гоблин);  m" [+ [( |, i2 q% y7 o' W+ W
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
0 s& a" A( _4 f$ E* @* B  [% C) I# v1 C/ Y6 [/ j. ~
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения., W5 [" c) @+ L! E. i! ~9 s' p
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
$ d, n7 D6 M: X) w# S1 r
7 a  c1 j  f4 t2 _
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:308 T6 v+ W- f# a) v3 _0 l
Привет, Астралия! Огромное спасибо за твои разъяснения ...
8 m% x3 `" o% G5 m
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.! M2 t& ]7 s  c5 o7 ^  s0 y
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    " a+ Q( L% Y, |. K  s0 h
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    " L% k" O( m7 o" ]- z

3 h% U1 f  [% ]  B; V; _
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)- B7 a8 P& `' F2 z6 j5 W1 J, c
  2.     // Логика взаимодействия игрока с NPC# |; V* T- P* x( O# w- N/ I( T
  3. }3 H& e" [% ?" P1 s0 q# I9 x& ?
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    ! S0 ?* H- k$ o* a" B; |  v7 Z2 X( Z

. E( n: g+ [6 F* T
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    5 H8 X! q% x: ~. \! ~9 f
  2.     // Логика перемещения NPC
    3 I6 v& o$ `+ |( ~- y. n
  3. }0 Z7 \2 @) ]# Z( ]/ v
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    : a5 K  g% C% [  v9 a

" I$ W4 \/ W; L4 _
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример# L! m& z8 b8 x
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
      z, S$ ]2 K7 g7 v: ~5 t
  2.     this.health -= damage;  // NPC теряет здоровье
    2 }4 n1 ], m# [# X/ O
  3.     9 L0 z  j& R4 N. Z
  4.     if (this.health <= 0) {' N2 r$ f4 q  W; y7 C* y: g
  5.         die();  // Если здоровье упало до 0, NPC умирает, k4 R' n6 m1 f6 g2 r
  6.     }
    - Y. m, k* p2 V- x4 ?
  7. }) t, i- u/ }$ e! ?  j
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример( d( `6 q% z: q

$ Q, \) y4 y# O1 r
  1. public void die() {  // public void умереть()7 e: y* T4 K$ E; S3 Y" w
  2.     // Логика смерти NPC7 f( s3 m6 S: M8 ?  p' ?
  3. }1 z" \3 u* Y5 o1 G% N
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:# k3 ^" C4 d: L1 T
1 |. O, X+ c3 J

( H* I9 f; M& ~" z0 J2 |* P
  1. public boolean isDead() {  // public boolean мертв()
    ) D! b4 `& ^" F9 `- T
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 02 `/ s- v7 {* y
  3. }: @3 \6 i- l# U/ J  c
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример& o/ x- F: F2 s$ r0 G( r; ]
" n3 _, b% m3 y) q/ e; S. j/ C
  1. public void heal(int amount) {  // public void вылечить(int количество)& D" H+ |  q7 g8 t5 k8 s6 U
  2.     this.health += amount;  // Увеличиваем здоровье4 n5 G5 T0 y' d6 o; T$ L; ^0 W
  3.     6 g) p' |4 C( q0 w6 L" q5 D# n7 a
  4.     if (this.health > this.maxHealth) {$ L7 K% i0 ]3 d) R3 O
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    $ l2 b4 s! f& S) e0 B
  6.     }7 ?4 r3 t7 d, s+ q2 Z
  7. }
    ; n' E( w0 P( K; Y; J! |& }5 m/ m
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:& p  e( C7 p( l8 w% |: e

3 h2 Q1 K; J/ u9 t6 J" u; Y
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)# |& c+ j, j; F0 N
  2.     // Логика применения скилла NPC
    . z4 y5 U- o- R+ \7 l
  3. }
    5 r! n" K& x! A5 V
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:( G# ?! S8 B9 n$ z% ~
; O. W* F: ~, b

  1. $ K. T2 s% D' R
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    : P' Y3 X+ ~/ ]' ]+ k
  3.     // Логика взаимодействия с NPC+ r6 g( J. ]) ?# f) Q
  4. }
    0 N) D3 a8 h' [( ]9 b
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:0 Y7 ?: C9 X0 ^5 ~; t

; `. B* J" ?0 r/ P
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)8 A: M! d; k# z; d+ y
  2.     // Логика открытия окна диалога( f0 u1 m7 C4 K8 p: L
  3. }
      B! q+ u, L* d% W. j2 s0 Y
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.( U& X; f2 P" N7 v4 N5 ^
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!3 l9 ]- ?, T3 n3 F7 |! D+ ?
0 B* t9 V, M# I) H6 @) x" b$ a

3 L4 M) r  E5 S3 O! l: Z& h, s$ D4 \# s/ Z% O, B* V

$ m# K7 d8 z6 ]- ~9 u
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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