Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 2 H( Z' J5 G& g& T/ D, Z; ?1 y

; F/ C" e$ m" v+ e& d) }1 e* V, K* Y
Шаг 1: Введение в классы и методы на примере L2j_Mobius
3 _, }. v9 _& E# L4 p, rС статьёй можно ознакомится в разделе Обучение > Читать
5 Q0 u& l. f& H# L% x7 X2 t! A; V  i
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
; @4 ]- U* S# k. _4 i
8 O. [1 I$ i, b% z  O  m* EОбсуждаем:. u0 `- u" b) \
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    # e: c8 Z! d0 v) ~  O4 u  F4 F
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!0 j, {3 L' _2 n& g
" e& j7 ]& l; K3 o8 N1 t, C0 Y, j

5 |. |* B) _- h; L8 O7 Q
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
1 n* `6 }+ q, G) \
% a! u0 x- M/ C: V9 C  S8 k' T2 W, a: f$ v9 w7 a; M. G' q
8 Q9 E7 |# N/ U. J7 X8 n% m: M
; X4 q4 G1 L, S, l6 G5 N
0 e8 z2 l) k- b; i  l8 e2 f9 G+ o

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?% Z# p6 E* {" o+ Q; v4 _& ?
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17( L0 u1 q; J& H- p
Почему мы используем ключевое слово this для ссылки на п ...
% e. E! z7 o) C( b
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
  r- R8 j- x1 I' l' YПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.( P( i0 T* W, w- X# f/ X
: s- h+ B. d5 k1 k4 c& z
Вот пример:
- m, J7 }& `- }' v
  1. public class Player {" ?% z7 K0 S& V8 K8 z8 L2 a
  2.     private String name;
    1 D/ j8 q2 c  F' m+ V

  3. 6 d  _9 ?* _+ L  u
  4.     // Конструктор2 [+ ^+ F7 G, \+ V. q
  5.     public Player(String name) {
    0 v* X; ~% m( P% M  \
  6.         this.name = name; // Используем this для указания на поле класса; S% I; Z3 |% A4 H
  7.     }
    $ w5 k# @+ B5 u! y

  8. - @# P, U- w# x% y" A0 d
  9.     // Геттер для имени! n1 p3 @, o! e' q9 D
  10.     public String getName() {
    / A2 @% }% j8 w2 K( R
  11.         return this.name; // Используем this для обращения к полю класса- ]) {* \0 v2 _
  12.     }# m+ _4 f1 y' S4 D* U! D5 S% X
  13. }
    8 P7 l5 k' [+ ^0 X: R* M
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
" x: n, ?% i+ i) b, P0 r/ q  V! E  n' N: t$ n
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.5 k1 y7 ~7 h* v* H8 o0 k$ H! S
# c3 M; I3 L) v
Пример передачи this:+ Z; }: d. f& u2 l8 v0 k
  1. public class Game {
    / Y1 h5 r, }7 C/ S
  2.     public void start(Player player) {4 E" b" K/ n: r( |
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    . ~& i% ]8 w( o+ j' c7 I' [  ]% x
  4.     }1 O4 Y/ R' \8 U$ k
  5. }% S3 ^" t2 `, [' D

  6. ; }; y$ }6 z- \4 f; O$ Y
  7. public class Player {% t. f$ R9 m. j9 t1 F5 S
  8.     private String name;
    3 ^! f2 c. G8 ]5 c3 W0 p  x  |
  9. 2 H, W2 i+ \1 t( ?& d) B
  10.     public Player(String name) {
    & |% N" l1 y1 T
  11.         this.name = name;
    / }* ^6 b3 r! {: _
  12.     }
    - g1 b4 n  \% M2 }9 r& g

  13. - P+ H2 n0 H0 u" A# ~6 d* I6 k7 D
  14.     public void joinGame(Game game) {4 ^+ w$ F$ S  g: b0 R, e# T6 C. ^7 C
  15.         game.start(this); // Передаем текущий объект Player
    ) }# A8 j# y2 T! b) U) i+ h
  16.     }
    # U" Z9 D& [3 F8 d3 b& ^+ U
  17. }% T: [) z0 b3 I
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
3 [; M+ z; {/ Z; ~

+ W6 q0 ?* ?9 yПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
+ I4 t0 _6 A! J% J, ^2 e  b0 {3 y# g  `6 |% N- H% l" G7 N& {* }
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! , _5 E7 b# e; z* @& l7 p! X! D
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 3 z7 o- \( Z/ \8 B( L0 j  M
Mike123 опубликовал в 2024-10-17 20:05. O3 g- S! e: Q7 A- r
Добрый день!
2 x) t- U% M  V" @& RКак создаются и вызываются методы в Java? Мо ...
& \1 j2 j% v& [! H, A- V$ J: B
Привет, Mike 123! ?
* w2 X) n; ~; c( |# R9 y* N8 U# @Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.; [# m, R6 v& j* a; O# T: b/ F' d1 g
7 a0 l3 D2 l* Q' N  s' j" f
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
. r; e, u/ o) M2 z2 H0 `7 T8 A/ C& n4 ?& f$ G( p; W! _1 R

1 H- c4 p- x* ]2 Z  ^0 G; ~Как создаются методы в Java?% W  e- l" P$ f

: M4 q6 o  x( GМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
( P# Z9 L- @1 J; O* ~% G- _  |" `. g0 ^
  1. public returnType methodName(parameters) {% Z# U4 F; w8 X3 p6 g; w
  2.     // код метода
    2 d' c- a5 u2 E' d
  3.     return value;( t: f; ^. v& d( R$ {' I8 ?$ z+ t
  4. }
    4 s8 y: g; M4 h9 a$ b* B( C1 c8 |
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
      @3 U; t: A0 o6 o
1 [5 \' m7 M. q* Z5 {5 Y9 W
Теперь перейдём к примеру.9 T% ]) i$ [% }6 K  U9 A( @2 C- B' h

! t5 s; T; o" [3 U4 VПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
3 ]* l1 W3 u: U, U6 Y
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    ) a5 _9 ^+ D5 A0 w+ _; }
  2.     // Вызов метода атаки NPC
    , k1 Q4 u( c4 C; D
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    " r; ~, G- }6 X* [) E* ~, f
  4. }
    9 Y8 p4 V! j4 [+ I) t: z/ L# h
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
8 g  b# A1 J4 B. k3 |5 p
7 g( M- W2 g1 Y5 H6 [3 K# S+ J7 }: t  e1 g8 @: ]! ]
Класс Npc.java — вызов метода% `+ r* K8 v& o& [6 H

  {# Q! N& x% Q  X6 F
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    $ P3 ~9 k5 `% s% q+ s% n3 q
  2.     // Логика получения урона NPC
    2 m# J$ [: d6 q' }' K8 u
  3.     this.health -= damage;  // это.здоровье -= урон;! z: N2 x( k% L  l& s, _* u
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    7 X) n. {& ^' I+ T, l' D1 l" x
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    * w0 S( `4 V" s) \
  6.    
    1 O/ O5 F" @0 a! y. i1 z& L
  7.     // Проверка на смерть NPC
    5 `- K( J7 A' B! p
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    ) {& E* i/ `% [$ i2 S
  9.         this.die();  // это.умереть();
    ! V' F/ t9 t  c! D2 M
  10.     }
    8 M6 W5 }8 p5 A4 s% ]" O
  11. }
    , K/ b4 a0 w$ h* ^2 m- Z
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).8 V( N7 p( \9 S1 m# z
Пример взаимодействия (с переводом)
; a3 i7 p( f2 ?# {3 a- P  D# S
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");! _6 C, Y5 A5 {* x
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    ( Z' E8 `6 q" \9 u* O, d& K

  3. 7 g0 _7 @. ~3 T1 u% q
  4. // Игрок атакует гоблина
    . V* m3 O' {8 j- I
  5. player.attack(goblin);  // игрок.атаковать(гоблин);8 t/ m0 K9 P: C2 u. J
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
1 y* Z! @' K8 f- P, N. E# ~0 N& c7 Z" S
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
* c' |  h( }7 }3 t" `У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!6 V0 _6 R0 _  Q& Q
9 P% u$ y$ S0 s+ M! i0 Q
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:301 E/ b$ y9 ]# j3 e2 g, j
Привет, Астралия! Огромное спасибо за твои разъяснения ...
+ w7 G8 ]1 \- F9 D( i3 e/ U! _6 L
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
- C3 |1 U/ H  R' E  o1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    # s  ^1 J# H* u3 u; Q( A3 \$ ^
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:. U* J* ^( M6 Z) M$ I/ s

2 t9 r7 u0 C! L2 e
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)- I- ?( K2 X" H5 k) {* A# \  H
  2.     // Логика взаимодействия игрока с NPC. X8 N2 B/ D1 W
  3. }% Y  a' g' }: v# U( i
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    - z% d. P1 `/ w: M5 r: R; p' o

1 M- E+ T  j, j! a+ d
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    ; y7 o9 ?; p6 F% g! A2 C
  2.     // Логика перемещения NPC# D9 p$ A( D9 @! x- j
  3. }2 s+ p: R9 u) n6 o' Y, q2 `  T! [( e# o
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:; U0 `' `$ \1 g2 V4 m3 N$ l

) g+ N4 H, a3 y1 z# i, L
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    . r( H" [' `( J8 {4 W3 g
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)2 V) A8 C1 _4 P
  2.     this.health -= damage;  // NPC теряет здоровье* C* a) _$ }9 g. l9 t, S
  3.     6 Z9 n; s/ d, \& ?8 E
  4.     if (this.health <= 0) {
    2 @- F8 }" Z, s# B* D5 a( v
  5.         die();  // Если здоровье упало до 0, NPC умирает
    7 k. N& q$ B- q6 B  s$ Y' v
  6.     }& ?" u  E( A* x* N* X: L
  7. }/ e* B* P+ ?, Q* g% r
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример* c) F! h" {5 M! [" n

5 h/ Y" }' l: T0 T1 o$ E7 Y' O7 l
  1. public void die() {  // public void умереть()
    - v- N3 ]+ f& |# y* j. k, O
  2.     // Логика смерти NPC
    ) L! q0 Y' h4 T8 s& o; w/ h
  3. }' i; G- z9 e4 [% |
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:. o( j' J8 Y5 S% X

, T; j9 h+ c2 g* Q
8 R) D# K& r- I. T0 {. c: i2 N
  1. public boolean isDead() {  // public boolean мертв()
    : i+ x5 L1 U6 a# z# O# i
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0) I& ]3 Z+ L( E
  3. }
    # X2 \6 p( o/ z5 o' f% j) N
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример! e4 |7 O4 `) A( e

5 M/ T1 Y! N9 V" N
  1. public void heal(int amount) {  // public void вылечить(int количество)6 }  Z$ I$ w/ a+ X8 J5 ^' _" ^; Z6 W4 T
  2.     this.health += amount;  // Увеличиваем здоровье+ |& T" q) ~5 P
  3.    
    , f. F, U$ j' y4 q* x" Y
  4.     if (this.health > this.maxHealth) {# x  M: e: ]7 I) H
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    ' ]6 J" n2 [6 |  v/ _# l$ v; t0 y
  6.     }9 \1 [# y. B3 X, B! ?" K1 |
  7. }, j( B) T  J7 C1 J
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:" D) S  t+ F7 m9 `$ W& o  t

