Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
4 X% q: k- z1 o* e0 H
" O7 `$ e' [4 Z" r5 V& }! n8 Q  l' V$ i" f* d8 c" O
Шаг 1: Введение в классы и методы на примере L2j_Mobius
# f/ a5 ]8 I6 e- T) X, aС статьёй можно ознакомится в разделе Обучение > Читать" _- m( L7 t- n4 n- o+ ~
( v' g& \; s2 h4 ^6 R7 ^9 I. P
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.6 b. g  A! Y* b  T) N9 |7 T1 `
; N5 E0 }6 l: v$ U5 A8 y
Обсуждаем:7 ?# z  \  c! k+ s
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    % X. j; w( @6 g" `$ {' I7 l
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!3 O2 ?8 n+ s( o# ^/ o! a' A3 _

, K7 W2 G4 \$ q. F( o
4 X+ e' C$ }6 w8 z
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!# D, E0 p) a& p4 |: v

' C$ x) B" ]9 L9 X" E6 a3 x2 O( f5 Q% T2 v1 m  e. D  h$ q! l1 d8 `' n
% L3 A% f& d2 T% u/ i' s: H9 _

3 v3 k' a3 K  t% T9 v* J
8 n; P9 @9 `; a; M5 F* D

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?) W( R/ F" B9 F* d) s, W: N$ U$ n4 p
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17" p8 W3 m/ r' M% G/ P
Почему мы используем ключевое слово this для ссылки на п ...
, S% Q5 V+ s1 k& c9 @: @/ y
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
1 r  ^' _6 O8 o, {6 L" A5 q/ xПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
3 R8 }5 \% ], Z( w! l8 P% _/ d0 `: E  X
Вот пример:
/ w4 t7 l9 G/ y3 h( e  C  A3 O
  1. public class Player {
    5 q% \* t& {- d; H2 S+ I# E
  2.     private String name;: \  b. B; s: [! O  G2 h

  3. ( B2 d  Y5 {& b1 U% }) N, M1 v
  4.     // Конструктор
    * p7 Z& g' L3 n( a4 ?
  5.     public Player(String name) {6 |$ U* A* k! a- q
  6.         this.name = name; // Используем this для указания на поле класса
    3 f2 r; P$ L6 ~4 P, \: A
  7.     }
    % d! w0 _% p1 ^. Y

  8. . b) E, c: N( w4 [& b, U; y
  9.     // Геттер для имени8 a: Z+ ?$ x* m, f
  10.     public String getName() {
    % s: _- _: L! v- ^9 d% x
  11.         return this.name; // Используем this для обращения к полю класса: T0 n0 T7 M" _# w8 u, w8 i+ r
  12.     }
    ; E+ N8 Q8 h0 Q5 j
  13. }
    7 g! c7 d' ?+ K& I: L: i+ V- Q
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.# a7 A7 v% y% l& L7 B* A2 ^
+ T9 E+ ^7 ^" g1 c1 y0 u* g7 r
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.) B: J5 P. w( u: ]) f
; s4 `4 C4 K6 t7 }' D+ p
Пример передачи this:
% W7 y( @1 d2 J, X) `( [8 C9 \
  1. public class Game {+ _; ~5 b5 g- Q* y3 ?$ C
  2.     public void start(Player player) {
    9 B- b3 {& X7 H8 U3 Y3 o
  3.         System.out.println("Игра началась с игроком: " + player.getName());! v' [+ ^5 |/ U5 a- u0 X0 R8 U
  4.     }' H; q3 L0 ~  w6 F7 J7 [
  5. }* Y, |* T1 Z# q5 G, V" b* e2 [
  6. 8 }# m/ X8 {3 g# _, n% g
  7. public class Player {, [' ^9 r  A& n
  8.     private String name;
    6 h. U5 N8 n; k; x& K& p4 n# h% f# s
  9. * O( m+ f3 p2 S; [' [& s: Y; \
  10.     public Player(String name) {8 b! @  I; R' o6 U) Y/ D0 b
  11.         this.name = name;
    6 \' X" t& p' L* M" d: q
  12.     }2 }) l$ V# i' T# s/ |

  13. ( f8 A. Y7 b  S) }: P* d* p
  14.     public void joinGame(Game game) {
    ; L0 ~; D7 [6 v1 F& u
  15.         game.start(this); // Передаем текущий объект Player
    % \, \, _2 P2 }  \" n2 u3 T
  16.     }: a& h$ t5 e1 t8 k+ b5 C) @+ r8 \* Q
  17. }
    % \. }# d9 l8 m' s$ G4 ]) \9 r9 @
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
' W  Q* l1 M0 \/ ~) B. h! X

* X' K8 p& v2 k) q! i* m2 N% a+ ?Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
& e8 n+ ]- U0 ?* ~9 j
8 y6 j1 K% }  }* b! i& |2 r
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! * a6 V, S' I( Q& j
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 0 R3 k& t" N: x$ U
Mike123 опубликовал в 2024-10-17 20:051 ?' R( ?; @) A. b) `! f$ O
Добрый день!
7 L& _! j7 [/ r. i; s+ `: c2 O2 lКак создаются и вызываются методы в Java? Мо ...
$ I$ J# B5 [7 d  h
Привет, Mike 123! ?+ t1 y3 j( J, l5 Q. F! J# V! I
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
. Y3 t! ?. W9 L$ b. J" c( S! y6 E: i/ k. p
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.! H  a0 W/ A2 @& J) K, {) k
6 b4 ^" j0 V: f

+ j: w5 P( o, ]( q  O% }1 oКак создаются методы в Java?0 y* h& T$ V7 B

: y* C6 x) m$ N) m/ ?9 K) DМетоды в Java создаются внутри классов. Вот базовый шаблон метода:/ t  v; G# j7 q4 S+ A' [

* c! Q# c6 o0 N0 P1 q2 ^
  1. public returnType methodName(parameters) {
    - H1 ~; G0 T; t- a! g
  2.     // код метода% R* M; A, O5 K4 |# K, E
  3.     return value;" G2 {8 l; h& r* u& B
  4. }' N1 J$ G" D* v! U9 s' h) M2 j
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).% s* ?% W. P6 e/ b1 g
1 y% c$ B* C4 Z  y
Теперь перейдём к примеру.2 L! d  _+ u; F8 `
% d- l0 U5 f+ C* z/ Z! y/ H
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
5 j. O. d! O1 w6 u+ C
  1. public void attack(Npc target) {  // public void атака(Npc цель)( f; v9 g% y' d7 N& d+ r( Z( R
  2.     // Вызов метода атаки NPC
    - ~+ z6 g6 ~2 A( \* {2 ^3 m. e# L
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    3 s/ }1 j* O( l/ Q& O
  4. }4 v% f! o' {$ L6 S
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).7 g5 |/ I8 |5 b$ q& c
1 q: I2 M  Q, W/ o

' k) b' C! N/ eКласс Npc.java — вызов метода/ J3 ]! B0 D5 `/ [  A; D

. Q' k& h/ _: g
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон): g1 g- m0 @6 [& @; p% B
  2.     // Логика получения урона NPC
    7 E' i) B- ]2 i* o4 b1 K  [
  3.     this.health -= damage;  // это.здоровье -= урон;: s2 h) L8 Z  X; a+ I" k- u
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  * m$ t, n  B$ O
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    " n  i  I- X( a9 C
  6.     6 F8 P8 a: Z) ]& T# p, `
  7.     // Проверка на смерть NPC1 m" j- ^# I  {5 k0 W
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    $ M- s% A! M+ }, A4 \& u" u3 `2 J
  9.         this.die();  // это.умереть();0 O" o( A/ m* @4 e' ~) G
  10.     }
    7 E( d% J; D: x) h# [
  11. }
    / y1 m  x" d7 x2 z- D4 c4 {* O
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).+ o9 r3 L! V$ ^' l2 h$ L! l
Пример взаимодействия (с переводом)
: I1 D$ P7 l) U
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    6 @/ E- z) {+ W! ]
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    1 c1 `& }, z- l; C0 i8 i

  3. , |# J/ q4 V& u* R
  4. // Игрок атакует гоблина
    # f* E5 A- D9 l: v
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    8 d& {# {% o3 Z. j" B' F4 a# }" C7 I# {
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 6 S! u5 B6 L0 C

. k  M( {* ^, R" e! j
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.- d4 @. L, g. j$ ^# K
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
* D9 r9 s6 a3 @  V: ]8 L5 g- E& x
! R- C+ q! }- M! |# i3 F
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
& e! Y; l3 ^9 S+ H# w, b6 WПривет, Астралия! Огромное спасибо за твои разъяснения ...
  s: b: @6 g9 x. D
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.8 b$ U5 `4 ~* N5 L
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    5 b) P! q. `. }2 j) E5 I) _
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:+ a# `( I9 P4 h( V) q* z

6 _) O4 q* p7 ]- u  z  K4 j9 v
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)7 r8 x" j% X5 g7 z! n6 L' v5 p# i
  2.     // Логика взаимодействия игрока с NPC- r4 \1 f% r& X
  3. }
    ' _7 f% w' b7 |6 N, `& @. Z' N5 |6 q8 Y
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    # ~! r. F4 \4 b( ?0 w& e

% p) p# r9 b" v4 s( o& N
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
      k4 o- K9 }1 O8 s& I+ t
  2.     // Логика перемещения NPC! a+ k# I! x5 D: Z/ K0 E1 p: D+ a
  3. }2 I# s9 z" w4 I2 n' O
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:2 A7 f8 y, l$ i) J! v! |9 Z
4 d1 f3 r. _- [/ Z
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    8 d( e5 ?% Z' v& l- v" H
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    0 C+ U7 G' E: ?& \
  2.     this.health -= damage;  // NPC теряет здоровье
    % Q; @8 t. j' B2 {/ S+ I# V
  3.    
    : `- U8 h4 u$ Y5 |* v
  4.     if (this.health <= 0) {# ]" n# d' Y; `1 }% ]0 F7 x
  5.         die();  // Если здоровье упало до 0, NPC умирает- ~" n8 C; n# \1 _2 t% p" h
  6.     }
    ' Q: i1 ?( Y0 H8 m
  7. }
    . p5 a) e- o) w  X8 K& q  v
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    / ?9 [! r) }- z) t3 J
9 e' \9 d2 R' x& H' t# q
  1. public void die() {  // public void умереть()
    2 H1 C$ s6 U" e3 B
  2.     // Логика смерти NPC) r. }" [7 I7 l& w
  3. }  {7 h8 }! t  d9 i' \% O+ o; T
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:+ N8 Z5 k. l' Q! i. V0 [

