Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
0 }, v" o) k+ N7 {8 K7 A7 O
/ r0 z$ o  M. `8 }
  ~; }+ ?& a3 H5 S0 D% jШаг 1: Введение в классы и методы на примере L2j_Mobius2 Y8 ]3 n- @9 G* }
С статьёй можно ознакомится в разделе Обучение > Читать
. M/ }, r! {# U' Q& ^
) |  i& L- S% c6 WДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.6 k4 i$ p, j2 N9 o

; J: E* r& r& R6 c, B0 nОбсуждаем:; Z9 f9 l7 h4 A4 j) ~& _  M
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    ! R+ Y6 V' o0 D6 J
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!! O4 y8 }+ g4 C* y) Y

$ ?; g+ D( A5 k& i. s- M! m1 C6 m
9 S. |3 t2 r* i/ G* X0 a& H$ c
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!. a' Q/ k/ t( L0 e; L+ H& s

: p: @, q# n- i' A( b+ {
: c- |* ]% l) G& }  I* ]" m) V9 v
9 o* }, E6 I4 u4 N1 b4 D# s
: T( d- Q# C( s) q

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
3 ^6 L7 t3 Z0 ^4 \
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
7 Y+ y' M' E: EПочему мы используем ключевое слово this для ссылки на п ...

" n  v& P4 m) S; C9 Z$ `: \9 qКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
4 q2 O- J) l) |, F, ?, w  RПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
$ U6 W* V% ?) a
( P! ]5 O' y8 {% DВот пример:
1 l3 k" H6 `" {" n3 K( i
  1. public class Player {6 M( K+ s. F; {0 M0 t
  2.     private String name;
    % ~, D! e; |/ r0 B- ~, I
  3. 2 h1 v" t. D% d! ^% X0 K
  4.     // Конструктор
    " A$ N2 ~& g- l4 B; X+ h; J
  5.     public Player(String name) {
    6 U7 \  x( b3 a9 u
  6.         this.name = name; // Используем this для указания на поле класса+ e3 s) i8 J& M5 a5 ?
  7.     }8 p" }: a5 i6 D9 C/ J8 O- [

  8. 1 b5 }/ n+ J( Q4 F* k) Y3 O
  9.     // Геттер для имени/ a- R; {# Z6 p. J6 \' d
  10.     public String getName() {" g) r, o  f! x! j2 Q; b6 ?
  11.         return this.name; // Используем this для обращения к полю класса
    ; b0 e) {" [' r4 a  h3 U
  12.     }; t  l+ O0 A/ y+ h1 N; R6 o% F0 J- F# h
  13. }& z3 `! C7 M# i8 `" [
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
" |; z1 N+ B" k7 e& G5 M5 l5 D( D# R6 L2 o7 x
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.0 k3 Y) y) G2 S: `# N$ w6 V1 }
) Z3 r1 w; m, L& E. f7 d
Пример передачи this:
; Z% F8 O4 ]  P
  1. public class Game {# I% D/ W- S# s6 j
  2.     public void start(Player player) {
    2 b# E5 u7 ?5 z! R0 I
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    3 O0 j9 S! F- l* d& Q( q
  4.     }
    4 [3 [8 ~9 c! h, S
  5. }
    1 K- P# K0 y  ^8 z% z

  6. ' o7 o& c1 w$ c
  7. public class Player {: R- k/ o& X9 P$ h% z
  8.     private String name;
    , M- e5 [9 o- g  Z) L+ k
  9. 7 j4 {& G  ?% h
  10.     public Player(String name) {* U' `4 H; q0 m) o9 }
  11.         this.name = name;* H% q; A# B. O1 T* L  O" t
  12.     }
    % w; J% p, J5 l) S

  13. $ [+ c" v/ c7 H) n& H0 L
  14.     public void joinGame(Game game) {; x  |( J1 y( r  r6 }' |3 D. o
  15.         game.start(this); // Передаем текущий объект Player
    8 z- Q$ S" U5 s. T+ H; [
  16.     }
    ; x9 B! E- m* d! q! N0 V
  17. }
    , p, N2 Y5 q3 Z6 [6 V" ^+ d0 `
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.& d- }: w, t  u4 i, V1 Z

- M4 |3 g7 f8 [( ]4 O8 v/ Z, }
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?! l) J# J$ j4 w# r6 e

