Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
3 G! M$ x" n: ^5 [+ m# Z! |+ F. q  l8 [) N& m: d% }! d4 f

4 o3 w3 h, Z' e4 T. fШаг 1: Введение в классы и методы на примере L2j_Mobius* k* q4 ~3 H4 q) ~: X" Y6 x
С статьёй можно ознакомится в разделе Обучение > Читать! D& c* j/ E& V4 D" d

7 t! W3 B& W. {Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
; c1 O# b8 F. y% N8 k" t! r' g; c1 ~2 {' e9 J$ P
Обсуждаем:- u* j$ c  E( D5 ]! F6 Y$ \
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.6 r' y/ L" Y7 Z9 |+ R
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!5 n8 S" ^' p2 E
* w4 I+ [' V9 i" X


7 Z  v2 R! X6 H) C) R7 iИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
- {5 c" k0 _# d' e# a" x! Y4 Y7 A- f
+ I5 k2 Y. B! {+ t. l
1 }, V( y$ X+ Q

+ n8 ?) n4 r5 H1 F6 t" K$ C( Y; J# l1 f) P$ e4 d* g2 e  ^& V& B5 C

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?( F% T- i4 K9 |. W4 \% w
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:174 A% j) A% k" J/ p7 v( d
Почему мы используем ключевое слово this для ссылки на п ...

) Q, _$ _& `0 k1 uКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.+ a- ~& Z  E2 n8 z6 c0 P9 `4 d, G
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
4 W* K  o2 K( v* A8 [# c! c2 l+ L9 ^$ Z+ j. v3 d+ C
Вот пример:
1 u" j0 }# ~" d
  1. public class Player {
    ) D6 @( I' N8 L/ X1 P( v2 ]; N4 z" J3 N, H
  2.     private String name;
    $ c- I7 r5 a  L7 A- O
  3. 8 N+ d' `- s/ y  ?. ~0 b. b
  4.     // Конструктор2 L$ a5 `6 A4 ^& z0 N" t2 J1 ^4 V1 x. ^
  5.     public Player(String name) {& H9 e$ j/ s1 |6 M$ f0 Z
  6.         this.name = name; // Используем this для указания на поле класса' o- P* t& q7 |2 A0 V% k  f2 K
  7.     }
    $ r& z/ D5 m9 y& V. x2 x
  8. ' Z3 F' D- P* f- @) ~
  9.     // Геттер для имени
    , R8 j+ J# j' Z0 w2 N3 r
  10.     public String getName() {% \) z& a' ]" q* s. h; h
  11.         return this.name; // Используем this для обращения к полю класса
    7 |: B# u0 `" A! `0 W( `; C4 v7 |
  12.     }" t. r$ A$ Y6 s. B4 j+ f
  13. }, U0 s6 _4 p2 t, b3 Q
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
# O4 a# T. s5 h1 A% V& J: D6 ]9 k: n$ V) s$ Q( g- g) H1 a7 v
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.8 h$ L: j% @8 P

