Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 9 Y* b$ Q, p- M6 G2 [* i% g& m
* N2 g  I' b: @! y

: U6 L, R; I% |3 z6 u( u2 U9 JШаг 1: Введение в классы и методы на примере L2j_Mobius, r( |- X& f7 [* G) l- T
С статьёй можно ознакомится в разделе Обучение > Читать/ M7 ^  R6 C8 P

" i! ?+ X' A. K; {$ S- rДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.  ?; S. k' s# c, Y
' L3 l- H" A* p
Обсуждаем:
9 N& R/ G6 k/ R" U" F
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.4 t1 ~0 u+ B5 g$ N! r. \
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
: l( L' a& k; \* }% ?9 ]  o3 g# X7 W! ]$ u

! C) ~, l  {# V, d. u' D
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!( m0 ?* S9 _/ _& o4 N

8 i8 a2 \7 @5 c! ~  B0 |0 f$ j0 r5 q1 O0 J) J' f) I

7 Z! i- ^  s, A& \0 X) o$ D7 S9 z  _$ r- L9 H- i& q

! n  R4 f  W5 F

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?* x7 `- _  o! v( T6 C# Q
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
) j2 h% o- a! v: m- B+ }Почему мы используем ключевое слово this для ссылки на п ...
; b3 \* V5 e( q
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
% y% w5 ]* L2 y% JПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.7 |2 |$ W; W$ ?
' |' ?0 m  i8 w: g
Вот пример:
2 H$ L$ X/ X- v* ~% D8 s1 s9 {
  1. public class Player {+ y  C1 R* o% Z- B
  2.     private String name;
    * X  a% e! U- m# Z
  3. ( x' |9 W1 K  m: ^) e3 l
  4.     // Конструктор/ m6 `8 \0 c* _
  5.     public Player(String name) {5 w* W7 C& p! R: k1 y0 n) q
  6.         this.name = name; // Используем this для указания на поле класса
    $ w: l) ]" |' E6 p4 [$ }0 _4 \
  7.     }
    7 H( j; g, {) \/ [) I& [
  8.   F3 m! `/ v( b& I
  9.     // Геттер для имени0 P+ P1 B( o  _5 ?% X) M" t
  10.     public String getName() {
    9 ?7 u: R7 y2 Q7 O
  11.         return this.name; // Используем this для обращения к полю класса
    ) T: s8 z; A! y: l4 a8 T) Y
  12.     }
    - h4 n( \! m( z$ n: i6 p* W
  13. }
      k7 o: L8 ?8 a' [
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
5 {4 p" m( z- R' W8 }4 D# y1 t8 ?  L& P& d3 }) X5 r
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    2 k% b8 G* ?/ z6 O$ ~9 I: x5 h

3 A: \7 c6 R; i# M4 S' ~% j7 oПример передачи this:
& J2 b+ V, ~8 D9 \- G* D6 Q
  1. public class Game {1 B( c  X7 [/ X4 d' w. J: Y8 [
  2.     public void start(Player player) {
    7 U( m( j$ ]; L- r
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    8 Q6 V% J8 t3 c; c2 R- u% ^
  4.     }
    6 B2 x* {  z7 C5 g8 m- ]
  5. }2 w3 L* f5 E; n; h% K, h+ Z3 _1 G

  6. ) E8 Y! _9 j# \1 Z6 O
  7. public class Player {% B  |9 M0 T2 I2 T0 _4 ?
  8.     private String name;5 Q( w4 n3 P6 u& P; p
  9. / y) g- Y4 ?' m  [! T, X
  10.     public Player(String name) {, ~, y8 e8 N( V
  11.         this.name = name;
    & p  U# S/ ~# x
  12.     }# V3 l+ b6 R& i

  13. ( ^+ Y% `6 S0 t; Y/ m* o
  14.     public void joinGame(Game game) {
    $ Z$ A$ S4 k/ z! V% u2 p
  15.         game.start(this); // Передаем текущий объект Player
    8 M8 V+ K+ t4 U$ h* \8 P
  16.     }
    * Q2 z2 I) J8 S. h1 G9 y
  17. }) F) Q* U$ w2 C( @* M) e
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.$ [# Y: v0 W% \* y& A5 R- ~7 I/ e( c' h


3 `* ~. I6 @4 GПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?8 Z$ f' \$ Z( D' l; n5 s! J% F
, ~( J  y4 y% U/ J) x* p9 b
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
' m+ a, l7 S1 R2 {- ~Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 ( U4 C& u! ?7 J% q$ \, t
Mike123 опубликовал в 2024-10-17 20:054 M8 b+ X& g- E5 \+ `. z* J5 t
Добрый день!
+ k7 q' K6 f, \' NКак создаются и вызываются методы в Java? Мо ...
, }/ ^' a3 q( B9 `
Привет, Mike 123! ?
# n5 `1 i3 f3 V9 b9 y' ^5 sОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.' j( E7 i& E! Q: m

