Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
* y# A" K7 M. {% r2 P
, E2 O2 D/ p; H% p& R0 C4 t5 A! [
Шаг 1: Введение в классы и методы на примере L2j_Mobius
6 `6 k6 c5 b* B" a/ R  I( E. q1 qС статьёй можно ознакомится в разделе Обучение > Читать; k0 R! {2 v1 k3 T+ ~4 R% T4 _

! S! ^4 E* ?; h) n4 k* _Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями., U3 w9 r. k5 ~0 H& F/ Q; c7 p/ H2 B
1 d& ~' C/ K* B; p
Обсуждаем:
7 U& I$ a1 w. Q, z1 t" M: S
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.4 m0 M! y* D/ F, r
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!; O. N5 J; B1 B( x$ C+ y

# c2 |* v& H: u. A9 J
( Z4 |& x0 m6 K2 p& {" ]
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!& A8 t0 i5 f( t4 v" _

1 y+ s8 l) C& ?" H
4 r3 B: J0 K. U* S8 U7 W7 P9 S- E) b( P0 g) i
$ K6 o# }- S: d/ D

& e  P! L+ _' Q6 b4 w& U4 _$ s

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?4 f% K) `9 X; q6 ?/ H
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
9 p4 e( J1 k+ B5 oПочему мы используем ключевое слово this для ссылки на п ...
/ C5 E4 `" _) Y( h
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.+ i4 Q0 Z4 Q( L/ k! R+ v- Z
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.2 e7 |- Y) a! ?4 p5 @

8 v: S& T$ N! iВот пример:
' d/ N! k- Q1 _7 k# w$ ~- X! F: A0 o" ?
  1. public class Player {
    2 u4 Z- a8 `) s* r0 Y- S9 }
  2.     private String name;+ S' K/ S2 a# O
  3. , f; \! L! Y. r7 \2 J6 c* R1 @
  4.     // Конструктор
    + g& U2 b. _: i4 O$ X. e, o
  5.     public Player(String name) {
    / w% C& ^% W5 p8 h- l! F
  6.         this.name = name; // Используем this для указания на поле класса6 T4 [- i( T7 f4 x. `) S
  7.     }
    * Z7 F9 R) [" v9 N9 g* d
  8. ' }! a( I7 S4 p: r6 E; S4 C
  9.     // Геттер для имени0 ?9 x  S( h/ R/ G0 r( |
  10.     public String getName() {
    3 ~- z" e7 J+ ?5 w: C% I# T4 Q
  11.         return this.name; // Используем this для обращения к полю класса2 @: q4 ]6 d5 B/ i9 y. I; z
  12.     }
    7 B3 v7 @* I* {2 k
  13. }5 g+ H; `; w1 `2 a5 c2 q
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.- e" I. n# `9 _5 c
" m5 P6 \" z4 x1 |5 Y( t
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    # q; I$ m( z! Q* I7 B5 ?

# l) J/ ^7 P4 K$ X, MПример передачи this:/ n9 m( m: c! a7 i2 `& ]4 G
  1. public class Game {: P: O9 u2 E/ c) m$ ^: A7 S
  2.     public void start(Player player) {& `9 }8 T2 x& R2 ~
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    2 w6 J+ D$ N/ A& d" }( _1 Z
  4.     }
    $ B+ E" r# D! g1 h% L
  5. }2 V) s0 S+ C8 D1 U3 _" ]: g
  6. 8 a  S, w) ~: i
  7. public class Player {# m- c, c) [2 C6 u. f' b
  8.     private String name;3 [& @: N' s9 G( H2 M

  9. 7 t* V% H# t4 n% \7 _8 |
  10.     public Player(String name) {
    / z9 X$ @( W6 X& C6 t
  11.         this.name = name;
    / J9 h' r* J! @
  12.     }
    5 \4 R- ]% o: S( r
  13. ; t$ s  I. J9 j! o
  14.     public void joinGame(Game game) {
    $ u% x' c" x  a4 |# @7 B) z& ?; b8 K, w
  15.         game.start(this); // Передаем текущий объект Player. }8 x0 m, N! B/ |: b; _
  16.     }
    ) \. X, M& j8 t& @% o8 g. D" a
  17. }
    6 O9 J  T: W" p! B1 K% n  T
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.* x. Z! s9 n7 A1 A: C3 p

0 H3 x4 b% O" a# \/ m& i2 w& N/ M9 P
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?: t# Z! H, R1 f, H. d5 X1 B
3 m( ?7 r9 q8 j& T. J
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
5 U2 e" T5 |# w/ C, x- }Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 2 I4 {  q& m0 t: O
Mike123 опубликовал в 2024-10-17 20:05
+ j) ^3 w: @& Z  Z6 ~Добрый день!
5 v* i% _* p7 i* GКак создаются и вызываются методы в Java? Мо ...

1 B5 j8 U% T. I# t% a, EПривет, Mike 123! ?6 b6 S; e; v+ U, R( g
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
% g4 I9 g$ E% o2 {5 |
, r; X# P% E. N0 K  t( RДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.$ z) k& E- x2 h7 S0 j0 ^( u' h

# r5 @' z# P1 Y( i1 h9 X! P
2 X: [( Y  a& v, @; _Как создаются методы в Java?. n$ H9 m2 T, j+ p4 D  F1 c( y

! `( o2 K. S; e/ g6 VМетоды в Java создаются внутри классов. Вот базовый шаблон метода:" Y- g) p& E+ @2 c3 U
- b& S! R3 M6 i4 [" n% l4 e
  1. public returnType methodName(parameters) {  z; z% l- ^3 u+ M
  2.     // код метода
    ( A9 s2 S. ?7 @1 j0 e
  3.     return value;; ]" A: |, {2 e8 d1 S6 p$ q$ B
  4. }8 v! Q0 k% B% ]: D& K
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    / w; n0 r% g0 h
& b# V; V. z: T1 z
Теперь перейдём к примеру./ x5 o3 @) i3 ^; i2 G
. s- ]4 V; V  L5 {: N2 g
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
/ M0 M2 o; R/ G# |' N8 z
  1. public void attack(Npc target) {  // public void атака(Npc цель)( p5 ^" T4 S+ O' s) ?
  2.     // Вызов метода атаки NPC; B" t- E8 H& ^
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());: F( c' ~, y5 Q2 T7 }$ O$ ]
  4. }: y: p4 N: q' \7 r  y! E/ I5 v
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
* o/ l% k$ g- c+ X! U$ I6 y( a2 X" C" s

$ G  X/ M- a8 G9 X- R& IКласс Npc.java — вызов метода
; U9 B( c, n+ T& J1 b) E0 U, Q# F5 l
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)& F$ L7 W& c# v
  2.     // Логика получения урона NPC. u$ |+ i- z6 k
  3.     this.health -= damage;  // это.здоровье -= урон;9 V6 |/ d! k, j5 b9 s7 `9 n
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  ( e* l1 S9 K! v5 l" H6 Y4 `) j- K
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    ( f" X6 W& P" @" I2 J1 Y
  6.    
    9 \3 `7 u. ]0 W% r& k
  7.     // Проверка на смерть NPC6 h7 |$ |! k$ K  H) I6 H0 S
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)8 J: D0 [  ^' q' Z# b* {
  9.         this.die();  // это.умереть();6 t9 S* y4 y) F/ P' q
  10.     }& b) n: m; V1 I3 F8 T
  11. }
    7 C, \0 ^0 v" C. d
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть)., B$ t: A" i$ ~0 q/ D* E
Пример взаимодействия (с переводом)
/ V. f! f  {# d. ?% N
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    ! J  P; ^+ [, U' x5 B
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");$ |2 X/ }: a& y+ A# t0 f0 ]
  3. 7 ], }. Q$ K) z  X
  4. // Игрок атакует гоблина% O3 d5 L( z' f! ~' {# @! R
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    " _: ~; |6 O% a. h8 ^% L: n0 U
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
' ?; L0 |( n# `$ }, r
% M  u+ ~) _% b; X) U2 o
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
" X" {" o/ l6 e9 `, [У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!0 s* x7 L+ o! l' w- f

" T3 A/ g' m, ]3 [" k
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
% Y1 q8 n' |" FПривет, Астралия! Огромное спасибо за твои разъяснения ...
. Y% O0 F; W+ _" A( t  g
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.$ s7 U3 G$ p7 I1 Q3 ?" V
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример9 B) q+ X+ i0 |- T# |5 I& ~
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    6 l/ [) k/ t) T5 p4 q9 h" K6 ]
0 v2 c- t! q" _/ v
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    , [4 d2 q$ ~3 c5 r* k, N& F
  2.     // Логика взаимодействия игрока с NPC
    . s% p0 ]& F9 G4 e6 ]% z
  3. }' g' r1 L% k. e" j
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    3 ?) ~& h9 J8 \/ b' N

