Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 ) X" l& l; e  x

7 P0 a) F: w' P; b0 n, {' M+ G; z+ q4 F8 o: v: R( a/ J
Шаг 1: Введение в классы и методы на примере L2j_Mobius2 ?& N2 q( M+ P) Y8 f* c: b8 R
С статьёй можно ознакомится в разделе Обучение > Читать6 f4 A, l; a/ s) j( K

$ w9 ^8 l9 ~) U1 aДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.5 Q" r  h6 `7 T  f
) c, T1 R7 z5 f( \( J+ v# T" z
Обсуждаем:
6 [6 Y2 |; G, L0 H$ f
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius." u! ]; q! W1 ~, H' t
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
) Y: q, z3 O0 d0 B6 |8 G( _8 [
. C. ^- y) v6 k1 A
" q" j9 \% M3 J5 y" R- i$ c0 I9 q
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
; I* J! s1 c" j6 x: z( q% [+ Z# e8 W

5 c1 K  f8 n: D6 A6 X: t+ x3 O) V! z
0 T4 u+ M! m5 t& V8 a* t9 S6 x

% K  ~- l& u' ^( M0 r

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
/ o( b& d# W8 G) [! F
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
4 P# n9 R  [, u' |2 N( f2 WПочему мы используем ключевое слово this для ссылки на п ...

( _: q) c2 u) G: Q3 z2 u$ OКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
4 o' x- }% \9 aПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
4 D) e# ?3 }3 D( d1 C# o& K0 W2 c& A( q2 W8 v. C
Вот пример:* p8 H, u9 p! y8 w/ w% P
  1. public class Player {; M7 K6 E+ @$ N6 r: g
  2.     private String name;
    2 P/ e! u+ U" a" t, f3 O

  3. / Q3 T/ f# w4 c$ I8 @
  4.     // Конструктор# I& M0 F- ]* e9 o: b) f  S
  5.     public Player(String name) {
    0 \1 t0 I4 \+ |7 ]7 _7 L
  6.         this.name = name; // Используем this для указания на поле класса; b, ]. `. c5 G2 N4 ]" |3 i
  7.     }
    " z- q& S1 k5 G5 o; b
  8. ) b4 U2 c; O* q1 x- S6 B
  9.     // Геттер для имени& [+ [, h6 i  `* T
  10.     public String getName() {
    , U' M8 |( U' p/ g3 M5 M
  11.         return this.name; // Используем this для обращения к полю класса7 x. l+ v+ Z, Y1 ]! [
  12.     }
    + H: c/ P3 w- w. s' |4 Y5 c) S
  13. }
    6 ?, y+ y; U- t! V  ?5 o2 C
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
4 [7 w; r$ u4 V3 b- R; }* A6 u8 D8 B' E. b
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.* X6 j; G* j4 _. B

" [9 l4 K' d# I* |; m! jПример передачи this:/ g  ^5 m" s& y! J$ X+ z
  1. public class Game {5 h4 t! D) F3 j/ C$ e* v5 e1 J
  2.     public void start(Player player) {6 ^$ P2 I8 x4 t
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    , L% d. O( e6 \0 ]% ?
  4.     }
    6 P$ p4 g9 O6 P  n: d
  5. }
    + Y  @: u# p7 g

  6. & j% [0 |4 h9 V( J* q* `7 x
  7. public class Player {
    2 v/ @& v0 N, u  A1 y
  8.     private String name;2 G" T; C" P8 d6 E; Y; n- B

  9. ; A& n& g1 N$ y* `' t( ^
  10.     public Player(String name) {: l- g5 W# t$ S
  11.         this.name = name;
    0 E& p( g2 ~8 z9 ]' d5 s% O9 b  s
  12.     }% n, i4 x9 q: H9 q2 m
  13. 4 h- w4 _- ~# U
  14.     public void joinGame(Game game) {
    ) w! O) e+ B" k" K- M: r: }& G
  15.         game.start(this); // Передаем текущий объект Player
    6 V& W8 b5 Z. q9 V! Z& `4 n
  16.     }
    / ]7 C1 ]. e7 K! w
  17. }2 i7 z4 n" g1 S! J& }0 t
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
8 o+ M/ d' n2 W1 B+ h* w' {3 }
: f  {* q# ~$ c8 X# E
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
. c3 D, _2 k* A& `/ [3 Z0 ?1 p, J/ u+ G  C& x; C2 H8 l5 I
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
( Y8 {* O; s; }( o, vКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 7 n' I8 g) v1 E, W" s4 l
Mike123 опубликовал в 2024-10-17 20:05
8 p3 n) o: N, O( g5 b# b. b$ r  n% PДобрый день! , ~. J# h& K! q$ y/ Z
Как создаются и вызываются методы в Java? Мо ...
: A0 ?% D$ B& \4 k0 Q
Привет, Mike 123! ?8 H) K9 L7 Y) ^
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.; o$ o  D6 Q: Y3 I( ~

5 g1 S5 O/ [+ n- uДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.5 j7 O- r6 s; a/ I* V

  f8 K) G9 c8 Z. Q: u- t$ q  m0 M: H8 z7 {0 t6 r9 ~
Как создаются методы в Java?, q4 ]) d/ i- G, P6 R; {) F
0 l: t! V7 w  L# T; \# Y# o+ r
Методы в Java создаются внутри классов. Вот базовый шаблон метода:& [  b, W$ Y. E) e4 ?9 j7 \

' ^6 e) v, @/ V8 q# l5 F# Z1 |5 i
  1. public returnType methodName(parameters) {
    2 V* `; F( `( p3 f
  2.     // код метода
    5 P+ Y1 M6 V& @/ d6 Q
  3.     return value;
      k1 l3 V( H7 F4 X' r
  4. }: a) i3 s4 x! Y) Q6 n
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
      a. Z+ F8 f6 ]/ x! a: k" ~4 Q: n

