artace.ru - творческий сектор

Название: Шаг 1: Введение в классы и методы на примере L2j_Mobius [Версия для печати]

Автор: Astraliya    Время: 2024-10-16 21:14
Название: Шаг 1: Введение в классы и методы на примере L2j_Mobius
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
7 Z7 D4 W/ v' s) D7 H
: @1 ?' C, T: ~2 r; d9 {# N7 \& [6 u! u7 B, z- S
Шаг 1: Введение в классы и методы на примере L2j_Mobius
+ X; @! @, C) O: iС статьёй можно ознакомится в разделе Обучение > Читать' @+ L, a$ ~( K2 a
* Q+ B5 e' B1 X* C( d: d  U. w. \, l
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.! j& Q; [* g/ M: F0 [
1 A. k: X5 u1 t/ e1 [6 s
Обсуждаем:
+ `8 a# B  u0 Z* r( BНе стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!8 X) U( L  z5 _. K+ B* L  \9 }
  i9 L3 k! x1 p- M! z8 F

) K/ Q9 e  _, }9 ^0 M# w
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
" I# Z. j7 R1 y" A
3 q  u6 Z, l: h- c: E$ D+ k2 t$ X' C; L' \7 l8 a' Y

) |. t, ]4 Y0 {' u0 l9 p8 _. N( v0 |/ Q. t5 l3 p

* e: m2 t6 N9 G5 n! f9 l
Автор: Mike123    Время: 2024-10-17 01:17
Почему мы используем ключевое слово this для ссылки на поля класса?
" ?1 U; }* ?0 U& ]4 I
Автор: Astraliya    Время: 2024-10-17 01:29
Mike123 опубликовал в 2024-10-17 01:173 l* M. ^* X% p$ M- f
Почему мы используем ключевое слово this для ссылки на п ...

) w# r+ F0 y6 M4 @) A  |! GКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.0 v5 N7 P4 B- `) y( A
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.8 C" z- i3 s# o) ]5 ~
) M5 O' T3 ~- g$ ~
Вот пример:
7 s; c, q2 l5 h' F, ?
  1. public class Player {
    1 {& r9 p$ W5 @, T
  2.     private String name;% C7 p* w; k5 N/ V4 u" x( p3 B- e1 j

  3. . n* g( s6 ?) y5 V4 K
  4.     // Конструктор
    # E1 {1 f' h9 M8 M# D& s
  5.     public Player(String name) {& b# C& X$ j8 s5 N
  6.         this.name = name; // Используем this для указания на поле класса
    : \* N* B5 K5 A3 L4 T
  7.     }$ |  `' ?3 `- L5 h3 B; h
  8. ; n9 r$ @" D6 s4 a2 Q. D8 U) K/ d3 _
  9.     // Геттер для имени6 A# Q2 H$ m2 g+ \; u5 \; S
  10.     public String getName() {
    ! x  A) o8 }3 V6 i
  11.         return this.name; // Используем this для обращения к полю класса
    " C" K& \* G& m' H0 m8 q
  12.     }9 ?; T; z! x$ [# C' S
  13. }
    - |7 U* I9 Z- R( E& E
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.' c6 d1 z* x# v& t  ~
* r% V2 @9 c8 M2 K) Y0 G" C& T
Когда необходимо использовать this:
7 j9 J6 A2 |5 H, k* N+ xПример передачи this:
, t; v' E& {4 B
  1. public class Game {9 [: |2 ^. w, e$ N
  2.     public void start(Player player) {0 p4 C) I2 n* t, |6 u; |
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    1 G/ r) x5 v0 N4 c$ C" R* ^
  4.     }6 O% l  o8 d; t6 c+ E( W1 o
  5. }
    7 p, J  |) I* ]+ y; K( G! O% A- N

  6. 1 @5 ]% k8 c2 h# _; d
  7. public class Player {0 k: w; g: o2 s+ I: Y
  8.     private String name;
      Z3 C+ B* c( O. t' a7 b6 Z

  9. * D' r. l7 N+ e) u! N
  10.     public Player(String name) {+ f$ @9 U. C# P- Q, E/ J
  11.         this.name = name;
    2 X2 O1 J' q- d( R. W" M( z
  12.     }
    4 m2 |! ]$ r9 V5 `( b
  13. - A2 o# A7 u( R! l3 j
  14.     public void joinGame(Game game) {
    9 b& |5 Z7 `& r9 l
  15.         game.start(this); // Передаем текущий объект Player
    1 U3 F6 H, b. {* \* o6 P# e
  16.     }
    # Z. R. F0 f! K, M
  17. }
    * f  `6 X' @: C) e0 D, b% z
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
) O; ^4 V1 {' C+ U, q
$ P: X+ p6 _  j- a4 T2 x9 [& ]
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?$ H  }; D" A) r9 G9 C

* }* m3 x6 F7 N( X- \, \7 [& L
Автор: Mike123    Время: 2024-10-17 20:05
Добрый день! * k# g. E, L) n1 l& c9 O) T) l* _
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
Автор: Astraliya    Время: 2024-10-17 20:23
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 & o! F$ d9 I1 n0 `, i0 r& B3 I
Mike123 опубликовал в 2024-10-17 20:050 @: m6 U/ Y2 E" h  {
Добрый день!
; F7 S% I$ N5 @1 ]3 OКак создаются и вызываются методы в Java? Мо ...