$ N' g+ z4 J. g. N1 y: I2 GПример передачи this:) R. Z) ^% ^  y  S) D& ?" G- p
  1. public class Game {" f" @4 q" t1 i! Q' m, F' b! M
  2.     public void start(Player player) {+ \. b% F( M" J
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    . |* q2 q. F+ w6 t8 b$ i5 `# Y9 M: G
  4.     }
    9 T1 L; E: `7 T/ p* S0 K0 ]
  5. }
    % E- j% Z! n+ S! c3 ~
  6. 9 S. m! V( X; H2 C7 |% F, U- h# W
  7. public class Player {
    ) p3 l/ Z8 [: Y
  8.     private String name;  x/ v; s1 t8 A# @) s5 e3 I
  9. 9 _& Y- t( L- [/ |9 D
  10.     public Player(String name) {7 ]& h4 p# m6 D7 w0 s, m. @6 Q6 q
  11.         this.name = name;3 v8 `; V5 J, T$ b, g% U7 s
  12.     }/ C9 q& u( q5 H$ N; G" ~

  13. ( k: l6 ^: N0 \& z' |
  14.     public void joinGame(Game game) {
    9 f0 M) s8 L* S* p  |# `* ^
  15.         game.start(this); // Передаем текущий объект Player: p" K2 F% T6 t+ f) g0 j" _
  16.     }
    3 f* v* u9 L* C/ `$ h3 s
  17. }* }8 h% s. D7 z* l0 G! C
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
& y  s8 v7 Y9 F" |( e  p

# N3 F- }- n+ {, v9 i* J. z2 dПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
$ `  f1 q" W: q2 ]3 \6 o" `% v
" o, j/ e( w8 R
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! ' O6 e% B4 g* ]7 L7 J
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 - `- l# m- w5 Z1 P) o; n
Mike123 опубликовал в 2024-10-17 20:05' }- i& M0 x* _- p
Добрый день! 3 A: k! X. H. W( w$ |! Q& S" o
Как создаются и вызываются методы в Java? Мо ...
  {1 F4 B/ }  s
Привет, Mike 123! ?' n  D' O( X6 l
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.6 T$ ^' l: K' l3 Z, U$ h

8 [3 F) I; j) q4 |! @' SДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
6 m- D( P+ y( U) N) e: j; V# h- L6 [0 y" r7 l+ I4 D$ u* A" h" a

4 x2 }/ H9 V5 w$ h" TКак создаются методы в Java?4 _4 j/ ?  T3 v, @) S, ]

2 {+ e9 J& S0 d4 s9 b/ D) E9 ~Методы в Java создаются внутри классов. Вот базовый шаблон метода:
' i! I( P+ j5 W2 y( s
5 [! W. K9 i! C4 F3 @
  1. public returnType methodName(parameters) {
    7 x& Z) e0 o2 D
  2.     // код метода8 j5 K0 F6 }% `" _" `
  3.     return value;( W* F( H# g# W: q2 S  N! F
  4. }
    : R  \$ B% d# ]- n3 @
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    2 T+ m$ [! `( _3 P& q
) j% J+ b: Z- q; T- V& R
Теперь перейдём к примеру./ E) X# J1 q+ p
% R# p/ s! `0 E% T
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода3 L- P1 t8 {$ ^( l
  1. public void attack(Npc target) {  // public void атака(Npc цель)! t2 t) Q# S5 X* v. ]- m8 k
  2.     // Вызов метода атаки NPC
    : ^3 t9 w7 M0 q9 Y- B% k% _  U
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());3 m; K5 O5 E0 R% i- |
  4. }
    . f/ n& \& y7 \2 a
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
- j4 V* r4 i' P% Y/ z  [6 f0 E  R- F( s; E3 d
5 B2 l  k" P1 o) T0 P6 e
Класс Npc.java — вызов метода9 o; D0 {# ]% Z# Q: P

+ \& P7 m# N9 S- Z8 n) ?( v+ ^2 V
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    5 j2 j+ @% Z" z. V
  2.     // Логика получения урона NPC; J8 H1 X) o; \) Y
  3.     this.health -= damage;  // это.здоровье -= урон;
    " f9 c) u/ v' |* u1 ^
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    / z( U$ P" k: T; s- n* @
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    3 m6 c; U" K8 C1 w* M
  6.     & [& A0 P2 I! B0 s7 `7 R
  7.     // Проверка на смерть NPC& r- f3 s/ D# P2 {& G
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    / i) _0 ]3 Z  h$ T' }7 ?
  9.         this.die();  // это.умереть();+ [2 J. u# x/ Z% y. g: T
  10.     }+ T1 w( ^6 d, M& W6 Q* D0 r0 q+ d
  11. }
    , i2 C" O+ t6 h! |. k
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).: q2 A) b: }' r
Пример взаимодействия (с переводом)
  P; N  @; K7 v0 [: m, n, B
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    5 I: \+ R* M& ^8 m2 }6 z
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    9 [  i+ x! H! z

  3. 6 S4 |6 U/ a/ ~
  4. // Игрок атакует гоблина
    / ?+ m1 m; e5 E
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    - O* ]5 [9 a6 j1 d" T- {4 N
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. " u; |7 G' q# i; i# Y
4 ^' D8 Z* s% K, Q/ S, T3 \2 K
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
) \$ C- e, u& a( c) ?4 jУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
' H' I; u6 P) r* f0 ^
) B  L3 f, S& f! M
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
3 l& c/ u6 l) O$ h: G& i& lПривет, Астралия! Огромное спасибо за твои разъяснения ...

; Z, C( W" D& bОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
: P$ q0 q/ Y! @, ~" h$ g! r3 ~1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    & v9 X. u. B# K8 T3 t& p7 M
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    / }  E7 O) m, g
' k4 \  |9 S+ n! A" H1 ~+ _8 c3 T
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)& Z2 m; H6 j# u# W
  2.     // Логика взаимодействия игрока с NPC
      M/ w5 h! b! t5 X/ F
  3. }
    9 U8 ?1 p1 k( v) o# K
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    & |2 U5 d3 A; R: N9 p1 r
* J: h/ e+ T! L, h) U1 [- Q3 v
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)* e* _5 m1 b) `
  2.     // Логика перемещения NPC
    4 g' b$ }7 ?7 l. L* ]
  3. }
    " _! Z* Z6 G- Z' w" n4 h/ a* V( g
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:6 E1 \* N1 f! f9 j; e' H" B0 }
+ r& x$ D& G& X1 C
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    / F9 {9 R  I6 H4 h1 [
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)% M/ ]; \* @: n6 X9 D5 i+ I
  2.     this.health -= damage;  // NPC теряет здоровье% \( K% F' S* ^/ H9 @
  3.    
    6 ^" k/ B4 Q+ {* f1 f, [
  4.     if (this.health <= 0) {7 d, J) y; \6 G) \% T" ]
  5.         die();  // Если здоровье упало до 0, NPC умирает
    % ?) M0 P9 z0 `8 i" B
  6.     }' C& c4 o9 U( ^- T) f
  7. }
    - |8 D' _, I6 U, H$ H2 D2 F$ |
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    * U7 m  O7 s3 q- j* |# T

2 `9 Q, @( }% k9 `( Z
  1. public void die() {  // public void умереть(); Z0 S7 i* w9 y# T+ l  e
  2.     // Логика смерти NPC$ G* I$ L' o$ B; }( a
  3. }
    % M+ ~" k8 f& l! V8 S
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:" u: f* i7 J+ T  c' D

! t, G5 X: m- Q) w: U" O: B- e* o' j# P: w$ q
  1. public boolean isDead() {  // public boolean мертв()
    9 {" ?9 p$ A% E! G9 D5 x
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    * p% D% @  t; Y* z9 J7 j2 w, S
  3. }
    6 |- m+ k. S& {/ S. y7 q
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    ! J" _* N; Y3 m5 X
8 a3 p; x, r' ^( S) b) J& }/ q) I
  1. public void heal(int amount) {  // public void вылечить(int количество)0 `+ b9 p3 A# e) d4 U
  2.     this.health += amount;  // Увеличиваем здоровье/ k- Z# a& k: B& L0 X: `1 V! K
  3.     3 v9 o+ C$ f, C, g0 ~7 l
  4.     if (this.health > this.maxHealth) {
      ?! [$ [& x! D# r$ d8 p+ p
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального7 e# d2 e! b  R1 r9 g8 j$ L
  6.     }
    * c5 o1 c( {1 Y3 m$ A
  7. }
    4 y3 N% W- ]/ O" s0 ]
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    $ c+ M7 D! |' @- S9 v$ r* e1 c
7 L; E7 S& p' j& @; U3 K* G3 ]& z
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)3 G# v) j! _5 y6 O
  2.     // Логика применения скилла NPC7 ]$ H* |+ l% s. J, Z
  3. }
    . t+ I* H! ~( L/ x6 H! q
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    0 z! L+ c& W+ u3 U1 ^9 I+ v
3 I2 `* K5 c  B) }' L2 ]

  1. * _6 j# z. T4 [3 {! D
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    ; G6 H# ~- v% D$ W+ y# x
  3.     // Логика взаимодействия с NPC
    % H: z1 m8 |4 _4 A
  4. }
    * f) ~- f: ]* u6 ~
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
      y0 W) R* O2 |+ C+ @2 {% d* `

) K; M% ~+ e& w; P. M9 ~
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    6 Z' g' _- K) i( j* j
  2.     // Логика открытия окна диалога3 M8 U2 S9 ^; V- |; t2 K$ R
  3. }
    . q$ f, S$ W* C2 [; j9 v
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
6 ~% H* J2 J2 f; h% k: wЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!8 a" Q9 r; l8 ^0 i4 ^

  O* A$ W% K4 I
1 X( m+ c# H; T2 P! @
) }1 H4 H0 |# _+ R; G" b: d: T. V) H4 `  ?7 b2 @
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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