! s, p! @$ U2 W% T% ?! _Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
; v8 c) C# {) b) s
5 N: e0 }) a, ^( t
7 h+ O8 C# a! A0 P+ a, lКак создаются методы в Java?: F3 V# [3 |3 ?6 i. S

( q0 z$ v; O7 i" ~5 i/ S  jМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
: l% Q+ s7 x: S- ]: J$ h1 L; |0 @) L+ u  I/ T0 q
  1. public returnType methodName(parameters) {
    : ^3 ?' [- V. n  x0 s, C
  2.     // код метода
    & V2 D+ f' h& Y5 `+ c! z: [2 S0 u
  3.     return value;
    * g3 R) D9 T9 g0 y
  4. }
    + A2 Z" Y! Y$ t* ?$ `
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    % E3 r, o' ~( C
8 D/ `) }0 O& v# a) P  {
Теперь перейдём к примеру.
) i& ]* F. O* q9 P) B! L# t: M
$ U+ X- x% C* k% W9 i( Z& gПример на основе L2J_Mobius с переводомКласс Player.java — создание метода8 D5 h1 c5 ]  l, ^
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    0 f1 f5 [! d* ~9 B) d+ |# l, o
  2.     // Вызов метода атаки NPC  S9 m+ _9 l  L3 C3 I& |8 v; f
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    ) \/ J6 f9 L3 k; F
  4. }
    / I. t' j' b9 t: I  m
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
2 O* Y+ \, ?+ f% A4 V( w+ q! n5 V$ G4 c0 f# e8 M- G
( A/ z  g4 L" k* E2 h8 J9 Y7 L
Класс Npc.java — вызов метода) ]: t, F" Y. N; i8 z( j: Y/ E

. d$ W2 O* ?# d
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)2 d; k& ?: u$ J( C# X* u( \
  2.     // Логика получения урона NPC
    ; }1 t. ~0 M) O; ^7 D9 B( i+ ?- P
  3.     this.health -= damage;  // это.здоровье -= урон;
    ( M" m  {0 N. H( L
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  # ]9 L8 J3 m! M8 b
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    : A6 u9 ^  O4 G: i' |
  6.    
    0 i; J  W2 k2 Y( Y5 ]* m6 p
  7.     // Проверка на смерть NPC3 \3 W/ e$ u; ^  M' J
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)3 T/ R& W; h+ q0 W  K  K5 y9 o  m
  9.         this.die();  // это.умереть();
    $ B. y+ F2 {- [) u, }
  10.     }* Y- Z; ?. [4 s  K/ i3 c
  11. }
    8 g& A1 p8 p+ A& e
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).' v( Y) O( ]4 j! i( P2 Z! n
Пример взаимодействия (с переводом)) t7 o5 D' W7 B6 H+ z1 w% X
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");: u9 u# r$ B. I5 I4 m
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");! ~& e( o- a5 o8 O+ m) B8 C

  3. 1 ]% F3 p- n- C4 b7 d( x* Z& J
  4. // Игрок атакует гоблина
      G8 T6 G" f8 b
  5. player.attack(goblin);  // игрок.атаковать(гоблин);" M& T' E# T- W( h3 V7 z% H
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 0 c  i6 b1 r  T$ a  v

# p( d. r( b/ G% Q/ e, C
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
! j- j: R' v. O; v- ^) j5 rУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!9 W* Z) X9 B3 n4 V$ l

6 S3 Y9 Z  a$ W  E6 h
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
6 ?1 O0 S! E( ~4 d6 d5 t' [Привет, Астралия! Огромное спасибо за твои разъяснения ...

7 p. l1 F; `, B( o, x6 _Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
( A, k4 r  S  r+ Y' D1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример6 Z: R4 h8 d/ f. x9 O7 i, |5 t
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    0 Y: q" ?( ^# ~: y2 d8 d3 D
  f; J# ?8 ]$ B; k) c
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок). g: H; `; R- I" S8 O0 W) M! i4 o! U
  2.     // Логика взаимодействия игрока с NPC
    1 \2 E. u0 `" j) f
  3. }
    3 X5 x( P, y2 L- q- @
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    0 R' A, e# r  t" @* _

  x7 i1 W$ C" n
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)9 y6 e+ U4 q$ J: p% p4 V! G
  2.     // Логика перемещения NPC
    8 `2 e+ Y# S9 R# I- p# \; L3 T
  3. }" J0 ~: b  m2 W
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    . k2 @  X/ l' Y- k

' \" B: S* c! ^; e' k; |% q
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример  h7 T* k, v* G/ O+ q
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    * `. ]. i8 x% i' X
  2.     this.health -= damage;  // NPC теряет здоровье+ l3 b& [- j) B8 G( Q' m- [, r
  3.    
    + A/ q) U' t* D3 l( j1 v9 U
  4.     if (this.health <= 0) {/ d  T/ n- h% Z( U7 H+ L' L
  5.         die();  // Если здоровье упало до 0, NPC умирает  T. v8 N5 B8 ~0 o3 L6 \$ A
  6.     }
    ; u! s6 N. u2 ]& {: ^- m0 S4 i
  7. }* r+ N) i5 i% |
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    2 t( }% t- k5 i! S7 r

