Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 2 L, D& U5 {8 @

( M+ U! a3 j8 t$ Y
/ F( K0 T* e' DШаг 1: Введение в классы и методы на примере L2j_Mobius
4 {  ^" T: G( j- y+ x" _С статьёй можно ознакомится в разделе Обучение > Читать
7 P7 s/ Q/ Y  Q! E9 D& W9 S+ G3 P5 r) r* y. a& G4 H
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
: g/ o' R  r+ M) r" I* w3 {2 s* `8 x7 b3 d3 N- O- A7 ]& g
Обсуждаем:
" A5 W2 M4 H0 ?+ I% h
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    # e7 @5 n* r% n8 U
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
9 B" c) D$ C" g  k5 k: F& T3 ?* g% O: @) v% \


5 p" h% v4 \* UИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!$ G: O- L; u: |& d: n0 k: B: ?
" ]. I3 Q- J$ w) x  r

8 }- Y! t2 j0 e0 N# v5 p
; U* V& A) v: D* W, y/ A6 k: p' b& H9 F5 H

% A  U7 y8 ~6 L7 w! ]

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?/ H' U2 E6 x) ?" m9 t- K5 Y
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
4 q- @. M5 D) l  nПочему мы используем ключевое слово this для ссылки на п ...
- I; q+ F1 d" d& J' m
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.8 H8 R8 \9 W0 n
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
% s' y: D5 E& H, x2 c9 O8 \+ d/ E1 @+ w4 X1 r: L% s. G! z
Вот пример:) d3 `! w4 u) ?" }" ]: W2 i8 B  A! c
  1. public class Player {# w/ `. F- ^) j8 F) i0 \
  2.     private String name;
      x/ x4 i" J" j1 N; Z

  3. 1 d- b4 l# Y/ K7 M
  4.     // Конструктор
    - Y# S0 v" X, h
  5.     public Player(String name) {; a* X! i; R5 E; C+ U6 O7 U
  6.         this.name = name; // Используем this для указания на поле класса; I7 \" s8 H% p; o; X
  7.     }
    " _3 F7 j- y% M* k& m3 |, B5 O. E

  8. * u0 h& B$ W* t1 z5 x
  9.     // Геттер для имени
    : M1 _% A. {& ~! F& ]
  10.     public String getName() {* c0 z5 A7 G1 o5 ~4 Q( W& G* S
  11.         return this.name; // Используем this для обращения к полю класса  J) A3 o( \+ t9 k
  12.     }
    $ g1 O$ a4 H6 G4 `0 o
  13. }
    4 z" y. e1 R8 n# T. s* N7 Z. e
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
5 Q) y6 l9 w' S  l* v6 u. [- T; v" U6 x- R) t! [- l( A2 N' Q8 m
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.' r9 r! P% L3 i5 `/ p4 |
# F9 h: b. Z* H/ `
Пример передачи this:
8 F; c! N1 C8 t" B& C
  1. public class Game {
    5 E( K2 r" `' Z. B, n9 n$ w
  2.     public void start(Player player) {
    $ @, N  y) Z, C% q: O8 ?$ b4 m6 o
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    / h/ k$ c7 H' y- }
  4.     }
    4 y1 B, n7 V0 |  O
  5. }
    6 Z% f9 X& u# W( b0 }- ?; g& w# J

  6. . @8 w$ G7 o" e- f
  7. public class Player {- L' j, V" |* A$ l
  8.     private String name;
    0 Z/ }5 l& m- u! h+ U

  9. ) q. F7 d( i9 i* l$ j0 l6 o
  10.     public Player(String name) {
    0 j+ w+ l8 Q, D- f8 ~
  11.         this.name = name;
    9 A1 N2 w% p  l/ \% z1 k( u9 O4 A
  12.     }) O5 b' V+ U2 C* @

  13. 9 E- @" s. \) G$ q6 H  U
  14.     public void joinGame(Game game) {+ V! Y% D3 ?' |7 x' y
  15.         game.start(this); // Передаем текущий объект Player
    / m$ v0 p& Z0 `# t; x
  16.     }' Z) V; V9 |. V2 w" |3 O/ \& p
  17. }) {/ H) T+ [: U. w$ D9 y
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.9 o6 n3 A8 N/ Y


; s7 {; r. H2 E! ^: \5 T" e* QПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
' O  r- b! D2 ?$ ~( ?
0 j( C" b2 K8 m2 |
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
' `: @5 S5 h4 e% q! j" sКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
7 Y" R& K! m; l! l
Mike123 опубликовал в 2024-10-17 20:05
, _3 l3 Q! U5 EДобрый день! 1 Z' _2 |+ m7 E% l; G
Как создаются и вызываются методы в Java? Мо ...
. @6 l3 f5 H/ r+ x5 G7 q/ M* T1 }
Привет, Mike 123! ?, h- w; f# K! a1 q0 a
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.- a8 Q0 E5 z* B
; ~1 G% l2 ?6 A/ ?5 h
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
% m# k7 x! u! Q1 |
' N# D" J4 k' P6 \7 i+ M9 n# R
) S1 \5 g  d6 O6 }Как создаются методы в Java?
& G" E1 v; l% ?8 l( f0 A! E
2 O/ n$ J5 T; p9 ^- z- N( g( HМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
& |7 Y+ d, L& r" C8 T. d: M4 k" T
  1. public returnType methodName(parameters) {
    ) c: W6 g% X2 ^
  2.     // код метода# u1 ~1 L! F1 U; R4 R3 h2 a9 E6 [
  3.     return value;6 \1 }3 k" Y2 m$ w# G
  4. }+ p% x9 z: ?% O
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    ) G/ u& G' m8 p- l9 O4 ]