/ g! O6 J) [9 IПривет, Mike 123! ?
% y5 `8 C. O  m9 L# `- f( ?Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
7 I/ X0 ]" }# G. I' Y2 n4 S" e$ i' X- o+ h/ f! H
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.5 \% k! c+ f# O8 r

% N. u7 n. J8 m; a: H" l, H* Z! u& n. \- }$ v' X( ]& u
Как создаются методы в Java?
" ~3 r% Y6 o0 y" h3 e
  _2 t- a: j* VМетоды в Java создаются внутри классов. Вот базовый шаблон метода:7 y1 V* d. U6 S

( {$ d( F; ?; b, x! }5 v7 n
  1. public returnType methodName(parameters) {) J* U! {; \1 Q; t. O
  2.     // код метода
    2 P5 J& T% ~; a" A/ h
  3.     return value;
    " u" {* q8 X$ ]+ a, H
  4. }
    . }6 t! s2 H  r, t
Скопировать код
0 i+ G/ A# N, }6 t, ~
Теперь перейдём к примеру.
  T# d' {8 w$ }( U7 E/ ]% Z
5 @" ]1 j! v8 V: O/ u2 e* b  i* ~: mПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
. M2 M! s' q7 F" O
  1. public void attack(Npc target) {  // public void атака(Npc цель)' x2 Q# B. V% ?0 _, c; L. `$ v) w
  2.     // Вызов метода атаки NPC
    - H5 p1 Y  I) ~8 N1 L
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    9 E. J1 h2 p- ~0 {/ E. s/ y
  4. }
    & {% V* @" C' L: }2 e
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
: O/ d. x& v! w( c3 ?5 U/ @! I
4 N. b4 Z9 ]& \# p
3 v4 D$ M% o+ PКласс Npc.java — вызов метода. z2 V$ b3 c. ]& D3 y
1 w* a7 u' S/ j1 f% V/ I" m
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)  O: r! w# f9 q6 X3 O2 d, b# x
  2.     // Логика получения урона NPC1 `1 e0 c4 }9 J$ i- W0 O- o
  3.     this.health -= damage;  // это.здоровье -= урон;; S1 z' ?- t8 \8 o+ r9 {
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    " k0 B' U( H* M! k0 O
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    ! v5 }, E" M) x- |
  6.     1 a) m# ?6 C* u* C( s& P2 P
  7.     // Проверка на смерть NPC$ D% X/ d; w1 F: _) {
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    6 w# h1 w4 P5 h2 [6 i! ^4 S% D4 p
  9.         this.die();  // это.умереть();$ W/ _3 J# w" K0 C" `9 s* }  ]
  10.     }
    $ \; g( E* p, X2 J# ~  Q" V- J; C
  11. }7 V  W4 b$ r0 [0 n2 T. ~3 }, q
