Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 $ ^0 E( k! h% L, A
/ v- R- }, O# e  `

. Y# F5 f+ t* ]0 }( g0 t% n9 y- F# PШаг 1: Введение в классы и методы на примере L2j_Mobius
- d& z3 [9 q3 `$ pС статьёй можно ознакомится в разделе Обучение > Читать
- M" Z3 b' T7 _) P: @
/ k; R4 \: t" k1 w- v! q- }0 i1 V5 uДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.% l, K) {, P  R. g7 U
& @3 R2 P9 A) _, I7 V0 H. d# r& F, v
Обсуждаем:
2 G  h% Y- C4 G% J" W
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.8 X: G3 X, i1 h6 Y. u# u
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
3 \/ \2 r: N, ?+ `" n  Q# f: m. e; g2 ?' @

6 Q5 [3 O/ a4 t& f. @
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
: \+ u' K$ U) o# J8 h, M) j7 y9 f

* F8 r9 a! ^) h$ x
" O6 O  i5 Y: _* D4 V% @
9 G, e# \* {* F7 e$ }# x; p- A3 T) _5 }0 x

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?7 y! b" R+ z  V. d1 c* k' R1 a
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
& _7 g- W( S4 L  qПочему мы используем ключевое слово this для ссылки на п ...
; G0 c" F/ \- K) J1 ~$ c0 D! i& ^
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.1 v$ x2 }# p$ b, l& ~9 n
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
3 ^  f, d1 i1 n6 |. {2 Q6 \7 R) ~# E% G" l* R  k4 \2 I
Вот пример:2 \# Q3 U4 i- A
  1. public class Player {( |( W/ X* ~0 Q; `& e& n
  2.     private String name;
    2 E  @" Z! H7 ~/ Y! R2 Y% v9 \' O
  3.   S: ~& C7 s0 T8 n: J- F3 T
  4.     // Конструктор
    : V3 G: }* n3 E
  5.     public Player(String name) {' g& e; N0 h8 {8 {: ?$ k& {
  6.         this.name = name; // Используем this для указания на поле класса2 v1 ?+ r# r" Y  V# r
  7.     }7 w$ d& q4 K7 t8 T: L

  8. ; K) v! v8 W3 ?5 V4 ^: P, y
  9.     // Геттер для имени$ Y# d' w) p9 Q9 M1 p0 l& L  o1 l. F& e
  10.     public String getName() {9 s# B2 X; o# G$ H/ |! e7 e* N+ P
  11.         return this.name; // Используем this для обращения к полю класса
    $ F4 q& B" p4 Q3 E  Y& t( m
  12.     }
    + q2 P! a+ D3 x/ u6 t3 [5 v
  13. }7 j0 U5 g. [5 M3 R8 ^' o. V
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name./ |# w# x  l) e8 V
! a. n9 Y2 l2 N8 C' w8 T
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    3 Q* U& k4 c4 j% u3 O- B) H

% `& z8 h" ~. ?7 Z( F! G  gПример передачи this:
& ~# h; W& b& i" ?( N5 J- F
  1. public class Game {7 q: j6 t6 ^, ^3 U4 Q9 D" `
  2.     public void start(Player player) {+ T% ^# T2 E2 h# g8 f4 }7 E" ?: J# [
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    7 G1 n; x9 ?! Q! n, j  ?" ~: N
  4.     }# u' x/ y. r: j% w5 r- @2 S
  5. }9 g+ U( v: r( n8 w1 I( U3 B* h
  6. , d& `0 J/ |: m- M, }1 K! ^& V7 Q
  7. public class Player {
    ! z5 C- O. \4 f7 H, Y3 ~
  8.     private String name;
    8 Z- k' l% l9 A+ n
  9. , F# L/ O4 j* W- y
  10.     public Player(String name) {0 T. k$ j, h1 q" I4 B( r) Z
  11.         this.name = name;
    0 |+ I9 M2 o/ Z* D0 N. w3 i, j
  12.     }
    $ ?7 K4 T6 D. D
  13. ' N# F! \8 F2 @1 x4 r7 o! G
  14.     public void joinGame(Game game) {/ K: Q( N" N5 Z' Q3 W9 z" N4 R+ w
  15.         game.start(this); // Передаем текущий объект Player
      S8 V4 R: y1 f' p
  16.     }% T+ h9 P0 M) I3 u, Q
  17. }
    : h6 c+ ]/ l2 M! ]# k- a* N3 z+ O
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java., S- @, k* e# R! h

) b5 K  Z' f# E! S  C
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?1 P& E1 y! B+ @5 Q% o: L

% G% x& _2 f# P+ o3 |. h0 q$ F, f
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
: b4 p8 N% o" o2 }7 s; I! L. aКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
  s& ]' g. d4 \- r+ f5 K* K
Mike123 опубликовал в 2024-10-17 20:05
6 |3 b$ _- w% ]: L/ @Добрый день! ) k9 w5 w& N$ Q3 i
Как создаются и вызываются методы в Java? Мо ...
1 r) ]6 {5 |9 v2 E! P8 \( e
Привет, Mike 123! ?
7 }/ n- ]9 D3 G3 tОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
  {" @6 i3 Q, a3 s2 ~0 d! W8 B+ N, J+ z
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.' c+ ^, p* K) K: J& W; }' K7 l7 a

$ k% s9 i2 s: e( c
6 S0 i6 j6 h! v0 eКак создаются методы в Java?
0 {  q# @" {( ^+ j5 U
) [: Q( A& G' o/ \) w2 yМетоды в Java создаются внутри классов. Вот базовый шаблон метода:$ a/ c* A) H2 E! ]/ n

1 w# e+ s/ f) `  S: ?- X- P5 g
  1. public returnType methodName(parameters) {3 H9 x( j% @* F" V/ I
  2.     // код метода
    5 q4 W+ z- h) g
  3.     return value;$ B7 ^/ J" R" ]# N. N0 q
  4. }
    / e- G, D, d% i  f
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).& |7 t) U' {  s& ~6 T

, z/ v' A4 F9 A8 o. W0 T9 ?7 aТеперь перейдём к примеру.
: n$ N8 b9 J# Q6 u8 Z8 s* e8 K  @3 l1 w4 m
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода9 ]" @! g5 U' M4 V# L( p
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    ) [3 M! z( }! K' s8 c% a; V
  2.     // Вызов метода атаки NPC
    8 w3 H* O, ^$ E5 ]" c9 c
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());4 a% s  |$ I, k5 p  j" Q
  4. }4 o- ?6 a0 {7 |1 o
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
5 \2 t5 X0 W3 o$ ~0 |* {
6 S* r  f2 x9 ?* [4 M! p7 N; K* g- s% n, C- G1 ]
Класс Npc.java — вызов метода% y7 ]; r/ w6 U* p

2 L" x" m6 `* {( N1 d0 w
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)% `& R0 S  ?0 ]8 G* J
  2.     // Логика получения урона NPC: T* a9 z' B: v+ ?4 ]
  3.     this.health -= damage;  // это.здоровье -= урон;
    , p' V# m2 y7 K  D/ ~2 }
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    % t; O1 z. U" O) t, n4 l9 k1 t
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());$ N/ I5 i- J% J' X% P/ ?
  6.    
    % O+ w/ g1 B4 o* s+ L/ Q
  7.     // Проверка на смерть NPC: L# v& f6 V: |% h% K2 A
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)0 U. T/ q+ k6 C; @5 t
  9.         this.die();  // это.умереть();
    1 U) {4 ~4 M2 T# S1 U5 @0 f
  10.     }
    2 j/ l3 O; P' q' C
  11. }
    & u+ z0 U& Y! G  S, j; t
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    4 A% t$ x, y) m
Пример взаимодействия (с переводом)( H* p% K0 a3 [: i& D+ P, t
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");; m4 }# @6 }2 |8 D' X. O) {2 S
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");7 l0 O1 s( {6 }0 X9 ~
  3. ; x" F0 }5 A5 a: o
  4. // Игрок атакует гоблина
    / E' Y# W# \8 l
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    # T$ g: M- H7 h. x- M
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. ; ?, z" I- b0 ^$ {2 D" d
, G+ P& _7 g/ d( B
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
- {1 l. \: ~6 S$ b2 Y+ uУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
. U5 O  a, u8 o5 s
) c" p6 |+ q9 s, P3 I, h
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30. b2 o  v; B( p- b3 u
Привет, Астралия! Огромное спасибо за твои разъяснения ...
, y- }  N) Y1 y
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
9 M3 C1 h8 |9 y9 C: {1 c) ~1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример) ]3 x- j3 q5 @2 E4 r" U
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    9 }4 ^1 z% k! C
" r" [) n5 F# D
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)( d# p! z" \7 X2 M! l, b
  2.     // Логика взаимодействия игрока с NPC
    $ L) t( `1 L: z# Y( H- z9 k
  3. }
    5 b. w3 o5 F' X" N/ h/ V6 @
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    1 t1 v& V: m# y" V+ s9 F' p

, V5 N* w4 p5 h8 D$ C# j$ M
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    1 l/ ~! m; K" i
  2.     // Логика перемещения NPC7 f! |1 Z# f: y  {- L- a
  3. }
    , f7 e% f5 j3 A( d
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    $ R0 W7 x# z  @3 W* _' {7 O
) L+ Z8 [6 z0 W; Y
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    4 C( i- U- y- L0 O& b
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)' z/ l9 k" h5 l, X* B
  2.     this.health -= damage;  // NPC теряет здоровье
    . ^  s" a! U! d) u$ ^
  3.    
    / P2 A, S* J: ^1 t% }& T- s
  4.     if (this.health <= 0) {
    3 Q" r6 d' a+ S9 u! m
  5.         die();  // Если здоровье упало до 0, NPC умирает
    ( j& z! i7 K8 M" _& d$ i2 x3 K
  6.     }
    6 B/ }7 }* G9 U+ ]
  7. }
    ' u. w7 ?/ b7 G9 \. ]( R; \# l
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример7 ^5 F0 ]  t# H4 Q) ^3 {/ s$ r" \
3 @7 u; H" b1 [7 G" _0 e% B
  1. public void die() {  // public void умереть()
    2 C1 s5 W: V9 O1 M( f( ~
  2.     // Логика смерти NPC
    . [( i6 Q  W" s: Q- B  T/ P7 Q
  3. }
    5 C+ \; V  G4 x: C0 k/ B4 Y
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:! B$ |( C% V2 N( j# K* I& u3 C
3 p) S2 A+ w6 u
# U* N/ A, c2 q9 z7 w  t
  1. public boolean isDead() {  // public boolean мертв()$ n- A7 y, A, G, k5 R
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    2 ?- g9 N1 x- x' {
  3. }
    8 ]( S, k- ?! `3 X+ C1 h  \7 ]" t6 v" M
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    4 e: m( i) ~7 a' ?( V) W5 d
8 a( n# a& A( }! X  G! D
  1. public void heal(int amount) {  // public void вылечить(int количество)2 {% g/ N  A5 M  E6 r  i  ]. f
  2.     this.health += amount;  // Увеличиваем здоровье  r2 N- O0 X: A+ N4 f9 Y  L
  3.    
    : ?4 b2 v) e* b$ R) E: f" g
  4.     if (this.health > this.maxHealth) {
    5 s- q/ X$ q, t0 Q+ L
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    1 a2 u0 t+ [0 s, Q( B
  6.     }( H' K$ `5 x+ i
  7. }
    7 e& G6 n5 p2 e& ~: V  {" B
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    8 z7 U1 G9 l; R! u" U( S  [

6 C0 F- K- C& K, X" ^, y, x3 G
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)- Q. S6 y# O% P8 s5 @
  2.     // Логика применения скилла NPC$ i$ `  X. a' o0 e
  3. }2 ?% W/ D7 e0 i' a' F" O
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:. r8 g( Q- t6 T) O5 M
* [) n! r$ f2 L1 r
  1. ) Q& M) G% ^6 F% u3 S- D
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)$ M7 p& K3 e  R) J5 Z
  3.     // Логика взаимодействия с NPC
    4 L- q+ h9 l4 {, ^
  4. }
    ' O% |+ w5 v$ _! A! r
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    % [& m* o9 q/ L0 o& h& D3 M
0 i: O; L. g8 H, O  P
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    ; U. D1 N" B7 t, [
  2.     // Логика открытия окна диалога( \9 w/ V" X" O$ Y
  3. }
    4 E. \/ i2 Q9 w; _
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.' |& v7 m5 @0 c7 o
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!' l; t) @- b" s- s
. Z: G- ?( m* e" W! m
3 ]+ ?! S8 Q. h+ Q9 ^$ f0 y
* z7 z  z+ l6 b) r$ {  ~1 I

% Q8 M% y; B. u' l" D
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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