Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
; B2 ]9 K* g- n) S7 O. p) W3 }; m
, [# p( j1 M2 m5 B' S8 U8 q1 E, d; {! A! W$ O
Шаг 1: Введение в классы и методы на примере L2j_Mobius
- a  j# M+ z, I! Q. `& bС статьёй можно ознакомится в разделе Обучение > Читать" G4 M  S' p! K. I; A/ o: v
7 e$ {" T7 }: Z9 v, ~% x
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
4 T+ ~4 {5 D/ v4 O4 I5 _7 Y
: s+ C4 r/ u. L1 [) O) n& hОбсуждаем:
. C6 l  D% J# }& b* P) C
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.4 W3 e; c- u: ^. Z7 ~
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!7 ]( O' D$ Z8 c4 u
0 V' F7 ]+ C; K1 X- G3 ]


3 c- o- g! H: {) P3 aИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!0 e  o" B& M3 `: t- [

+ k5 p& o. M7 z! r3 n2 ^. q* j- l& s, n- D1 v
; {2 X* O5 j5 h* x8 u
; u$ ]( m" t; h! l6 ]

+ u( X$ T/ t4 h: D; j

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?& A$ i1 a$ ?0 Z& \4 w& e1 R
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
+ n; O0 u$ T4 K  u1 L) KПочему мы используем ключевое слово this для ссылки на п ...

6 A1 Y; @4 i, K! P* r8 B6 XКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
+ _4 L9 a' d2 }6 t* y+ x, j' MПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.' r5 \; G4 E2 C& c  [
; {* g5 _! t* p8 t) T
Вот пример:
; B5 ~0 V- O* B- E! C4 ~$ i+ @
  1. public class Player {
    1 t" d: U, r! h# C+ F& O
  2.     private String name;
    7 @5 z- X5 ]1 U' Z2 G0 a/ }0 h

  3. " i2 a% `, \& Q) p8 W8 N  E
  4.     // Конструктор4 E% x$ o8 l( C% |& z6 h* b/ P
  5.     public Player(String name) {' E! [1 y1 u: A2 F! \: {' @
  6.         this.name = name; // Используем this для указания на поле класса: @) T' u( y1 f) B
  7.     }0 @* X/ q( J' V* n4 `3 R% ?3 \
  8. 4 |) \- o% r0 _! x$ Z0 H+ ^
  9.     // Геттер для имени
    + A; V  |2 f- ~0 ^9 `% U; g
  10.     public String getName() {( g5 n# |( p% G: m4 }3 c
  11.         return this.name; // Используем this для обращения к полю класса8 N9 H" d! l, d7 N/ ]! ^
  12.     }  d! V; J! M8 x' k/ P  h9 k
  13. }0 c0 n& A/ z( J$ K& O6 |+ F5 `
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.: D9 O& {. o: L' K' s* H

  [" }6 U# d& R! Y) \Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.1 g+ N, x9 f# g

; y' P" g' T, O  f) W! Y6 hПример передачи this:
+ g* z: m. T! }# p5 V6 K# i1 S0 C
  1. public class Game {
    " |" ?) m" @3 B2 @
  2.     public void start(Player player) {, y2 j/ p' `! y  I7 g/ p
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    8 H) e  B3 p0 ]; Y3 l  ?
  4.     }) V$ O& C8 K- d4 n- M# J9 `9 K
  5. }0 I: A4 E7 q; v. N
  6. " z) S( G  J7 N: a( D
  7. public class Player {9 V+ }5 m9 X- ~8 e( k
  8.     private String name;
      V; ~, F  z' R0 o" y  _

  9.   b- u* l" e) [; ?. V  ^0 z3 b
  10.     public Player(String name) {/ j7 p0 L7 U* g6 c. e' Y
  11.         this.name = name;
    6 y3 a: ?$ j* z- R7 L) E9 J4 b
  12.     }% C# {8 R% N. g- t$ p
  13. ! L* u- l7 ^- U: x, p. _5 ]3 v
  14.     public void joinGame(Game game) {8 ]& V' k3 O7 u" ?. W
  15.         game.start(this); // Передаем текущий объект Player
    5 _  j! `3 k# ~
  16.     }3 S: Z8 M0 K  j- {: U
  17. }
    7 c( H( @# s4 h" w  D0 [* L1 D
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java." b" ~  g+ _. S

2 {# ?4 k1 x0 C7 }# V- ]1 f9 O
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?* B. w1 k. q, w3 H% p, {
9 R1 o" x- x' x& e- @8 ]
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! & Y6 a' o+ B( }  }1 Y( H
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
$ H5 W* ]  q# Z# k3 B& D; J
Mike123 опубликовал в 2024-10-17 20:05
* }9 p( M; `. g$ c0 G; i$ l( g2 QДобрый день! ) s4 P" |" ?; y) H0 d) B2 c
Как создаются и вызываются методы в Java? Мо ...

