Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
$ Z: j! b. o/ J- U1 T2 N/ r" c: t/ p/ ~. D& G$ r

3 R, b& P2 n" NШаг 1: Введение в классы и методы на примере L2j_Mobius
6 V- F2 P6 ?7 G+ c3 [  hС статьёй можно ознакомится в разделе Обучение > Читать
  a8 _1 }; i: I2 V0 j7 L
9 o! Q9 U2 i/ eДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
- |, n9 a9 Y7 N; }4 d. C$ g. }8 |6 a/ _/ i1 p- e
Обсуждаем:
8 y: x' Z* H2 A7 Y- X8 r/ N
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    7 X. Y; {/ V9 w% S
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
+ i, |: n& M" C/ b! T4 X5 J1 t9 O
* I- b- k9 i2 |* H5 Z, _
# _4 k" _2 L2 n! @% x/ m" g
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!# F( r& O1 c1 i+ G4 m" d1 [
8 |" g+ k6 ]: u& g% p0 t$ m
8 F% B1 C( c9 I& S; j! ^

, p# u5 [0 h7 O7 k- D! V2 e; j9 p8 q+ d. [
' }* ]$ K! F0 M- W8 o9 H

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
5 M  p( }. [# C
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
* c6 z2 M8 r+ z3 N1 sПочему мы используем ключевое слово this для ссылки на п ...
  _. ]" {2 T% k( v$ r4 z
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.* n- p8 b6 \3 R1 b
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.7 [1 p  X$ \; l! A; ]3 M

, Y& Q  J, r2 T& F6 x/ qВот пример:* \5 j/ |" y7 b) v6 ?
  1. public class Player {6 b6 a& |0 b1 s0 n8 m
  2.     private String name;* M$ @9 N$ y$ Z! A

  3. . F8 F- g* n, L
  4.     // Конструктор
    ' y% r/ I% V* J+ o- a8 E7 ]5 B
  5.     public Player(String name) {
    1 A+ S4 a* U- B% `# c2 }1 g
  6.         this.name = name; // Используем this для указания на поле класса$ e: h" u8 C( w# ^5 b# u
  7.     }
    & p; h$ H4 Y0 m) K$ n
  8. , v& ?: n+ [: o3 t0 b& H
  9.     // Геттер для имени
    # b* T" }5 ^) N/ w- _" _+ J! A
  10.     public String getName() {
    + m( \8 b$ i  i
  11.         return this.name; // Используем this для обращения к полю класса
    8 {) ~" j& `* I' A- t- ^" Q
  12.     }8 K% o1 D% E2 l( ]
  13. }
    5 w4 y1 }" y; R* |  z) i1 u
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
. \5 L2 ]2 |9 X5 D9 j6 a7 ^# y2 D, z! [- T  w. E
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    ! Q( i" n! a3 j2 u1 D
; @# z. D5 A3 c' i' t% @
Пример передачи this:
, E) P9 {% G2 V& |
  1. public class Game {1 y! ~( a6 u* L# F  y: B7 A
  2.     public void start(Player player) {. H* \5 a, H6 `: j: Y* U7 y. S* A
  3.         System.out.println("Игра началась с игроком: " + player.getName());" g! P$ D7 F+ |) J  u
  4.     }
    2 F. x4 q1 B( O( K6 Q
  5. }
    + ]4 S, D, I. \- b' u; [

  6. 2 ^3 i! z; |4 U& L8 I+ s
  7. public class Player {
    : H2 z7 t; G/ V; W1 o4 |2 v! S
  8.     private String name;# @' y* c& s# [0 |! R
  9. 4 X0 K8 t$ V* T. T' w9 G
  10.     public Player(String name) {
    5 y3 T4 t  x# `$ z& e( j
  11.         this.name = name;
    % i$ u( k& D) d/ a% M" `* O
  12.     }. V2 [- p, w& \' x! U

  13. & J' t/ b: H0 V) u) B4 {) }( R
  14.     public void joinGame(Game game) {
    * r) S5 j4 n1 w: ~
  15.         game.start(this); // Передаем текущий объект Player8 N" y5 B# B& Y) s8 S
  16.     }
    - O2 A; t) z- u" F
  17. }
    5 G5 i: W8 Y( u/ N8 a: v
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
: v* |- D5 j" V" b4 U3 ]
4 v& v( d* ?: H
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?$ s  c2 j' t6 N

) M3 M3 W6 Y  O3 S: {( y5 ?
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
  s. Z& w" a% g! rКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 6 ~/ x/ G! e2 f
Mike123 опубликовал в 2024-10-17 20:05
9 i* Y2 h  U# eДобрый день! * A( w, ^0 ]. h8 I: _
Как создаются и вызываются методы в Java? Мо ...
7 m' N/ Y( M* ?; ~4 z
Привет, Mike 123! ?
& V1 |$ B4 ~9 k/ f0 E" v& Y. ^* u- eОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.7 k% ^! X. P  p% y/ d
5 d0 J2 Y: s+ ]# \
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
' w1 _0 @8 {8 r
. \' o% C7 r. y" m/ H# c2 ]5 x0 }$ U4 v
Как создаются методы в Java?
, U" x& i: g% V) z5 L  y; U- x6 k1 a6 Z' r4 E, u# w
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
7 l2 s5 W! A5 U; |, c) }
" L  d9 ], \5 G/ V% x
  1. public returnType methodName(parameters) {  C$ A. B0 N6 p  c
  2.     // код метода
    , O$ i, p( y( E9 |8 `5 o; ~; Y" Z% ~
  3.     return value;# }% K; e. \; J* L
  4. }: n, n3 f! ~4 K( S: d0 F: k; o
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    " X, h# l* e2 Y2 [6 @$ x- F

0 X+ [1 m, ?0 E2 U) TТеперь перейдём к примеру.: Z  s2 x4 t& v/ r: F8 W! }8 v
" K& m" ]; }" D/ k  ?. C* h
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода2 d( M% g4 t2 p' S8 W: @" b
  1. public void attack(Npc target) {  // public void атака(Npc цель)9 C8 Y1 ]0 Z5 Z% h9 W, u6 c0 l
  2.     // Вызов метода атаки NPC# [  \4 C; u* ]% s
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());6 q* F" z) k) n! ~; F
  4. }
    - t8 p9 B1 y( _4 B
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).) P; v# q! G# N2 L* I, B& I

" |/ I8 ^! \- Q( V+ l# L$ V6 N0 r# ]  i- l
Класс Npc.java — вызов метода6 I9 q2 t" O. A- x. _8 V5 t

3 @2 J& R" y' h4 c
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    % {6 ?/ z) p4 J8 E
  2.     // Логика получения урона NPC! l: r7 I( {- R9 G9 i# B, z
  3.     this.health -= damage;  // это.здоровье -= урон;5 @% ?; g3 x3 Y  E) P
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    ! J2 l" p7 T5 T/ [  [
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    6 G5 v+ J; _, r7 p
  6.     & z7 G( t6 M. I% p. C5 X- T
  7.     // Проверка на смерть NPC1 _( q: A% N$ C: j
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)! h' ^2 Z. M, Z4 w- o
  9.         this.die();  // это.умереть();
    : ^6 y) ]9 w6 J4 W# U5 s
  10.     }9 t6 \1 K$ b5 s4 }, ~4 l( {
  11. }! z8 ]2 w6 g- ~0 t, l0 ?
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).. g! A! h. J- y4 F
Пример взаимодействия (с переводом)
5 e) v1 z: `3 J; S, L: Z3 z/ O2 w
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");$ E& A5 j% V& `/ B2 X8 _) M1 `$ k
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");8 v  e; c' o. @+ J
  3. - F4 Y$ [% _: N' z7 i; s( Y7 C
  4. // Игрок атакует гоблина
    0 L* H9 b" R# Z* g* t
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    7 r1 P1 _  q: J
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
+ Z! U- z# Y5 @7 l/ D4 S0 I& ^. ~( Q7 Y, C; B+ C
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
- ~- b" u! k  ?! jУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
( E1 ~% ?& {2 R& U- ~9 I; U  j+ d  a4 ?* Q$ k3 \! [$ s. d! Y* E
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:307 y* v2 p8 N0 J
Привет, Астралия! Огромное спасибо за твои разъяснения ...
# C* u+ a* }% ~( u4 C* {
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.( H9 _! h/ s6 l( b+ X, t1 G
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример& u5 j3 ?* f" X6 m3 S7 H. f
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:& P% ?: O/ x/ D+ J1 y! B' n! ^0 @
' p! W. |/ |5 e) z5 |% L5 P" b9 U
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    ( L( K) a+ w8 ?* M
  2.     // Логика взаимодействия игрока с NPC- s* ~. T% y8 Q9 t& x+ z
  3. }# u: {6 C8 a$ g  n+ u3 O
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:# N2 u5 d+ L) n& w, A  r
' j1 R2 o7 c; y& D: g$ M2 @
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    ; K1 y" |6 `5 B! M" Z
  2.     // Логика перемещения NPC
    * l: p, y$ W: K) N1 Z6 `
  3. }. X# d6 A& m6 _" p9 H* K( i% k
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:" A$ }0 r+ p8 T) p
) e% s; c* i+ l2 T+ r
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример1 D3 R; g: v1 p& _% L( p& u: n
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий), ]7 [' G  e- k* x7 e' e
  2.     this.health -= damage;  // NPC теряет здоровье
    7 }0 [" x! l1 Z0 t
  3.     . p5 L5 g& {3 ]- v
  4.     if (this.health <= 0) {. j6 v- t; q# T3 c# W
  5.         die();  // Если здоровье упало до 0, NPC умирает6 h1 ]3 C+ u. W' B
  6.     }
    # ]( `. i* D- u, M* ~
  7. }% Y- v* Q- ]5 Q5 B& O: V
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример. H: |% }- ^2 x! S' D
- X0 [  x0 z$ n: d. n, p$ ^
  1. public void die() {  // public void умереть()1 L4 N/ h& N$ v6 ~3 C, r  F9 M
  2.     // Логика смерти NPC' Q1 Y& b. j* ]' ^+ h
  3. }  s1 F8 e6 d7 Z2 K# C* w9 S
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    9 I. o2 T7 r, j% \) j. S8 }

2 Y& n) v1 u' p  {- m. s6 B
9 d9 J0 O5 R+ F( V
  1. public boolean isDead() {  // public boolean мертв()
    + W  h6 R# _, s8 h! Z: B
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0, v. ?* {3 Z! I
  3. }3 t/ x6 m% v( \( F1 z
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример$ ~" ]; k1 N: m

% v7 L) C$ w$ G! K7 k* [
  1. public void heal(int amount) {  // public void вылечить(int количество)
    ! ^% U# V0 H/ ?  {0 T" O
  2.     this.health += amount;  // Увеличиваем здоровье7 W( D8 |/ N% E0 K7 L2 ?
  3.     ; E- U  J' v  s% T- [! G* B7 k9 m  ~
  4.     if (this.health > this.maxHealth) {
    : H1 N5 J: ^5 K7 e) w# M, B
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального7 k9 }  W: `( `" a/ Z) {
  6.     }
    7 u! r1 Q2 m9 D. X4 |: t) A
  7. }& S% t* i! ^% e
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    0 t9 @$ _3 M) p! \

/ C( J( Z2 T4 C, S
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    : V1 j0 I1 t8 b8 `0 A
  2.     // Логика применения скилла NPC
    4 q4 Q5 a8 ^  i: e! |
  3. }- o, w% ?6 S7 p, e! ]% H. |
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:# t$ }1 k8 K2 i! @- U6 `0 U" A8 _
' J- c2 P8 R* P# N' ?4 c

  1. * D2 j3 s& @4 p0 B# R' O
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)& O9 D! p# V( X
  3.     // Логика взаимодействия с NPC* d0 T$ e8 s/ s( _( c
  4. }
    9 x% V* i3 p$ C. A, D  r; {& L
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:" U/ @4 H% e' I6 T

$ g9 y+ C9 I1 Y! z2 w
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    8 v, G2 C/ \# ~+ o9 V% |) ]
  2.     // Логика открытия окна диалога" T6 A7 U/ t: B$ z: A# e4 P( T
  3. }
    * o/ B* F; I. W
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.8 f8 p7 [# U! ^, A
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!) M) q: I% M# R6 }) l% |9 O$ k

6 n" A6 V+ M8 V2 P1 `$ |! _% w; {2 j, j) J9 M
& w6 x7 o( p! j1 z- F

. {0 z& [5 ~: q# m2 n9 x
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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