Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 ! E$ r/ W$ h  H9 ]) W3 Y6 {" V
6 D0 L6 d) P* z; {! h9 b
: A& D! u# c, B3 ^, E& f' s
Шаг 1: Введение в классы и методы на примере L2j_Mobius
* h3 ]7 _' r+ S1 p$ `8 R/ K# BС статьёй можно ознакомится в разделе Обучение > Читать9 C0 w" H* k/ p6 k- N7 h- l1 C4 {
* Q- h& s5 O& b) g4 W, s- B
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
. a/ a* n- O$ S1 o# K* ~$ s* K5 C
Обсуждаем:
- S6 \' p# l' |' U
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    , n4 j& r5 o; p) J9 W
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!% t5 [$ s/ @' ~% ^' U

+ Z8 S* i6 h7 m7 L+ {) Q7 K9 q5 ~3 k

4 t& p+ D! J, D4 OИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
, D5 O6 |7 h/ w! h
# O6 q* S/ q' L) l* i' _& S; C" l  c7 M4 a
+ u3 F& K) S$ ]: X

2 u1 Q4 f: I/ B3 L7 \6 U2 d: F0 w3 P7 f+ R2 m

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
9 g, x% n; s! v- N% v* y* ^
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17' g4 k- d6 r% e4 C: i
Почему мы используем ключевое слово this для ссылки на п ...
. v6 D9 c  @- Q/ n
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.- V- J) o9 h; _% g% q0 @
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
" u9 Q# O: {6 _! X2 M
# {( m4 A3 R( {; kВот пример:
9 v3 |' a  R0 n; [* ~. }
  1. public class Player {
    0 y% |" _: H% V  X/ O
  2.     private String name;
    2 p0 Q9 p% [! G  e

  3. " J/ {, |" Y: N+ t! W
  4.     // Конструктор$ Q; B- n/ Y" V* s7 l
  5.     public Player(String name) {
    ( A1 l. n- |) N2 d
  6.         this.name = name; // Используем this для указания на поле класса
    . G2 r) S! Z3 [) `2 X
  7.     }
    0 O/ e) ]/ g$ W+ b
  8. 5 a; i0 P/ E# t9 d# q
  9.     // Геттер для имени
    ; Q7 L/ J  c) G  P% N! B
  10.     public String getName() {+ O7 X( f0 |& X/ b
  11.         return this.name; // Используем this для обращения к полю класса
    8 e( y( r* p( {* w0 v; q
  12.     }+ j# K6 d7 _0 I( L
  13. }
    / y( v2 \6 T: e. _
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
/ O) W1 h- S" _! _- P' M% i0 l: @8 u/ a9 a
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    2 @: ^) ~1 R0 w6 A* X

/ \, J3 L$ r7 u% h) D& N  mПример передачи this:
: C. y5 S9 s- E7 q2 |0 j8 T
  1. public class Game {
    : {) c  U# l5 {) A" t
  2.     public void start(Player player) {3 W. n: W; z: P; _6 s" w6 S
  3.         System.out.println("Игра началась с игроком: " + player.getName());; ]0 v: {7 r: I1 H' v( B
  4.     }
    : O' D2 Y0 I) G
  5. }
    ( X& _! |5 Y* V9 E: e; g3 \

  6. 3 D0 i$ \9 x& @$ n& T+ I
  7. public class Player {
    & H% o( t+ P6 v8 a
  8.     private String name;: |' D* v) d8 D5 a9 l' L" e0 L/ B+ m
  9. 4 R' a/ W2 l- |8 l( v
  10.     public Player(String name) {: C) X; F0 R2 y* Y% E
  11.         this.name = name;
    & N6 A) G# Y2 B& V+ i( j8 X
  12.     }# d  V2 X8 m0 ~% f

  13. + T3 C5 W1 G5 c" _# ?8 p' j* s- q! P
  14.     public void joinGame(Game game) {
    " m( R9 _0 l, X( R
  15.         game.start(this); // Передаем текущий объект Player' b2 Q0 z! X6 s
  16.     }: [4 X4 b( ?) J; u! |4 Q
  17. }3 s3 c" T4 r) X' w
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.& Q4 E  T1 x' o: Z6 @" B" k


4 p' s3 t' e4 yПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
& ^, y0 A, G2 e2 U8 Z3 v) j, v) P+ n6 Q4 n: f  s% Z, p
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
2 t& i- @! T4 [Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 6 W/ O( ^9 k+ F6 X; |: d
Mike123 опубликовал в 2024-10-17 20:05
1 ^% ^& T" d5 d, D5 A" LДобрый день!
9 v6 A4 D& |* yКак создаются и вызываются методы в Java? Мо ...

9 U& f8 t0 f4 z- C" H# J. w, V& `& ]Привет, Mike 123! ?: f1 X1 n# {* R+ Z
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.3 r4 j9 r: O* t7 J

& \( y4 u' N+ c: |* N! wДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией., G# ~9 ?( W' f- u% t6 T5 N$ v
. J8 G4 r) Y2 U: C% ^, Q0 L6 V
. f/ k9 p: [5 ]
Как создаются методы в Java?
6 Q# w3 }1 r! V, P; S+ g
) r5 ~; j" w: f1 A5 d* C2 AМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
! {# g; N  v% P( e* E
( }5 d4 P# T! S' P/ v
  1. public returnType methodName(parameters) {6 p- V3 K  W* m/ P+ W+ J" Z
  2.     // код метода
    ) @- g5 y  i& Y3 a4 M
  3.     return value;
    ; A" ~3 Q: X, n2 j) j, k
  4. }3 g; H3 x6 O" u+ K1 J! U
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).( w7 V; W. Y4 l$ I  I, J+ a

/ g' G' ?( E! P# c4 GТеперь перейдём к примеру.
- \, _0 X. C+ J/ D4 e* o  m
" p9 |- {" t$ f- ]7 n8 r6 \Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
$ \, c$ f2 }0 Z8 y4 W
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    - q2 o. Z9 c; U" k9 ?
  2.     // Вызов метода атаки NPC$ m, t5 }0 t8 U# _% I9 g
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());* F- c) }' a; T( s9 o
  4. }
    5 @( V$ |4 {+ }0 f0 I1 ?( l
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
& Q2 V& t7 w% b8 s0 x, |9 }
5 K" s% J7 J9 e  G+ \! t$ N2 `+ _
& k/ i3 l. E0 n4 g$ l! d  U+ PКласс Npc.java — вызов метода5 ^3 o. D: _" @+ d. B2 N
& K$ N$ s# i0 Q
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    ; M' z; h$ v' X* G# k& Y0 q
  2.     // Логика получения урона NPC0 O4 }# H; k# A- m, G2 @
  3.     this.health -= damage;  // это.здоровье -= урон;1 v- C$ a( {6 {% L2 W. J+ L
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    0 t8 o- T, G, ^) U' g
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    % W) W  }  K3 E; }1 a$ V
  6.    
    0 q# V; v  v: d  D
  7.     // Проверка на смерть NPC3 r) ]" P* H3 S: P8 ^" [, e, E
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    ! L) m6 N) r0 S# P' t9 f
  9.         this.die();  // это.умереть();
    , K" p$ H- j8 N6 q7 |$ B
  10.     }3 a* W! z* r$ v/ d7 J2 s: V
  11. }$ U5 T" W; ~/ ]0 C
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
      i7 O3 ^1 l, x
