Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 % |) l# U1 F! T

: l( J( D- t/ a" k  K2 o. J* h! F7 e. c8 l  @, A
Шаг 1: Введение в классы и методы на примере L2j_Mobius
7 [3 c2 |# P+ d2 E4 {% NС статьёй можно ознакомится в разделе Обучение > Читать
1 h5 V, t5 _2 R! a8 M3 f8 F. ]: m3 g# {' t
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
& i; t8 A) Y, f0 s& Q% h- U, i5 {4 D, h! X! Q$ g: Z3 y
Обсуждаем:: L, _% E1 s5 O! Z; B: d
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.0 b8 I/ ^% a0 Z  E
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
8 l4 V; }6 y1 x  u! L8 a
$ c& ?; W, v/ v
7 j' ~( W: a* I1 r: E3 z" P
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! 😄 Но мы вместе разберемся!' S( X9 A2 t; Y

4 }$ [3 B) S% s9 D5 R" e9 C
6 x7 S" b8 P5 Z3 v, G" S  z/ P# c. E& C' J. b% K* G+ ]
1 C% u7 H1 P) D( g7 j5 Z
3 H. l& v: W' Z; Z  t& `" @' u6 X

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?" Z# k7 E/ Z! {! L
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:177 }7 u. N$ G. Q3 E1 U% ]
Почему мы используем ключевое слово this для ссылки на п ...
/ K" \, [0 H1 J
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.: K0 R9 c" u" k0 |5 _3 ~5 O/ G
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.9 o2 A" H: _5 j8 @: x- M( \! B. k4 j8 e

