Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
' z4 T) g7 B3 C6 P2 l: n; s2 \; s  K* u. y( w& g# ?; A
, ]9 ^, a1 B2 [' s) |4 H
Шаг 1: Введение в классы и методы на примере L2j_Mobius0 b, n1 L4 v1 C/ Z& L
С статьёй можно ознакомится в разделе Обучение > Читать
' F; j0 i8 T" |% p; c# K5 Y+ \# {+ l# Q4 H+ Q& I" g6 C% b
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.# j5 B& r4 c# R) }' {! c4 z

( W4 O) |/ S8 u' U$ @: N; [  tОбсуждаем:) E. W1 |4 {+ d* V+ q
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.9 M2 T7 \& R$ ]: X. G$ n
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
5 P5 |; u: W  f+ b; U# B
. c) P2 P8 v$ B- E

# Z* r; `# d6 [6 b! u7 VИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!4 [" I! v, ^4 e: a
5 M4 q. G( W, R5 {3 ~; l

! x' N; e' I4 F# d! @3 i
/ r* n: A2 v+ ]+ I) r0 ~( y$ ?$ W: V% w) v7 {% B( O0 P- U( T' K3 ~- m7 Q1 g

6 ~9 y) z9 r& h. Q* N5 t! i

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?9 @. ?; q$ u1 P9 u: y4 e% _
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
7 r( Q6 n3 @0 {- v6 H! Y7 xПочему мы используем ключевое слово this для ссылки на п ...

% W3 m5 W: @  u0 N% tКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
* w6 ?  O" V9 E3 `2 m, vПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
, G  l% X# s8 d  C0 W% Z1 v" _. ?" C
Вот пример:
6 S! [  Y' }+ n; w9 _; }
  1. public class Player {
    $ s  n* `+ P2 o- |4 v4 M  G" a
  2.     private String name;! C) Y5 q" |* k
  3. 0 X2 i. Y6 Z; N
  4.     // Конструктор6 \" z+ F6 U. w5 A5 L1 r% ?) C
  5.     public Player(String name) {/ X6 g+ g4 t2 M4 @4 y: V
  6.         this.name = name; // Используем this для указания на поле класса
    ) Q* J0 F( H# H# E( I
  7.     }! K3 U( o/ A* g. ~- b

  8. " J3 r+ {$ {& Q. ~4 _9 |) Z) k
  9.     // Геттер для имени
    + c3 I( X$ ~% D
  10.     public String getName() {3 s( T" b$ @6 B) `' V0 L
  11.         return this.name; // Используем this для обращения к полю класса
    7 F5 l7 ]2 J/ G) n/ X; g" q
  12.     }
    . y5 q* N6 \* \# L! H* ?
  13. }
    3 N1 ?4 k, k% q6 k
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
  a! C" l4 B  k9 ~3 {
# t' ^: x  ^% g' T$ y* g4 CКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору." i2 Y3 P1 b6 f. ?  {/ U

' M, c" @6 c) j6 g$ VПример передачи this:
$ C5 P+ q7 H% X! K
  1. public class Game {7 ]4 Y9 R. V5 I9 N2 e
  2.     public void start(Player player) {
    . j9 X0 {. }' R  S) X
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    ( t  L  v4 B! `" c+ x' D
  4.     }8 ?7 ^+ z+ {- @3 T
  5. }  d2 T. F. H7 x3 V( X  ^" b* E
  6. 9 s' m: }7 r9 n" O! ^$ f5 i3 [/ m
  7. public class Player {: R; S  \9 x" i! G9 g! \. p
  8.     private String name;/ O! `; {6 I, L9 w! ~3 D. I

  9. # d7 s: Z! U: h# [" P2 v
  10.     public Player(String name) {3 K, u* `: l+ j; h
  11.         this.name = name;# u4 X# p5 V1 i. F' j% d
  12.     }9 o3 n  v+ o. Q! |+ a. L

  13. ) F+ R  s4 Y& e- V) z/ I
  14.     public void joinGame(Game game) {" i" ]  |3 d2 G7 f2 e
  15.         game.start(this); // Передаем текущий объект Player8 B" N; k5 T0 m9 ~! b
  16.     }
    6 A( I% R3 A5 o9 [+ I1 r' u
  17. }
    1 D5 Q2 h/ N! I/ J
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
: X2 b' z. p) O  ^6 `5 Y0 x" H4 g
- n; u5 z' `9 \* b, K
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
( q  w/ o' h$ L" Q: V- B9 Y  w0 m$ W/ P% V. W
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! & c2 H+ n4 j9 \
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 / S3 t% u, [' P) a
Mike123 опубликовал в 2024-10-17 20:05' ~$ D6 X8 `" h' _4 X" z: T& Y
Добрый день!
+ \0 H. U6 |# Z# S4 e" z+ cКак создаются и вызываются методы в Java? Мо ...

: I0 p( D/ L( Z% Z) T) WПривет, Mike 123! ?* n% L7 I+ T) U
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
2 s% X6 {" Z' i+ \# N; _% `
) f" ]1 R1 Q+ M3 ~' }) k5 r3 BДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
8 `$ X4 j2 H% M" i8 m& L7 q
$ a9 p1 e" e5 A( U; }& Z- J5 f) p: i6 z( B
Как создаются методы в Java?
) X8 n! {9 v6 t6 z$ T3 l
( \; ^. i; k, L& S* l& @Методы в Java создаются внутри классов. Вот базовый шаблон метода:
5 d' a- H* H, W  B) J" ]  p
' L5 I0 ]% \% n
  1. public returnType methodName(parameters) {
    0 k) z7 k4 @/ x3 W: K. N% y
  2.     // код метода
    2 ~- F9 m' ^6 x7 I- l$ z' b$ L
  3.     return value;# j  U+ J1 p! x. [! m/ H
  4. }
    - q- J- \7 Z  G
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    & u# x1 a: I4 L  u# E

# R7 H# q/ c+ gТеперь перейдём к примеру.
, H, Y& h9 `! Y' y% n7 v' Z  v: h+ L' H6 a4 r
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
7 _4 @- u. W; r' w9 F
  1. public void attack(Npc target) {  // public void атака(Npc цель)0 ?# ~' E( ]+ f* r) G  t8 O5 k3 l
  2.     // Вызов метода атаки NPC
    ( R+ u( l# g; f$ D
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    0 v! h0 u- t0 h, T3 ~
  4. }+ ~3 ?8 c3 j- ?" }$ f
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).9 J) c9 k) T7 g7 u5 ]% A
0 {6 t( a& a+ _7 A
1 b  ]9 l5 V- L( d* [, p
Класс Npc.java — вызов метода
0 U& f1 _; q( T% v5 C9 I6 K1 z6 s+ T7 I7 [2 p) A2 r0 ]1 J0 p
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон). U# p; q% U7 m* w1 V# v2 F: R' W
  2.     // Логика получения урона NPC* [6 o6 _: G) M2 i
  3.     this.health -= damage;  // это.здоровье -= урон;
    6 f+ ^  d+ b  i8 p6 q
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  * g  H! F4 P" M2 b( U
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());# ~2 i. j: }# [& p1 }) g7 R
  6.     & H3 `1 G" i- k! E8 d) L- Y/ p
  7.     // Проверка на смерть NPC
    + d: i1 m$ m8 w6 I& z
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)4 C1 I/ i* F$ f6 f* G5 O
  9.         this.die();  // это.умереть();
    1 F5 T' |% q! f9 T7 h# {
  10.     }
    ( {( L" @. z6 O  W5 F
  11. }( q! \& f* O! \9 ]* T
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    ' h! h6 e3 V' z- F! d1 x
Пример взаимодействия (с переводом)/ L" }$ F& Y" S3 U7 i
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    % A2 F6 I9 N' O: O+ l# _. v
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    + \, j) \0 ~' h0 p* J% I" h
  3. # P% ~& k6 ~0 z. D
  4. // Игрок атакует гоблина
    5 _! m! O8 G/ T* L
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    / _2 p) A9 c0 M2 ^# K/ p" o
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 4 c( T: Q0 t& s) j7 U& \

& K! v; E8 @" T. D  p; @( O5 V
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.7 m8 h; |" _* R# k, v2 k, U$ w
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!; G& P& n" c  X/ G6 D5 Q

4 m5 J3 v0 u. `4 V  P
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:302 \6 X! ]4 n9 N7 H
Привет, Астралия! Огромное спасибо за твои разъяснения ...

1 J* X4 s7 d+ e: pОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.* c' t- O! X; o
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример4 y6 c6 l# `- E% ]# Q
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    0 @- f; K& a$ ^# V
" j% o. q7 |7 K/ l' Q2 P! A
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    2 M' v  v8 n$ c6 w
  2.     // Логика взаимодействия игрока с NPC. Z3 T! h) G; o# O0 m0 `
  3. }
    7 l! D! x% ~2 j, e. L, g
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    % X& l# H+ {; j$ w  Z  [

/ K5 H5 L) ^+ s  O( s) N* ^/ y
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z). }# \  ]5 w1 U3 _
  2.     // Логика перемещения NPC- r! x9 K% S- L, u0 U
  3. }
    # n1 m& z4 B' }6 {! D) [
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:( w3 r  q& Y) d3 G2 K

