Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 6 ^* n  I1 J+ w. a7 E$ k

+ O: ?& G2 E4 L8 ^
. x3 z. K1 J4 d; y; ?' p; j4 fШаг 1: Введение в классы и методы на примере L2j_Mobius" h) T: ]; {; I$ U7 B5 ^' Z: V: x2 C
С статьёй можно ознакомится в разделе Обучение > Читать4 b9 M7 [  O# y. A  D# M( B

+ b. l; w" |7 Y, x" L; d4 M0 S1 ]Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.$ K9 p- m2 S1 Z& ~7 e9 O
! F4 z. u0 N( y. G& I
Обсуждаем:
; i0 s6 ^, n1 Q4 M' C0 I
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.) [$ \$ T$ s) K1 u0 u
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
# G7 t! T+ T9 I, R) y3 U+ s9 \$ P0 Q* {3 G; v

. K. P6 v/ J; Y/ c- B: H2 J, O4 o
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
" r1 F9 c; G1 w/ b- _6 R: P0 Z, o3 r" o) X- v( S' x0 K1 t

: V! \. J6 C" [# s3 ?; c
8 z- ^* x* ]1 g) O
! D4 V# Z& k/ l' ]; _
" r7 H/ h# X+ }1 y  _+ M! @

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?1 P! s; a  p# o/ U7 z, T
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
6 K( L4 f% U3 fПочему мы используем ключевое слово this для ссылки на п ...

: x: V7 \/ q/ H# D) u/ @" J* `2 t" CКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
- d% E. z2 a, v  q) V( AПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
5 N1 U* Z6 [# U0 Z4 v$ V. {5 ?
: a2 N7 w$ U5 o. ]- n! K7 U' [2 HВот пример:
/ G, y$ {, \7 O
  1. public class Player {
    . O2 t9 \) {* j9 x4 ^+ T
  2.     private String name;3 S  |( }/ J5 Y# |$ B! K

  3. $ o& K# b, T3 [7 E
  4.     // Конструктор+ @! g# N, T6 M1 {
  5.     public Player(String name) {
    $ W/ ]; f9 v1 w% v
  6.         this.name = name; // Используем this для указания на поле класса
    7 q1 y8 h4 L0 R: w1 L0 Z: j
  7.     }' _& X% h( S6 |

  8. 4 X7 \* C; n: Q! K$ w
  9.     // Геттер для имени& A# N' Y/ I% u# t. |8 ^9 N
  10.     public String getName() {
    0 n6 Y+ s, t  F6 M2 S+ @
  11.         return this.name; // Используем this для обращения к полю класса5 E( I( H+ C5 f/ h4 i& j; Z
  12.     }- n. _$ U8 ?4 h( R4 m. p/ S- L2 y
  13. }* i& k# @" r+ H4 |) C1 t
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.; L7 d' p1 B( @7 d

0 a- M2 v  r! N, u2 I$ t. jКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    1 t7 n! Y  N6 ~9 s& R+ P
: P5 r% K! O6 o) z7 S7 J5 O
Пример передачи this:
1 F$ T7 E. M0 Q: o
  1. public class Game {  ^, W! n2 d7 Y, G
  2.     public void start(Player player) {. o0 r7 _0 C5 ~1 \( ?( e: Y$ f& T8 t
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    3 x: L2 b$ w0 `) ]
  4.     }. j& D1 {* q" ^! b( S1 [
  5. }" a. x4 N2 g6 @- J8 ^
  6. , O1 ]& s  e! i3 N
  7. public class Player {  f7 p' d9 Y* R) j& O- t# K9 A
  8.     private String name;
    ' Z4 C2 {6 j9 \  T. H2 u# g3 Q3 \
  9. 0 m' t* D8 D4 ~
  10.     public Player(String name) {- w  G, D7 L( F0 T
  11.         this.name = name;
    5 z; g  b  u8 L  @' J" j0 Y% j" L
  12.     }; k& A( U+ d# C
  13. / a# `1 A6 M5 K; w. _
  14.     public void joinGame(Game game) {
    : T, q! o+ h# Z* y) a. ~+ T) C
  15.         game.start(this); // Передаем текущий объект Player
    & T1 H7 s) A: l, o: Q
  16.     }( m; R9 b7 b! m
  17. }; F6 m5 \* Y) b4 T5 S
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java." D5 n$ t1 `4 \! [


$ z& ]' P" _7 G1 s( t4 H- D5 M% hПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?2 @) j) W7 Z0 @- J5 G

/ Q9 B9 j0 e( Z1 ^  O
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
+ }: t1 k* d, {: l& w( oКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 ' h" e3 z- h' x
Mike123 опубликовал в 2024-10-17 20:05
  W. L* Z) t: A* H$ D4 l7 lДобрый день! 2 ]  Z+ S- v+ o) s: b1 A* v: {
Как создаются и вызываются методы в Java? Мо ...

4 J: C- ?9 B: Q2 m1 \  ^4 qПривет, Mike 123! ?, G/ _9 J$ X) M* R
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
1 \! j7 g1 o2 S3 `5 |5 q' A
  Y& ?  {4 o0 K3 m1 z( B3 u7 mДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией." K) q) u3 B! a+ ]" A( U9 \
, ?% K, R8 s8 i# R. q
' B2 J- m8 S8 o& {9 F# t
Как создаются методы в Java?
% U" u/ T, y' Q  U0 W& Q+ W* |( C1 ~, b
Методы в Java создаются внутри классов. Вот базовый шаблон метода:6 i' A" }/ {, Y0 [7 J+ ~5 k9 n+ }- v
" j9 p4 r6 w6 H  Z! P8 t
  1. public returnType methodName(parameters) {- w( l5 j3 k$ k8 n" p
  2.     // код метода! h; Q5 ?: p/ S' H2 n
  3.     return value;
    * E1 \; v6 z  `3 U! C2 u
  4. }8 \# Z( f5 ]/ K: n
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).3 B' a$ i7 Q5 A) l9 a

