Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 ; p& N/ \8 [# G5 K! J" V) H

# S. i, `7 c" Q' g& k+ O
' A' |- ]0 v: V7 U, @; n3 xШаг 1: Введение в классы и методы на примере L2j_Mobius
4 Q0 v7 e. E0 @6 `7 Y& V: E" wС статьёй можно ознакомится в разделе Обучение > Читать& j' Y3 H6 f% B# A2 D+ Z
& k  k% W& F( {& h5 ~6 p4 |
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
4 L7 k) M' l5 z9 r% t  I: c$ d7 O
Обсуждаем:
1 E( I3 S7 O; h, X6 l
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    $ }' R7 A; A# ?
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!- h+ c; d: {5 i: r
! g6 O4 Q- U2 S( b' V0 u) m


$ n% ]0 a2 `% aИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! 😄 Но мы вместе разберемся!- ?& p$ ~# ], m$ s: w8 j( ?) T

; O% G  W+ n: x* {6 X
& {5 Y% S' V+ o' v$ I7 U9 ?" g4 g7 @2 Q2 z2 ]

/ o" t* P3 e/ C# ~% E8 n
% i. @9 W; J* j2 v: q( W6 o

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
& N0 T$ X6 ~1 g$ F
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:175 M5 N$ h# p& A! O1 m0 U
Почему мы используем ключевое слово this для ссылки на п ...
2 z. S% k! g, s
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.) C5 q( R( V# D2 C$ Y7 L1 M
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.; V, O$ I( i( d' ^, i# n

4 T3 l4 C+ J& w( B  \% o* t8 U8 OВот пример:4 V' L0 Y% ~* j& c9 B; O- H
  1. public class Player {6 T- c& B- w$ F9 D5 c
  2.     private String name;) D/ o; T7 `' v8 o
  3. + t8 E3 c  C- H" J2 v' i: D
  4.     // Конструктор& B" [. o9 V  b+ F; W9 E* q
  5.     public Player(String name) {
    3 Z- U8 K3 v! W$ i* N4 K
  6.         this.name = name; // Используем this для указания на поле класса
    ) I) r+ P8 ~4 j* D5 J. l. r( F
  7.     }
    , w- a& ]& y! }# T' A

  8. 6 J* U4 m0 i+ ]* z8 r( T; i7 ^) H
  9.     // Геттер для имени
    " }( ^6 E( p% l1 h- u
  10.     public String getName() {
    ! ~* b5 N$ v3 W8 B$ }6 B
  11.         return this.name; // Используем this для обращения к полю класса/ O& X3 i" S7 u" c/ J+ @& v2 K
  12.     }
    2 p2 M+ k" d9 _) l  G  f
  13. }& r+ T4 U8 ]9 H6 D
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
" V  b9 W! d% u- d6 }8 `; c4 [; k. ]5 `
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    : S6 U9 Y. y) w

0 s# `% f( B1 J+ g* \9 n2 u8 AПример передачи this:
, j) E" I. u. ~) Z  U# o6 J) U
  1. public class Game {1 u% O/ c3 A  E3 K- h
  2.     public void start(Player player) {
    : H7 g: s) F; w& J9 R
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    % J) G0 O; ?& {/ f& a$ c
  4.     }
    , l+ {! _2 M) A, H
  5. }0 h5 Z  ]7 b) m% _) `
  6. $ ~! b. Z; r1 Q
  7. public class Player {
    0 X2 G- d$ F3 i) y" A
  8.     private String name;
    ; a; q2 u% y. Q  {9 `8 d+ G: Q
  9. % `; P7 c1 @$ R9 e' ?+ w
  10.     public Player(String name) {' G- M6 L8 M: @, j- Q" y
  11.         this.name = name;# m: z0 j0 A$ f! G4 |
  12.     }
    4 x0 i4 X4 w5 ~3 G) K- {0 A/ E
  13. # X+ \" n3 R. I  x: [
  14.     public void joinGame(Game game) {
    1 s, @0 o& o# ~. b3 J  ?$ k. k
  15.         game.start(this); // Передаем текущий объект Player1 q; G8 ]) {  ~" l
  16.     }
    7 i  q5 i) I4 m9 {9 e2 r4 s( y$ G0 K9 v4 `
  17. }7 D: l; C) v3 j: X+ R  _
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
1 r0 U" u; D+ E/ k

8 I) @/ r. I/ D  @  M/ TПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! 😄; J) H1 g9 f+ p( d: W9 P
$ \1 _$ r8 P2 R' d: ?
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
  p4 ~1 I; h1 t/ I* d  h! c/ v1 n) XКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 5 C5 C: z& H" }# N8 ?
