Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 ( A5 S& r. ]# i  U( z

: x% G& E9 T. Y1 |! E- a
' a& ?& M; E& f/ T5 XШаг 1: Введение в классы и методы на примере L2j_Mobius
8 Q& F9 @4 N5 j$ v3 kС статьёй можно ознакомится в разделе Обучение > Читать
0 N( F' ]! t. v3 a; R7 E
% `2 O# m; }* v: L2 e* sДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.: x" a# Q$ H) ?2 e3 {. S
4 ^" I  d8 M. _$ M9 p
Обсуждаем:1 F' D. Z3 X+ z1 v  w: L+ p0 [
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    * X3 w) E- [  E9 h) {
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!4 w0 s' v1 x1 b/ {7 N" H

- ~0 P+ X8 m( P- t8 q/ {

5 L" O# @2 v+ H. r0 Q9 B! w5 A8 EИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!1 ~9 R7 D- P6 x7 @5 Q$ H

! c7 j2 o) E2 ?6 H5 T2 h3 w( P  f" F

. v. V- ~2 t( |+ Z
: N9 }# @7 S- L' Z7 W! T; n
( S$ G) e; ?! R- i/ g

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?" b' d/ ^! U8 |$ X% |6 W9 D
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:170 K1 t9 x8 G0 O
Почему мы используем ключевое слово this для ссылки на п ...
& G& A1 L0 }0 v9 U3 Z
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
) K  b5 ?0 \3 M( o. ?* fПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.. ?9 ^$ l& K7 o5 g+ i# m8 h. Y& E6 Q
( O/ A! G2 _. J& x! {# X  Z
Вот пример:/ X9 }& o) n8 M3 p+ R
  1. public class Player {+ _: N! x0 X+ g# @8 }6 J
  2.     private String name;
    ' Q8 X4 j, f8 J
  3. " T1 ]! r4 O# ~  q! z9 K4 d
  4.     // Конструктор
    ) I! B6 m2 ]+ r) e; L7 z: J/ z
  5.     public Player(String name) {
    6 c( N+ I6 y" f6 n" o. m! V" j
  6.         this.name = name; // Используем this для указания на поле класса
    8 d( `9 n1 T( F$ L- F- P
  7.     }
    ; ~( f" v- d1 Z4 @

  8. 4 A: s7 O  N8 E" Q8 _
  9.     // Геттер для имени
    7 D) e/ W) _5 m2 ?# ?; H
  10.     public String getName() {
    ; y1 f! Z- y1 g) s
  11.         return this.name; // Используем this для обращения к полю класса
    . G: O& o6 D- o! C- {$ ]. }
  12.     }7 A$ F( L  C, v# T% a5 H& H
  13. }; Y3 ]! h3 s6 a& b
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
. w: U+ h" C; X
7 d9 o, _/ ^9 D, c9 V7 Y9 |Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору." b3 O; Q$ c/ j+ s2 c* d

( S6 o# f  l* {" oПример передачи this:" X( B3 a9 z  z8 D& F
  1. public class Game {
    , |3 j& Z: [/ i' }7 a  U
  2.     public void start(Player player) {9 ?' e) r) x# q  J& K/ w# K7 Q. P
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    + Y) l! H1 \. u: z2 u, k7 r+ c
  4.     }
    ) b3 k* [" b, I2 r$ ?$ b  a
  5. }
    8 X% _) i- j: u; L! l7 W" P+ h
  6. , q! _6 j  x! V: a1 O
  7. public class Player {
    2 k2 W9 L. i) G! P+ M: N
  8.     private String name;
    ! s9 @/ Z+ {: ]

  9. : v  @/ u/ U, I1 V# A+ D7 }
  10.     public Player(String name) {
    6 f! D( J' Z  l; v2 b
  11.         this.name = name;2 \% V- _* N8 H/ @
  12.     }- M" N8 b3 L0 A6 o, C9 I6 h: X
  13. 9 \% s# [$ K3 s1 a
  14.     public void joinGame(Game game) {( }* W; N7 l. W6 \
  15.         game.start(this); // Передаем текущий объект Player
      g' N, r6 J6 D4 P
  16.     }
    & T( F0 `# d: L8 ?! ]) A
  17. }3 b8 B" `$ Z# ?. p
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.3 F5 M; Z, w# f+ _2 u7 K

7 f% @, v7 s9 R
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
! Z- w8 R' W) e) v% L; V/ }+ q: W8 w0 f# V4 G! C2 ]: r
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! 9 x. M! [; g; m! @! D
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
8 Y& h) U, c* l! L- a. u
Mike123 опубликовал в 2024-10-17 20:05
) X4 w0 V1 h* \* ?Добрый день!
) }; I8 Y% C, R5 |- B4 }% ZКак создаются и вызываются методы в Java? Мо ...