' v. p2 n' g8 u  pТеперь перейдём к примеру.& X; k" k' D" L" n. N* b1 B
8 r7 Q+ p. L# O" R
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
9 p/ a6 ~* ^" V
  1. public void attack(Npc target) {  // public void атака(Npc цель)3 n2 ~& g! w% p, ?4 i
  2.     // Вызов метода атаки NPC' ^& Q2 |& n$ a" s
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    2 {0 q3 _" C' ^2 o. S. P
  4. }
    ; Q0 H6 U( w, m8 w5 o0 g
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
9 M3 A" c. \# f6 b: o/ t  F
4 L1 I  [9 b. U3 b; l
' b! s! r1 l. r; L/ x, FКласс Npc.java — вызов метода
( A' F% p' o! @; |  w: s6 m" l/ ]; ~2 Y
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)1 \4 H1 l9 n& i8 ?; f
  2.     // Логика получения урона NPC
    2 b# I4 Q% j/ H: i
  3.     this.health -= damage;  // это.здоровье -= урон;
    5 C( d6 @7 S4 ]2 u
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    1 Z3 Y7 q( @- \5 {% E
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());; V" O" m6 A4 {1 V% `
  6.     : m* b4 w% W% q
  7.     // Проверка на смерть NPC
    ( x3 i& e+ O9 i+ Z( Y- Y
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0). R* r2 r* g# [( x) p# H% j
  9.         this.die();  // это.умереть();$ g, `6 E* ~! o3 Q( [1 B/ c4 N2 W
  10.     }0 e- J; J- A: N! ~
  11. }; ~2 R; d/ V' w+ ~+ h+ ?* r: H
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).; n, Y0 }7 h2 L7 L7 [/ {
Пример взаимодействия (с переводом)
6 L/ F3 Z6 u8 u+ a
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    ; [7 f! D. R& z& O
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");) Y. G; v4 A6 A: Z

  3. 8 c1 ?/ r/ C( w5 p, n
  4. // Игрок атакует гоблина) O6 f2 L) q) g' i$ L0 R5 y7 b
  5. player.attack(goblin);  // игрок.атаковать(гоблин);7 m, R3 W' G0 W# L) x5 n. w
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. ) @; Q" b5 c3 X. X' X) Y2 `$ L

. I( w" s8 [* V5 A
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.! f* q5 M- q+ @6 h
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
/ T  t8 c4 `% H& d, \9 y% J4 m, [7 T: G; K* o
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:304 a/ e7 D& i  ^7 y9 J2 k
Привет, Астралия! Огромное спасибо за твои разъяснения ...
/ ^0 _: j# X( {% H5 H  N
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.+ U% N' e% R3 S2 p. ]
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    ! _0 l' }8 W- l
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    - H2 q; p- G, I& U( o6 U

$ r1 ^/ h+ U+ o- e& _; \0 O
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    4 t- v9 {* z. d% d7 n
  2.     // Логика взаимодействия игрока с NPC
    % k3 `& T1 r. Y7 t. L
  3. }) q" c0 k3 H$ A# @% A
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    7 e2 L8 ]- J% h* x& f- x

/ H$ V. j* l9 t. t# E7 u
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    . y; g! g, p' W& U- D, B5 j; t, ~
  2.     // Логика перемещения NPC
    3 f8 f2 }9 _. N' O  S
  3. }$ a) `- a  X" U2 ?  q" Y
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    / Y$ J% ^, U$ X" V7 B! Z

( @, g0 {$ I% u4 N# o
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    3 t6 m8 ~! w- d0 }4 r
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)# u) Z, B+ \# d1 N( E, h
  2.     this.health -= damage;  // NPC теряет здоровье
    + w2 |. g- ~7 x" `, m( Z  ?
  3.    
      U$ h% ^. `; D1 u+ l8 }
  4.     if (this.health <= 0) {
    1 M, ^( z0 {$ C
  5.         die();  // Если здоровье упало до 0, NPC умирает
    ) c1 n6 {- O' b/ k# i
  6.     }
    ; ~  \3 \" h4 W5 S% f
  7. }
    0 |) L8 S9 G) P# _
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    ! O# W1 V, I. \9 p1 U% Z

1 g+ _7 [9 P8 e! S; X! j! g2 C
  1. public void die() {  // public void умереть()+ W' k% @- m" j7 I3 T8 e. Q+ Y. Y, h
  2.     // Логика смерти NPC- l+ @1 l; C8 @! n5 k* M6 g/ \
  3. }2 i) ?8 B) c! ]
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:' b% w0 A# D# g+ K
$ {5 x; b( Q3 v7 Q4 _1 l
2 X  ~/ A) D% w3 J' [$ U
  1. public boolean isDead() {  // public boolean мертв()
    ! a" D) {- C/ K
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    : H. ~4 F/ ?2 [* T( K/ p: F  m5 q* j
  3. }# V3 Y( C) r0 }) c/ S+ j
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример# H; o# g6 c& {  S- r( C
! @2 q4 L' h8 a9 B! j, d+ I
  1. public void heal(int amount) {  // public void вылечить(int количество). W0 ]) S3 B' c1 M3 U# S
  2.     this.health += amount;  // Увеличиваем здоровье
    0 W( b  ?/ B1 W- \3 Q
  3.     1 Y0 @# W& ]9 R3 K# I
  4.     if (this.health > this.maxHealth) {
    $ E- s/ E1 `& S, b; N
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    ( s% r  r/ d# r0 ^+ e7 j' C4 ~
  6.     }0 h) S) W) y( g3 Z' u! {
  7. }+ J1 L( N1 T* X9 N5 H4 X0 _1 @" ?
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    # V+ h5 o7 d9 f6 `" F1 t2 {
( U" V. T6 A# T& i; o
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    3 R$ W4 U! g9 s+ u$ n" G4 Z
  2.     // Логика применения скилла NPC2 d$ l7 }0 `3 ~. _! w
  3. }
    & d7 I) c& v; n0 j6 i: b
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    : g4 C1 F" H9 k

# i' A/ Z% p0 f* I! \

  1. : B: ~3 G! _& @+ _+ \* g
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    - I8 L7 @$ k& h- }6 |. ^. X; r
  3.     // Логика взаимодействия с NPC4 I$ u) s: \& j. M2 y, E
  4. }
    1 N% k# i  z+ {# X# L
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:! ^9 W) G; V9 T5 A6 Y% F- Q
& B- r& {1 y5 K$ B  l( c: c
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    7 ]7 e' p' a( x- s/ }. f$ P
  2.     // Логика открытия окна диалога
    6 g# M8 p  |0 L2 x
  3. }
    ' m; d9 Z% K+ K7 D" i5 I2 H
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
: k/ `# ~: }& d1 j6 L8 d0 S* BЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
+ c: H2 M; g. I) x' L3 L; F( ~0 N* t* E5 }" o
4 n/ V( C/ U4 f$ B: P
9 i- T' q4 n0 w8 b+ [: s
  [/ x  H5 n: Q5 S: u
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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