Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 . `- C8 O" d: c& m8 ?6 b  K3 j. T

1 \  ~7 S  e  V1 g  k& O2 G8 i* a# S% |) u' v- ^
Шаг 1: Введение в классы и методы на примере L2j_Mobius" }+ n" ^  U1 ^$ @) y
С статьёй можно ознакомится в разделе Обучение > Читать
$ Y; l# F+ T- r4 A1 w% w+ o' U8 @* x' m
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.4 Q- X; g' F3 K. ?" I" J
5 [" t* P6 k% I0 k6 `  Q
Обсуждаем:4 k9 ?5 b, b* [" X+ ?. `# @
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.' {7 y) H9 }* |: S
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
; a$ z+ G7 G( y7 O/ [6 t* k! h% H2 N) j" s5 X2 u

; @" l0 U( W! ~! u4 L2 P3 b
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!/ V2 f% T: f# f2 ]: B0 h

$ O( C' e! G( G, I; k6 a3 X9 m4 V7 P' |; m2 b" G  B, \: k  Y5 o
" ?! \3 s1 e9 h
* |8 v$ e5 H$ D. \8 `8 z
) z! b1 o- P) u. P7 Q! E0 d

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?8 {: ^( Q- M- C% D) d, N' n, N
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
  |& Q, a( a# k, nПочему мы используем ключевое слово this для ссылки на п ...
: s& m% U8 p& H; c
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.* m& `/ `/ L) x& f7 Z
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
" Z5 T6 G4 \4 d8 w) J* }  o1 @6 e0 U- h5 b4 A
Вот пример:
1 ?" Y' O4 t  K, s. J/ Y. q
  1. public class Player {- t; _) p+ R. M9 |6 P- i$ p
  2.     private String name;
    . w& [) s: }- O/ ^0 `5 n

  3. 9 B* S. l" |( a! l
  4.     // Конструктор$ v( L, f; f3 M0 y* j
  5.     public Player(String name) {2 }/ k9 b" A3 \* r
  6.         this.name = name; // Используем this для указания на поле класса7 ^5 Q# i- i; Y$ r$ D) E# t+ F, O
  7.     }
    * s0 f% o+ ~1 U& W8 y& m
  8. 6 v- [8 R6 [6 W$ I
  9.     // Геттер для имени
      ^7 N$ m* E3 V3 M% C5 A' T7 ]
  10.     public String getName() {
    : C- H3 E8 p& ^) s( f8 ^
  11.         return this.name; // Используем this для обращения к полю класса
    ! }7 a. ~0 o) t& H: B7 `' g: a. C* J
  12.     }* S% B, O$ L% n0 v; a
  13. }; G5 e5 B. ~5 c8 X% h
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
  [# s6 W. Y1 V; j* K1 c9 Z
" F' s2 i4 R  ^1 j( AКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.: j8 n8 T0 {7 b' q

1 t5 X' R! n, R2 j- CПример передачи this:
( Z. \# o6 n+ Z3 b
  1. public class Game {  C9 S' ^( m/ U$ z% w3 P6 U
  2.     public void start(Player player) {, y# Q# G( U. L& ^4 p& M  K
  3.         System.out.println("Игра началась с игроком: " + player.getName());( T' ~+ H8 N6 l% R# x
  4.     }
    / G* X9 [8 w0 U
  5. }* F7 R) v6 A0 z5 u; ^7 Q

  6.   ~8 i/ e* C; L5 y1 n7 S
  7. public class Player {
    ; x. `4 W: J' d  t) E! m  E* X
  8.     private String name;( @) |0 t; ]& ^1 W

  9. " M3 x6 W# c2 o! p/ h" a9 I( R
  10.     public Player(String name) {
    % v2 ^, c) M$ V% \
  11.         this.name = name;
    $ r8 R8 z4 @9 K! _& \& b
  12.     }
    8 O# a, s' b) s" V  k# J' g
  13. , I% [# Y" x. G1 J2 a7 r
  14.     public void joinGame(Game game) {
    8 d5 B. e/ M& y) D; S% r# ^
  15.         game.start(this); // Передаем текущий объект Player. [! r8 R" A$ @) c* G, w
  16.     }& r; P( x7 q  U* [
  17. }
    & Z5 W# ?. |! T& I3 j
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java./ P) o0 c/ G- k* }: `1 @


1 J2 H4 u+ C- u) a! TПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?/ ?& P8 D  v4 l6 c6 b. `2 V

% e) c, c+ \  K( ^: U, g: k
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
% T2 x: \" ~# p" o  ?Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
7 `* E3 f! Z# u$ q/ l: j
Mike123 опубликовал в 2024-10-17 20:05$ S( H3 b$ j0 @7 o7 B% W2 Y$ k
Добрый день! * P" ?9 O% e0 D8 u: q' E
Как создаются и вызываются методы в Java? Мо ...

) ^0 @/ I' O% D# ~+ k  {" s- ?Привет, Mike 123! ?
% @5 D; n- D* B5 U3 G* @# gОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.6 W* \1 N/ @1 O; l* S. g

' f% q. x! E$ e" e4 ZДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.+ O" u! L' T6 K2 G+ v; N8 _
" ]. c8 A. h+ P0 @" e+ u4 v
) Y" Q. ^, x% i  T
Как создаются методы в Java?
& q2 s) ?, _( j% W+ _& l# a
: P# F. ^$ b/ z1 A7 Z2 A- p& oМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
; W4 l; {$ F: i% \# a: K9 [6 _# }( x; I! a' {
  1. public returnType methodName(parameters) {
      u" l! G8 w/ L( J! p
  2.     // код метода
    . l8 M5 U" r/ Y  o1 W/ g
  3.     return value;
    $ `( Y, v" \/ d: y9 S$ c4 _
  4. }
    - W4 W* u- v7 w
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).5 ?2 Q/ Q( A  V1 P* b

& E# k) `1 ]" ^Теперь перейдём к примеру.# w& X% M8 T) e! Y7 {  C5 e; P
/ |/ f! H5 _& {0 S/ C
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода1 n4 E+ M3 `* [7 c8 q& h  x- y' d" F
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    . z+ |# [: D# Y: C' `! ~
  2.     // Вызов метода атаки NPC7 f8 _. |) W0 h# e( G1 s  z
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());' }: z! m- j1 V7 j  Z
  4. }7 p% H3 T1 M. p) p
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
- s) w* G: G( D8 W
* V0 N; g+ W1 }* e2 v. I- N* b4 T- L$ n; U  J# L
Класс Npc.java — вызов метода% l% {8 \* ~/ x
1 _$ t( Y' l: `" V
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)0 V: Q; K* Y( F" Y% F! a
  2.     // Логика получения урона NPC  p6 y" |/ O6 x/ d( \% `6 {
  3.     this.health -= damage;  // это.здоровье -= урон;9 L1 e+ y# T8 y9 [5 O+ s
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  5 u$ J8 a$ ^  r8 y! ]
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());  u( ^; p! V. m+ c" L
  6.    
    # U; U3 C& U* S2 j  V) Q* X
  7.     // Проверка на смерть NPC, S1 t3 L* J1 z9 n
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)3 x! X# e( Y1 G2 D' v
  9.         this.die();  // это.умереть();
    & @5 V6 x! N- X& B
  10.     }
    0 ~2 `4 o* {% {% h- U
  11. }5 X, M5 Y: N& z. ]
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).0 f% U& i1 x8 ]. o& K4 n+ }  Z
Пример взаимодействия (с переводом)
. o! D; a1 {- i3 U" l& N  q. ~3 V/ ]4 U
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");+ p! F. j% l. h" Z% V" w/ ~3 [- w
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");; |( S; d9 x, i% i' q' g  A

  3. 1 R9 w7 w: E. m# D* n9 I
  4. // Игрок атакует гоблина
    1 s1 L+ x% z4 I) q7 ]0 h" |% N
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    ( p- }( O" b3 s
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. : G- Z) P% K) a8 f( ]% S' b9 ^

9 t* j6 y7 H2 K3 q" X, }! d, \6 S
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
% Q- `! s' @% T  p/ V5 r9 a; mУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
; S: {$ q" \  z6 s1 O* ]& O3 y8 I+ i, I, \$ r1 w- k: R
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
  e3 X: d8 c0 \6 K9 VПривет, Астралия! Огромное спасибо за твои разъяснения ...
* A0 d6 ~" m/ T  c! X( O
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
$ K5 ^2 i5 e. ^% g; L1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    " t3 B+ q4 _/ G( _: b6 X
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    8 g+ o; V, p$ V/ ]: ~1 D4 a7 K
7 K( S% x: j- v* l
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)6 ^$ W  ~  G4 g% w4 S. O
  2.     // Логика взаимодействия игрока с NPC
    9 i) v) w+ l: R% ]  L& E7 p
  3. }
    , [0 X) s+ O- F. d
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:* s6 L3 e& P" k& l: T
& p4 j9 N, p" e# b
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    + Y4 V2 o  S" o7 S
  2.     // Логика перемещения NPC
    ! g: v1 Y' I% ?
  3. }  Y; U3 \/ @. x7 y* H2 P# i% @: X
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:  n1 h* I- ^. O8 {7 A( B0 r# a

* w* d& L. L6 e# ~2 o0 m+ ~- R
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример3 _: @8 a3 M+ e0 w: K
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
      U/ L6 Y/ K. C5 X
  2.     this.health -= damage;  // NPC теряет здоровье+ e( i; ]7 g! y4 A# {1 @
  3.    
    6 W& M) {1 u' j" i1 X* d
  4.     if (this.health <= 0) {1 L8 ]' m0 T! p/ L( P8 o. R4 l) z$ L/ f
  5.         die();  // Если здоровье упало до 0, NPC умирает
    & r6 r) g  c( Q. C( Q
  6.     }& ^/ f7 ?  e* o, {, y' w5 E
  7. }
    $ M+ n3 l7 J. J. ?& r% Z0 ?
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    6 v' I8 F2 {  T  z9 S$ P- w* w

0 i* C2 }$ z: d+ i5 p# W, z
  1. public void die() {  // public void умереть()  \( u- S& p1 V( Y# N6 _" s
  2.     // Логика смерти NPC
    9 D. b! }' @4 P1 V6 L4 x" C: t5 O
  3. }
      \7 v8 ^4 a$ H5 G/ ?/ e" z3 \  @8 _
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:- E/ ~) `* u1 {, o9 C
* i( e6 U" k* p) V( U' C# @
" {* `+ a9 t0 |6 w  H3 c
  1. public boolean isDead() {  // public boolean мертв()
    9 r! B; ~3 s) x7 L7 f
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 01 ^7 T0 U2 S& G6 H6 ~* z! [8 M% U
  3. }
    , t/ r- j' F. s6 s" K" }
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    & f! Y: P% K& I. S

