Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 " ~3 K' q3 F% d& e
) E/ a( |; B6 I. w" {  d# X3 ?
- }2 A+ G& Z- `& i. C
Шаг 1: Введение в классы и методы на примере L2j_Mobius
+ U9 r) k7 r$ K# YС статьёй можно ознакомится в разделе Обучение > Читать
& |  c5 E& k  o. u0 b' N2 i7 P3 w; w- q+ ?: ?* ]
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
0 w# W6 X; W" ^( U" |/ G4 d8 s3 J  C$ s; U7 Y# X# ^
Обсуждаем:
) j+ p# q& ?4 x7 g5 @+ F; t
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius., {2 l( y" M9 e# r3 o* U( [# F; L
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!+ C: S) I; ?0 }* M  k* A6 z
8 j, _* `1 m; r


# Z0 {3 W$ E2 R' L6 W2 kИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! 😄 Но мы вместе разберемся!9 A% R+ N( N0 \" p2 @* j5 a

  _0 t" Y! I% v% [& L7 n* b; C% U0 r, E

, J6 W9 F' @: d! c
: P5 ~! R/ o5 h* A0 O2 O$ f* @4 o" ?3 ]0 a, |1 w

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
, r! ?8 R1 ]+ d! x. n1 Y9 B& E
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
% F) B& m8 t) w( p4 N# B2 VПочему мы используем ключевое слово this для ссылки на п ...
8 w3 @1 r: P) u- w
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.7 M) O/ u! W9 L: N3 y  x
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.7 Y3 [0 a- x, T1 o0 ]' B# \

& t$ K7 o5 {3 k& i1 ~$ zВот пример:( f  H; u; M7 A9 h& G. e# Y" i% F
  1. public class Player {% l% H' w8 o6 I" Z
  2.     private String name;7 J+ q. c4 G4 F  V2 c) C2 _% O

  3. ; S4 ]( A" s  Z+ T4 H- y
  4.     // Конструктор
    / \8 d( X' `* w* d: i: b
  5.     public Player(String name) {* v) ?: C3 m2 X+ }
  6.         this.name = name; // Используем this для указания на поле класса9 q# z; M: r3 d  q# Z' K
  7.     }
    ( O5 ^% G& `' P  X( M
  8. - S! v8 U( t) k
  9.     // Геттер для имени: r: A% U3 D' G$ `7 a) U
  10.     public String getName() {
    ! v  O. ?$ W6 ^  k. L2 o
  11.         return this.name; // Используем this для обращения к полю класса
    . L5 K( H$ J, v) a: D* x
  12.     }1 q6 V! r, H- l% C
  13. }
    4 h, c0 a8 Y. S5 F8 C# ]" N
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
# u) l2 b  J) U/ ~: r7 L1 m, F3 a( D. k( v
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    + V' l* V( N1 |" t4 U6 }: c

