Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 9 C( ?. ]/ ^3 s$ j/ p7 {! M7 T
* ?: L/ ^6 v6 F6 ^+ Z/ W' h1 i% j
# k7 I+ r, X1 y; k+ S) n3 B
Шаг 1: Введение в классы и методы на примере L2j_Mobius- K. O9 n9 e' z1 p  M0 X7 w
С статьёй можно ознакомится в разделе Обучение > Читать
5 L: t$ s$ {) s* ^. s
$ S) }: `# @! o2 P& W, v$ UДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
1 S1 P( x" W; n" _2 q2 g9 F) ^( {1 @
Обсуждаем:
6 \2 k3 P- a: _! b8 K, E
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    : x1 K5 Y3 @8 P) D! _
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!8 p# Z. T+ J9 h4 {  l# L! M" \

0 ~. H4 x' `% f0 B! `- y

) ]# h" G5 _3 b; lИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
. [1 g5 e! g3 I$ q) I9 R8 Y* i3 m6 X/ B; k5 U
/ K- F* B: P, `  I# ~1 }2 E
: r" u" d9 x, R( x9 y! g
% V; J' ~! d) \! [+ s% h) t/ u, D) T
* q. J( e& c; o# {

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
' P# m. Y1 t7 L4 h. Y& ^
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17( l1 Q: P) O7 X  y  u3 U: \, C
Почему мы используем ключевое слово this для ссылки на п ...
0 }$ H+ u+ `) x1 p4 g7 o: x5 M$ a
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
, @, _" ]' y' j1 }( J9 |6 gПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.* _9 ]7 ]9 B5 n. C

2 e4 H, ]- }& BВот пример:
3 C  ~+ t; W4 q+ U4 s3 x
  1. public class Player {' R: g8 Z" G! J$ {( A
  2.     private String name;
    / A1 j. C7 W$ [7 z

  3. ! ]) c( f$ Z2 ^$ U; S# ~, \3 t6 V/ N
  4.     // Конструктор) a0 \: g2 B# z* C3 f
  5.     public Player(String name) {
    - m: u- Z( P: J  ~3 E; [3 }& }$ T
  6.         this.name = name; // Используем this для указания на поле класса
    % X- {- B: t5 R  K' [' p& e0 G' I9 E
  7.     }6 Q7 H+ b+ ^* G' B
  8. - J5 S: }; [$ f" M7 Z
  9.     // Геттер для имени
    2 S1 ~- c# h0 e! ]
  10.     public String getName() {8 ^9 R; F" P% ]8 Q
  11.         return this.name; // Используем this для обращения к полю класса% t" h; k; o! R, ]- `$ n
  12.     }) U) Y# K5 F/ S$ X! i) k5 H
  13. }
    * M& F, f/ K: F8 i, R
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
/ d' y4 ]. _2 I, l6 T3 F7 r2 o5 R4 h. S0 z
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    & y8 L1 m, c# {; l% G. w* |/ w