/ G) r- ^) k) Y( \/ ]Теперь перейдём к примеру.2 {# Z! m) X, C* Q# E
0 a  J; D9 J# N' X- J
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
( M- s7 _% q- H7 t" {# W
  1. public void attack(Npc target) {  // public void атака(Npc цель)2 u/ Q3 c2 O4 G5 \: {
  2.     // Вызов метода атаки NPC) a& \- o  q# q; R6 O) _
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    ) j$ K0 ?. r" q$ E
  4. }
    $ G3 c! O& R; K2 u
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).2 Y- E: A( _) U  C; g0 G' E

6 ^# x  I0 \( \& R4 f5 b% _, Q  T1 K
Класс Npc.java — вызов метода
. c0 C) o' E5 x- J9 Y$ V* l& D4 y4 e
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)9 N6 L& S# |9 N" d" i" w5 b2 V
  2.     // Логика получения урона NPC
    6 v9 x* E! x9 l3 D! S
  3.     this.health -= damage;  // это.здоровье -= урон;* t& K* w. Y8 q7 V
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    8 ^; G' z' }$ }) v; ~3 K
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    1 K5 h3 G2 f( G) K( M7 q
  6.    
    . G9 F- q! k% H  F
  7.     // Проверка на смерть NPC* @; w# M" p* i  P( Z# W
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)7 R) e8 R0 f- I; i
  9.         this.die();  // это.умереть();4 s/ O0 h# Z- E7 p  Y7 T) M# y
  10.     }; G- d7 d4 v) F/ X3 u: n
  11. }4 g, o& w( V! S0 {8 K, s/ q, Y
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
      r0 r2 {; H4 w
Пример взаимодействия (с переводом)  Y* D$ Y- d. U3 A
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");" V( {! C0 D8 u, t# X; k% N( p. @
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    9 v# j8 G( I& i5 T4 K

  3.   r5 Y, X& F  b/ d9 o
  4. // Игрок атакует гоблина3 i& ?1 b" s$ a
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    ) a/ L* @* c2 m. e# j6 J# p
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 5 g8 h+ }8 p1 f# j1 ?; U
7 S. r! B  O4 v) \# @
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.& d* x1 z9 O" S
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
7 N+ o, y: G( Y# R! a- z' p) F" F) T7 I7 Q1 G0 _  \
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30% [8 W. q* t9 V( ]
Привет, Астралия! Огромное спасибо за твои разъяснения ...

% O$ K) @; h3 M* T* pОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.8 M  x" ^2 T' g! N0 o% f
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    4 F, A& T' x, I6 Y
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:1 ^3 W* [+ l4 G# P$ `, N2 R
* n* O7 K3 A1 D7 y& L8 j* V9 X
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)0 d$ m& x0 c+ t% i' U) u
  2.     // Логика взаимодействия игрока с NPC
    + z! G( W0 G$ m) K; u
  3. }5 X  {7 n* b9 J; A# D" b
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    - M6 z+ m( Z& s5 P
( C5 l" {4 c  I4 Y3 u3 `7 a
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    % k0 O5 q* _! Q' z; F9 o8 l
  2.     // Логика перемещения NPC4 f* {; j1 v& Q  M! \4 s4 Y5 o
  3. }. o: t1 ]- z% l
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:2 W  U% K8 o' G: h' W  ?8 v* _

) [: d3 F0 x) N; Z) m( u' P
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример1 J9 D8 D  q. H9 ~
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    7 \5 S5 V( i. ?; b8 U4 {
  2.     this.health -= damage;  // NPC теряет здоровье) m* J9 A; G+ `4 j3 Q$ \8 }
  3.    
      n/ E* R/ K) C0 ^7 t. f
  4.     if (this.health <= 0) {! h% P8 z9 S, M
  5.         die();  // Если здоровье упало до 0, NPC умирает; M) H& y% U3 ], u0 s2 i2 z
  6.     }7 C) S( b* C* A3 |* b/ S
  7. }' p) F; H# N. L6 A) R2 n7 J" |/ M
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    $ o( u* T; M! y9 ?. V

7 `+ Z' t) D! Z1 |7 A9 ]
  1. public void die() {  // public void умереть()
    # I$ S6 F+ V, [' t
  2.     // Логика смерти NPC
    1 F+ W# Y  y0 i& M6 j2 c
  3. }# ~/ D- G) E! ?( c" h1 r' p
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:6 _. o2 q5 B) X: X& D& e/ M5 C

8 G$ b6 G  z( k+ A2 `' L1 i1 m% r( c  T
  1. public boolean isDead() {  // public boolean мертв()
    $ f  C8 R' Y6 O3 R# s$ F3 w
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    # e* w% A: a  w2 p
  3. }" w7 w3 i* M1 L2 l$ {
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример. v: l. i/ o! [) d7 k

; H* r4 U9 ^) G2 D$ L  O  k( n' h+ D2 L
  1. public void heal(int amount) {  // public void вылечить(int количество)
    " Z7 C& v5 [/ P
  2.     this.health += amount;  // Увеличиваем здоровье
    1 i6 u5 Z! }4 i( k! B
  3.    
    5 a  c5 A: i: `/ E% g
  4.     if (this.health > this.maxHealth) {5 P0 p# m# K* D  @
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    ( v, `7 k& k* J+ P6 o/ B8 @
  6.     }
    & n) w: N9 H% q
  7. }& \1 M) ]! Z! i, _- @' w
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    4 A: x6 s( C2 m5 R4 U  I: k5 T
% F  k. D* }8 f" K- W
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    ' |5 _/ S+ o3 o: I; ~5 H0 z$ f
  2.     // Логика применения скилла NPC
    * p2 ^: y/ l+ x. k$ j
  3. }! Q% e! z% w% k6 c. r  b* H
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:5 w4 }0 C: J+ e( x& k/ l; H

+ @3 F5 t' W3 h1 r
  1. & _  W( N  c% M% o5 [
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    ; |; I' m$ e* n+ X( i
  3.     // Логика взаимодействия с NPC2 ?6 ~' S# r: D5 W) c/ K
  4. }
    * o# u5 N: R) F# H5 Z+ A) q
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:" E" z8 L# m% y) m. S2 g8 _. p& K
* y( w9 J- k* `( l  \7 I9 d
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)2 _* `6 z2 v, x4 k  B6 E9 n# Q
  2.     // Логика открытия окна диалога" @4 S, b) \* ~* A1 p4 O8 V: R
  3. }' [& ]) A2 R7 `7 a* F' }
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.- Q2 u; \; D! I+ y; p, c$ t. |7 d
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
6 @" Z. l1 \! [3 g
* C! s. S: Z! y) E( I* F1 n2 E" }# N! K
4 s( z. {0 m8 N! d6 j

0 D5 z4 t9 r, e+ Q" N+ T
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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