Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
( ^/ V5 l- G; g$ H8 D5 }# e4 i- u2 f* [7 F8 ~+ h1 Z/ E
; Y. Z# @7 N/ W6 l4 H/ }/ C( w- K
Шаг 1: Введение в классы и методы на примере L2j_Mobius
- C8 _$ V8 b( H% b$ N- TС статьёй можно ознакомится в разделе Обучение > Читать' b# \7 q) c: N, \, G2 v* {

6 E0 ?% D9 h% O3 |3 r( X( G: k# f; \Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.! X' C# i3 h* m% k; [+ K& J

& V8 w- n: O9 r4 gОбсуждаем:
$ N0 {6 ^1 V( T" ]
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.5 ^6 I5 J* ~' y
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
" p. x# y" V! `& W7 i6 u; \
* O3 N' @- B! M% p. E7 c2 w

. ~) a& y; \( j/ g, r! @) vИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
5 `1 k4 V) \! S5 G- d( c! s" ?. H
- `% M! a- r+ Z
2 J! [& E  H- y" k2 [! d  \& R, u; W1 @( X
, m" `7 [, X  G: Y3 m$ G/ V

% J2 z4 n( i- a5 Z( b

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
9 n8 z1 h( [- o. P0 W9 A- V
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:179 O4 |* h5 d: l% F& V9 ^  q
Почему мы используем ключевое слово this для ссылки на п ...
; G* P. h4 U3 p3 D
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
% ]$ G' t5 P0 L0 Z4 h7 `Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
1 [- }1 n$ v) b% s4 \; W+ A$ Q
& o4 o9 N  R0 l  X) XВот пример:8 H! `* D2 f. L2 |3 {& y
  1. public class Player {
    , ?* U' ?; p8 E& }# n2 h1 v
  2.     private String name;
    ' Y  n9 J/ z+ {  r

  3. ) o) v: A. u. a8 k' R" W( \
  4.     // Конструктор* O3 N/ C8 C7 s6 P, P
  5.     public Player(String name) {
    2 G% u6 V1 P9 i2 |# Y
  6.         this.name = name; // Используем this для указания на поле класса
    3 M, m3 j  A' A$ `
  7.     }
    4 x3 z8 w+ ~( D5 ?2 N

  8. , Z- U6 W  Z1 H
  9.     // Геттер для имени; F- b/ S) C7 g7 [) S
  10.     public String getName() {
    3 U/ j: t% Q, f8 C% s1 c9 c
  11.         return this.name; // Используем this для обращения к полю класса
    % W% Z$ }" r9 w5 A% ?
  12.     }
    9 C! v' V& V4 O- |+ y6 {
  13. }0 J/ x  ]4 o2 ^9 c; f3 r$ Q
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.& q, F& c2 P1 b2 g4 g0 ~
/ r" r7 T& [1 R
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    0 N* h0 |. L2 y- ~
& F; i2 i' b9 c% X/ w4 |5 I& J
Пример передачи this:; `2 t( w  U! z  u1 C; q  P) M3 b9 c
  1. public class Game {
    % G# `3 f! N! ~& w7 X( y# }
  2.     public void start(Player player) {8 }  x6 w' ^  G9 m4 c" ]
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    5 t9 E/ `# ~1 r' J3 z5 Y
  4.     }
    8 c  k, B5 c- o. r
  5. }
    : \& T# H/ P" [' l* J

  6. 6 C- S/ P, q$ c' Z+ B6 D* o
  7. public class Player {) |; K# V* D% A
  8.     private String name;
    / k' u  q* w+ q3 t0 [& B+ q5 E6 s
  9. * W3 R7 }( H/ l; h$ U
  10.     public Player(String name) {
    8 e' S4 @$ y7 R7 S% r
  11.         this.name = name;
    3 e9 z" ~+ X: o% x+ {; @( ^( a
  12.     }
    9 [: i. ]. u: e
  13. 5 w2 q' ?& [; P
  14.     public void joinGame(Game game) {
    % [2 r% @# N, E: o  d% L! ]1 ^! G
  15.         game.start(this); // Передаем текущий объект Player: c2 z/ ~; w# d" V
  16.     }2 x2 ^7 l, j5 ]8 p6 [  M
  17. }
    : Y! J% S8 G% K  _
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.: K# `# f6 R$ V: [( M

. n+ R1 Q* {8 v, A" J( [) z
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?; f& ]3 l+ c! n2 _) I

) b2 d0 t+ O, F9 H; }& S! O
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! ; Q5 q; ]- G+ @2 g
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 : b8 q; Z) a8 M& p$ O
Mike123 опубликовал в 2024-10-17 20:05/ c7 R2 b; k+ Z# G# V
Добрый день! " j. x; D$ |& [) H: |
Как создаются и вызываются методы в Java? Мо ...

  J/ |* p& \1 }1 G* T5 `/ rПривет, Mike 123! ?% _% }2 R9 b; L) {, ^8 v, P
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.$ B  r; E5 y4 V& D$ p, C/ r8 o4 \2 y

% ]: n/ q0 ^8 {+ [( T; NДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
# r9 h2 q) S' P1 q# V; S8 _: q6 j4 V$ K
" I) m9 D* b3 }9 V
Как создаются методы в Java?- r, {  G. X2 T9 J$ K+ v

4 U1 _# M( k7 k8 [6 G+ t0 yМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
2 J% \# D. e; b$ w. c  Y- ^. c7 h( H8 f5 k6 `2 `5 Q: c
  1. public returnType methodName(parameters) {0 G* z- V, G1 D# Z: d: z6 M( x8 g! t
  2.     // код метода+ X: a" P3 o$ w  e
  3.     return value;) ~) y- Y9 v. ^' r' r4 O& H
  4. }
    1 w' i9 P1 I5 B0 R
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).1 m+ A% \+ [( t. f* E# N# C
' ^6 q- N; Q% M7 ?' w
Теперь перейдём к примеру.
* \! }- O0 S1 b( X* q4 K
* q& K- i0 d& d0 F/ M- SПример на основе L2J_Mobius с переводомКласс Player.java — создание метода8 n) [( \& Y7 t1 o) `: x( G
  1. public void attack(Npc target) {  // public void атака(Npc цель): H7 P! X; Z& l; J' l0 d
  2.     // Вызов метода атаки NPC7 ]$ H0 [6 c2 Y+ @
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    7 a- D9 x6 ]' u& {8 L
  4. }
    1 n# o. h) j4 i  Y0 s& ^
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).2 y# e3 A$ Z, g/ h8 Q/ ~. N! _8 ~