' v. o3 D" P" H2 V* r9 r9 ZПример передачи this:) ]3 f* U0 H2 U9 K5 o
  1. public class Game {1 D0 T% d- D9 c8 a, J
  2.     public void start(Player player) {
    4 {; ^) ~/ j3 ]9 T7 Q' ?7 l
  3.         System.out.println("Игра началась с игроком: " + player.getName());0 @# ]4 I2 H. @( c
  4.     }
    ; ^5 t+ q( v" e% k; c
  5. }
    1 R' X, a8 J5 C3 P) G
  6. " @5 s- N' J; G) [' I9 J- C1 @2 |5 r
  7. public class Player {2 I6 J# Z( x. M8 I* _
  8.     private String name;
    5 q6 x( r) S. r& |
  9. 4 i1 s/ A* ?% [, G+ x  n
  10.     public Player(String name) {) u+ d! D' M( u6 N6 L
  11.         this.name = name;1 g: z( |  J2 i7 S3 X1 d7 v0 H; o
  12.     }
    ; @" K) S- y3 k7 b* Y1 G; a( U2 ~* A: T
  13. * H" e  R( n" j% b4 _( L# \# F  p
  14.     public void joinGame(Game game) {
    3 }; @$ F' M5 A( w7 }
  15.         game.start(this); // Передаем текущий объект Player5 ~! z" M! s6 B5 ^/ R
  16.     }
    % Z& G" g9 u* r! c. ?% v, g& K
  17. }% X  W' i; r: f. o! |
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
' d0 a2 v( `9 I' L9 A! W

. T- M  f, Y' z6 L6 RПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
. I2 d. A2 X# A; H) i  R1 K$ C9 A7 `# f* G, b) j, y' F
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
& Q+ l2 ~* R, `) P' zКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
6 Y0 y& L/ f: Z. ^( R
Mike123 опубликовал в 2024-10-17 20:05
7 C1 j- [, ]" ]- S1 s8 AДобрый день! 3 {# F& b8 W1 K! ]* }6 e+ G0 |/ f
Как создаются и вызываются методы в Java? Мо ...
7 `) V1 R, y# f
Привет, Mike 123! ?1 m0 f# l5 J; R( ~& w# y% U
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
9 f2 D6 N: s: j( s
: E& q' {2 D. V4 s3 s% F) }Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
4 A( n" c! ^( _1 T5 @$ R; m) m- c) l: c3 a, T
- _9 }. g; `8 `! A6 k
Как создаются методы в Java?
* Q# s; B2 o. x8 z. i: S4 K. W' l/ W) m/ {% y8 G$ V6 ]- l
Методы в Java создаются внутри классов. Вот базовый шаблон метода:* z( \0 [7 i& P( C" M7 X+ A
/ ^$ i; Z4 C1 E2 y0 ?
  1. public returnType methodName(parameters) {
    7 ]+ H4 |* W* W" Z
  2.     // код метода2 Z' ]/ Q* P) }7 W2 }$ U
  3.     return value;' w2 y1 @7 n# q  _" |" T9 e
  4. }
    ! x3 V" x- M  t5 `' Q0 I
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).  T& d6 d2 o; m1 j* |: h  g
, f6 n! m$ c- C' t1 }6 |! i9 {0 C
Теперь перейдём к примеру.
5 V. _, G  F5 e/ Z  j5 {
6 @1 v- r. Z% gПример на основе L2J_Mobius с переводомКласс Player.java — создание метода4 Y1 S5 w: L4 H3 H( G
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    7 F8 w  P6 O( k) Z
  2.     // Вызов метода атаки NPC
    , J& t9 V" C$ R2 u/ F; {: ]0 ?
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());) @1 E' W' z! r
  4. }
    5 c# S1 E4 j' {2 _/ O
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
/ g# }' I* _2 `% Y. o# E0 \0 t9 P6 r' C  k( V) }  z3 K

  d! v5 w3 Y5 C% n( h  u- RКласс Npc.java — вызов метода
% Q) X/ T2 P  N) j7 R
0 s) M) W2 i0 `2 `
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)) W5 {# e# @, \4 Q3 n3 C( ^
  2.     // Логика получения урона NPC0 A" L  E$ a$ B5 G1 U# ~  Q
  3.     this.health -= damage;  // это.здоровье -= урон;
    $ }3 p# q) X4 r, @& }
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    / B  }- `2 ?" j6 u
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    , `1 L$ ~2 j* |- o* H4 G# s1 K. j
  6.     ) t* L  Y2 y# ~  N8 V
  7.     // Проверка на смерть NPC
    5 I7 ]) j4 U5 x+ l
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)2 {) d" v$ T3 A+ |5 X* V+ N4 l
  9.         this.die();  // это.умереть();
    % b$ E- m+ @! J" l
  10.     }
      j0 F1 B: X8 ?3 l% v
  11. }
    . I0 Z" ?- G3 d2 p
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    3 b% E- U; n" I1 m
Пример взаимодействия (с переводом)
* X4 |1 _  {% N7 ]* f2 L
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    6 s" p- }1 |$ L
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");* n* _' E& L) h% x( l
  3. 2 L. l- c% Y! P& ~/ E, o7 R: v
  4. // Игрок атакует гоблина
    ' y2 R5 b- O3 W" M# `) s8 Y
  5. player.attack(goblin);  // игрок.атаковать(гоблин);  T3 j6 ~$ K4 }% Y
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
1 A9 P6 o2 N2 A+ J2 {( v; X7 j9 F2 I1 N- q! ~$ E& Y' W; B+ M/ w
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.8 A; Y7 _. x3 l' y1 H" Y
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
) e$ l: U  o5 B* K, N# G$ P7 J
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:307 c2 j- z5 q* o2 f' j
Привет, Астралия! Огромное спасибо за твои разъяснения ...
! e7 p7 T8 E' N& t
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
- V1 ]! d, v1 m* G9 j/ h1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    / r9 |' m. f( x
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:5 s3 j* z. I! b/ C% s6 [, f- M! \
2 ]+ ~* f+ w3 {8 s
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)0 X% L. p6 l) a* }2 C
  2.     // Логика взаимодействия игрока с NPC
    ! U: j+ f2 D0 Q. |1 H: d( P; |
  3. }! X! Z: J+ D" ]  G( B2 g/ o+ V8 j
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    , `3 a0 y: _! u6 N

: i; d* m4 ^% `5 J4 _
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)- ]; C7 W- W3 }  x
  2.     // Логика перемещения NPC3 Q/ N7 s  s' G, j" O( D
  3. }
    9 I! A: c% z4 s
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:+ U" [; t& B: P9 D

