Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
/ e" `; C* V( ]! r9 `0 j5 y; j% f3 B: W0 b: n# F+ J; ~( Y7 F

' X& T6 S7 e3 RШаг 1: Введение в классы и методы на примере L2j_Mobius
% Q6 K0 V; n3 j- E7 W1 fС статьёй можно ознакомится в разделе Обучение > Читать8 [! X0 ?8 a+ A9 ~8 u

, G7 r' A, v+ x& s4 W+ v( [, qДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
1 o; u/ ]% K. X; B5 v6 K7 m, X- h- A) h- M- g6 \0 \, j& n
Обсуждаем:
4 Z( [# Q+ f+ c# h- }7 W  |! }4 Z! [
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    8 ?. a1 i9 g" I8 e$ R' u
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
7 W  ]7 N7 e/ Y; _# X
5 v; s7 B( k) O) Q! z- C5 G

' j8 E1 T  m$ b' LИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
+ d" w5 `+ m, R2 J4 o) ^$ \" O: W8 v) |$ d. \
. d' u" W6 t$ a. X

: \- V( S8 A0 |5 B" j7 ~; r9 w0 C8 `. D3 G
2 g; m9 }) f$ h  R- b1 A

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?! R8 \# z: {& T4 _& `7 j; h7 u7 o
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
- B7 o! r5 ?+ i8 K4 oПочему мы используем ключевое слово this для ссылки на п ...

