Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
+ m9 z/ q6 ^" C2 X
5 X, V5 d# a1 B1 d# s
7 n% r, C1 n( c) S- C" lШаг 1: Введение в классы и методы на примере L2j_Mobius
+ J6 Q% q/ R. _С статьёй можно ознакомится в разделе Обучение > Читать
; ?* O$ c' M8 [+ o7 U" x5 m3 c: g$ C$ J* q2 g0 P& s; D( ~
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
  O- o$ {4 k6 }
* o( e% f  ^0 R% X5 {6 WОбсуждаем:. }6 C  D& ~8 F0 g, d# W
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.3 `! \$ b, V/ }- Q5 Z, D
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!! P. r+ ^, H3 z
; e' b5 P, r; n

, W' D! A4 o0 r/ I* r# J8 x
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! 😄 Но мы вместе разберемся!5 I- P# i' n7 c& Q' f8 ~( U
# a( N# {4 f' @/ Q# H, T

. z! r6 b1 d) s2 I" u/ o: c, c7 r  o0 {# H7 N
5 E/ A& @/ r% a9 ^# L0 N

* Z* x5 M% h1 t& w$ s9 @

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
& Z1 j9 l" d: K- S5 T4 `3 |0 E
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
- c+ |( @/ i' I" |0 y  X7 `Почему мы используем ключевое слово this для ссылки на п ...

( P+ t) `9 B% s2 J4 ]9 LКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.; d# ^- o% J' k  @) c2 L  `3 {
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
2 x$ l) H4 U+ B/ O* W. d) V7 I1 ?$ g0 d+ k2 D. k) b1 t; D
Вот пример:: x: U: Y6 }. {* z
  1. public class Player {
    ) l# m5 ~$ h! x2 S; T0 A
  2.     private String name;
    $ z2 J! u& d3 K1 h0 P
  3. " j% M) r: [: O7 a5 A; \# ?$ R
  4.     // Конструктор
    " T1 R9 U. ~8 p0 Y3 L0 O/ N7 j
  5.     public Player(String name) {
    1 g  ?" b9 N" G
  6.         this.name = name; // Используем this для указания на поле класса7 t  E$ L9 A. B2 N- j
  7.     }
    ' C8 p: U% U+ l# k! h

  8. . K  T1 o1 i- @$ M
  9.     // Геттер для имени3 J! z* x/ e. C0 G4 x! l
  10.     public String getName() {
    $ H$ H* o4 f9 i2 G2 E! d; h/ g0 C
  11.         return this.name; // Используем this для обращения к полю класса' K" C8 R0 R" E. I8 R
  12.     }
    ' l, D* E# I+ r7 w9 ?4 H9 w! ?+ ~
  13. }, Z7 {" z& d) {
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.  {, u! b# Z1 L% f
# Z2 X8 h! [  {# v& D3 _
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    ) @  E3 H3 D8 X. l
: E0 Z1 Y& n' T" h8 }/ a
Пример передачи this:
+ _7 @" ^  b! F# P2 H- k9 Y
  1. public class Game {
    1 Q9 x$ `4 w9 q& y! o4 l9 K: R) s
  2.     public void start(Player player) {
    2 V- D  W6 c9 |" {4 A) o# f
  3.         System.out.println("Игра началась с игроком: " + player.getName());& F1 \9 f7 g& e* M# I2 ~
  4.     }+ c. a! z) a8 \/ D: J
  5. }
    * n8 o7 s8 l' U4 N+ j

  6. 4 I3 T" b. O! p
  7. public class Player {# [4 N4 ]% |, c* i
  8.     private String name;" ]1 ^4 w* f' K
  9. 7 S1 u4 ?% ^! d! r* B
  10.     public Player(String name) {" y5 k$ k+ a, E
  11.         this.name = name;3 S7 ~0 ~2 m) I' V( h$ [  T
  12.     }. u* v" Y: W/ P  d

  13. 1 M3 W! D6 i0 y& e
  14.     public void joinGame(Game game) {
    - S$ q$ u$ p6 w9 D$ M) R
  15.         game.start(this); // Передаем текущий объект Player+ B% c3 }, s1 N  n
  16.     }3 w) a: U: @3 x" x. }1 Q' @
  17. }
    7 J1 |, I* ]5 O% d! e* i; q* o
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.8 h8 d, y6 b0 S4 M. a2 v


6 {% c: N: Z* N4 s& qПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! 😄" d7 z7 ?, f! U. }& D
! |" H3 }( g6 `6 a- X9 m
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! + x8 Y6 X& m) `7 r& k' }+ Z
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 5 Q4 o! W2 C2 m4 \$ k
Mike123 опубликовал в 2024-10-17 20:05
; ~2 S- n1 K4 L  Q8 }Добрый день! - O5 B5 Y4 J9 b9 F7 r0 _
Как создаются и вызываются методы в Java? Мо ...

+ L, z7 C' d: Q" x$ d# i, oПривет, Mike 123! 👋
" r' _1 w; g5 X' @$ C5 r- UОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
* `1 x6 e6 W3 p& S' k8 V  U' H' J. r; [2 I8 e
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.4 V* M" b. x' y. c% o; z
. C- j6 a5 m$ G& G

, [7 Z& S$ N7 _0 y- fКак создаются методы в Java?4 y: i" F' o: W. n* M
, ?' l, }) O  F9 Y# H4 Y& H6 k3 ^
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
7 U8 s1 D* l3 X, A' C8 x5 j8 S# J$ ^$ f& D  G* p1 c1 ]5 K
  1. public returnType methodName(parameters) {( J2 i2 g- X! I4 m3 C1 w
  2.     // код метода) g" j/ J  e( r. \# B
  3.     return value;
    ( L" u2 u& a, Y+ I  W
  4. }. z% `; B. n5 I# o4 x
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод)./ J/ y5 l  b+ w3 s# E6 |9 p* e

6 i- R& C6 H  v" U6 F! O* BТеперь перейдём к примеру.
. Y  y4 `, \/ {+ Z$ S: u! _
2 h* O; q( w" OПример на основе L2J_Mobius с переводомКласс Player.java — создание метода$ c$ x8 |( W9 Z
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    : v$ a' d+ n2 l: t' j* s
  2.     // Вызов метода атаки NPC
    # @0 x5 ?$ U+ }$ v7 Q
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());9 l* D* |; y" |: A/ F' r% w4 B5 z
  4. }, K0 J( h, e( _: o! e+ B
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
3 i) e! S! o% d4 x; ~: d+ m7 n# G8 ]  u; j# d8 h9 w( S$ K( a" b
4 ]5 R  h6 Q6 N( g, Y4 y
Класс Npc.java — вызов метода
) R. w! t# R" M
% t2 f/ L) p% m8 z3 b$ K' k  w
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    & M% ~7 ?; y& H0 V8 w
  2.     // Логика получения урона NPC4 G3 Q4 a! t5 \; m. p; l2 T% X
  3.     this.health -= damage;  // это.здоровье -= урон;
    5 @1 r# q% ~: a+ ~" k
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    $ W9 a7 s) V( V" b* o/ e; P
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    % L$ K* t( y* ], u  b# l# E
  6.    
    ) u" i3 I; |5 K1 M, k; @# ?
  7.     // Проверка на смерть NPC, _* ?- J9 Y$ f; a) [' [* O
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    4 o4 \* T8 W1 p$ i1 H1 d
  9.         this.die();  // это.умереть();
    , l2 N9 x9 o( n  m
  10.     }
    ) R$ m% T8 X1 V& V
  11. }6 {% i9 [3 _7 p1 ~( ]
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    0 \$ @( Q0 ~2 _4 d
Пример взаимодействия (с переводом)
, S1 f7 [* K$ H% k: g
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
      m9 p0 k5 r& t
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    ! Q- I; t3 R0 }: W
  3.   ~2 K. d% F% e
  4. // Игрок атакует гоблина: N0 X& J1 D3 \
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    ( G, ^! k8 k8 d& d, Q/ M4 p2 k$ r
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
9 \2 f7 f/ ^+ Q) b% r+ _; c/ A; O' n$ P- D& r% h4 ?9 b
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.7 v) M2 s% y* U; M1 ]: `+ I4 ^
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
/ P0 R  R% m/ ]3 z8 K% p! A1 r
! w# D' ^4 Z) `9 ]7 y% S3 o" A
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
4 o( c) k$ R7 k8 k0 C! H; UПривет, Астралия! Огромное спасибо за твои разъяснения ...