! y; v, C- y! b5 O6 G( R  Y( `/ }9 L% _! {Вот пример:
' o% B5 q+ i  y0 s' O. P/ {; L
  1. public class Player {7 e4 G$ Q/ U9 a
  2.     private String name;" }$ w4 F& l" [& w6 J

  3. 8 Z/ H) u$ G3 P9 ]
  4.     // Конструктор- @3 M# m% ]. B; w
  5.     public Player(String name) {! F8 C1 ^& M, ]5 l) O0 B
  6.         this.name = name; // Используем this для указания на поле класса
    * k  B; k* k: z3 Z* {* u
  7.     }5 b$ `- i  S( ^& ]

  8. + [+ @( _( J8 z" k' n: x
  9.     // Геттер для имени8 Q$ O3 O, D7 }
  10.     public String getName() {8 x5 T" _0 k6 ?. q- A; m
  11.         return this.name; // Используем this для обращения к полю класса
    # T+ E2 s7 t- d4 ]0 {
  12.     }; e3 \+ n$ I! Z  c
  13. }2 m8 |9 c2 j1 U3 U. L
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.! m: @7 ]. w6 L0 j6 f1 I9 h. {

, ~: T% u; f  F1 _4 ?7 f: RКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    4 e# s: J, @( r' ]9 g! S2 W

: k% |& a+ C! u- M. SПример передачи this:, }- J( V) S+ C
  1. public class Game {( L$ l3 W. w( m
  2.     public void start(Player player) {
    9 p# l4 Z  {4 B" Q  K
  3.         System.out.println("Игра началась с игроком: " + player.getName());8 W( E0 E( q- u+ W
  4.     }
    5 Z: d4 @& r' h3 N* O
  5. }
    , [  O: e9 z1 \" W' L: t4 {9 E

  6. . h5 ~! M. a0 Z! q& k& o
  7. public class Player {
    3 e/ f$ y$ A% C  u1 O0 D4 [* H! n! w
  8.     private String name;
    - v0 Y" x% |# K* w/ f
  9. " Y) w, j6 l8 V) k8 o2 M
  10.     public Player(String name) {+ U8 u; O/ |3 A7 X
  11.         this.name = name;
    ) {8 E1 W0 `7 E; h6 r; f
  12.     }) y( c9 U+ L2 N
  13. 2 A  J* D- ]0 m; V- ]7 M  V
  14.     public void joinGame(Game game) {: b2 t$ h# z0 o
  15.         game.start(this); // Передаем текущий объект Player
    ) E' s; w2 ^6 S9 m
  16.     }
    7 G, u- s( Y# Z: M
  17. }
    " q2 g/ [, j4 K' N9 q; b5 o1 ]
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.! X4 \- S- [! S+ J" p

/ u7 _4 X/ {0 T- x! F. M
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! 😄
$ q$ t3 G! K2 H* w6 j
# Q+ o1 {+ O& a$ G
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
( w: G* m, q, s/ M* w7 n6 jКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 + x6 Y3 m4 a  r$ [, k; u  a* f
Mike123 опубликовал в 2024-10-17 20:05
4 x: ~3 b" [% t+ C; f  SДобрый день!
) l- o% F9 _$ X3 I, u" P8 x$ oКак создаются и вызываются методы в Java? Мо ...

, Y! c& P$ e. c6 @0 p- Z5 V. l: DПривет, Mike 123! 👋
$ K% r& {# U7 F% V% ]' ^Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
$ Z) h$ U' J- [' [( C
3 O0 j* p) {' e( F- w  A/ I( w% sДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.+ `0 g/ |' `) `

) [) u' }% M) B3 j0 w1 H6 U
0 R# z, W2 S+ UКак создаются методы в Java?
; I7 a' {2 {, b# L9 u
9 P3 z$ U# S  Q' T" f" t. cМетоды в Java создаются внутри классов. Вот базовый шаблон метода:3 `2 X) {7 G0 L7 M

9 U& p; M/ ^, O
  1. public returnType methodName(parameters) {6 |. Z/ c2 l$ u" H" U
  2.     // код метода
    ; S3 I: F# Z1 `5 D7 R
  3.     return value;
    ; z, ], ~2 c$ f
  4. }' J# [' b: J2 }. y
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    % ?0 X4 a" U; c6 P# O

8 \2 W7 I3 U1 e6 Q! J# [Теперь перейдём к примеру.
( M/ z8 @4 M/ y9 s
* R% d1 j8 [$ {Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода) r$ f  V; D, O! G3 f+ ~. z
  1. public void attack(Npc target) {  // public void атака(Npc цель)+ S" f% z" j3 d. ]9 Z( s% q
  2.     // Вызов метода атаки NPC
    ! T- X) C4 ?, H/ _9 b# k& P. f+ d
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());1 i& D: z9 y+ M- S; A1 ], O. [
  4. }
    2 L  G7 H2 a4 [1 ?
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
1 _) w  C: _$ k! v8 Y$ h6 G  D% d; @/ P
& o- r1 Z( Y1 n1 I$ ^
Класс Npc.java — вызов метода
( \2 Q# t' q3 D
, p7 W$ F/ A- C. N
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    4 C! |: ]. h4 D$ t& ^
  2.     // Логика получения урона NPC- s4 ?/ S) Q+ r/ y
  3.     this.health -= damage;  // это.здоровье -= урон;
    : U2 o. j' o: U
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  7 @) i# i/ j# D. K- j/ Q
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());; Y) m/ H0 T  M+ j& K2 c
  6.     $ r6 k" B1 e" W7 Y% c
  7.     // Проверка на смерть NPC; n0 k) W* f% o* _( u, b9 @+ l
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    , D$ Y4 S( Z9 ~' Q+ s
  9.         this.die();  // это.умереть();
      V/ K: h- r0 @* G1 u
  10.     }2 J( y  a* U: s9 f+ e6 Q( U
  11. }
    ! v6 [7 X9 K. X) H
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).( X: V. R( e3 r, \
Пример взаимодействия (с переводом), J% v6 S3 o0 e- c
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");/ m& K; j. B- [9 j
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    & ^+ D2 G/ h6 A7 Y( T
  3. 2 s) m( U  ?/ ?' S! B
  4. // Игрок атакует гоблина6 z- d( z5 s; n+ j% O
  5. player.attack(goblin);  // игрок.атаковать(гоблин);; i7 ]5 b; ~3 g
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. # p* j, G' ^1 i0 L; q* d: C
0 Y, u! C/ }. t. |1 t" h
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.7 A% P9 G1 C& m1 {8 U1 M
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!' z& Y' Z+ `( W8 w% u3 _+ d
9 V7 N4 [% K9 a5 u" y: R; ?
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
0 p. Y% n* O5 V; f6 n: V% [/ VПривет, Астралия! Огромное спасибо за твои разъяснения ...

: f0 o, j9 d) I& C7 y. v9 dОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
4 C6 M6 {6 a% x% c: k1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    3 q0 o. b3 P, |, M
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    ! \: Q" _2 D: \- y: Y6 z# q! K
7 u5 W& G% U; G2 v% e
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)  Y2 K5 B" G2 t
  2.     // Логика взаимодействия игрока с NPC
      x9 C5 w: P1 j* q7 K& k9 M& C# D
  3. }* c6 M. t1 B8 h
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    ! X7 G6 \! y% t; n" x6 U+ f- U) L) j

# R* k' W) J5 r5 o  i6 Q
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    6 k7 s9 E: j# |) v& {2 }) S
  2.     // Логика перемещения NPC
    % i) N$ d6 v; x! F9 H2 l
  3. }
    2 X8 g6 x, k7 H" B+ G/ j
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:* I/ P) g( w' B) V2 W+ E
% F) Q& [$ N. Q1 `8 e5 w/ b$ @
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    ! P0 ]: h7 U" G* Z- p
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)- r. n% ^& v9 h1 w
  2.     this.health -= damage;  // NPC теряет здоровье
    ; ^( H3 @/ v9 u7 m. o4 u! a+ ~
  3.    
    " {% P$ j' I& X: w
  4.     if (this.health <= 0) {
    0 c! U* M; _! U" w
  5.         die();  // Если здоровье упало до 0, NPC умирает! I" l( f5 Y5 r( N
  6.     }
    6 }& Y- [* \. ~  Z# G
  7. }
    3 a: k1 J5 A; [4 c& f) ^% G! y
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    3 q% m: z; U! D1 C
) ~$ T& [1 k3 \
  1. public void die() {  // public void умереть(), G1 U% \6 B$ `) ^; N1 \5 W
  2.     // Логика смерти NPC% P. H' S. B1 h# O# v7 o3 K
  3. }. r& F9 H" A& A% X, R5 J4 }3 t
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    ( G, L% ?1 }" N8 O6 q
, w" I7 R1 ?1 O4 Y8 i

/ H+ g7 J1 V+ q" V6 ?
  1. public boolean isDead() {  // public boolean мертв()2 y0 j1 [  H: Q1 A- k9 `
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    1 R: ]9 b2 E4 \, p' N
  3. }: |& [5 _# u! w
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    1 n3 A  u- g+ \8 }2 F

6 s& ~* A' z$ D6 ?% X5 }4 A$ k7 }
  1. public void heal(int amount) {  // public void вылечить(int количество)
    3 j  l6 G3 C4 ]# n, A
  2.     this.health += amount;  // Увеличиваем здоровье- v5 A3 D+ i2 B
  3.    
    ; n% R# W  w8 C
  4.     if (this.health > this.maxHealth) {4 x1 U6 ]6 Z' d0 d/ v
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    / ~) T9 H) R  s+ D; @' ~
  6.     }
    , C4 n- G3 L- b6 y4 ]0 ]
  7. }
    $ W( c# q7 K' D4 H- M
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:2 a+ c) a7 N" x3 z' v
' N1 q4 G8 o5 {* E
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    ) G- X* C: V( [
  2.     // Логика применения скилла NPC, j4 e: M0 S6 z9 i' b, c
  3. }
    ( {1 b" z  Z, F
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    - S& d( z2 ^4 `7 z

$ U, ~5 V( s5 P) g+ g

  1. 6 o" x; T1 j! p, T3 S! ]
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)  p5 c9 f" h, E3 z6 O1 O) @
  3.     // Логика взаимодействия с NPC
    % |& V5 P' y  W/ v4 }
  4. }' t' \+ N4 Z; q3 W( F6 [3 D
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:) G. t3 E# V9 E
/ \/ u, J/ \/ b0 b2 e6 d, }' e9 C1 c
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок); @; P& Q  c+ K( G
  2.     // Логика открытия окна диалога. _- _0 F1 a1 o5 Q; r
  3. }) B4 b1 A# h! ~* o3 C
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.2 H2 p8 c/ \/ e# o" J$ F0 `3 c
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!$ h1 y  p* H$ i1 N$ z/ K
  R( e4 b4 q8 n; V4 L9 h6 z

7 A/ F& E  `! i: p( h! c" g1 p  h' k( j2 Q3 d- K) h3 C

2 `9 q! K# e9 `, [- w- d
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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