Mike123 опубликовал в 2024-10-17 20:05
8 h5 r7 _$ P' RДобрый день!
8 o; [, f6 u) g, q+ \Как создаются и вызываются методы в Java? Мо ...

8 M9 i% w& q1 E' {9 I8 [- FПривет, Mike 123! 👋3 H2 g1 O. R! D, @: j+ d
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
' ?# I; ~2 V4 z5 |/ F0 \
+ A8 l; a, ~5 E9 @9 Z3 s5 UДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
& |7 V0 S! z* l- d7 c' R, G: s( @9 j& Z. |& ]- M

3 }, C- Q/ N4 e' M  J# I+ OКак создаются методы в Java?
1 s, h- p& z+ H+ E# d0 L# N  y' K/ c3 L% `, M5 B1 u
Методы в Java создаются внутри классов. Вот базовый шаблон метода:4 x% e5 h/ A% P( }
; S; q& |3 o# F' Q) s" g
  1. public returnType methodName(parameters) {( ?3 {8 c0 k/ y
  2.     // код метода
    ) B  X) u& K4 _( W/ f
  3.     return value;
    . A9 D# {  m- ?$ i. [5 }/ R( O) E
  4. }. _( M/ Z8 h. e4 V8 l, I
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    " @. H+ N& W  F3 X
' c& ^+ U" |4 u; T
Теперь перейдём к примеру.5 e0 L1 t( S! O9 e3 o4 P( m
3 x+ {6 p. o" C3 W4 E) i  |
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода: q; v7 O/ n! P7 k$ V
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    2 d7 Q2 T6 S5 q- n1 G6 c0 x2 o
  2.     // Вызов метода атаки NPC7 C9 z+ Y+ W* P( j: R$ _) s
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
      O1 S. [7 m$ `; F$ E% C5 [
  4. }
    / g' n4 }0 y; y
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
% ^0 L9 M6 m, V7 L5 T, {, n& ^: P3 O: F5 _" G
1 d* n4 s. z3 n/ P) k$ x9 i1 z
Класс Npc.java — вызов метода
5 Q: B3 P% `+ m3 a+ E) p  h4 n) b/ _1 C, X4 P: t; f, s0 R( _
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)- G4 \2 U; @( e, k% ^5 y5 @) m  T
  2.     // Логика получения урона NPC
    & Y) `8 W6 t/ z
  3.     this.health -= damage;  // это.здоровье -= урон;7 z& m7 V, a3 u( M2 I* N2 h
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    5 S2 ~$ q4 ?: m- \5 ]: A
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());( Y, k7 f' m/ [+ ~
  6.     - I2 `/ T# [) Z6 o! d
  7.     // Проверка на смерть NPC* _" a' J" |, E, k5 N8 z" c
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    * H) w, h2 K3 j
  9.         this.die();  // это.умереть();
    6 M; x6 U1 J% T6 v8 j4 `, p
  10.     }) j$ \: Y2 i; `' k/ O- W
  11. }
      c" m- u9 P8 M* v5 T5 Y- T1 ^
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    8 J5 q6 k! s  |+ O1 X1 |
Пример взаимодействия (с переводом)& R$ J/ k% B0 z/ g9 D' q9 L
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    , b% f$ L  ~" \1 G9 M
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");$ l5 ~$ p% J: y$ ]5 u
  3. # C+ Q$ Q( a* s% z8 j2 p/ q1 e7 F+ T4 G
  4. // Игрок атакует гоблина
    ! K4 e9 c0 B3 V2 L
  5. player.attack(goblin);  // игрок.атаковать(гоблин);: z6 l" R; W  Q9 o9 i* I: ?0 ]
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 4 s* X4 @  i9 [0 k& c. p3 `
7 a# |, `8 k" b; f2 a6 Y1 d
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
, r, Y# O9 d+ r& v0 WУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
. W8 t  g) W5 B. J5 O: V' |1 u. _2 v  c) s+ m/ k2 m
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
9 l2 v# N: v! U) u2 U3 {+ w1 BПривет, Астралия! Огромное спасибо за твои разъяснения ...
# ~+ \; r4 k2 H9 x4 y" ?
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
0 k) A- N& I  l1 J9 ]) J! Y4 ~1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    4 E4 n: Q8 G: F8 B- u; k
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:' V0 v5 U  Z- @# {  W
# u  b- |8 _' e& q' c& T  S
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)* ]) I! Y9 t9 M, X5 }* P/ y, v2 A
  2.     // Логика взаимодействия игрока с NPC
    3 F  A+ m) }9 H  `" K0 K; `
  3. }
    1 H4 c) Y" }* m) ]  [. w" ?
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:  _8 U+ n4 G: O# m- d8 w; Q9 [3 r