& N2 J% @+ g: [' XПривет, Mike 123! ?6 b# z& S+ v8 m" D  [" h
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
7 d; w+ b% P3 m7 U4 |! @1 x0 [# Y  X7 }& b2 m
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
+ a: j. _6 }. A  T: e
: T* O) f) v" ?: Y
* X& y- t: m* O% }$ c+ vКак создаются методы в Java?8 S" {# u/ k" d

* X# v+ q8 W$ h, EМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
# {% T- G8 x6 U* L2 ]2 D
) Y3 d# [. n8 @7 B, c
  1. public returnType methodName(parameters) {% V( L6 u' i/ @* M) a* t
  2.     // код метода2 ?; z1 z, {3 E$ t" Z& a+ ?/ ?
  3.     return value;" O6 r- Y4 m7 O2 ?( I" P
  4. }( r. X# Z- S, o
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    9 Y, r5 Q1 q' Y$ m  p' L
0 x, j$ w' [7 J  }
Теперь перейдём к примеру.
; W4 Y# D! m  r1 _3 T6 V
+ y3 q  i, w1 A/ ]: q# x# C6 ZПример на основе L2J_Mobius с переводомКласс Player.java — создание метода8 y. U, t5 n, G& X8 i! W3 B/ D
  1. public void attack(Npc target) {  // public void атака(Npc цель)% _9 b2 z" t) ^! S: u" E
  2.     // Вызов метода атаки NPC  u7 `2 Q. H9 \& z1 c3 G  W+ E7 j6 o$ j
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());* [% T: V5 Q7 a) Y, k5 R3 J& o
  4. }
    ; Z/ X0 v' N2 w) o8 Y% ]
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).3 M3 g) R1 O+ Z9 V: z
, C1 R/ i" u+ S8 \! X& C# @7 E1 F
7 u' j# S. k7 B! Q+ S
Класс Npc.java — вызов метода
4 p; j7 u, [9 t$ U1 u+ @
! T% W" O6 b. [
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    1 z4 V+ h/ u+ u0 g
  2.     // Логика получения урона NPC
    - b# d/ V5 D# N3 G. b" `4 b/ H' @
  3.     this.health -= damage;  // это.здоровье -= урон;
    ) O) o: s" i# L+ ~) b
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    " ^9 r6 C$ e) [# O2 c
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());, o& d/ T, c9 e% b4 P5 t
  6.     ! t. T( v' h- x; V+ @
  7.     // Проверка на смерть NPC) q" z* ]2 w* }8 m7 B3 i( [
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)% N: q( `  {: J- `" F" |) r
  9.         this.die();  // это.умереть();
    + r$ F2 m: q. [) w3 f
  10.     }4 X* h: l% ?' q/ S0 L
  11. }6 Q1 Y/ Z* }, K/ Y8 U
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    6 J1 }9 X' W2 U' A$ B
Пример взаимодействия (с переводом)
; Q8 h0 B! Q1 f8 `. d. c! K, t
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    , z/ V7 c  i* ^& L. ]: \8 r4 l+ S1 S
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    8 O) B- `1 }  h7 f
  3. : ^5 ^* k6 t1 q" C) e3 _& a4 a
  4. // Игрок атакует гоблина
    & h9 {) Q# k- }& Y: A; J
  5. player.attack(goblin);  // игрок.атаковать(гоблин);6 [/ e/ }7 l! u5 u, ]/ h
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
8 B) r) G* p0 U$ P$ D1 J
4 U3 W2 p7 F' L: l( p& `  E
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
% i+ A+ x) v0 I  M5 YУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
; E7 ~+ t$ a* d; o: L8 e) s+ j, T) \; W0 y
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
( L) r& t/ p! BПривет, Астралия! Огромное спасибо за твои разъяснения ...
  D' |6 W: s* ~3 @- q
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.' m9 \9 x. o( f3 X6 Y3 h9 `5 z
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример$ Q) @( O& y- P  t, h6 v3 P
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    % H  b' J7 k8 T& P6 x% d. Q
8 j9 R( V% f2 E5 }+ e! x
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    $ r* R( G: P& i6 g4 d* ]/ q
  2.     // Логика взаимодействия игрока с NPC
    1 j' s. m7 h. D& Z! C3 O( L
  3. }
      V) b- V! M% v
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:) R# D3 v! i2 t1 l# A2 {( Z