8 m7 d- z" q+ Y6 \/ CПример передачи this:! W, c/ `) v, k, ^4 ^
  1. public class Game {
    0 @/ ]9 }: G* U& s5 \
  2.     public void start(Player player) {
    0 C7 k/ X3 I" u. A2 K/ T
  3.         System.out.println("Игра началась с игроком: " + player.getName());# N5 a$ I) H; p  d+ S; b9 L
  4.     }
    # Q- |. d! p1 s8 y% I1 o
  5. }1 M; R+ M' M$ |, B0 A4 Q

  6. : k( J" E1 z, X% R* U5 F
  7. public class Player {9 U* t& n" `5 P# R5 ^9 b
  8.     private String name;
    9 m* @( S: M4 r, j
  9. ! C4 Q- K, L' C3 a# d
  10.     public Player(String name) {
    8 l# x2 ^* b; Q, s( ^
  11.         this.name = name;
    3 R) q$ \/ b9 P, C7 E
  12.     }
    , m, w/ D6 ?3 B' F2 b  b3 V
  13. ( X% `! @- F" o
  14.     public void joinGame(Game game) {
      \: G  D7 p# {
  15.         game.start(this); // Передаем текущий объект Player; f) A' V! j2 N. A: t
  16.     }
    ! v9 p0 X6 E4 {+ |( Y0 ?6 A
  17. }
    6 P* H0 J6 I6 B0 {6 \2 [
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
/ \3 P7 q6 \/ O
, b/ U" e, o9 H! E+ X! N
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! 😄5 t9 X4 u% Q1 L% l3 o# `9 t
) E/ T7 ~" T( E8 m/ `" J
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
/ ?! s& K: i; i7 R; nКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 - |' J5 p; D/ X  L9 g* X& a( E
Mike123 опубликовал в 2024-10-17 20:05. M+ d, c9 u  f& U  D
Добрый день!
8 |( Q3 `) g4 e, P) R/ IКак создаются и вызываются методы в Java? Мо ...

8 ]/ a& u8 D% T( r4 j0 FПривет, Mike 123! 👋4 h5 R0 Z3 w  ^* C# A) e
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.* K" Q6 }+ ?) \$ a# z
  P" w. {7 n- L, q
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
1 M: [8 l0 `; ?' d& c7 Y; f6 M% Y8 U7 Y2 S7 Z
' v1 H/ ^9 Y6 I& D3 T5 r
Как создаются методы в Java?
+ Q+ u0 R* c8 |  o$ V' K% J$ Y
# _) g( ~! [. ?/ m* X% fМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
/ O! d0 Y$ [. r
0 \* {6 b9 ~! {. @* y2 _5 q
  1. public returnType methodName(parameters) {
    + R" P* t# v1 P6 ~) N. N. P/ w
  2.     // код метода) \7 @2 k  u: ^. c# B
  3.     return value;% h4 j1 t5 Q! D9 ]0 t2 A
  4. }& p+ W! a# R, r" f) e! H: S
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).' Z3 @( G$ q* F, v* z- m/ a" J" u
7 s& P5 J$ b) _3 l  S9 n
Теперь перейдём к примеру.% @$ Y, y) s7 H, i' ~& K! |- r# z
. E) L; \1 r1 D, Y6 x/ G% T5 q" }5 X
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода! \  N* G' w; Q- t% u) E
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    7 P4 D$ t  S+ P  _/ q) }
  2.     // Вызов метода атаки NPC
    9 J5 _' y2 F1 a- U- Q; P" U
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    $ O8 Y7 f8 s9 G3 \8 @+ B
  4. }
    $ W+ n+ b1 T4 n: _8 O1 E
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
9 z) k" O- @9 q1 m& |( K- k6 R: f7 p$ c% P7 y7 J

* A; F. t. e. o9 ?. FКласс Npc.java — вызов метода0 w" y# g7 Y4 W7 G5 Y8 l
( G, `3 Z2 X. z
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)8 r, \2 M1 H, W9 D
  2.     // Логика получения урона NPC* L* f, `1 `8 `; S! Q
  3.     this.health -= damage;  // это.здоровье -= урон;
    7 [. e8 U4 |; y. ^2 b8 A) V, J: `3 N
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    ! X! V' F( N& B* |: d
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());4 t" Z4 G/ T. h3 i/ y' e4 c
  6.    
      M) s! h/ K0 q0 C5 Y  e
  7.     // Проверка на смерть NPC
    # t) [5 Y0 d' L% [# |% a
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)" x% p2 d! {- c6 q, `3 ]
  9.         this.die();  // это.умереть();
    * r' G7 h9 p4 R/ w5 d4 B& U
  10.     }. N- w2 F# g6 G3 ^7 |, S3 o
  11. }0 J" o3 @; s7 R0 ~& [2 C
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    7 V3 |+ n8 z3 a. [$ L2 A7 _0 L
Пример взаимодействия (с переводом)
- P/ M" y; ]% ~& Y' N+ Z
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    % P/ e3 f! N& T4 B0 t6 c
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    ; ]. P7 L" G+ K- r% e; P& f

  3. 5 w4 r9 x, P" p# q. O8 S7 m
  4. // Игрок атакует гоблина
    4 _7 U4 }8 R9 y2 r5 |2 r
  5. player.attack(goblin);  // игрок.атаковать(гоблин);- @" Z! t4 W4 S! E5 m
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
: {! e$ D7 Z* |8 n4 {; }
) Y+ E3 U, q% Q/ O* D& G
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
) p7 Y; y# [/ Y* X3 k6 AУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!3 s: I# X) ]9 J6 C
- o$ p) f) q4 X
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
7 U$ a! j0 l# RПривет, Астралия! Огромное спасибо за твои разъяснения ...
% |4 B( T+ e* K& @9 O' M
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
' J( e' t% Q4 N+ r$ _1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    8 @4 d& B" N: M" F! S
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:/ g( K, _- p3 p, N2 Q

: [/ c0 |. O8 }4 v: x
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)- U) k5 |: O. `/ E& L# x( u. X
  2.     // Логика взаимодействия игрока с NPC0 O% l) k9 F* X  o
  3. }( x2 z( F$ j* T( s/ w( P1 F
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:' j* Q; v0 h% f1 W

7 m* g0 m  {, Z0 [. x: f) S- ~
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)6 G+ a2 _4 V" J" L0 \
  2.     // Логика перемещения NPC5 ?- e) d* x( N4 ]" y
  3. }2 b% ]9 `" \# X8 S& F
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:( Z# P7 F  V# ^  P, T6 ]
# d2 \, i+ C7 Z( ~. H3 a" g$ L' e- J
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример& I1 P3 `$ r! w% {
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    ! \  n5 @/ e) r$ X/ I2 m' D- q1 A2 x
  2.     this.health -= damage;  // NPC теряет здоровье- b" C6 m$ y* }9 ~+ ?* _
  3.    
    7 R1 B  W$ K2 m3 P
  4.     if (this.health <= 0) {& `# U7 E1 v- U2 i* y5 z# X
  5.         die();  // Если здоровье упало до 0, NPC умирает  Q; j; Y' `8 X) ^
  6.     }
    * E; |/ n3 j: N0 o8 B# f9 h
  7. }8 o4 n( s! K6 C' q) m' @; r
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример+ W. [) p7 E5 p% ?
" O+ K' @8 _; U# v
  1. public void die() {  // public void умереть()2 U  B& T7 U' {
  2.     // Логика смерти NPC
    : I3 W. n0 V) S( P4 F
  3. }
    6 j9 j! n) @$ l8 G# D7 u
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:' w7 S  T# m% T6 _0 ^  `3 o
2 f/ _0 |6 r5 ^4 u0 m9 u: t

