Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 8 c4 x5 o6 E! v
" |& S8 R  u3 L  D+ l
) X  g1 A/ J+ u
Шаг 1: Введение в классы и методы на примере L2j_Mobius
8 f7 X) |: V, E. I! v$ I0 HС статьёй можно ознакомится в разделе Обучение > Читать* m5 a6 t. ~8 h( |
# K; u( O: d4 s* ]
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.1 |% I: c. S2 d. [3 c; e
. K1 t4 \5 T( O8 {: ~
Обсуждаем:( ?; a, e) ]3 C# o
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.+ [3 z! U" N4 n; B! G
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
0 U" L- R/ K! J
7 w' T" I4 ^1 w! T1 a2 V: E
0 F) Z7 `8 r  u- `8 l; |
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! 😄 Но мы вместе разберемся!
+ Z5 ^' \' Q3 P. ^( p8 `/ E2 D- D; ]8 u, l; C4 N

! A+ k  ?! b& l: Y! I* _7 Q5 s) K( \

8 d! g, b# a! D8 F* E; j7 L+ H" a4 h! V+ @  Z

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?$ p6 x  {& l% q7 Z! }: G
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
* i; v1 R. A: o; hПочему мы используем ключевое слово this для ссылки на п ...
7 @; H9 ~7 W- |
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
4 X; N7 L( i; y; l2 `8 hПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.% B6 i; ~! Q  l  v3 j" a' }

2 Y5 h/ s/ b, C& [. LВот пример:: Z( f- K+ \" V* }
  1. public class Player {% Q+ R! r" j/ r5 r' V5 L
  2.     private String name;# u' `9 ^' k6 o. w
  3. . v0 Q( g% y/ u: q! a( [
  4.     // Конструктор! H# r& ?! e1 i- t4 I
  5.     public Player(String name) {
    + ~5 ~& _" K1 @  ]: h; z
  6.         this.name = name; // Используем this для указания на поле класса6 r; N+ d! W0 ~" Q* k' Q
  7.     }6 e' R( v' p; W: H0 R

  8. / y- j3 ?7 y4 S* K4 v  |
  9.     // Геттер для имени
    ; A8 c" f: m1 R
  10.     public String getName() {  Y" ?; n" \7 ~# C6 V3 G
  11.         return this.name; // Используем this для обращения к полю класса( j4 O! ^2 x& f! C7 i+ @3 B  T
  12.     }' y* Z% e5 ?$ {  J
  13. }) F, W: m, R  B" j" X9 l3 n5 Q
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.( x- r9 q% P4 @$ h% p/ L
. U% K4 k: y* _/ o8 _; k
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.# ]* s1 m; @7 Y- Z% f, U8 _& Z

5 ^/ F* I2 n5 ]* u$ t' q; DПример передачи this:0 T: [4 H: m1 M$ r, i' N* G+ k
  1. public class Game {
    + M0 D& X! [# ?
  2.     public void start(Player player) {( r. C& m0 P, w- c
  3.         System.out.println("Игра началась с игроком: " + player.getName());: ]* s3 u/ |8 K; @- ]' _+ B- `" f# ^
  4.     }
    . ^$ C$ L( S6 Q2 k# w1 a- j/ |4 b
  5. }- [/ z9 P+ r8 ^" i. D& l' t% d, o
  6. 4 V2 f4 T% x1 ]( A
  7. public class Player {. a6 G) A* D$ W) ?
  8.     private String name;) K& K9 e, S$ H7 O- L
  9. + O( c* ~/ a8 I# q) v: [3 p
  10.     public Player(String name) {
    % z1 A& }( \/ J; b- |& o$ G3 T
  11.         this.name = name;
      p) f7 f. C. F
  12.     }* |1 S* f* Y2 U( T" D4 M6 d( c7 M

  13. 6 M- {  ?, E, ]1 Q5 m# R+ w' x
  14.     public void joinGame(Game game) {
    % H4 P% w/ c) Z* a7 X. ]
  15.         game.start(this); // Передаем текущий объект Player
    5 Z0 `9 [8 t$ ], a% ?
  16.     }
    ) I6 R6 a, i; j
  17. }3 |$ k' t9 Y# m, {4 b
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java., U, g+ G, f7 [  A" z% k

7 l- }: ?/ j! n! V0 x3 J% z
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! 😄/ Z: k3 Q$ g  Q* `3 l; y  q1 Z2 D

2 I, |. U$ l. X# k; v
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
2 J! x7 c- w' c0 X0 B- K; z. CКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
/ P+ I: O  Y& g! `' D7 T7 a# J
Mike123 опубликовал в 2024-10-17 20:05
7 a' p- k( }9 Z6 J2 `* u% Q3 w3 wДобрый день! % o" S& O9 w  D% e; L- B
Как создаются и вызываются методы в Java? Мо ...

0 W* P" ^3 v. r/ f$ S" WПривет, Mike 123! 👋
. p* p. s: w8 Y2 N6 l. fОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
- ^' Y  y4 ~& |3 h4 Y4 Q; a! w0 F
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией." ]& `  N: U, k
4 L" H0 h( K" V! O

- W' e8 ^* |4 [4 W6 @' X/ |Как создаются методы в Java?
' H6 @( x, w  \6 U- R5 Q# z$ _4 }" \5 X( G% k
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
8 O9 G8 x% R% r2 r0 ^
4 k- T+ `6 L. {& m
  1. public returnType methodName(parameters) {
    / G' [0 g+ b3 X* P- j
  2.     // код метода, s& h7 m, m, O' L
  3.     return value;0 U) n6 c' f6 \  R$ j
  4. }' j/ a  x5 f5 G: u' G5 S2 y! _
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).# f8 L# `) D( H: @' o6 m
1 M  k) B( L& ?+ y
Теперь перейдём к примеру.
& A2 c, d- I( U
2 M1 k. y% g3 ]7 u9 M" BПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
4 `9 W4 @" c1 q( B7 i/ {) z1 {
  1. public void attack(Npc target) {  // public void атака(Npc цель)( j: Y+ Y+ F+ B* X1 s+ b
  2.     // Вызов метода атаки NPC
    , Z+ Z9 _* p# i6 N1 A
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());( x6 r/ `; g7 O; e
  4. }. U. M% {& Z  n& I- k7 x" w+ E. V, c
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон())., h. O4 v7 j7 P" P

* L1 U( P% h1 X% B0 f/ \
1 L7 q2 t5 M; ]" l" m1 QКласс Npc.java — вызов метода" V$ O! w! L! e2 I
% \8 ?9 i6 o( x0 V% b
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)# s* w! \: u  i7 c- j1 d- \( W
  2.     // Логика получения урона NPC- F% @5 T) U0 a0 o9 Y+ k
  3.     this.health -= damage;  // это.здоровье -= урон;
    . F' i# J+ b3 {4 F$ n' ~3 v
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    & [" t3 a! z+ w+ ~* A% V
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    / y( _* I) \# @4 i; O1 {/ h0 t
  6.    
    4 R- W" _4 ]8 T+ |* T
  7.     // Проверка на смерть NPC8 f+ T. s; y0 L, K
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    / A( t% q. R2 W# W! V, }" b6 Y
  9.         this.die();  // это.умереть();
    8 E4 {9 g( S% Z5 T
  10.     }
    7 e4 ]  e7 z4 n! a  }, G
  11. }
    # z/ k# ^8 H! e2 T3 A
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).: m  u9 [* m6 V4 O  N- g/ t' d
Пример взаимодействия (с переводом)1 o8 o1 C* ?1 a0 t0 m
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    / R# ?4 c' ?/ A) A1 H
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    $ _- `/ j- G4 \. d/ ~
  3. " G% t. p; S8 ^1 |. @
  4. // Игрок атакует гоблина
    " p4 ^7 v2 Z3 A8 u- S: o
  5. player.attack(goblin);  // игрок.атаковать(гоблин);. G3 M* L3 C, n) ]5 F
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. : P2 }8 D1 X6 M0 `
7 g5 w. l5 [* ~7 E. o6 ~
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.) ?3 w2 L) F3 I2 A0 R* T8 l5 v
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
4 Z0 z9 ]7 n/ y! C- y. M
0 }1 K% W# A% _' r; D+ Z
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
+ k2 a) {, C/ v. P  b3 x8 f5 }Привет, Астралия! Огромное спасибо за твои разъяснения ...
; b7 Y: L# C5 m! C! \* e1 R$ y1 [
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.8 c8 w( V# g( k9 M5 \
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    % y: R1 U- I" r7 @  j# W
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:# G# o' _4 P7 Q3 h3 e; L

9 V, B8 y9 o- X% y+ H! P4 N1 P
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)+ S7 Y- p5 P2 S6 e7 }7 N3 _/ z( [
  2.     // Логика взаимодействия игрока с NPC/ [; V7 y9 d, w3 d  `  E/ E; z* T
  3. }9 S  K' @- W" w0 T7 `8 Q
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:, J& i- U% q8 D. H+ r! _

0 o3 J) P1 V$ ~. H
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)0 R) y$ ^5 ^  A# e$ T( \0 X
  2.     // Логика перемещения NPC6 }) }2 n2 u1 j6 A+ C  W+ G
  3. }
    . ?4 U$ l7 v$ f2 Q) s
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    : y' h$ e4 \. C( P0 u
0 w4 |* Y& s  Q
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример; }8 ^- M) ^1 E( L) y) q
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий); A. e% q9 n! d3 c9 k% @% v
  2.     this.health -= damage;  // NPC теряет здоровье4 Q( w! i) {" I/ i' P: j
  3.     - O% M. ~$ H3 R; ?. B/ B
  4.     if (this.health <= 0) {4 ?8 Y" i- v! j8 c( ~3 i
  5.         die();  // Если здоровье упало до 0, NPC умирает8 d, y8 C. T/ f! l! s8 ]
  6.     }
    + J( ?! h% A2 k) L4 r
  7. }5 b4 }# x7 \+ e/ S1 ~' r+ m
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример+ k- T: \$ \' Y5 O2 S5 X
* e8 i# b( {1 ]- ?* K8 R+ s
  1. public void die() {  // public void умереть()  ]; A* v' e) r, k4 s  ]
  2.     // Логика смерти NPC, ~+ v9 f! A1 C0 d, m; d( Z& f
  3. }
    ! r/ B  W  N) J+ W3 [! y% T
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:$ L- a7 v, g0 a' K; e! O, V) ^0 ]

8 M/ ~! k' q: c! D: |# i$ q* z: ?. T- T& B! J  y: V) O) b
  1. public boolean isDead() {  // public boolean мертв()$ s3 Q/ e8 Y0 G) G
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0+ g( s& d% H4 N5 V
  3. }
    4 _# G- ~& c% |, h% r9 Z8 W" L  D, ]
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    2 f& H# a& V1 ]' |, B6 \- L

# a) H# \4 F# s0 Q( ?
  1. public void heal(int amount) {  // public void вылечить(int количество)
    - t% I0 l) L3 m' v" ]; u) U
  2.     this.health += amount;  // Увеличиваем здоровье
    + ?) \4 m5 t: X1 _# b; }' @5 i
  3.     6 M7 i$ C6 X6 r3 I( G0 f% i
  4.     if (this.health > this.maxHealth) {; v8 @* L2 |# s/ f  g
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    8 [8 J4 v1 i0 Q% _1 |
  6.     }
    8 t0 u6 P# e9 c+ b) K* N
  7. }& E! n: J0 k% q, u' I
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    / f) G. {. ~# O) `! M

9 y2 E7 Y& G7 t: K1 Z- h3 |
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл); k( }6 |4 ~/ b& M4 H6 _
  2.     // Логика применения скилла NPC
    6 {4 D0 v7 h( f- |* u0 h" ~2 D
  3. }) q' E: A3 N4 N% q% c8 @: B
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:4 k% h+ E8 o/ M6 H) e$ h

4 w5 s, d  J- B7 N( z- `

  1. 3 W+ k4 ^# D: C% K2 I
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)' h% f6 d  S' U" D$ A3 K* z! |
  3.     // Логика взаимодействия с NPC" y9 J* U' H6 |3 J
  4. }7 ?1 [/ s' V- m
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    : k/ ^* H: T  J( O

+ `8 ?  Y' v% B0 C
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    + O( S8 J+ M: h0 {
  2.     // Логика открытия окна диалога4 Z( Q. ]7 r; k0 n
  3. }$ B& s7 s3 D4 }
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.; ?" O8 s" n  Z: E: U' G
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
# ]3 T6 e, X6 _7 }% L7 b& e) ?$ R1 g6 W
1 x$ t! ]  z+ F- D0 R
  Z$ v4 ^. z/ L) o

4 x/ P8 U) x$ J0 f
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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