Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
' ]5 w1 _6 c7 G( g$ e! U3 D& U" i) X; g0 h8 }8 i% u

. _7 ^$ w( k6 o( o& g5 h6 TШаг 1: Введение в классы и методы на примере L2j_Mobius
  m* S4 B, Q: f$ @" |7 j' M9 Q# ]$ GС статьёй можно ознакомится в разделе Обучение > Читать
, N8 a. F7 G9 U8 K# T' o5 G. N+ M
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.5 w: g- `! v  G/ `! j1 ~: s. s
: k  ~- T, l$ ]; q2 L" D0 ~
Обсуждаем:* m  }: g4 q; P, f
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.) r2 K7 Q6 z9 d; r+ f
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!0 a, S! H) q) S

6 n# H; D- M. ]1 y$ H4 c
) U* ^0 y1 e- I' ]7 T9 ~7 ^, \# @
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
5 i) g9 B  q* u& s& s5 ?
: C0 d; }$ J; j( J( i9 \! E
% |/ x! W' m3 K. J
9 Z& j' {, ~; G* f' D% [
/ J- B, }6 ~* ~; M! A! Q
, M1 n" J$ e6 n8 ~0 j

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
# f4 U# Z! b" M, j: y
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
6 v' `% I& t2 {. b$ w/ D( T5 jПочему мы используем ключевое слово this для ссылки на п ...

/ ^7 S: ^7 j, i5 b/ mКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
- S  @7 Z+ {4 M- t( qПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.8 S2 h6 S: _8 ~1 ~

% z. J  F# k0 kВот пример:
/ \+ V! R/ Y+ C$ h
  1. public class Player {
    2 y; F, T5 c3 P" [1 L* e) z
  2.     private String name;& N; I, m. U8 x3 b/ f

  3. % w+ \! N0 R+ z( _; ^! O1 v
  4.     // Конструктор9 t5 W' N! ^6 @' U! o
  5.     public Player(String name) {' A% `4 w: \0 T. b
  6.         this.name = name; // Используем this для указания на поле класса
    : x* E% q  I1 y# Y, M
  7.     }
    5 v- ]$ e; O/ z0 ^* C

  8. 6 x0 |$ k# w/ S( R% M8 m/ F9 g
  9.     // Геттер для имени" B/ i+ M8 _& [
  10.     public String getName() {
    / |! H4 M% r, v& {9 u
  11.         return this.name; // Используем this для обращения к полю класса
    9 Y1 C, _3 Q7 |0 S2 O+ m2 t
  12.     }  y1 |6 T2 r/ V  p
  13. }
    7 g* ^# n0 ^: Z( Q7 `8 R9 f
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
0 ]3 z) q5 v: @1 B8 N( M
1 I0 t& u8 u6 }# i; r& zКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    3 ]! g) Z  V8 t8 o0 C) L* [* [

2 a. s" y3 Y( Y! ^: F  f% MПример передачи this:/ U- v" z: U3 Q6 X
  1. public class Game {8 g0 ?  L0 [' B. T% w
  2.     public void start(Player player) {/ G6 T) I( u" g! u8 T
  3.         System.out.println("Игра началась с игроком: " + player.getName());  B  R( J& K* S7 Z7 w3 U2 A2 s
  4.     }0 A6 w. P/ ^8 H3 D; \1 k- W6 T; a
  5. }! |: Y) Q4 l% y

  6. 1 r1 g$ Q2 ?- P; C. o, t
  7. public class Player {
      Q0 I/ Z; Q2 {* S* Q( ]3 G
  8.     private String name;
    ) f, A$ w1 T( r1 L! A/ J

  9. - \2 A2 ]( ~8 M; Y' M
  10.     public Player(String name) {$ _" W: y) P' y' Z$ r; B" o+ F8 ~9 X
  11.         this.name = name;" V+ s1 X7 J" _# k
  12.     }
    . E8 n  k3 I1 {9 D) c% i/ E5 d

  13. ' [5 V9 l3 q* T4 H
  14.     public void joinGame(Game game) {
    3 P- O0 V; z9 _! `$ o. F( ~4 ?
  15.         game.start(this); // Передаем текущий объект Player6 O& {% k( F' m; g
  16.     }& |4 }- N8 y' x- F1 j0 |: N
  17. }0 l0 L+ p2 t# ~  _
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.0 N$ ^; L* `$ P

8 L) B% j+ q/ D# G) T& b
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
# A- m. \. Z' H
$ J$ V7 G* n- R% t$ Y
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! : n0 Z& A* ?) C- r7 y* ~. f
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 9 P7 }0 N- ?9 {
Mike123 опубликовал в 2024-10-17 20:05
. m* \0 o+ s. l$ @( ~4 H! }Добрый день! ' F1 X9 s# y0 k5 g( y+ z4 F! _
Как создаются и вызываются методы в Java? Мо ...

, i# |0 X* g1 U* `" m# eПривет, Mike 123! ?
% Q! s# m- m5 J  s( F2 DОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать., k' j; S  h8 c
( q7 z8 J9 W9 U1 D
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
' [! G! u; {3 A1 S0 l9 e) \% p; }* b) h* t" z5 ~. g/ `

  h  f7 n5 |) k, c- E6 A. VКак создаются методы в Java?
/ Z3 c( b+ G2 i* i! E: J6 f
- w) x0 {" l' ~1 V3 J. H" pМетоды в Java создаются внутри классов. Вот базовый шаблон метода:% A7 `# M7 ?) O, t

5 n/ G. B% F* o0 k  Z
  1. public returnType methodName(parameters) {1 ^8 G; E# @2 l, G. b4 x
  2.     // код метода
    4 d& V& t# r( _: ^! p( Y, M2 d) A
  3.     return value;
    + x, y1 o. Q. y, Y6 W" G9 Y
  4. }) m" D: T( d- f0 w) N/ p
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    & V0 M% F4 M+ g9 j

& T' U2 G  s7 m" Y# lТеперь перейдём к примеру.
- `- J4 h  t7 |0 k3 J) L* Q$ ^
( e9 @7 c! V  }9 Y( D6 j: g$ h- sПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
' I( m( f+ P9 B& z) \
  1. public void attack(Npc target) {  // public void атака(Npc цель)( \7 \& E8 @+ i+ n6 t- Y3 k
  2.     // Вызов метода атаки NPC  P$ r. B3 I3 C/ c. X: @
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());1 g9 N% d# n& d5 `8 ]1 `
  4. }
      R+ V+ i: T( E4 j2 R/ J
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).% s8 l0 W, ?6 Z. q5 s
/ T4 y7 Y( J) K0 M$ A
' S( M- ^: P7 L2 @
Класс Npc.java — вызов метода
% T# f8 {% h5 u; H. D! y# ?
- |( `! W5 z! h1 G
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    6 e7 F; a3 e' c& D. v8 ]6 c
  2.     // Логика получения урона NPC, m- f3 O* C% g7 z) e0 N$ m
  3.     this.health -= damage;  // это.здоровье -= урон;
    # X& O# S/ f: D! j3 _4 D& N- p" \; ~
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  + `4 `9 m, Y6 Y/ D4 S  @, L. I
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());; C9 r. |3 C- I$ ]7 p
  6.    
    . z  U" y1 t1 l+ X  L5 Q3 _3 o
  7.     // Проверка на смерть NPC2 Z3 j" h7 @" |! @  Z5 b
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    - C6 I3 Y+ M9 H0 L" j7 m7 K' }
  9.         this.die();  // это.умереть();
    ' Q' i) C& P6 @3 U( q6 S; G
  10.     }2 d/ x! b1 v( r- M4 X; P8 o( i
  11. }
    4 v* W/ [! z! E; a3 {
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).0 b- x4 f' K4 j
Пример взаимодействия (с переводом)
# ?7 d3 W. p- W5 M
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");3 ?9 ?+ {1 d0 m. \
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");9 X! o- X( p8 n
  3. - o5 c* B+ a+ W# q( f
  4. // Игрок атакует гоблина
    # }( T8 \9 R) j  k8 d7 o, j5 s
  5. player.attack(goblin);  // игрок.атаковать(гоблин);! |" i# o4 ~: A, j1 Q8 t
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. # ]; x. c5 K- |8 n/ D/ d
3 `% X2 x  \8 X5 i! Z5 }; F) p/ G
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
. |8 X1 c) P; r# g4 O* H' NУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!/ i* O" o+ O# a1 O! X
7 ^# G1 I2 s' {8 d
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
% A/ e8 D- m; w4 s4 J5 y& k) WПривет, Астралия! Огромное спасибо за твои разъяснения ...
4 r8 u$ @3 Z4 k/ r
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.1 o4 x( V$ V! E- S, t7 Y
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    + b. ?% H) x8 G1 a
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    ' j6 E* `) _. J  C

" @; _0 `. e  M, M- u
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    ' g% T0 H- m8 G% H+ y, z5 j& U) b+ j2 a
  2.     // Логика взаимодействия игрока с NPC
    * }0 J0 e0 q$ z1 o7 H0 L
  3. }3 m( w8 p1 c* V- [& v
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    ! d* l" N7 Q9 P

4 r( C5 p2 p0 `- t
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    ( \. |2 W4 A, N; i- X+ a
  2.     // Логика перемещения NPC8 V' F% U! E5 k  E" H9 M
  3. }4 Z7 _8 R3 |! A& C
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:6 F4 S( M: O/ n- ?8 u* W+ D

7 B8 Y+ Y( l/ p8 l# o+ j
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    ( p- E7 h4 R0 s* V% X& L2 Y- t
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    + A0 s, f  J# u' r! R" e& ~
  2.     this.health -= damage;  // NPC теряет здоровье# E; t: Y- D& Z* e
  3.    
      _. h& X; x) k) l- a
  4.     if (this.health <= 0) {1 g# V- G( _* @: |. ]' U5 g& W" j
  5.         die();  // Если здоровье упало до 0, NPC умирает
    , J9 g4 M( V0 k0 A
  6.     }
    ; S: f$ z, y# ]$ U
  7. }3 Y) T+ _  i" _1 p8 F0 X$ G1 r# h; E* g
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример+ n. y: U. g) c7 s' v) _
% L: Y/ z* D  ?% A, M* i2 e; v& I
  1. public void die() {  // public void умереть()6 a1 _6 Q, `3 E- M* N, d3 E
  2.     // Логика смерти NPC
    8 J8 }3 E8 E. z- r" ?3 ?
  3. }" G3 [6 ?/ R, D/ @0 _
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    . F5 d; i8 W5 ], N7 ~

  E+ W2 j8 M* o5 x" B% Z# S, B  G9 D7 M1 b8 @
  1. public boolean isDead() {  // public boolean мертв()
    $ W  h. \8 l& @, q1 h
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 07 g2 k8 B/ G, Z5 F- }5 f
  3. }
    0 b0 L, c) r' a1 q' ^3 U! z
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример9 l& l) H$ \1 w: p1 U