: p6 @- Q( e' ]$ P7 l8 L9 ]3 k' M
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
- K( f# q7 w" hКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 / f  W. i2 M; g6 n# b
Mike123 опубликовал в 2024-10-17 20:05
. X" U3 c* r7 E; _9 {Добрый день! 6 f( F4 r2 W; E) Z
Как создаются и вызываются методы в Java? Мо ...

5 T( [: j" U; e1 q2 G: x/ z0 h6 [Привет, Mike 123! ?
) s; X. g1 |  B  o3 W. r" JОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.3 X5 }4 J% y! R8 P
6 H8 l9 d& q+ ~0 Y/ j8 b" J' Z
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
( {( e6 E' J2 ~; X
3 P  R# t) C0 J" T" z5 P" l2 v  m& U4 T1 v
Как создаются методы в Java?1 M* O  E7 k5 U9 g+ k
3 X5 {& H# K/ P8 F# W5 d% N
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
, w- `: l& ]0 b( J" f/ A' X; x% x/ [/ l. Q  l& i9 Q3 w# }; @
  1. public returnType methodName(parameters) {( E/ Q; I9 S0 ~/ r- {4 q
  2.     // код метода5 i: Z2 e" O# p% k# n, \' _. K% s
  3.     return value;
    " H* Y8 `+ V& J$ @# M+ ]
  4. }/ F( k' Y* i0 u0 m. `1 p# ?
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    . ~' e( l  ?# p6 V0 ?

- _( R3 ^+ N. Q3 z( B& i% O0 s7 _% BТеперь перейдём к примеру.% q: z: @" X7 ?- N4 B8 _. [: [

- o- a! P4 O! R- h- h3 m3 ~6 qПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
) Y3 D) q* T* J4 x9 R
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    ; v0 a. C" e9 V! U# G/ }! a9 R
  2.     // Вызов метода атаки NPC$ a0 q5 c1 `" Y+ i9 a( C
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    9 h" e) s: j  N, X* c
  4. }
    , x- ^) G9 x; y) u& s. T
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).5 j2 D, d+ F$ H2 j# v9 V/ x

& Y6 u$ ^: A1 `, K# q3 v! }) L7 B! r2 ]# U0 H* e
Класс Npc.java — вызов метода9 N) I: S( ], P4 J+ \/ y

) S. Q3 V  o; \5 ~* D" |0 }& L8 G
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    * I- D# t( l7 F( `; I9 [! S2 s
  2.     // Логика получения урона NPC) @& I6 Q- y' N3 h, n, l: [
  3.     this.health -= damage;  // это.здоровье -= урон;
    , ?) A0 l- v  [! V& |% h6 G
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    : v( b1 G6 s) a. b% z0 S
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    2 ]) Q1 H1 Z! r+ t8 @8 Y- g4 D
  6.    
    3 ], J5 Y8 \9 R( r) y  B
  7.     // Проверка на смерть NPC9 e# D2 H6 h: g( a
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    % W  F2 `0 d$ u, L4 B
  9.         this.die();  // это.умереть();
    3 Z' I4 |( S/ O! u" M3 B# d7 k( M
  10.     }7 t+ T" ]1 V: @! y) \
  11. }
    4 K. @  T" H  p/ P0 C/ k7 U$ h1 a
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).* n# K% x2 w$ Y( h2 V
Пример взаимодействия (с переводом)
! F; F1 Q! @7 Y7 F( F' ^
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    2 O! l) b" k( a
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    & a3 P" L8 p/ F  Z

  3. + v+ k( }* U2 @+ l& @9 p
  4. // Игрок атакует гоблина
    2 J. n& f8 }/ |+ a) J
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    ) M; F) `8 d6 R8 W
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 2 n- H( p5 W0 [9 }6 T

: E, v4 C$ p. @! t! Z4 o8 J# v5 Q9 a
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.) H# `. d' `0 O" h
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
- U: Z' p, h, C- q1 N4 m$ z& _' h0 T* p5 q$ F7 L% q0 s+ r+ q1 M
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
4 @8 e3 A* g# `) UПривет, Астралия! Огромное спасибо за твои разъяснения ...
. W2 z; E: J, g  J% z1 I5 H
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.1 F6 m  E- R$ t* g1 {* `6 O$ ]4 h( H
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
      ^/ Z( U' n& V9 P0 x0 ~+ q' R
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:' p/ A  @, N( ^- ^- B
  Z& o) X0 A/ @  c! o# ?8 P0 c
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    9 C7 _# J; x' u  ?! B+ _
  2.     // Логика взаимодействия игрока с NPC1 F4 Y* e, }6 h
  3. }  c9 N# \% a& D
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    6 C5 G1 T9 A& y0 g3 x% w3 y5 J
1 I: u; k- L, x; t
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    * |. r2 J0 d7 `# C3 V3 f2 G3 H
  2.     // Логика перемещения NPC' F8 g3 ]3 S2 w) i
  3. }
    2 ^9 Z3 |' D& {% f0 n; e' z
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:% ~" h" w# l# m1 o8 h4 ]% @$ x

. D! K3 l) b- Y1 x' P/ I. q) @
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример9 f& x& R" D, K& v
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)  D' ~- s6 A9 I# b  \
  2.     this.health -= damage;  // NPC теряет здоровье  K$ e6 P% ]. a1 v) ^! c8 {
  3.     : ~! m$ W* x/ ?) G" A4 B  x$ n
  4.     if (this.health <= 0) {
    1 E. u1 B( J# e1 |+ W& V3 C" M6 ~- |; H
  5.         die();  // Если здоровье упало до 0, NPC умирает
    & ]1 W1 i4 V; J% T, W" z' h
  6.     }
    - R! v1 W% L; W9 d) G# P" @
  7. }3 Y" R$ y+ _& [7 b  ?& e! D5 a
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример. i: Y+ s$ d; O0 J+ Z9 E* t
# \3 p! U3 w5 l/ P$ \$ z: ]  x% f
  1. public void die() {  // public void умереть()
    - e: M7 m3 d+ ]8 h- K$ ^5 R
  2.     // Логика смерти NPC4 R/ H4 j$ v% d
  3. }) @% g4 {  Z. R6 J1 b. [2 X" b
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:2 E( ?; K, `9 [$ R% z1 W3 U

0 _9 _8 ?2 N4 J0 e, I/ _" g0 B! B
  1. public boolean isDead() {  // public boolean мертв()
    " P* f4 W) P7 c- }* Q2 u/ ~- e
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    1 L1 A1 }+ @  r
  3. }
    ; y9 B$ h5 w; r# U7 h0 S4 i4 w0 ^! x
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
      i/ w% ]' c6 h" c- W1 r" ~

) ^3 q8 [, F# a: H) L$ `) a
  1. public void heal(int amount) {  // public void вылечить(int количество)* d' b, I, M5 ~+ v
  2.     this.health += amount;  // Увеличиваем здоровье
    ; J4 s8 U- c& v4 N+ c
  3.     , c, I8 c& e" S
  4.     if (this.health > this.maxHealth) {, v6 k  {" p# `' T) U
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального! K3 [3 t- J5 X) S
  6.     }/ Y+ O" P7 z- _" a1 o; x8 `
  7. }0 I; H+ Y! N. S+ T7 n7 k. o4 {4 c
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    9 ~6 x& W) l5 S9 d- W9 F

4 s! U) ]- [: X' \; `5 w5 |7 E
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)2 b6 K# b" f+ e+ l4 f
  2.     // Логика применения скилла NPC
    ) [! g0 o( u* f/ p
  3. }  K% {, E: b0 V; `5 t8 K# Q
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
      j" m6 f/ v& v/ s- Y* I; \

& x; Q6 P: `0 N1 H
  1. ; z; C; D' X5 p* t  O3 F) H& M
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    ! ^% J" T. @# y$ R6 L! c  Q
  3.     // Логика взаимодействия с NPC
    + M* t9 U5 G! X7 M
  4. }' {0 w/ I& d: N$ {2 F
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    " A8 j# }& K  P
6 L" k9 h- K& W6 w& o& M
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)9 V0 l+ x! ]- I. K
  2.     // Логика открытия окна диалога
    3 S5 c6 J4 C7 E" U% N' H
  3. }
    % x( R$ D, ~2 e3 G4 Q
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.$ L* O- r$ a* ^3 D: n
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!7 R8 R% n% D% y( Q! C; X% _
- R) x: w# S, |5 O

2 ]( J2 ?- d1 P: E( k8 R7 y; }& n" Y' G5 N$ n0 a) N

/ L  {7 B* I% C, e
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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