8 S( B! U1 p) W0 t+ @
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)) }( S5 @9 Y7 L' n" l* e' P
  2.     // Логика применения скилла NPC
    2 |$ }" E4 C+ v& ?# ^$ {
  3. }7 H) N. _2 x& m
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    2 E5 L. c+ D7 l: L0 z

% O3 h2 b- W/ ^" [

  1. 3 Z4 p9 C; u9 w% m0 Z
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)0 S# Z8 V8 z9 [; l) J! d
  3.     // Логика взаимодействия с NPC9 n7 S/ z- c, T  v  I% G
  4. }; E- U: c7 z% _  Y4 v. g
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    ( `( y; C' l! ]# c6 B9 E0 P
* a5 j+ |8 W/ K
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    ' J$ g% X% X9 w
  2.     // Логика открытия окна диалога
    ( B- D; Y4 p' d! K1 m
  3. }
    1 P6 Z1 [5 Q9 F/ q, M! V( G5 T5 m" i
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.. I$ `1 `6 T$ ?  w! t* P2 U3 d1 G
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!- A; S: P8 [6 l$ [$ C/ j
5 U3 ~: @2 ]- k5 {5 F

& p! K2 Y" L+ m) P3 _2 I# Q: W% }. h3 N( f& Q

# w& E4 p8 c8 P& a
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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