+ y# p" S3 D; f& W5 i
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)8 V% r/ z1 D$ s2 l
  2.     // Логика перемещения NPC
    ' @  J6 R" H5 t# t
  3. }
    / D" j4 A9 H# V
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:6 M% n  ]3 D. ?5 t

/ U. x* n: I0 ]/ y
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример& Y1 K( B1 w; G5 U' }8 p2 \) ^2 w
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    4 Z, D  t; b  a) k9 I' F
  2.     this.health -= damage;  // NPC теряет здоровье
    + a5 c' b. v% [+ g2 L9 f, j
  3.     - `/ O9 M. \# C0 L
  4.     if (this.health <= 0) {
    : M& x0 W) D% U6 C
  5.         die();  // Если здоровье упало до 0, NPC умирает2 m5 t  C. x+ y) r2 Q) m; X" ~
  6.     }
    . h+ j7 c( K! B* ?% }
  7. }' A, J9 l  |' g; T4 |
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример" f' G7 z5 Z, B

- b$ l" I- W' z( \7 J
  1. public void die() {  // public void умереть()/ J/ W3 `, L! T4 O. l- Q
  2.     // Логика смерти NPC) H6 G& T  q! c& [5 H# I1 n! w
  3. }
    ! h0 A% W1 d. A' U
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    ) I4 I# `; W: ]' f% v, U5 Z/ X
/ Q$ M( ~) m; f4 d# C* b% J. l; N