0 U0 N! h& a" w, m
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)7 M- A- t: V: S2 r
  2.     // Логика перемещения NPC
    8 c: w0 t* k* b: _
  3. }! b/ w3 h" a" a7 F$ h) }  ?5 `6 o
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:; d, T# d% M+ K4 S' O8 Z; `8 s" [

) r- O7 C: P! c; }2 t- y9 c
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    * o! b/ u- d+ T
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)& b  r" X& m3 B
  2.     this.health -= damage;  // NPC теряет здоровье
    # D/ n( x& [* ]" {
  3.     % |+ ^3 |- x: n4 t. J% i
  4.     if (this.health <= 0) {+ F9 T- h, ?: S, ^+ x0 i, S# {# O. p
  5.         die();  // Если здоровье упало до 0, NPC умирает; x" Q, h$ P4 `& J: J
  6.     }. X+ N/ K; U6 D9 ^
  7. }
    : [" l* k4 R' Q" A, V! j8 V$ |
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    8 u3 [( A  e' H/ N8 w( t+ d: c
9 X7 L+ v9 h* J( G
  1. public void die() {  // public void умереть(). k' A" I  V" Z7 f8 }* d/ w
  2.     // Логика смерти NPC
    - K. W) O  m& O) m; s& o5 g
  3. }2 r! B- e7 q. x1 [1 z) p
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    ' J" t% J: ]. e7 J9 j- T

$ t# T! n" s: n$ L% Q/ k2 O. P+ i! ^" M/ h
  1. public boolean isDead() {  // public boolean мертв()! [  Z" }5 ~, K
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    4 v5 Y) N8 G) {8 A! U& q
  3. }
    + k# U4 a. {1 f/ s' Y, R* {# L
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример. Z2 c' O* o* f: d) E6 f: K
; o! S5 e- p( `8 {8 v( w* P
  1. public void heal(int amount) {  // public void вылечить(int количество)9 \% [7 M* I+ Y6 `1 ?* z
  2.     this.health += amount;  // Увеличиваем здоровье/ V1 r  j+ M7 M+ }5 d
  3.     - }& B7 J6 p/ ^
  4.     if (this.health > this.maxHealth) {
    5 h1 I$ _9 F( ]6 U: U
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    6 |: [0 `  P9 z) l9 o2 Z8 d. z4 o2 M" u
  6.     }
    . Y+ L) H6 i; V
  7. }1 F' v, ^: H8 f, L* U  A
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:# g% m- G+ p: J0 h1 B
7 J2 G7 V$ l/ Y5 P
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    4 X: F+ g, Z0 ~+ o7 N
  2.     // Логика применения скилла NPC6 I% d0 i3 T9 h. G
  3. }
    , g% y: D. s( K: S3 t% {; L
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:& c; P* e/ D  D
" X7 I- l0 [% i# W% b

  1. * H% c2 X) z1 r. \
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    ) C# \# y( L  m1 f
  3.     // Логика взаимодействия с NPC
    & \- P. h( G  w2 V  P+ F% C
  4. }$ a. g2 n. q( i/ g% ]% G7 v5 J1 N
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    / I: }- s$ C$ C" ?9 C; h5 I+ }
7 N5 t. U$ {! L
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)* ?4 _9 J6 c7 G7 _. ]
  2.     // Логика открытия окна диалога
    ' @# O. N! Q9 U9 i& ~: O7 P
  3. }
    3 J! d8 Y5 K6 ]1 F4 z
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
: j8 X) b" Y- N" YЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
+ h" i1 t! W8 |7 I! _! J: s7 X
0 V% w; J* }( P7 G! \
, P8 J: }' i/ C  k( B* T9 n" u, l7 O+ {
5 c7 I9 V4 n8 P. f( \& k$ Q
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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