% v' m4 [& B$ C. w( B  o+ y) PКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
0 T5 I; n' M5 K9 VПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
2 `" f% u+ f; \  t8 O; r. D) z- t, R; @( v0 R: B+ Y$ V: J# c
Вот пример:
( U# ]/ P. I6 V2 M8 i
  1. public class Player {  V9 l, e: j5 Q% M; N6 U. @* j
  2.     private String name;
    . W' r; q3 ?) w- O$ u
  3. / e2 @! I5 B; K' |3 }4 p
  4.     // Конструктор( T9 d8 u! U, Q( U
  5.     public Player(String name) {
    $ S+ q4 p: h  h
  6.         this.name = name; // Используем this для указания на поле класса
    $ d" @6 ]! q2 A2 Q, t+ e7 e1 a
  7.     }  v- V- Y2 k3 `+ q1 n0 ?

  8. . e6 y6 o- P- u* U/ E
  9.     // Геттер для имени
    4 E- `5 ]( C, z9 E
  10.     public String getName() {
    / P3 k2 T  w, g2 W$ \
  11.         return this.name; // Используем this для обращения к полю класса: j2 H2 N: l9 j; w! D+ `
  12.     }
    / i2 Y& i0 g6 s) A
  13. }
    9 s5 ^* {5 f  J: F- X
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.& [5 @' O4 n$ x. o" ^4 b
; O5 I! B/ Z0 s0 [
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.: p6 G* l8 W# j' A8 J: x

6 e, N& q% p7 eПример передачи this:! z8 T* ~: L. ]0 x
  1. public class Game {7 l1 Z% K9 y/ ?7 e( E
  2.     public void start(Player player) {& c0 @( [% n6 j" M& v4 A
  3.         System.out.println("Игра началась с игроком: " + player.getName());/ Y5 a  G! R2 p9 B6 p  S& Y9 I( y6 B
  4.     }
    5 f) T2 \8 ?) y' C4 c
  5. }- }) s' i+ n: W9 i- ^5 v. Y. h

  6. ; M  M, ^* j0 V" F- @
  7. public class Player {
    - \0 y: o' k. \8 M) Y3 [
  8.     private String name;/ e  y2 Y* B, O5 ?  @0 ~
  9. 7 x- F' ?$ H' G/ q5 k2 e
  10.     public Player(String name) {
    3 U# d! ^  n3 v' o, }( F( O. g
  11.         this.name = name;5 k8 N+ V  `8 I( y" e
  12.     }! O6 E1 \' S& `
  13. ; e/ S+ C6 g3 d8 T2 @. v0 D0 r- x, h
  14.     public void joinGame(Game game) {4 @+ ?: \- t6 ~2 N& ^! V" \2 f
  15.         game.start(this); // Передаем текущий объект Player. Q: O/ a/ k& \- I8 `* X
  16.     }5 }0 \! H) x" V0 I/ t8 b
  17. }
    2 X$ t1 R( \  b  N: @
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
9 j0 q( e( K9 d

  g# Q; V4 Z3 c' ?: I) A% EПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
: R0 f; \) l' n# j5 L6 f" w3 W$ w
. b# |( i" g7 |
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! 6 U9 `- |- D3 b% L  b
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24   R! t* s1 _' t* f1 [
Mike123 опубликовал в 2024-10-17 20:05
- A. m+ S- y' iДобрый день! 4 a: I2 z& P: u& G4 N
Как создаются и вызываются методы в Java? Мо ...
. W5 |2 T9 Y* [7 u, ~& H
Привет, Mike 123! ?
" W( M$ E; h+ AОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать." ?7 w5 Z7 v* ?3 W5 {0 o/ m2 }

  Z: b( O4 i; s6 u5 ~Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
+ \0 B- F% k* M1 i
3 L3 d4 v+ a" R; Y7 H  k  L% T2 f9 m" Q
Как создаются методы в Java?' `+ e/ G, y- h  m6 G0 I: m; u* a
% L% M. ?$ S- Z; h+ R3 K
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
. u( t! y$ V  \' ?0 {- X+ T8 g' E/ t& p2 J' E
  1. public returnType methodName(parameters) {! O. F1 ^7 m7 v" ^5 l
  2.     // код метода9 S  v) Q) k9 p  m
  3.     return value;& u4 G9 L( [  W( G
  4. }
    7 h$ W- m! l) O3 H' t
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    ; o, x: N) `6 d. X8 ?0 R
' v" I) j/ M0 ]9 E! X
Теперь перейдём к примеру.
9 F" M2 ^6 z1 @3 B, A) l5 S* M) ]( i# n4 w" o( ?+ a
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
" D! m5 Q* l" a* t, ^" r- m
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    : F  G6 ~  J+ w4 O
  2.     // Вызов метода атаки NPC1 I$ [: ?& }5 D0 B7 X
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());6 F- I& g* V( a$ c7 B3 \
  4. }
    3 F  b5 ?- |3 Q2 |0 W5 y
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).* t: c$ |6 O8 [3 L

. n2 @) G. ]/ T  e: `$ p* L7 U
! A" J; k( X4 M$ y' NКласс Npc.java — вызов метода7 n. P7 h5 @1 z

: R9 }$ V( b9 l+ c
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    3 a* _* M( A- f) v4 `5 ~6 C
  2.     // Логика получения урона NPC5 c% w' ?: D5 R4 D; ~& c. `
  3.     this.health -= damage;  // это.здоровье -= урон;
    8 V4 s- E9 ^: R- f
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    3 r6 Y  e1 [9 u2 Y: P/ P3 e* o
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());5 L, [2 w& C2 c# Y3 ^' ^/ D; m
  6.     5 H; j( w8 m) C1 p: d
  7.     // Проверка на смерть NPC3 [! p# W! Z: y
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0). _) e, x: {8 g' R5 o+ J
  9.         this.die();  // это.умереть();" p) h# o- W! k  r
  10.     }
    # S/ u8 x- {7 X, w! O
  11. }
    2 H( z3 r; S- q: O* U; l& M) n
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).0 {7 r' ?8 u0 Q- p1 G1 ~4 ?
Пример взаимодействия (с переводом)0 s8 z1 X7 Z8 s$ m
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    4 U2 x( W; K$ ^
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");# Q7 u7 l4 ?& L! f+ H! c! B4 h" m
  3. 4 `+ F6 E! w* z# T
  4. // Игрок атакует гоблина5 S: I* N+ G1 _* p6 a1 H
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    + x$ B: o: }4 ]$ s
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 6 ?3 P2 V/ w& v5 k
* P" U" D; E, n4 g
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
, P/ `% P% v# v6 w- [: i0 j  Y2 yУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!5 y" j% s& @2 b) w2 z- G

# A! [) h( X5 N
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30: K* ~* D6 b% w
Привет, Астралия! Огромное спасибо за твои разъяснения ...
4 H" T6 W3 s* [( m+ C8 Q4 ?! ^
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
) _, m( Z7 Y% s) T+ C1 z+ h+ l1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    5 Y# M  R! {! R  b1 s! {
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:/ E0 W* F& z; g2 N0 c
$ U+ K5 u" S, |- W9 g
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)! F2 x9 Y  C7 ]" c
  2.     // Логика взаимодействия игрока с NPC
    % Q+ j4 f9 ?6 c8 O0 `5 ]
  3. }
    . F; a" D  s: `! ^  {; \) c. A1 v
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    & `* Q+ \* E# s* J1 L: p
6 Q* g2 U! j3 v4 G) E
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    - h1 u. w& _: b% L) N
  2.     // Логика перемещения NPC
    8 f* Z6 d$ b+ n: X6 @+ f: [
  3. }7 `/ L& O& ?, R& l1 u
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:, h% K2 Y2 o( M  l
* \+ _4 P& u) g1 X# S) w" k) R
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример( {8 o: y1 D: ^' v* v9 T  E% N1 f
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий), T% `( w" t: h) h5 X6 |
  2.     this.health -= damage;  // NPC теряет здоровье
    " s0 S9 s0 E' p2 d' t! N
  3.    
    9 j# \  X" V2 o" s2 Y
  4.     if (this.health <= 0) {
    ( o6 x; D3 X& V4 i
  5.         die();  // Если здоровье упало до 0, NPC умирает  m% c( y1 Y6 \2 N& U
  6.     }( }4 ~' {7 O6 Z) d+ K2 |0 J
  7. }3 H+ H* x# g' P7 ~. x) T# y
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример0 E- t- F; H" w$ \5 D

' t/ {0 ~" `; I) E
  1. public void die() {  // public void умереть()
    6 R: Y9 h) E1 o/ k: z- ~
  2.     // Логика смерти NPC
    7 i; N* Z0 ^7 ?) ?" M, w6 p
  3. }
    0 f: Y8 U- u- c5 \! x2 [
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    ; k! M+ x$ s1 M6 o2 B; i
8 N/ Q9 x0 ^" s! T5 `% X* U* X

* L3 h) j8 I2 j* l! N: B* J2 M" n
  1. public boolean isDead() {  // public boolean мертв()  f! d) A; Y9 ^3 C5 N0 D
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0& T9 n+ s9 b0 u" w. {
  3. }# r2 v1 E5 S( l
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример: ~  D2 w7 h4 J8 z+ U  }$ A" n