. v1 o( I" S8 D' D) W- R
  1. public void die() {  // public void умереть()
    ) u- f& K5 B; e
  2.     // Логика смерти NPC
    6 r: E2 f1 m! n% i) v1 M
  3. }* `, j7 O  D; |
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    2 \. \- e6 Q: N" Z% E9 `
$ C& A% D* g9 J+ x* u3 a

2 W/ Z( r2 @# i( K
  1. public boolean isDead() {  // public boolean мертв()
    % P; ?6 F$ J' g+ k1 G' e/ a4 X
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    * P6 ^5 H8 h# _, C( L
  3. }
    0 H& s! }  e  A8 ^; y1 B
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    9 y' M/ I: k0 X- e7 X" n
$ [& r! A* F' P( D- |5 K% U
  1. public void heal(int amount) {  // public void вылечить(int количество)7 M& G* ^' C, p& b8 t# R
  2.     this.health += amount;  // Увеличиваем здоровье
    7 ?1 I  R8 j9 H  P' n
  3.     7 V' T& z9 z2 @/ z0 P: P
  4.     if (this.health > this.maxHealth) {
    1 `, M) i( j, s7 o" \- r. u
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    ( q+ Y6 t7 O; d  W5 c6 y* v; j
  6.     }8 x+ E/ a  C1 M* Z5 M
  7. }
    * r. ]3 i- L, u' T) a
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:9 f$ s  h4 a& C

# U' A9 ?, F1 l  {) k
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)% d" \1 F2 ~! z" \! [6 n
  2.     // Логика применения скилла NPC/ j. a, |! R# I* U6 [
  3. }) x: N* B- X: L; [
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    " E3 E% X7 b! H; }

/ ], s) W5 W5 O  l/ V; k* X# Z
  1. : _+ j  E$ z" h5 \+ ]7 r/ P" }& L
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)) @* m( c+ I( ^" P
  3.     // Логика взаимодействия с NPC
    0 y; q; T- g% Y0 }0 w. ^: R
  4. }
    . C- e1 r( C# R3 j* |
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    - u% e7 F/ D9 i  O! Q

; b8 d- G/ f' j8 @! r% ^  S* p+ e% }
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)+ Q/ q* _9 B3 `: T
  2.     // Логика открытия окна диалога
    " m- N' g# M( `
  3. }
    % t# l! |' u, O2 ^7 l8 \
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
5 V) }' @9 R+ n% F* LЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
* m  |: Y. [5 `' A  O7 t
' L9 z7 Y% a: C8 d: g
( c. W, V( [. f/ L
! c" w$ `$ h- k% j5 T. W) @0 [
8 E3 r  H( E! X, |  |7 }
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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