4 T" b0 s1 k/ @3 S& b2 |5 F
  1. public void heal(int amount) {  // public void вылечить(int количество)/ V+ T' ~4 v' M5 V! B& C
  2.     this.health += amount;  // Увеличиваем здоровье- N9 Y5 c9 b" p
  3.     2 _7 h( w( ^! c) O, }* a
  4.     if (this.health > this.maxHealth) {
    9 d9 L# F' s9 S3 O$ W
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    # x" R1 k5 ?! q- }
  6.     }
    . {+ E' v" W1 V8 B
  7. }
    ! Q2 G9 j! F9 p  n2 B1 {
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:; E) O6 b/ T. a* w6 o2 j4 d# k- e" r
- a5 c+ ^! I. k
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    $ d1 E8 o+ R/ N" e
  2.     // Логика применения скилла NPC
    7 Q" {5 K, t' w5 ?
  3. }* K: [# P- L$ l1 E$ S9 v1 N4 m
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:6 h/ A, O' @' X$ f

. O& Y. U+ e/ ~

  1. 7 _9 x2 W* }% X+ ^- @  F. v( t: s
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    ' E7 g9 o0 Z2 H: }5 \* r1 L# m1 p+ S
  3.     // Логика взаимодействия с NPC% C+ z0 ^+ f% t% c" r% y8 H
  4. }
    0 o5 p$ R  d6 J# G" ?) ~
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    ' K! Q$ C- P$ X+ t8 I) M
$ ]3 x& C6 d+ Y) M. Y7 {7 ]' [% O$ \  w
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)# g1 W/ l7 h' Y4 |0 _* c) H
  2.     // Логика открытия окна диалога4 x$ }* h" s9 W: C2 Q1 o. r! X
  3. }
    , u  p2 _8 W; X6 g, j  C- b
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.1 t8 o; x2 `3 U0 E& P
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!3 z" ^/ z/ g2 E2 r

# J6 y9 G  x' s4 z5 ^( d8 {
+ U( Z2 G: o* v7 `7 v+ O+ i+ S  N+ F0 ~) J' O: v* r; x
$ T7 \- ~0 _0 M) g+ H3 H
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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