: |; ]& v  t& a; f
  1. public void heal(int amount) {  // public void вылечить(int количество)$ O5 e% C! R' E( {+ X! o
  2.     this.health += amount;  // Увеличиваем здоровье
    : ~8 {& H% t; d; ]7 ~% `( x
  3.     + X2 V2 k- w3 X+ b) v
  4.     if (this.health > this.maxHealth) {  s9 W  g/ H. P7 W2 ^
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    # U2 x; q2 X: c% G* L
  6.     }
    7 ]  F% _; N7 `- _
  7. }
    7 X; C$ c7 q( b! C/ Y
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
      t0 U9 e5 [0 J. V/ I$ K2 s$ e

" E4 c7 n: V& F* \
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    " G4 v* v0 R' \; H) h; \1 d
  2.     // Логика применения скилла NPC  f& }) V$ }1 U/ w9 \
  3. }
    # p" R, X5 W6 q& J3 R0 g
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:0 h6 w$ g2 S5 t2 d' i& Q" z2 t3 L) ~

  D9 [' e! E# K

  1. - {( V9 M4 _* U7 P, h% i9 q2 [
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    ! N( V# z% R6 X8 a. r3 l/ w
  3.     // Логика взаимодействия с NPC
    & y- k2 R8 p' C
  4. }; S* k+ c8 V& j: e
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    * {# u4 w6 k8 l) Z& I+ K

; ]  [* R. P+ S$ v9 \% Q. v9 G
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)$ P' N  c3 I  g9 k
  2.     // Логика открытия окна диалога
    & K, ?; Y& I. ?! H4 |" C$ o- }6 `
  3. }
    , g, L, t: c) q5 q+ g# Y5 D2 O
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.% J2 A, W& E8 c" a* v" Y0 l3 m
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
+ N0 h! ^" S: u7 E5 b* [" E" g4 D, X

0 l5 M  G5 y' F- [5 H
! g6 F, R9 t7 W, R) X; J2 s5 a$ I8 O) q1 L6 c4 U* s
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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