Скопировать код
Пример взаимодействия (с переводом)7 ?3 U1 e0 h: e, ]2 G! f
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");5 f% t$ z  X  ^( M+ c
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    6 Q3 O. G  m. @, z
  3.   R8 P- `2 i; N0 e, ?  a+ O
  4. // Игрок атакует гоблина
    + q) I9 G+ ~$ e: q  y! S
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    " X! Q+ m, }. q: {
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
! K- r5 f  w; m6 K
0 z! X5 h) K0 T4 _0 y; A
Автор: Mike123    Время: 2024-10-17 20:30
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.+ X* p, j* E  a* G7 a  Z7 ?9 Z% g: u
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!1 D: @" \  g3 g' Q0 f
4 U. }0 o% C8 G) s( Y9 R" a+ v

Автор: Astraliya    Время: 2024-10-17 20:57
Mike123 опубликовал в 2024-10-17 20:30
6 q  ?- ?3 n+ d# ~/ |! G% TПривет, Астралия! Огромное спасибо за твои разъяснения ...
8 E& p, t* P5 B3 N& m
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.. X6 P  m6 P% _+ g+ w! b9 v+ u
1. getName() и getId()
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)$ [7 d& d9 s; c# B; J- v( V
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)9 y( a& Z* ~7 z$ {6 X2 }8 l
  2.     // Логика взаимодействия игрока с NPC& k* N: a, \( ]: [5 z& r6 ^
  3. }
    0 j4 h% C  p3 l
Скопировать код
3. moveToLocation(int x, int y, int z)/ G. t) z5 I. f$ n$ \
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    : R! @' R: Y) H, X
  2.     // Логика перемещения NPC
    3 ?. x, X. _% g/ {2 w
  3. }
    - U6 }+ a& A; M" d: P
Скопировать код
4. attackCharacter(Creature target)( Q- F+ i; z6 R
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)* Z% C. j% L6 w# L8 k
  2.     this.health -= damage;  // NPC теряет здоровье
    5 G1 ?* V1 n6 ]- Z1 f, v5 }
  3.     ! j4 C6 {+ V7 z# E, T
  4.     if (this.health <= 0) {- q; L: @+ e  G- c
  5.         die();  // Если здоровье упало до 0, NPC умирает
    ( ^0 h1 i9 w* |( s* q3 c
  6.     }
    4 N5 K% x& p- `3 n0 U6 u# x
  7. }
    8 \0 Q( E# p, Y% h( ]# a1 i6 x
Скопировать код
6. die()
8 x+ V  @+ Y$ {! a
  1. public void die() {  // public void умереть()- j4 W3 p5 v# p- y+ ^! }1 p8 c
  2.     // Логика смерти NPC
    ! S  U* [' ]; y+ u2 W2 X8 s
  3. }/ p1 T6 `6 ^. |$ \0 j
Скопировать код
7. isDead()3 F* p, e; i' X' E0 B

9 s0 g6 e+ |# ~+ ]# y* o8 t
  1. public boolean isDead() {  // public boolean мертв()- R" j  K3 l6 T0 ^3 A+ D0 ~4 f
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 03 u1 c# ~7 [+ f
  3. }3 y1 i4 L3 T6 f0 L# \# q. q
Скопировать код
8. heal(int amount)+ J" `' d* x4 j4 s
  1. public void heal(int amount) {  // public void вылечить(int количество)
    9 o- ]8 P1 U6 q4 E3 [; X2 u# ]
  2.     this.health += amount;  // Увеличиваем здоровье: b# K+ i3 g3 w7 s1 I& C
  3.    
    & g& @. _5 B: k1 R/ W" @
  4.     if (this.health > this.maxHealth) {) ~( c4 E% G! l. f0 S
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального& O2 l) A# p  R. r+ }0 s8 ~1 s
  6.     }
    7 T* T- U$ N8 ]" z7 ^8 h
  7. }
    0 q. D. E4 S2 |
Скопировать код
9. doCast(Skill skill)
8 Y- N; @( X4 y+ F* {' x+ ^
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    8 g7 {2 q3 n6 v, H% J; A
  2.     // Логика применения скилла NPC
    & x6 B. w: R0 b7 F# L+ ^+ N
  3. }
    9 ]" h5 z+ h% |+ P; ?
Скопировать код
10. onInteract(Player player)
7 |! Z* d% Q1 V" T
  1. 9 \* {! Y/ l! k/ F1 M
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    2 u7 U% Y: z$ r+ m
  3.     // Логика взаимодействия с NPC% h2 y& ^! o: r% `7 ^) M2 [
  4. }& v1 T1 j4 D8 k- L! M
Скопировать код
11. showChatWindow(Player player)
' u5 k: N3 f+ z0 m# \
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    - j$ a/ `6 M: h  J9 H
  2.     // Логика открытия окна диалога2 m& L! }% N" u
  3. }
    ' T% A( h1 [/ }% p! U5 [& x
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
5 o, L: p. ^5 b- T; W% YЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
( c7 q- W5 y+ H! y4 M2 M8 A
' B' J/ O7 j4 `" t) D
7 I3 K9 p" b* u8 \& E3 V- `5 b/ {2 |4 ^" |& T
4 j0 L0 v3 ~( i4 j/ }+ j9 e





Добро пожаловать artace.ru - творческий сектор (https://artace.ru/) Powered by Discuz! X3.5