0 a& |" w  M8 oПривет, Mike 123! ?' ~$ C- F8 f$ f  n" L
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.9 {% i$ F. `: m# H8 `8 u

- b# R4 {0 x* Y- `) ?. O$ pДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
3 u5 S8 n/ L. k8 C) }
5 Z( x! R) l  V3 [. y# o  r* a( {. p
Как создаются методы в Java?, o7 `3 a+ t8 _' g8 l& A, W& \* W7 r

- m$ y7 T" k" z/ zМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
" A6 s, i$ @, \" c; x4 x
' |4 k3 ?$ M; h1 A7 n8 {
  1. public returnType methodName(parameters) {
    ! p& j9 @: B/ O0 o
  2.     // код метода! M0 T* H' o& I- {6 \  {7 r( ?9 s& k
  3.     return value;3 f, \- Y8 f# X" M
  4. }
    $ k0 Q# X9 N  G
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).8 {* @) ^+ E5 I
3 y0 I$ ^2 v6 g8 L' o: e
Теперь перейдём к примеру.
- F1 M/ j& s5 J( s4 V4 O. I7 z/ o- Q3 ^( s' t! F0 a
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
9 g- e$ v7 Z5 d( a% i
  1. public void attack(Npc target) {  // public void атака(Npc цель)$ r( Y( C" v0 ?( M
  2.     // Вызов метода атаки NPC2 e6 b: @' V+ W# |) }
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    7 e3 O$ \; _/ K) D2 r$ V7 `
  4. }6 Z5 x6 ^1 p4 Q6 S6 G7 r3 v
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).2 T9 D1 q, d) c( p+ B4 Z

* g7 \8 D# w$ s) r, m' n% z
: b; {/ u+ T8 A! X3 EКласс Npc.java — вызов метода0 F0 W7 i- g" I
) a: ]3 t, t! ?5 t( V6 J6 `
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    % Y- e3 U3 L. f  c9 @: k
  2.     // Логика получения урона NPC4 [/ S) `) [6 b" \0 |! L, j
  3.     this.health -= damage;  // это.здоровье -= урон;
    4 ]5 w" @; L! N. s5 |' W8 o
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  3 H4 f- q4 A3 r
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());1 N4 T6 `( u% g8 y: E! {! \
  6.    
    - a$ A% F5 ~5 f, o- Y
  7.     // Проверка на смерть NPC
    - Y3 n6 @( A4 J# K; f+ @
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0), f: H+ {2 m7 y; v+ ?" b- S
  9.         this.die();  // это.умереть();9 V! [) K7 y5 }
  10.     }& k' q( K3 o! @
  11. }1 Z7 E* [9 N5 W3 x7 g
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).( [' Q/ _6 ?& N5 f
Пример взаимодействия (с переводом)
2 y% B2 L& F  e# u
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    4 |: J6 [- u1 ~$ _
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    & `: k, t& E% m- w

  3. 1 S8 B' u6 \% z% b: f
  4. // Игрок атакует гоблина
    % W: Y# G1 f7 u4 J$ d5 j% ^
  5. player.attack(goblin);  // игрок.атаковать(гоблин);( Y' c8 X- e( P9 y+ N3 S* q. n
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. ) A9 F" Y& u2 f

) w8 _( n" w" v9 N( W  r+ i
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
5 {7 y- Q% P- ]* IУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!( ?) X2 h  G/ T. l4 D

/ D6 U- `" o! T$ Z8 t0 Q
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30/ x# c7 Q5 h: V8 J
Привет, Астралия! Огромное спасибо за твои разъяснения ...
* ]$ t- J+ T' k% g$ {
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
2 `. E  ?9 T& {# G0 F/ w* a, v8 f1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример$ ]4 X- Q( x& |" N' o
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    & `3 S- o( ?( d

  i$ }6 o- a2 X* t
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)- v" x$ S, s2 Z# O- E
  2.     // Логика взаимодействия игрока с NPC% L" z0 H5 Y7 y9 U8 E' \: r
  3. }
    # A  i: ~+ O( s+ B! `
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:) A) U9 f5 R; ]$ V0 y8 k9 Y