: j4 k. @6 ~2 m4 U# O8 u! ]1 q
  1. public boolean isDead() {  // public boolean мертв()
    - q4 g8 j& ^+ }* s1 u% U# o
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0. P% {1 G# |1 ^! r2 F
  3. }  u8 ?8 p' `! `
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример& C9 W% J. v1 X1 Z6 A* b

# w6 O* ~5 P* t& V
  1. public void heal(int amount) {  // public void вылечить(int количество)
      g/ ?$ a. E& i% J1 O, u# T( F4 p
  2.     this.health += amount;  // Увеличиваем здоровье7 s# S2 q1 {/ P7 y; H- {; q
  3.    
    : e# X7 B8 }, j' L) Q
  4.     if (this.health > this.maxHealth) {
    # e3 s  T( q# k9 |) V/ n
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального' m1 Q: ?" V0 a* p! J( o8 l
  6.     }
    , f, b& x2 s& d! X" E
  7. }6 T% H% _, x4 {+ D% h
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:( h2 ]  ]# {5 t3 f

# \, Q0 {+ m/ ]8 l0 b/ l
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    2 D8 f8 s) H& T1 k* i' M' y5 ~
  2.     // Логика применения скилла NPC
    , ]( C2 k5 ^$ L$ _. O
  3. }
    6 J. N. U  i& C+ o8 C0 o
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:$ `& ~" x& E( k8 {9 i0 K$ w

; c% @4 `( C% p* |
  1. + l6 l, T# y: \! @$ T
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    * h* L5 N5 S. k/ F, a+ {, ^# A- p1 Z
  3.     // Логика взаимодействия с NPC& |* b) ~% k, ]8 \
  4. }/ f. L4 [8 A" |; i% \5 p$ g( g' I+ J
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:' n, D+ Q$ S" r' e7 r* [; _

! X2 Z) a2 i& l4 S- \5 ~* v: l" w
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)/ Q9 d; x: K$ B8 z3 `
  2.     // Логика открытия окна диалога" t8 R; v2 Z& h- F/ h
  3. }. j1 Q8 b- w) a0 M5 m
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
, C$ l+ K+ ?* tЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
. Q, c# x+ w# n3 K$ t3 ?9 o
4 h+ [2 f* F$ e$ V; z# z4 g( i* _
# G0 L  I6 F9 \6 d4 t/ ^4 S

- Q8 l4 U+ i6 |( z
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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