8 V* }) h0 t. I1 M
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)5 J9 d8 e+ {1 F  {- a# |1 T2 E) U5 M
  2.     // Логика перемещения NPC4 \  T: Q/ x5 Y$ I3 A! N
  3. }& y* S! D& l% o% ]; I7 ?2 Q% `- A
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    2 B8 r4 K9 j  u: C! q" p# Z. P

* @. g7 F2 v/ E, a) ^/ F
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    7 _. `, l* y# @/ n. e, E# v
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    ! B& \1 `8 y! x! i* Z* r- z
  2.     this.health -= damage;  // NPC теряет здоровье
    + f2 D0 e1 Z3 ?9 ~& M
  3.     6 W( J  K6 Q* B" ~# J7 o2 P
  4.     if (this.health <= 0) {
    + X1 D- w' k2 H# I2 L7 ?) s
  5.         die();  // Если здоровье упало до 0, NPC умирает% l- v& j2 S$ x9 k6 T# @6 h, V: t
  6.     }
    4 s& s7 D5 o+ J# }, B8 z
  7. }5 z1 y6 W5 `; h8 |' J1 r
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример0 D6 Z8 l. \% G5 q. t% ~

  i& {* y. }8 j* h/ g4 \8 `! S
  1. public void die() {  // public void умереть(). [# r: r# E4 |4 X
  2.     // Логика смерти NPC
    4 N. j% |( p( c- X
  3. }+ [; E2 P# q3 F4 ~
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    7 }- H$ `" a. `
7 Y" @, f( Y* ]6 L
+ {9 y" Y" M& Z0 H3 x
  1. public boolean isDead() {  // public boolean мертв()# V; X) J4 J3 j, o" j! j4 d
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    % R5 |  n& Y+ {
  3. }9 B5 j! L. v# K0 O2 ?! H
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    , o- r4 b* n4 N2 J' e& _0 p/ p* t
( X( [; p, X8 T$ w
  1. public void heal(int amount) {  // public void вылечить(int количество)
    ! P  l) ?8 @+ U/ j1 T
  2.     this.health += amount;  // Увеличиваем здоровье4 K( `- K- v; G" m6 _1 ]
  3.    
    " H8 _1 k+ k7 U8 ~0 A) ^- y
  4.     if (this.health > this.maxHealth) {
    6 a& X( }! A9 H% G$ D! u5 t9 Z$ C6 h: B& }
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    - Y4 j1 M) A2 m3 h$ {2 J: Q
  6.     }, Y' N3 J* _2 b8 i# x" O$ H
  7. }- H/ n1 F% R6 w/ i: k
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    & [$ y/ d' D+ j/ o" c  k! t: d
0 `! J6 J( g  J1 }5 V
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    + j! B1 p5 Z: H5 M% M
  2.     // Логика применения скилла NPC
    $ A8 [8 ?' U) C' b1 q2 W
  3. }
    8 g) k" w/ J3 z7 x
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    3 y& o3 \/ g5 _4 v7 @0 V) g3 o/ [

" r& |8 d- \  t( E0 d& |  D. w
  1. 2 {2 J/ \! O) ]
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    & Z, Q# g$ U. W1 a) Z2 [
  3.     // Логика взаимодействия с NPC
    + C, q! ]# e5 A2 E# h) K3 B
  4. }  p8 {8 `, H5 r* q, @9 L# [
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:; X+ a% H6 n$ I2 U1 c4 e
# n* V8 e; i& ?" c( v  c8 I
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)9 n% P  L6 \  S
  2.     // Логика открытия окна диалога
    ' U6 c- X9 C, ]  o" B6 |1 t
  3. }
    5 T$ ?/ {: R& Y- @% ?
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.- d- k1 K. R3 \8 G
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!. c) p( o% o8 B

, y! `+ @0 s* ^$ g- ]5 u/ A1 k  J

; V4 T/ A5 u2 X  ]" u$ w& s0 `' |% b& R! E5 u1 l$ N/ e" a0 [
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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