+ ]! f, l2 c& ^% z8 V. J9 m& k
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    2 J! t% I1 I! D1 J8 R
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)' B( Q7 o) u1 B9 M5 o1 O
  2.     this.health -= damage;  // NPC теряет здоровье, p8 J+ S  O8 t; o/ ~1 q
  3.    
    ) r+ V+ R* [! y* D
  4.     if (this.health <= 0) {
    . Y: h0 L# B9 R% l& Y) j# I
  5.         die();  // Если здоровье упало до 0, NPC умирает
    $ t# n& W8 ^; [* E
  6.     }
    : L4 P) H. _* }& P' c
  7. }0 T- P6 N: P0 \2 k, f" ^
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    ! r: ^9 {! Z" `$ L4 n) U
1 K2 j: Y/ A* v% G; j' Y* o7 W/ v
  1. public void die() {  // public void умереть(), x& u3 r: e( \. L, m1 O
  2.     // Логика смерти NPC$ E! ?# `$ `" O* y  C) l9 ^
  3. }
    ! {, P. `8 t( x; M9 ]
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    # I( v3 g) q3 q$ F$ M! G3 L, W

7 F" U& o1 ]$ m8 {( |& x) w; u% ?# c
  1. public boolean isDead() {  // public boolean мертв()
    1 h7 e8 c3 B" _, g" H
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 05 f% y4 q: f2 O  b0 f9 O
  3. }
    9 y2 m8 m+ S. S( y$ c
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    6 q# [6 C  G2 ^

3 H0 y. \' e; K' z) \
  1. public void heal(int amount) {  // public void вылечить(int количество)- u% d, ?% X2 K( M3 Q
  2.     this.health += amount;  // Увеличиваем здоровье
    : F% W& U# I/ p8 a
  3.     ) I2 C2 D) ~1 m7 w: i
  4.     if (this.health > this.maxHealth) {5 |$ ?( p* W( a. {; v/ b. i
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального1 C$ I9 S, i# v% N
  6.     }8 Y' ^9 J1 h  [) b
  7. }" z3 S9 E% v% k8 o$ E
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:. t' [9 n. Y- A) E
+ i/ }' g8 l* G0 X
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)8 J  H9 i$ N; z
  2.     // Логика применения скилла NPC
    6 s2 G, Q: u- K. {' x/ W6 j
  3. }
    ; A4 l+ E4 |5 {4 |6 K
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:. z2 |# U. O+ {1 [
5 d8 ^0 I6 y% c3 E

  1. 4 z$ V& J, I0 D* r
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)/ t1 d6 t- a5 n' s( ]
  3.     // Логика взаимодействия с NPC% u( M( ?, t: C1 p, z, l1 M
  4. }* S6 D) U: f- _, S2 V' x
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    " |$ R# l) C: ~  a7 P  d

# ?- ^4 n" d; O* D% Z( F+ U' Q1 f- Q
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)2 }2 F- j1 x8 r1 Q
  2.     // Логика открытия окна диалога
    8 ?) l! v4 X; e" W! N
  3. }+ }/ A7 W- t( o
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.& Y. y! F8 m  [+ j% \
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
. q3 t& Z1 o. t" D9 O6 x. x$ I" f
/ Y1 \5 \. \' I% S) g/ a2 }+ h, ^- [% V6 t$ t5 z
5 Y8 c) O4 O3 j& h1 U  Y" R

; F3 g8 K$ A5 B5 `- _0 A. D
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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