8 p2 ~- Z7 ?5 [7 ?, E
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    2 m8 c. Z& v+ \: Z' f9 a- a
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    ; d/ _: [7 T7 w6 j/ M  k1 H
  2.     this.health -= damage;  // NPC теряет здоровье7 I$ {7 ~8 y% W7 @1 ^' W) B
  3.    
    & p8 ^# j4 y8 j4 }+ ?1 v. Q2 h
  4.     if (this.health <= 0) {
    ) Y- f3 R8 E2 @
  5.         die();  // Если здоровье упало до 0, NPC умирает9 q% n; V8 L! _4 S: C
  6.     }6 Q3 |6 \! P6 S* J: j
  7. }- m% ^7 M! G0 S) g2 P4 A% u$ E& K
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    : f$ Z. {7 l0 L

! l' n0 ]" U+ I# v3 K- V- ?; y
  1. public void die() {  // public void умереть()# h% s6 b+ f) j( U7 C' s7 T: E: i
  2.     // Логика смерти NPC8 j# `! m+ t; }4 k
  3. }6 |: [$ t- h# @7 t0 s
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    ; G- o- v) ^. }6 z  E, z
/ z0 W0 \( ]/ A

9 F8 _, K7 q) F  B7 s) G* X
  1. public boolean isDead() {  // public boolean мертв(). z+ D6 N# ]" D( A/ T
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    & \, r: v( y4 x- k3 F7 @6 [' Z
  3. }& q' s7 Z6 S, Y! z
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример! y  D1 R9 o, d
! P2 v( _6 x$ j/ J1 t
  1. public void heal(int amount) {  // public void вылечить(int количество)
    : x4 o7 o7 l" \
  2.     this.health += amount;  // Увеличиваем здоровье
    - J0 V8 ]& w  S- k$ s$ ^
  3.    
    0 W, M$ E/ d* `1 h6 a
  4.     if (this.health > this.maxHealth) {
      I0 V* Y7 l! n4 Y, U% P) v% `
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    ! t& C: c. E4 w1 w# o/ L* l8 g
  6.     }
    ( m; N* |3 S9 j, B% R. [4 I5 t
  7. }0 J7 L7 d- j5 |2 I
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:3 `( B$ o& W  r
5 U$ v" v  x5 B1 N& U
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    3 H) N0 m, I* _# l, Q
  2.     // Логика применения скилла NPC
    1 N  w( j/ Q4 ^
  3. }. F( n, w, O6 @# ^# G6 A; X
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:0 \- [  d) \: T
1 D$ @& V/ S; L' T# g
  1. % m+ L, X$ [) H! C9 @2 ~
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)) i- Q! N/ c) Y& `  A
  3.     // Логика взаимодействия с NPC
    6 r* r- ?+ U1 l, `
  4. }
    8 h1 Y6 e) D9 O5 t# N" f
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    1 L5 n" B2 K2 Y% L' b" S) y4 T

2 x5 R/ ]* F$ N$ ^" C$ k$ c5 \
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок). X6 U. }- k/ F/ C
  2.     // Логика открытия окна диалога
    ! I( U. Q' |2 _5 r1 G
  3. }
    2 R& v6 ?  X" L7 p2 K0 T
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
! V, o; J; Z+ A8 XЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!/ y+ _1 C' M$ G  \. @/ A

' n' |$ R3 n+ t" h0 Q5 p
+ p  Q( ~1 z  K1 R5 h1 q
3 g- M7 y3 v, ]% X9 N
  N4 ^7 I! i$ U- \( x7 r
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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