' q) I# s8 x  b
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    * J* H& k1 D2 q9 l8 d
  2.     // Логика перемещения NPC
    3 f3 _2 F1 t- _) ?
  3. }
    ( ~5 v, f, ]8 Y# o6 a! v
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:0 r! ~3 X/ g! \, C' R" {. ?

1 p! }: u% K) d) I
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример9 E" ?3 V4 m% s  q, Z2 u
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    $ h" q, P/ S& C
  2.     this.health -= damage;  // NPC теряет здоровье+ l# q3 @9 m9 ?: z
  3.     - w# d; P1 n; i4 Z: w8 Y9 q
  4.     if (this.health <= 0) {
    0 Q$ T3 a# m9 @
  5.         die();  // Если здоровье упало до 0, NPC умирает6 o3 U7 u+ c8 E- w( x. d4 N
  6.     }0 z% Y- ^+ v7 e! Q3 ~6 ^
  7. }
    ; M' {) q+ f3 m8 d% {$ X& I
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    2 p9 S2 J" u$ p+ r- V# T

4 e% h9 R! m: p6 y. y2 B" N
  1. public void die() {  // public void умереть()
    5 Y5 f7 J7 F" \8 H1 T; r( p
  2.     // Логика смерти NPC, @  l  H& z1 C! X* r. M& {
  3. }' L# ^$ _1 X  h; `! w
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:7 D* V$ I( n2 J: j
6 B! q; B1 I8 E+ {7 D. `( M: ?5 |
3 m2 S. P/ H$ B* I( a  a" T8 H1 |1 i
  1. public boolean isDead() {  // public boolean мертв()" W' I: W. w0 o5 `
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    6 F: f2 ], Q$ Z8 g1 F. f" r* N" m0 {
  3. }
    4 n% a& v7 a; A' ]
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример" e9 L. R1 Y. I4 {$ k  W- I; R

3 W! M  T' W' b7 P! l  ~5 U9 N
  1. public void heal(int amount) {  // public void вылечить(int количество)
    0 J1 Y- ^  y7 j2 Y% c5 K6 E2 e
  2.     this.health += amount;  // Увеличиваем здоровье8 a" [& Y. m2 [5 W6 a
  3.    
    8 P, k" `: u) e  z+ {9 g- |
  4.     if (this.health > this.maxHealth) {# x( @% _: t$ c9 z7 p* |5 T1 }
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    ; x! l6 a( k& v; w) |8 x
  6.     }# C" a6 I7 T2 R' z. I
  7. }
    $ P. Q) t( P; b+ b, B, `( r
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:% G+ F( C1 q. x% Q: j! C, O* ]
* L/ V, U% B0 E6 l/ [, n$ b
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    + ^; |+ q, ^* i- z
  2.     // Логика применения скилла NPC
    7 u8 d, K5 k/ E( `  I
  3. }
    0 K$ [7 R( {: O* W  P
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    ; [0 M# c3 k4 {; u8 u' `- _9 F

0 j, X/ D/ l5 t6 Z* S

  1. & x# A1 T1 c+ s) V* P, `
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    * O4 d( m0 @$ b+ i' K
  3.     // Логика взаимодействия с NPC% U% D5 s9 z" h7 e+ J( X+ T/ m& K
  4. }3 _! e/ x" ]0 V, E
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    # F7 W- J( {" s, Q1 ?2 X' X

' `/ D9 w* z' \9 h
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    " H- y  b- v8 ?; G. I
  2.     // Логика открытия окна диалога
      j" @- _. z$ b
  3. }' y  L# N0 Z3 R7 G4 y. B* |
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.: T2 U  D) F8 q+ e: N6 E% y; N4 h2 M
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
' W4 ~* X0 \, t" w: K3 n, M3 d5 j1 d! z- U2 e
/ ]# H% J$ }" P

; m9 _1 G% o2 d5 t  t4 s4 N& S" a. y7 M1 Q+ O6 n
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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