Пример взаимодействия (с переводом)
3 H3 x7 H! r  L6 d* T+ R6 ?( x4 X
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    # d; M, h7 S* h" W- @
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");3 L- s% E" j0 l

  3. 1 m  |0 o% N+ J) E
  4. // Игрок атакует гоблина! e$ O  V9 v5 I3 v9 }
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    0 }) Q$ G% Z  A) B
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. ' C0 c; a. m" K0 ^
7 n0 B0 t5 m' ^; j. M1 J: l
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
3 }  i7 r  i: r2 u: TУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!; C6 L. Q: n1 I

# I- A& y! G  }: a7 P" T
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
4 N  x  }+ v9 Z8 HПривет, Астралия! Огромное спасибо за твои разъяснения ...

2 f% r, r+ c( C) d5 k& Y1 I1 x; H% lОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
/ U  b" H/ V; o% y1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    9 {7 }, ?# c* z: \; L% n$ P
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    ! @' B% ?/ L  I  N( C4 L

; M9 P2 v' Q' }- k# _$ D
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    8 B+ y6 E4 }3 l' \9 L4 x; [1 t
  2.     // Логика взаимодействия игрока с NPC
    7 s( i' _' B- R. q
  3. }
    8 T+ a2 G. \7 t
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:! y) N: w3 C7 h0 Y1 y9 ]' W