& }# W! D" i: v. V0 g
  1. public boolean isDead() {  // public boolean мертв()4 j2 @9 _, R" U6 R- \$ E% x' A9 v
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0: h! m( Y5 k9 J# S
  3. }" [! K8 X% `# d* x% p! A
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    * d5 l% Q% }+ K. U5 K+ z

3 ]; n" V% n& M' m2 N5 G! R) j$ A
  1. public void heal(int amount) {  // public void вылечить(int количество)
    # A  T7 m6 z$ y/ e& j* k# {* l
  2.     this.health += amount;  // Увеличиваем здоровье
    ) p! n1 w. c2 {# [7 W8 S
  3.    
    # U4 v1 ~7 g/ t* x6 R- k
  4.     if (this.health > this.maxHealth) {6 x9 u: V; V! `5 L- a6 m
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального5 J" h) j2 O# W8 r3 w: d% |( ?9 U
  6.     }
    1 d  T/ ~; a: k# S4 [, ^& M
  7. }
    # C; V7 l; w$ _; k/ |7 m
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:! v3 Z) i) h0 Y; K/ L! x" A

. ~, Y/ j3 s+ ?7 s0 d; H: _! w
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)& g3 y' `7 b& }
  2.     // Логика применения скилла NPC' k. r9 h7 w7 Z1 R; Q3 p! c+ ^
  3. }* b% d' b" f7 b7 m5 {
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:. `0 [& P7 a0 @8 @! ]
. D! i, @, B! C% _3 L
  1. 4 |7 j, X" s+ b* R
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    8 y$ Q2 F4 n* M
  3.     // Логика взаимодействия с NPC/ b3 p# r3 b3 F7 E3 _4 X4 `! c
  4. }
    / N' N9 s' B! p4 L) H
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    * t7 A" q# P0 u4 }0 r
% Q, [3 f% x! Y* L( \  t) b- {2 G# t
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)% Y6 |9 n) v+ \* i) g9 f0 }3 C# C/ E; c# ?
  2.     // Логика открытия окна диалога6 A$ d8 R; q4 d+ K$ B8 F
  3. }+ x4 |8 }- K' B* X4 K) X! C
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.! R+ ~. Q/ [2 O1 R3 |* W
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
, ?$ e1 ~5 F3 s  W6 p" l3 X5 l7 i4 k( `

* Q- u0 Q! {. K+ V% I, z6 Q2 S) T5 m

! W3 ?! m9 T, O% O7 z
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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