Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
% p) Y. {. ]; m5 q* q) L" S5 p8 o( x8 x. F" J6 ~

/ U, R* c4 z  }- [. P/ L5 q& [Шаг 1: Введение в классы и методы на примере L2j_Mobius
: x1 f* q& w2 Y+ lС статьёй можно ознакомится в разделе Обучение > Читать+ `/ g  v5 r4 p* x
! A2 P( @" [: E& f9 d7 a5 j* }
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
# J, O/ H; F. r. N  w# n* L! x/ s9 v7 Z+ S4 Y
Обсуждаем:
7 K) n# L& X* }9 d3 p0 E' x
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.7 z0 b" s$ E- P3 i; Z, T
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
# `7 G; l2 H6 |1 u; i) ]
: o3 {- D7 J# s1 z. V
9 B5 S! `# @" f  [
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!) a( _) a# {4 l" J5 w3 v
7 j" }& p( T+ G3 l; d; W; p' j$ [
( F4 k2 Q: G4 r: ?7 N

5 D( z: s  G: u/ `! D1 E: H; s8 m, r

1 g# {/ o' F5 s3 P/ q

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
# }/ J: f. p1 C6 {# @
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
* a1 H& d; C- e, fПочему мы используем ключевое слово this для ссылки на п ...

0 ]) h2 g7 p6 y% o) g1 g: X: C9 |Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.2 h1 l. g' y: H2 L) k  c: m
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
) O& v  n8 z! N; u9 P( Q5 g8 X% u; ~9 S8 @
Вот пример:
% B/ s3 `& u' S$ B# T# V. O- \
  1. public class Player {
    & T- X8 e* t& N$ e6 q0 ?4 U1 Q
  2.     private String name;/ A5 m" [/ G5 O

  3. $ K& B8 j; g0 V0 O/ M5 D
  4.     // Конструктор7 V- x' B/ b9 P3 f1 G
  5.     public Player(String name) {
    / B) [% u, N/ r( ]8 r3 w
  6.         this.name = name; // Используем this для указания на поле класса
    " g) H0 \" e* l
  7.     }% z; P9 M  I0 s9 x* B6 z: T

  8. 2 p3 ^$ I9 o& l2 _
  9.     // Геттер для имени
    ; T" \; M) W. T% A/ q1 Q
  10.     public String getName() {) h4 Y; c! M( o9 Z
  11.         return this.name; // Используем this для обращения к полю класса
    ) L) P' R. h' y+ B: Z6 b5 x! _
  12.     }6 \6 K3 s5 Z5 P+ w
  13. }) K0 x$ b6 w& i/ g3 P6 D. [
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
* g) C1 W6 l) y5 N, @
: C& L$ Q4 V/ a' i# S8 RКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    3 q0 h* z# T% c( l8 d9 k, B
7 m: R3 m1 x; v
Пример передачи this:; M$ M5 T7 _6 l  R/ h8 }) F, M! H
  1. public class Game {- m0 ~; o9 o$ n. U" S
  2.     public void start(Player player) {
    ' C+ m! v3 h$ Q: _: `! K$ g' K7 k
  3.         System.out.println("Игра началась с игроком: " + player.getName());. d6 C. k9 b9 ]5 v
  4.     }
    4 P: y2 m0 g% D4 ]5 c  ~
  5. }
    ; @3 \: s+ A% X2 Z

  6. . R2 I  \+ J0 a- _0 l4 u; f8 g
  7. public class Player {
    ' e" k) |* I* E) f( P
  8.     private String name;
    ) W  h# D# p, v$ W2 i

  9. 1 O" v$ `0 {8 D4 _) e
  10.     public Player(String name) {3 O4 d1 B% F- n0 _+ Z& T
  11.         this.name = name;
    7 Y( M3 ^5 l+ l
  12.     }
    + b) i8 E+ l' o$ w3 F! `  x4 |

  13. 2 }( G6 e7 s2 L& ]% s: M: \% J
  14.     public void joinGame(Game game) {
    2 u* i: f. r7 A* d) k( [
  15.         game.start(this); // Передаем текущий объект Player/ U" U$ i5 D8 ]. R3 I
  16.     }
    % y2 w. L/ N1 ~; X! s
  17. }
    - m6 D0 A, @# {# u
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java., t4 n0 q3 X% Q; J7 W