6 {" M5 \9 B2 {0 J& S. H2 a8 ~
  1. public void heal(int amount) {  // public void вылечить(int количество)
    ( t( B7 f7 i7 a) Q& _- s! z/ T
  2.     this.health += amount;  // Увеличиваем здоровье3 H( A. ]; k' ^; c2 J1 g0 Y
  3.     7 G6 {' g4 U) ]+ p
  4.     if (this.health > this.maxHealth) {
      c# _' ?, ~0 D; g
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального* d- ^# A' n) O+ F! }4 o' w1 S
  6.     }
    , B( W3 Y- X  K
  7. }
    6 \* z: [8 @* M3 b- |
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    0 p/ U' T& ^8 c
0 `0 T) i( E! P/ D6 [; q
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)- E) o& x% Z) v* m& r
  2.     // Логика применения скилла NPC% O7 A8 W8 }- p/ |
  3. }
    " k! n! A( Z, h: m& L: L
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
      g4 I5 Z: X* Z4 ?  c& R; x
0 d) ?! B0 P6 H6 }% s% G; {

  1. 1 l0 p4 H7 d: ^' |- }8 {/ u# @
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)& s# J" F) p8 T! v0 L) @
  3.     // Логика взаимодействия с NPC
    4 t+ Q. G0 P# t4 r8 P! V% f( y
  4. }
    ! L; S% L9 \* I) ]/ X
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:/ W3 T& |# F* P; \+ \3 W

$ {6 E* {2 T, |+ k+ q
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    + O) K9 \, ?7 P
  2.     // Логика открытия окна диалога& A2 q0 @* }, b7 s* m2 o
  3. }
    + K' ]4 t$ u4 p" F* u0 o1 u6 F- H2 x
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.5 |& z6 Z. H+ L! f' z) E# _
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!' g2 m' g. i9 J) Q' k+ x, `: i# ?

" R" G& }4 Z( ^' z$ U. v$ Q0 R! e: }6 h: ~
1 O7 n- @& \9 l  t" f$ S

# ~+ _6 \' o7 r, d. L) E# C
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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