Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 6 J' ~1 j. `0 S" ]% l3 R3 V: d
+ L" g) l- o! G# y  y: Y- ~

& h* H8 Z2 B7 ^5 e, FШаг 1: Введение в классы и методы на примере L2j_Mobius7 Q8 `( i$ M3 I; z9 ]
С статьёй можно ознакомится в разделе Обучение > Читать
* Z8 l' D; B" O( ], G8 S! D; q8 C3 T! d, t( W6 Y" a
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
* U/ w! K/ J2 R7 z* z  u7 F) @& U/ T* [% s, Y
Обсуждаем:
8 f5 R  p9 t% L) u) z+ L: o
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.7 j" E2 a4 A; v
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!( u$ i7 A1 N+ Q; a# {% l
+ D2 R. I5 |# ~" b2 Y

) U& S8 D' `4 d" I8 G
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!. ?' i; _& S" a. u& l; W* X& ?: l
3 a9 }$ O8 j# a( C$ @: J% D
  P# F1 s& Z# R* V5 a; w; S
% A* l* W* `, W# T( o$ A
: a( A' E. b$ Q6 U. `: i

* \0 }  S/ W# V0 e8 O( r

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?& J6 b% I% ?0 Y) [- ?" E2 e
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
9 t$ T3 |: X! _" U% n) J: kПочему мы используем ключевое слово this для ссылки на п ...
" |3 x: Z1 x0 j3 w, h* k# S
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса./ T1 |- ]3 Z) C* h9 |0 W6 a+ G. j
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
) u& L1 X+ {& q: f9 H4 Z9 B. ~
. S  r9 U1 [$ h" v  `Вот пример:3 F% I: _8 q0 u3 g0 N8 k4 M+ H
  1. public class Player {' B/ r& }5 {. N% k/ F
  2.     private String name;
    ; |0 Y* z+ N/ V2 A) ?2 Z+ [2 r! b; ]( V

  3. 6 x" r# b0 n2 j1 Y; W, b$ M
  4.     // Конструктор7 r. |% k$ T7 T' @3 [* c: a3 M
  5.     public Player(String name) {
    % q$ l" k( H3 f1 w5 r. n1 W+ p
  6.         this.name = name; // Используем this для указания на поле класса6 |0 s2 }$ \: ^, R
  7.     }
    ; W* ?# Q) U' U- A6 |. ~4 ^7 X

  8. , B5 c5 u  X- @3 d; Z
  9.     // Геттер для имени# _+ R+ g  w# P, |) n" i# `& Q
  10.     public String getName() {
    8 I, b/ F8 q. d& {7 ~2 t
  11.         return this.name; // Используем this для обращения к полю класса3 C4 R3 q: C6 p5 L% h. O# b
  12.     }
    # C) ^+ _1 m- `8 w5 u
  13. }
    # t" n9 e6 a2 Z( ^4 o% X
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.# \. T: {  T/ v7 H

6 t- D7 v6 T( U. w% YКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    1 B1 c4 ?. F1 Y

3 X3 D" q' M7 y4 K: fПример передачи this:
; y/ \; B# M/ K0 ^& [+ C6 e
  1. public class Game {
    1 h5 D" ^( J2 y2 R
  2.     public void start(Player player) {% ?: E& S' {8 q- W* x! ]
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    ) v7 R; O2 @2 |0 ^8 e
  4.     }9 B" U" ^' c, k6 n# Q0 u' P
  5. }* T0 O# k0 h9 R4 k% J
  6. 6 X: w: R  r; s  v
  7. public class Player {, f% C* p1 h8 C. P0 k" k
  8.     private String name;1 O! _: C* g7 M- B! ]  E7 c
  9. ' ^% x+ F& Q3 F+ P3 X
  10.     public Player(String name) {
    3 C4 D) e6 B, W: @, Y1 x( g" b) ^: ]- g
  11.         this.name = name;8 s1 j& o, q6 P$ J& n2 J% `' S0 x
  12.     }0 a- g5 _8 d0 V$ E8 [5 j

  13. 2 V2 i; o% s" }
  14.     public void joinGame(Game game) {
    4 S$ U0 h9 l) n, z: w& n
  15.         game.start(this); // Передаем текущий объект Player! ~' H0 H4 Q4 u( V- T; _
  16.     }7 k% h* d/ x' a! O9 O* U
  17. }
    % t9 K  ?* G0 \* R
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
5 k0 f! ^% ]/ D: D) h! c7 n

) F( x( y0 v8 d- h1 M6 {Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
' p' o& W  o* ~  v$ p1 v
% G3 I' D$ L9 s" w
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
  J7 Z; H; [6 j7 g/ O9 c- ?Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 " `- P' t% T8 C! e4 F1 v/ I
Mike123 опубликовал в 2024-10-17 20:05
: x2 y( e9 V0 M0 eДобрый день! ) T  R% b! r+ R/ N& g, |. g6 }
Как создаются и вызываются методы в Java? Мо ...
4 i; T! ]& b  t3 \0 P
Привет, Mike 123! ?# e) P- ]1 A5 |! k! h9 a
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
0 c2 N) ]+ E7 ^& _. c0 S
  ~3 B, \0 b. z8 [2 `Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.+ l7 I+ p; b! A6 u3 Y0 p/ k
+ `3 L. _$ U- G: m0 t

6 Q  g; A8 u0 M8 b1 \) U# oКак создаются методы в Java?
4 {% i# l6 \+ v. Y9 u6 Y+ j9 I& d4 b
) X6 m6 [" s- H6 qМетоды в Java создаются внутри классов. Вот базовый шаблон метода:3 J7 ?3 N/ l, X1 G! v# M) g

) ^! t  {" R- \0 O1 \3 z3 g. G
  1. public returnType methodName(parameters) {, c0 m7 g4 T8 `" j
  2.     // код метода
    . ~5 I& f; Y9 c" T/ U; S& ~# a
  3.     return value;; P0 W0 y. d, o+ X
  4. }/ O; f! `7 m7 l3 l, h: k
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    ; r& G2 C4 g- {! \( K% a

: k/ v: C8 N" h% o) p8 hТеперь перейдём к примеру.  g7 y7 H# X- k7 d+ y; P
) k+ e6 F8 Y8 u6 c( R2 R' X! m" |
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
6 f9 k0 ]/ e: E& T$ x7 b4 [
  1. public void attack(Npc target) {  // public void атака(Npc цель)8 B- O+ h% B1 `! D
  2.     // Вызов метода атаки NPC1 r: G: b+ L8 A8 N  Z4 O# [
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    % V, {' p2 J, ^- W3 y' k" H% o
  4. }
    : `' \+ e% d4 G; \
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).4 {  E, S7 z) U* s2 E

3 @0 e" j$ ]: N$ Z  l
2 x8 W2 t+ n/ _% C' ?7 x8 |4 a: T1 q  _Класс Npc.java — вызов метода
* J6 D; a2 b4 Q3 X7 q" _' ~+ [* }  y) [3 A  E+ S/ C& Y
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    5 g+ O: u7 p$ {7 S* D" s
  2.     // Логика получения урона NPC
    - V: q$ N( X" \; X4 Z
  3.     this.health -= damage;  // это.здоровье -= урон;  s5 N# s% n* R; o4 N
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  ( `) Y+ g1 a, f3 }! A8 _2 ]4 N
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());9 h+ ]( k, C# z  z" A6 r
  6.     $ L9 ?0 Z; u  g1 o9 h# A9 Q7 v4 z: C
  7.     // Проверка на смерть NPC
    , j& L6 D2 U/ |$ u+ t( X
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)  V9 M8 N1 O  C& V
  9.         this.die();  // это.умереть();
    ; ?5 c) D% x6 e* x' E( m3 H& Q; _
  10.     }
    $ h& L  n8 n4 {2 J. u; I8 ?5 z6 s6 N
  11. }
    9 l  J4 r6 {" e, Y+ D
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).7 a; D8 y" ^& a0 D
Пример взаимодействия (с переводом)
; E9 P- b4 Z: o
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");+ I! Q. k" F' k! {% j3 R0 a
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");5 w, C( C# e$ U5 \

  3. 7 F3 w4 K# p; ]% \5 D
  4. // Игрок атакует гоблина+ X1 S  c4 ]) Z/ j( Y0 J
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    ; d* J/ l: Q) q3 f
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. % W% |8 J! m  j3 i: [
; b9 h8 B% D* y+ ~
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
- K9 K" g( S; U. e. Y. RУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
3 C1 H% c# Q4 k8 a7 j1 j9 k) G7 s4 z: r
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
2 @( X( [8 s/ P5 M$ hПривет, Астралия! Огромное спасибо за твои разъяснения ...

) q6 U6 V! }$ \" ~6 `7 `2 @0 qОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
$ c: D- k8 Z- j- `) v1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример* G7 X1 B1 R! m1 H: Y8 X9 }
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    8 }6 q! D- j: I$ E- t
: V' n; J( x) Y% l4 k# }
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок), i) T/ o) T% {# I
  2.     // Логика взаимодействия игрока с NPC
    4 ]  U0 ~0 L' R; P$ b1 U! {/ }
  3. }
    2 W! c' d. s7 h+ C
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:- g$ O( E8 R" P3 k( A
0 a4 E6 ^$ E+ M5 J
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    4 J. P/ L- z* b/ @. t
  2.     // Логика перемещения NPC
    ' e- d) S* a2 j+ n  o/ s
  3. }; O2 |5 \) H2 R) b, ]% M, g: C) o
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    , c& ~' P" r( l: Z) x% o

8 z( ?% `6 q6 u  o
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример: s2 e5 f2 u: \" \, J$ T& ?
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    2 d$ i9 W2 Q" `$ U9 }/ }  U" V9 v
  2.     this.health -= damage;  // NPC теряет здоровье
    . l& U7 O2 V3 X4 Q0 w% y" e" z
  3.     6 E  N5 z6 w* @) j6 z7 W4 W
  4.     if (this.health <= 0) {; s( ]7 z' V1 w3 M) _
  5.         die();  // Если здоровье упало до 0, NPC умирает* S% R  X$ B4 C) Z
  6.     }
    4 c# ^$ k9 |$ b8 h: G; u$ r
  7. }, j) ?2 y4 j; I3 ]. I
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    $ B/ ~/ M# X5 ?! `
' t; I* p' v2 ]0 b1 m$ ]% `
  1. public void die() {  // public void умереть()- l0 ?/ X* E' z& H. O$ [
  2.     // Логика смерти NPC* s! [* [, ]5 m# [0 w
  3. }/ x% V! x7 G4 t! N1 d/ D; M
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    0 z8 [& U$ @; V! p! Z

6 P% o3 u- \& Q/ }. o3 y8 T8 g- c
, x5 @6 P( ^! f- f
  1. public boolean isDead() {  // public boolean мертв()! Q9 ?9 ?' S/ R/ _3 ]
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    ) y; [* k9 r' F" T' E) R
  3. }
    0 U; N: M0 V) }, A# g5 w
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    , m1 Y* i: h) c

8 h0 g. ^/ |) e3 }4 v9 l
  1. public void heal(int amount) {  // public void вылечить(int количество). m+ N( g, H/ p: D! J, y8 B" {
  2.     this.health += amount;  // Увеличиваем здоровье
    ) a/ |8 {; ]3 w* q- |
  3.    
    5 N0 f8 v( j3 h; a' [0 I6 \
  4.     if (this.health > this.maxHealth) {
    : Z( ?: c0 m8 A: e
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального& G* T! H" T- g
  6.     }
    6 _2 I9 m/ W; N+ f- k
  7. }, |$ h4 f! N+ d, S, j3 x. V
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:: \& Q) y' g- M  z6 D) X* [$ F

8 b$ A/ {+ ~: H; G
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    0 K) j+ \3 y/ O& J4 o& L
  2.     // Логика применения скилла NPC
    , w' R, \+ R3 l. ]- C, c$ R0 ~
  3. }
    ! f+ P  J' \8 K9 V  ~6 J- K
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:% V6 o- v/ d0 b/ n. q: k
+ W5 p) h8 m; n+ t9 w/ t- S: T8 F
  1. 0 `/ x. s/ k. ~  O9 `  p
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)0 W5 K+ L& M# W( ], k
  3.     // Логика взаимодействия с NPC
    5 T* L3 P9 y3 h. T! N. k9 [: P
  4. }4 {" W/ f/ N. S  \$ K' w0 _
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    ) h- m/ [2 t- f% o+ s  ~6 B# d
4 {9 k8 w' H0 l1 x% J! ^0 k
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)) E4 Q9 I  T+ p4 C0 \1 j7 \
  2.     // Логика открытия окна диалога
    ' B9 {+ E3 Z" p9 F3 s# \4 w) [
  3. }. ]- P* W- v' }; n+ o  k
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
9 _9 g! V  R, h2 t2 o/ j4 m9 i+ ZЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
' g+ Q$ Y& r) c1 b) i$ z& }
" g8 G4 E! u- A; u# S: U7 v' U: j9 ]/ @1 q1 _+ c+ H

6 K$ \, ^7 S. O+ P7 o. s. ^$ t: p2 J, T8 y
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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