5 B1 `9 C% W  `: o* d7 j4 bОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
8 f% i: c0 o0 [! z' d2 C8 Y3 y1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    ) Z9 P) c' ?4 @0 O$ [" s! l2 G
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:3 ~7 c& Z8 E" U1 B0 [/ s) m/ B3 ?
# h5 n2 S  M# P  p1 v1 `* y1 D
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)4 S0 C% y  I* B7 ?8 N8 O+ N2 t
  2.     // Логика взаимодействия игрока с NPC
    * U8 _& t5 J7 d* ?
  3. }
    : ~3 v# c$ T- j0 k' W! _/ O. E
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:3 x- N9 w1 J6 E
6 V- u7 L8 s# B& S7 `( [8 t+ S7 N9 M
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)" I  |3 p" E/ ~* a9 c; L3 Y9 H
  2.     // Логика перемещения NPC: W& P: M5 f5 T2 v
  3. }
    . B6 L1 w' I  @- t8 l
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    + e6 Y" U/ d) ^3 z% z* q

4 T* `, E) ?- x( w& T& e' e
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    . _# x9 j2 d6 i' u/ X
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)2 \/ s# {8 L' o4 S7 i) L- }
  2.     this.health -= damage;  // NPC теряет здоровье
    - V( k# C# L  m5 {4 }% @6 P% r
  3.     6 K. U8 V$ v* j2 G
  4.     if (this.health <= 0) {& d( B" v3 J9 _' b, g  F/ |+ B3 R
  5.         die();  // Если здоровье упало до 0, NPC умирает
    4 k/ R  |8 j. Y* m4 F) o  ], a
  6.     }
      f: g, B1 L' F) I
  7. }
    ; e# e3 |7 F! U2 ]0 y0 W
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    2 \7 B$ Q& ~5 f* h' m
# B  r* o* S) D  t8 x+ b
  1. public void die() {  // public void умереть()
    7 D7 p$ Q' M& G$ q2 Y  |" {
  2.     // Логика смерти NPC
    $ w) v" r$ W1 b' E1 t
  3. }7 d) A6 k3 f) B, g5 N# d% m
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:8 d% D% M3 A3 A4 O
  x0 J3 z+ s. e) Q8 S
/ T5 a9 {- H* v# l
  1. public boolean isDead() {  // public boolean мертв()
    + l& u$ m! L) d5 G. D6 [& Z
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    ) p' \. b( n7 g2 {9 |* J6 ~! k
  3. }  ?6 y4 B) f; Z; e- A
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример; w- E2 u  Y# G

4 c$ b9 W9 {7 ?# f# ?* V: ^
  1. public void heal(int amount) {  // public void вылечить(int количество)
    $ ~0 u" j- V* t/ M
  2.     this.health += amount;  // Увеличиваем здоровье
    ) J0 F  [$ V  z/ [  R& @
  3.    
    ) d  V6 {1 i; m4 C# z% C
  4.     if (this.health > this.maxHealth) {
    2 J3 S0 R7 o9 p! h
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    % Z$ y2 @) T! l
  6.     }% m6 a+ b" Z4 q" R
  7. }
      y1 w" g- I4 ^* @3 s
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:5 }/ @/ r) v, O
5 i8 `3 |: @; `/ m/ f' J6 h( _/ F
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    8 J" p+ N; z( I' v# R
  2.     // Логика применения скилла NPC
    / x1 A6 g4 T. q! a3 C4 m
  3. }  D0 l  ]; g) h9 M2 x# F4 u0 N
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:1 v( K! i6 v$ D' @2 e  G( \
( w' u$ a3 A8 \5 m2 ~% g
  1. 6 i. r1 k* v  R' u  ^
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)" Y  D" Z0 @0 j9 |1 @3 M" \
  3.     // Логика взаимодействия с NPC! |; m+ w) c& L9 j/ Y9 W$ O0 S0 K' d* q/ f
  4. }7 {- l, c& x; }  x+ {
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    7 u; R2 g6 q  i) C$ C

. o/ _3 W: y, j  }# x9 n2 N
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    ' g7 ~6 O* B1 g: m
  2.     // Логика открытия окна диалога
    & ]( ~: d+ j9 D1 e6 D+ U, |
  3. }- ?1 t* F: G% ?" L' d2 t
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.: p: L4 g! N7 n+ _# d
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
& [3 i; B  t* {+ m9 K' I8 U0 ]% D3 C5 p3 F$ [1 K3 u( N* V- e

* Q- G. p! L1 ]1 M, d3 \0 c$ Y2 \, m4 v, S4 ~" ^9 `5 k

2 E$ m7 L+ t) g; i
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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