4 V; A! C8 v% x7 l
2 {4 M! U. Q3 uКласс Npc.java — вызов метода
5 n/ U) f& n3 a1 i- `' ]9 _) z4 F4 X5 e7 g3 a2 b
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)5 h/ y2 d9 ^" `# `  J
  2.     // Логика получения урона NPC2 l* z8 {4 v& V6 @0 g5 O: U& @
  3.     this.health -= damage;  // это.здоровье -= урон;( j1 V- ^0 |0 T4 D
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  - h& m. V7 ?  e. C
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    & m* }* G4 A% V9 ?9 i( O- h
  6.    
    7 R" o; Q; \3 ?* T2 A$ [" J9 ]0 X
  7.     // Проверка на смерть NPC( w$ {4 R( r% R! X  K& f5 K" V" y
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    1 A, E: F- x& C/ _+ T* B% b; T1 Q# {! h0 W
  9.         this.die();  // это.умереть();# h, Q& u- }4 f1 j: f# A" }* B  K
  10.     }' T7 v3 z" D# T: ^
  11. }- Q% q2 r' s& {  E6 G" O4 |3 B$ s4 S
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    * D& }7 J  ]( o: i( m
Пример взаимодействия (с переводом); n2 X" C; p6 W# b- s$ s$ l
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    " S3 G2 a0 R7 @3 G& M
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    - S- n7 t  A' i; r$ U

  3. $ k0 @% X: G3 `/ H
  4. // Игрок атакует гоблина' u) n6 o1 }% r
  5. player.attack(goblin);  // игрок.атаковать(гоблин);. u3 S. Y- q+ f8 y' j* M6 ~
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 1 V$ r! |* _  o

; E% ]  G7 t) A5 d
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
( B' v( T9 U! D# |7 P/ n% L. UУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
- f! X9 I! x! Z& o' e* m6 c2 w' y" o
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30+ |. j7 i4 ]# V1 o6 ^# e/ f
Привет, Астралия! Огромное спасибо за твои разъяснения ...
6 F2 {2 R, A8 Y$ Q5 [; g4 a
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
; P7 c5 `, I# ~. G! w- w1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    7 u; E5 D. l( H) {
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:7 L1 a; V' Z1 K6 v2 t( T
: \, E+ g+ n% f4 q$ @0 Q
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    0 v, y; i# a( e6 E4 d) j! g
  2.     // Логика взаимодействия игрока с NPC
    1 J) K2 @0 I' t0 K) a
  3. }
    . f+ u2 g: k! m; a5 k, F
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    , L$ ]/ C  y4 d, F0 M; }% |+ o" `
" E/ C9 s6 J$ R: z1 L) ?; O% S
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z), G" [* Y( m" s* D9 q' E* F
  2.     // Логика перемещения NPC
      }/ `, Z% s; H7 S
  3. }8 e2 w; J; i$ W0 i7 N/ }9 O
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:1 g" |9 n* a; A+ J+ a  s' D
! s5 t( T' O3 ~. q* `/ y; |, T
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    * T; Y7 b4 m/ ?! o; T$ n  p
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    * M' ^4 g* ~5 f2 a
  2.     this.health -= damage;  // NPC теряет здоровье
    - j3 }* Z5 Y+ h  t* s- r4 v
  3.    
    1 E! f2 D" P, Z+ Y) W
  4.     if (this.health <= 0) {
    ! T# U7 H2 Q$ L9 t
  5.         die();  // Если здоровье упало до 0, NPC умирает9 R" s$ N, L; m$ {- f
  6.     }- V$ e9 M: c& u0 Z" Y4 G* v
  7. }
    # {, w) Y: j  j) y/ M& c! N8 U
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    * f+ P* M8 e$ p: m! {, \7 T, ^0 n

6 A. o( j# M! ?$ Q2 H% `  \' s
  1. public void die() {  // public void умереть()
    4 n" Y+ U1 r6 I
  2.     // Логика смерти NPC: w7 C2 q  j$ ~" W! r* K
  3. }* e: q( a6 x! W: ?( f) e2 p. c
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    1 i( g7 g" B4 x) @$ H
- D+ Y, T4 e: [2 |5 ]( b

+ {; s2 |6 k% y5 P* c
  1. public boolean isDead() {  // public boolean мертв(), E: j& a# }* n3 ?# G9 B
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    5 a: L9 N0 u$ [) |" u
  3. }
    ! ]- n1 f, m* ~  A' k! g6 V" g4 C
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример* C: X3 Y: k4 v, \( \" a
9 G0 y5 p: U+ p# p) I
  1. public void heal(int amount) {  // public void вылечить(int количество)
    : _5 f4 F9 X" {3 A! }
  2.     this.health += amount;  // Увеличиваем здоровье
    1 g. u6 N0 m9 E4 _
  3.     2 X; h2 j+ }4 F5 b
  4.     if (this.health > this.maxHealth) {
    3 i7 f' g2 v4 U; c
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального$ d. g; x+ g% S7 P' V
  6.     }$ Q3 q: E& r$ @
  7. }
    & n* Z+ h2 |( s/ }! E: H4 i
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:- v! C; }: B  I- M$ c8 d2 S: y
  Y2 b9 E; ?+ m7 v9 I  [
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)/ I# I5 z2 h" k9 M) @2 ]+ _! V
  2.     // Логика применения скилла NPC
    6 t0 a5 A0 B4 Y) B4 n4 t
  3. }
    ( a, c( x/ T& O+ R' H' C
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:! Q- t8 h+ d, O+ F* @' B2 Z

0 y/ O' d( M' b$ j/ ^/ Q

  1. / ?! z# a9 x4 M7 M2 E% D
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    2 d! z. E; E* i. y; F- V1 n
  3.     // Логика взаимодействия с NPC/ C( ~* ?* \3 O# g. o( u7 e
  4. }' |  x% `" W0 o% ^/ g
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    8 A6 r4 U+ y% w6 h
6 P' S* ?9 {: \2 y; R" s
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок). N0 t' x" F! f/ G5 `
  2.     // Логика открытия окна диалога
    & i$ N, @7 ?& g# g/ u" j
  3. }7 U6 |' T, z( n5 p
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.! K' y! [5 n: R1 l* M7 Y( M5 {
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
, d/ O0 P, c: c) y7 U$ \
# b; k- ~0 D( H& D& w/ Y* e2 G( D; {6 Q& f& Y+ I1 X
; V. I# j" K' @& ?- S9 L

& I, Q) u6 r+ G: f
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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