! b# R2 e8 t$ \! `: J9 FТеперь перейдём к примеру.
+ C+ ^* s2 @: }, r
2 L! g  `. G+ a4 P& r3 _Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода! F+ B( ~; W  M% v
  1. public void attack(Npc target) {  // public void атака(Npc цель)% ]# }" [2 q, X5 B
  2.     // Вызов метода атаки NPC6 @% h5 h- C% i7 `7 {2 |* a
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());8 {! U8 M$ |' [% Y% Y+ q
  4. }
    : l3 k1 F+ a( F* f8 X. Q' z
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).3 ^3 y- S* s. U& k+ F7 [0 B
4 `+ M5 I; ], R: O
; |6 T) e9 j: `! ]  ~+ B/ k2 D- e
Класс Npc.java — вызов метода
" Q  H3 A7 b# g3 S4 V/ Y+ v9 V
8 x) p; o2 K0 x# M) q; `) U
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)' F8 `7 S3 \/ E* Y& ~9 F' B$ U% i+ o
  2.     // Логика получения урона NPC
    + G2 i: k7 n: O! h, Y
  3.     this.health -= damage;  // это.здоровье -= урон;5 ]6 |2 F. p* v
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  / p+ Q9 E) j0 C1 q. T" q. X
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    % D9 y+ `7 ]( }; f% m) n
  6.    
    9 q8 f4 x& q) j1 W
  7.     // Проверка на смерть NPC
    8 B; |" `; X- `9 h0 i
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    ( |) d/ [; y" a/ `8 y. y0 d; g
  9.         this.die();  // это.умереть();; V. P5 x( C9 u2 x8 l
  10.     }
    4 d: V9 \, i, e* D
  11. }- l& F# H0 `0 U9 x+ W
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    ) ^: s1 \  K) ^( G
Пример взаимодействия (с переводом)! L; \, P  u7 A* v: ]
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");3 Q; H1 j6 d: {3 c
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");( f6 R6 e1 h+ r$ O& V

  3. 4 D' Q1 O5 I0 ]( @% {
  4. // Игрок атакует гоблина# @! Q1 F5 t4 N
  5. player.attack(goblin);  // игрок.атаковать(гоблин);7 Y. ?9 m9 F4 E2 H' y
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 7 ]1 O  a4 @% {: K# D

* H8 P% Q* D1 l3 X
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
2 f4 e8 ~, q. r& ~' \У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!( E( b& K% {$ g; Z* i+ ^1 o

6 {& [% [% [! p6 m& O4 G7 H  c
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
( }* b: u+ g: {6 l9 z+ gПривет, Астралия! Огромное спасибо за твои разъяснения ...

' W. A8 ~7 j+ v- [( E1 k6 uОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
8 i9 m1 ^$ |5 a# \4 _# x1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример4 B: W$ f5 }2 n4 K: O
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    " T! j/ S  W9 e! c/ |- a: x5 l7 N
( a+ L- [, V$ r. e/ _
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)- R3 n( i' q* M0 h  L, U. t  X5 c
  2.     // Логика взаимодействия игрока с NPC  ~& ~9 V5 c4 ~. t' l
  3. }
    & D# u9 C% Q: s
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    : v7 v$ `+ u( v+ V/ s
1 t! M+ M6 p7 w) d* `* [3 Z; d
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)8 l5 J! t( `) \! c' w; |; k) ^7 l
  2.     // Логика перемещения NPC1 U/ G; o) Y0 m: {6 b. x
  3. }1 N1 O6 W3 v& _6 @) E) O$ e! F
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    8 V8 \& X! k, w5 i, a  ~. M7 m

) ]7 @# [# Q6 o$ J. p' P
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    & B) f7 C; Q, D1 z9 p# _
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)) t, T" _7 D# M: E
  2.     this.health -= damage;  // NPC теряет здоровье% k6 o* ?; X' D7 o' L
  3.     6 H+ ^; R9 ]5 _7 p; O
  4.     if (this.health <= 0) {7 N* G' P- M0 p8 n# T
  5.         die();  // Если здоровье упало до 0, NPC умирает
    * Q9 |: K' M3 F; P' G8 e
  6.     }
    ( ?# N( z# g5 M% Q7 T& @6 c
  7. }
      I* ]0 r5 H1 _  K" R8 M* A3 P- P1 m
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример, [" B' s: b  y+ T' R) X7 C

' l' Q6 a8 D1 ?
  1. public void die() {  // public void умереть()
    # Y$ X$ M5 J8 {6 B6 z  U3 k% b$ O
  2.     // Логика смерти NPC$ s9 L; L4 D- N% w$ K( z
  3. }
    3 W% _1 A+ q# y3 o; W% g
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    ! d& t: D( c- V+ S1 ?7 Y& v- \
& k' n8 r! U' N7 E; u  |1 G5 W

9 }2 ~' T7 \; d- I/ d9 W* s1 l( M$ ~! \
  1. public boolean isDead() {  // public boolean мертв()9 d+ W: ?( y& l- Y
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    / o) q2 f6 I! c# L
  3. }# r; |+ v' ~* |6 u% ^* ?  k1 `6 h
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    $ l1 W. y9 B1 Z( ]
) x* E! W* D, D! K5 c# A1 R
  1. public void heal(int amount) {  // public void вылечить(int количество)1 C  R4 z' W' N) U  j
  2.     this.health += amount;  // Увеличиваем здоровье) r" a/ a5 D5 _4 s5 ~
  3.     % K% _1 M  w. I7 q, I
  4.     if (this.health > this.maxHealth) {
    2 P* c! n, A+ j# w7 Q0 h
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального2 e! o, c4 k4 H$ ~( \  d$ u5 K
  6.     }1 t9 d/ c" H' \
  7. }; I9 l* w* q. g# y& C  Q: t
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:* H% C; ~. W& Q/ C

9 P0 M6 j/ W/ J1 N/ d
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)/ a- ?+ z2 I* g9 a" k- t3 }! q! ?
  2.     // Логика применения скилла NPC5 V8 C0 t$ j, t+ z
  3. }
    6 @7 S5 G" Y& K2 x+ u) R, n: E
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:4 C) ?' i) \7 s$ _& G

( I2 k. Z5 Y- [  C4 G

  1. ( i* W- ~6 S' T6 Z, f- U, Z7 L
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)/ M( T& s( U2 `9 g9 c
  3.     // Логика взаимодействия с NPC+ a" ~# ?6 h7 t$ i; e- {" i
  4. }: A) a7 H1 `0 [2 j: Y, U
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    ( Z, O- D0 T/ ~; m2 E7 x5 R7 }. G

& I, u) _0 d' `$ A9 w7 H
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    7 S, R5 o: l" |4 Q
  2.     // Логика открытия окна диалога
    9 M/ o" G2 k. s# @. |
  3. }5 {' K' E8 Y7 r# j- x$ e3 F
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
+ [+ r) r# K5 j& N' wЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
0 F- ^; x' |5 V" a  T% G/ M! h5 E8 ?/ c/ T# v

: f: k6 A  q4 C  |# l/ a
  u0 E) K% z: a7 t# [- W3 w9 Z2 A
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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