8 M" Q# L- s( {" K
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    ; U5 R" G8 U/ p; Q7 F' X
  2.     // Логика перемещения NPC
    ! U+ R! [) J( r; Y0 K3 t
  3. }
    / A0 {/ ~' G: c2 V$ a+ Q3 q
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    : ]  A, V' f. U* ?0 X; _
" b& o3 q. _1 X9 E
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    + Q7 U1 v7 D9 `" ^0 J" n
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)2 k' ^5 {8 o' v* w7 Z
  2.     this.health -= damage;  // NPC теряет здоровье
    " l- V8 P  i2 \& l- X
  3.     " G: X& j, h9 R$ K$ ?
  4.     if (this.health <= 0) {4 V$ y) @( d1 z* b  T  J9 t, M
  5.         die();  // Если здоровье упало до 0, NPC умирает
    ' v  {7 W" {1 B3 q
  6.     }
    " J) ^3 f' @- M- Z" [
  7. }+ {. M1 k+ A  B2 ^3 f
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    & K7 f! ~( R  T6 G) f  s- N

0 E: ^# l$ P* B) j9 f
  1. public void die() {  // public void умереть()- y1 C  |( A( [2 w# j4 d
  2.     // Логика смерти NPC
    % S$ i& @3 _1 M& s5 G
  3. }/ C1 T: M! O$ B$ a  M
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:# B: {# n+ I/ b6 i) p! U, g
) Z; r5 T. C6 p! W7 {0 u) K

* ?8 C6 t% y0 T0 i4 x$ r
  1. public boolean isDead() {  // public boolean мертв()
    2 n* q: t) O# a, K6 @# n! {6 a
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 09 J: |+ S( Z3 P9 p
  3. }
    " |" |9 R/ P; B0 S" ^$ Z/ Z
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример$ I" G, n5 J/ ^4 l8 k2 \( J% J  u( q
) _( u; l) a8 o+ J% d! r
  1. public void heal(int amount) {  // public void вылечить(int количество)( t' m$ X1 ?: S2 \
  2.     this.health += amount;  // Увеличиваем здоровье
    6 \* {7 \+ y3 w. f; ^( Z2 R
  3.     & d. o) n9 M5 \1 e- b
  4.     if (this.health > this.maxHealth) {$ t' s. r8 h: x, J8 G
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    3 r$ S* V9 U6 s" H  {
  6.     }; L1 ?, x, U8 y) r" \, P. k: M( I4 k7 @
  7. }( J% g, D& d5 G' `, A) T1 |
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:; Y) N: p0 `6 u+ B. ^, {0 w- L3 |
8 ^1 R1 s( _# H5 T. f/ h4 G# V; l
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    8 \. T( V6 D* C- ]- r
  2.     // Логика применения скилла NPC
    ( [! F( z  i/ l$ x: R
  3. }
    5 m+ H9 ^3 ^! ]0 k6 l
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    9 x; A/ a0 Z1 j5 t$ j; j  y
7 O3 L  N/ {+ H  [5 }7 D) N

  1. 2 x* Q+ R+ z/ S3 r4 j
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)% {" N" C( ]# z: g& U1 l2 r
  3.     // Логика взаимодействия с NPC3 ^2 L# Z8 N$ ^: l
  4. }
    7 f8 B" s4 C2 f. }
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:( b; m% Y" D0 t1 r
+ l7 r" \0 b' a3 @+ p. T' M; E& {
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    2 Q& K$ t! k8 R5 W
  2.     // Логика открытия окна диалога( @1 e1 M  }7 `  y& W" _+ ]
  3. }
    & w8 w1 W9 V, O, T
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.' ^- D7 p# i, ?; d* L4 B4 d
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
# l, X* c5 F  Y5 W; g) F
- w. |/ d' |$ E! c( v% {
$ n' E  C; g& U7 `1 B4 ~
9 R4 ~- _2 K, G$ b
! n1 A- l( u& `/ E
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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