( Y5 t& J& Y" _. r6 ]: k
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?  C6 l0 O& A- T. P' h

7 m' z& |4 B+ u& \# |) s0 s
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! ; m2 F0 V6 D! |5 I; O( u8 V
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
6 i( f* ^) P  \( d6 F) v+ t
Mike123 опубликовал в 2024-10-17 20:053 F: v; K; \1 g/ {' \
Добрый день! / f9 v2 {2 e" o9 U3 ~
Как создаются и вызываются методы в Java? Мо ...
7 G" w0 J  M8 i/ O: Q
Привет, Mike 123! ?# Y+ I2 N+ {# G' Q6 |; m
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.9 q* H) _  T! m; D' F' T
/ V$ ]+ E8 [" |
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.. @4 w# H4 ^# u/ |: P, S

$ L$ k4 ~; f0 n3 h6 y' r
; A1 m/ N4 Y/ X0 ?% _Как создаются методы в Java?' }' s% s( U6 y

' w! p8 ]8 x' H) yМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
0 @1 X' M  c2 [+ x
  ^9 h$ s" f% \8 _+ T3 h) P
  1. public returnType methodName(parameters) {3 N, O  L" t, s1 h" Q
  2.     // код метода4 {2 g$ H0 s- y, Y: c. X$ G& S! D
  3.     return value;5 _5 l4 n2 P4 C, ]
  4. }! A2 [) @+ u/ t# o) H, r& _
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).  [% M, y1 V2 ^# x( ?- |  T+ p6 z3 x
- i( D5 U" b- b6 }* L
Теперь перейдём к примеру.
1 v& W5 C' q2 y( `1 G8 ^. d- O6 y- f+ I
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода! w0 N# g) e( R7 U; c! {
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    4 Y$ W7 A  t, Q( ^) @& d
  2.     // Вызов метода атаки NPC  q+ t9 O- V$ b4 g6 v
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    ! v( {" I& n6 ]4 `( B" S/ d4 R
  4. }, P9 Y' ]4 ~& a; W- e0 ?! {9 ~. [
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
# W2 J5 Q, Z/ L. j# X6 P4 N
! j; H. y* H' p0 c! \" v7 ~) J" h- N$ Y, R
Класс Npc.java — вызов метода8 j( g/ ?, E  _' R% P
6 T: U0 g- S' l! u, X4 Q
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    % t; e8 i& x5 @
  2.     // Логика получения урона NPC6 F2 P# j0 `7 Q3 R5 q# @& ?
  3.     this.health -= damage;  // это.здоровье -= урон;" h2 Y4 J- a5 V/ b2 P! g& K+ r0 q
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  . ^1 X$ C# d: E8 O5 j+ X
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    ; j6 h, i. H+ P: C
  6.     , T! V0 `/ Z1 ~* Y# e1 P( E9 t$ _5 \7 L
  7.     // Проверка на смерть NPC
    6 c2 G, X! H2 F7 l
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    ; U2 Y4 a$ j# X' S8 R
  9.         this.die();  // это.умереть();
    * l4 ]9 R/ `5 R" w( j7 |
  10.     }- q) D; b/ @4 U& E( t
  11. }
    7 D: ~+ P/ @* F$ E
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).; M' C( S# c+ [2 {. ~! `- l  W- k5 V0 c
Пример взаимодействия (с переводом)
7 E4 U$ j# [3 V+ a
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    6 m2 {  p4 J3 j
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");: u3 G  |3 q, X: T# e( o# L

  3. * @6 w7 z8 y) v
  4. // Игрок атакует гоблина
    " h# i. X- S0 I, a' v
  5. player.attack(goblin);  // игрок.атаковать(гоблин);& m# y. y' Q4 E8 r" k; h3 y/ e( Q+ S
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
. k% J8 d/ I5 W) i( t
% K( K" F  Q, v2 Y0 z2 `+ N
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
2 a% U0 Q) h3 }У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!7 l1 U( e) {+ ]$ @8 p
* M' m6 k+ v! n% {; D
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
8 u! X- }- W' F) ]$ O; lПривет, Астралия! Огромное спасибо за твои разъяснения ...
2 O* d8 Y5 Y0 t: v; P6 P
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.+ J( p. A0 k, b5 I9 Q' v
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    / l8 V, c# [! l0 ~8 Z. t. W( X8 a9 j0 E
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    0 t: Z# V* j' l5 B# F# y
$ W' Z1 f7 e. o/ D( U
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    ; |: c' {0 I: {# A
  2.     // Логика взаимодействия игрока с NPC
    + I* r  s5 d9 @
  3. }  N) G6 w. V8 c; @
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:+ U/ a, {! Q3 w+ n
3 O7 M+ a2 T( S5 [& H, @( _! s7 u
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)# [- J3 f; ~% G# m) Z; f. Z; d0 t
  2.     // Логика перемещения NPC+ D$ ]' ^( ]3 c- _
  3. }
    % V9 c2 y8 }7 o! _
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:: o$ d8 N/ e* P( e1 n  [
; G7 L) h. J, l  {
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример* K! B- d6 n% p* j# r
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)* v9 p7 {" h3 v0 x1 e
  2.     this.health -= damage;  // NPC теряет здоровье
    % w5 {, N5 _- b' B$ D
  3.    
    ) q2 N$ Y1 I' S$ G6 F6 c- Y5 c
  4.     if (this.health <= 0) {
    ! k& Y/ D# `. V& V
  5.         die();  // Если здоровье упало до 0, NPC умирает2 e5 r& G3 r3 W: h. K$ j
  6.     }
    3 H# B5 a2 e! C  p" C# f; n1 M) h0 u
  7. }
    " N. d9 N+ ~! \0 d3 Y9 U4 J. o! f
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    ' G8 [" M" h2 }: T4 z6 r8 d
. P. K. y& y3 q8 ~1 H: \
  1. public void die() {  // public void умереть()
    & q* k4 R: S5 a! u
  2.     // Логика смерти NPC% o9 `; O. ~; S9 f5 X
  3. }$ I. q8 P. x7 Q
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    7 _$ F: x/ f" c# u% `) i

9 z+ ]5 J4 J" e
7 x" t: Z' p. Q- Q
  1. public boolean isDead() {  // public boolean мертв()7 J) {/ D5 o4 r
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0" E* E, ^4 }) `* L
  3. }9 L8 c. v2 P4 X0 c" [; m9 P$ j
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    # U. {3 H! S" n7 h, N

  Y, g/ B: F# K/ d8 j9 i
  1. public void heal(int amount) {  // public void вылечить(int количество)$ j. m4 J+ E; {' R6 [1 c5 l
  2.     this.health += amount;  // Увеличиваем здоровье
    ! S' _5 b8 ]! N$ V9 g- W' s; M
  3.    
    % F9 P  j! X1 e" [& o; ?+ l
  4.     if (this.health > this.maxHealth) {
    3 I' A& _" t/ z2 j" n$ j
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального7 t# z( R4 T/ f! t) d& p4 i
  6.     }2 X( v' d1 x7 R0 {* C, l
  7. }
    ; L7 H" j7 _! ]3 c# }  @6 N% p# l
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    % D+ o9 U: f" P. T
, Z# G" R) C  {, h6 j7 O5 i+ \
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    " a  I7 O% |7 R$ O  W
  2.     // Логика применения скилла NPC; @; m9 H2 U" C7 O' k. b
  3. }. j+ V6 D. C. U/ G5 t! j5 r% v# [
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:& ^0 r" J% c, J% I, {; e& D
; ^% q1 T! w; V0 E+ _( g: R2 l
  1. 9 D+ {; ~: f7 m8 o9 }2 |
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    ; ^5 Q6 P& v3 F- u
  3.     // Логика взаимодействия с NPC' u  ~- X7 m- u  Y! J
  4. }+ j: L2 o2 p' g5 F5 A) ^$ Z) a8 G
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:" d: e- K- D# I" a' E( v. w
  C: b# p) b* F, ^/ i
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок); t6 N- T/ a  m8 J6 c, u7 w, d
  2.     // Логика открытия окна диалога
    5 N) L8 A8 e. ]1 v4 W+ w
  3. }
    5 G1 P- i* y1 s4 s! b
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
$ @' |( d/ `2 g! eЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
$ ~! T/ l+ P7 ]9 k; U3 Z
/ }* F3 {5 @8 i6 v: k% d
& I/ |2 V/ {7 a0 S. D& O( N
% Z; F5 I$ a8 |5 U9 V$ m
6 F- {4 m+ @. `( V; N  h
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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