# y, c. R9 _7 N0 `7 E& \) j# T; B
  1. public boolean isDead() {  // public boolean мертв()
    0 S. j" `) J2 s2 _
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    0 `$ `( `& j% U% B  F, f* E$ {
  3. }$ O, y, E, q; W) L5 @9 d
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    / U8 _* _, X2 l# V  V: c

1 a( j# S7 _, S- q* J  t6 d! ~, q7 F
  1. public void heal(int amount) {  // public void вылечить(int количество)
    $ [- T4 q* G- Z
  2.     this.health += amount;  // Увеличиваем здоровье  m* `' G: e' I. x: O
  3.     ) C: c  S9 A2 F, y/ d
  4.     if (this.health > this.maxHealth) {3 A: e, h. r7 \( z7 r8 j
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    " T  T9 W3 ~4 F& x5 e; X/ ?
  6.     }+ N! p( f4 R6 d0 p
  7. }+ d/ X4 F5 B# m+ D9 d6 ^8 |
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    ) P3 E" Y* M" z3 a

5 a9 y- b2 b" }) F
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)7 Y8 z2 P' M$ _, r7 a- X9 q5 ?
  2.     // Логика применения скилла NPC
    ) u* |" C) Z- U( Q, L) h3 N
  3. }
    5 M! _" h6 y6 F3 Y; `6 M: d
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    ; I/ O/ r- d1 k1 Z  Z

# r' x0 z  U* |  M0 U8 ^
  1. : X: J: G9 `& o. V5 X
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    , |8 k: \, c0 J, F! \& x2 h
  3.     // Логика взаимодействия с NPC
    * \# n3 }0 Q* w. g5 F- D
  4. }" P% x( P6 Y: e4 O
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:; N. J! h/ }( C7 C! x/ y
5 v; P( s/ f6 Q7 _$ n
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)( i7 h$ a5 i. _  ]8 N
  2.     // Логика открытия окна диалога# D& J1 W. c( ]8 s1 t/ m9 l9 R7 Y, U' m
  3. }
    ! m! I: R* N0 r% t5 A6 @
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
! L, @+ H: u+ X8 E" HЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!1 \7 i6 t( d& h* G9 P+ X
: K+ z9 u5 f+ R& Q( r# u
5 u4 U, L5 M3 Q8 z0 s$ C) a

2 h9 ^' M! g  g. p3 ]  E8 s: D- f) O" I5 [. s# m2 C
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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