Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 7 V6 K; u1 S8 d
. e) T3 q) x, W9 X, _( L" a
! R6 v8 s7 ]! W; A" R+ b
Шаг 1: Введение в классы и методы на примере L2j_Mobius, W3 Q2 P" Z+ L5 C2 S
С статьёй можно ознакомится в разделе Обучение > Читать
) E6 \4 U0 Z% F. {% j9 S9 I8 o" H4 _5 E9 O& C4 n5 O) b
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
- [( T. M0 [0 s6 }" C: N1 T8 w) ^
Обсуждаем:
  T% T" k3 O0 }0 m- L
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.0 [- ^9 d! n: m; L4 t0 E" o
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
3 I: z+ }0 S; N. B3 _- z  H: e( ~% f% O( \4 _


# z# D5 s" {  p1 B, pИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
* S) M  m0 H, o+ b: \- z" y; m1 Q4 U  A/ ?

: J- z+ _- ~# y" x5 I
) Y- K% h: [4 |3 ~- _: S
2 Y5 r% s9 X+ A4 S' ~
# a0 m# }9 Y5 n1 A' r

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
. T# Z9 a4 N# u& {
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:170 m, B4 a5 w1 U4 ~3 I) D0 T( T
Почему мы используем ключевое слово this для ссылки на п ...
3 z8 n( M5 E2 J  _3 \
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
. u4 d: U5 t2 O; Z, J' k& J1 QПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
+ D. @. y, l2 ~# j+ P
4 O" B  Y4 _; v4 x1 ~Вот пример:8 m# V. S$ x  }$ {, B! M3 A
  1. public class Player {4 \7 q' L8 O, b6 o9 J1 L6 R/ d8 x
  2.     private String name;
    7 m* p( Z5 E1 z

  3. : \5 ~. h. ~4 r/ B( a
  4.     // Конструктор6 l' I% [! g* m+ Z! B* b+ O
  5.     public Player(String name) {3 M! d! e4 S7 [% u
  6.         this.name = name; // Используем this для указания на поле класса0 U( O8 ^6 V" d7 w+ I$ H' k1 k
  7.     }
    & C; B( ^* t0 I% X. s2 N6 t
  8. 3 x# h4 d: v5 r
  9.     // Геттер для имени
    5 ~3 X5 W. Z* t" s8 h
  10.     public String getName() {
    9 f  m4 I& n! R: r* l
  11.         return this.name; // Используем this для обращения к полю класса: H' I+ @! G" U0 @: ^1 X( o. c
  12.     }
    * v% D8 h+ e; Y% i: V7 q- P, D: L: u
  13. }) a9 T8 G* M* X8 K/ y, x) K, M+ Q
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
7 u! X# ?& _8 q) L0 A% U1 r* E* x. _3 g: z. Z1 f
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    9 W1 }/ i; U' t4 [- b
8 w) {& M- H  y2 Q
Пример передачи this:+ i% W9 X( O- i! u3 }+ u
  1. public class Game {, b* c7 [! E) V9 s* U4 ~. C$ g
  2.     public void start(Player player) {
    ' ~$ }( J/ w4 f5 `( S5 U
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    2 N9 C1 c/ m! Z; n# g
  4.     }
    ! ]; {7 z: f6 X5 W9 w
  5. }
    ; C/ ^' d! e- X2 x5 F) D! r

  6. 4 z: m6 t1 m6 y! a( v. R9 m
  7. public class Player {( @* I  g' g0 D. b) m( T9 h# P5 S
  8.     private String name;: @2 _* ?/ a+ s! g- U

  9. # E; k, I5 Y' N4 J! B
  10.     public Player(String name) {
    2 C1 u% P2 R; B6 B% O, c
  11.         this.name = name;/ C9 D! P3 ]1 k3 _% ?  _; ?
  12.     }
    ! e2 e$ |2 u6 @% g6 d

  13. $ e' O4 i" }+ x0 S' ?
  14.     public void joinGame(Game game) {" X) }0 X( i& n! p/ y, D1 A
  15.         game.start(this); // Передаем текущий объект Player
    + i! R1 s, @" G# E
  16.     }  L0 w: W3 }) c* [7 @5 y. C5 l) s/ f
  17. }: q3 z- m0 s- n# B
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
. ?, d+ n# K- u9 q3 k

6 {+ B4 `3 Z* j" xПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
1 Y1 J+ S4 J1 C2 o" p( `* J8 x3 d, ]0 v/ P+ J
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
( r+ c8 U8 T2 v! g! OКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 $ V9 S# V5 _- j/ Q) s! X/ h
Mike123 опубликовал в 2024-10-17 20:05
0 L+ d/ O2 I9 L9 |$ UДобрый день!
) F3 v6 y" @. l$ X  I) [. Q2 bКак создаются и вызываются методы в Java? Мо ...
3 E+ h1 Y5 K) b  S# r
Привет, Mike 123! ?; \8 L. v: w- q! ]( y1 d
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.7 B  l3 |  J+ V4 x  M& K

0 {; b7 i& J, C$ l+ ?& X( FДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
4 N8 y6 O# ^: Y! J/ ~, d) |4 Z2 A$ }: C- B" ]# I

# D2 _6 Q3 ~& B& RКак создаются методы в Java?, @" p0 f8 `7 S  w# T9 U

6 I6 R7 M9 P" ~# `* D& oМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
" t  l  W- |, `# c4 g: n4 y, O# U, P1 y
  1. public returnType methodName(parameters) {
    9 p* h* ~6 Y7 U3 K# ^0 D
  2.     // код метода
    7 J; r5 e8 }8 ~- X- W" B6 N
  3.     return value;# u7 N# {/ {0 x4 r
  4. }* q! ?! y0 ]* c7 O
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    7 n# w5 p$ P8 x, h
4 S( X' m" U7 w0 z) p+ L
Теперь перейдём к примеру.4 S3 ?: b' p# }* f9 D5 y; ]& K( P

! M  Q% i  q) o  b0 f! k- IПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
: |4 k1 D6 ]$ j* F; w8 z9 T
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    ! J; S" b0 A1 x: N5 E  I- h
  2.     // Вызов метода атаки NPC
    ; x& l7 V3 D; R) F, k- S! v
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());, D3 {& t( Q- @$ [6 e! i, z
  4. }* @' u8 _* [/ g1 \6 R! y2 i
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
/ Y7 K& w, c9 R  a; A8 J
% F! s: }; H) [) @' a/ u7 q% O
Класс Npc.java — вызов метода% {7 U7 Q8 S' L5 x3 j
5 l$ A8 t' u% S& p* ], B
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    ( ], F$ Y0 ~' n; s! y
  2.     // Логика получения урона NPC6 ^+ G8 U  D( L5 Q2 \
  3.     this.health -= damage;  // это.здоровье -= урон;8 e; n- D8 W0 c/ \( n2 |+ |( [
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  6 A1 I; L; z# V- ^% L0 {5 \
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    ! @! u# ^* n: J$ T7 q
  6.    
    6 V2 Q. `' d9 Q
  7.     // Проверка на смерть NPC$ q7 r! o, V& E5 e
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    - f3 M/ m+ [5 U: F6 Z% }! W
  9.         this.die();  // это.умереть();
    # F4 ]+ a6 B  d4 B1 W7 p- S
  10.     }" G7 h% s$ I( e/ ?" u
  11. }1 w, ~" j2 Q' n: l9 e
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    2 J3 {" N( h7 a
Пример взаимодействия (с переводом)
/ B9 G/ M. D$ n  |" p
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");( l5 `; L  Y4 R/ ~9 @9 k2 d
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");/ q( I0 }& N- E: L. q: o% o7 y

  3. / q( H3 K# j2 t. X
  4. // Игрок атакует гоблина
    / d- _8 {" b4 ]% H  i! L7 E- S+ Y
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
      K8 P% r6 E* w8 m- u1 y
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. ; h: m8 y! _( s% @' b( }

! d& M- |* Y: e3 Z" k8 C
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
# W* R# V" _2 R, Q# [У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!- I7 E0 a" F1 y) U3 D4 w9 R
* J6 ~; _, k0 n5 ^% q( V$ M
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30  o& f$ \7 i# X; [: H6 c
Привет, Астралия! Огромное спасибо за твои разъяснения ...
/ O/ b5 s& ?: T6 C0 ^
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
2 {, Y* Q' q8 \; p1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример" ~' g4 y' o* @% F) q
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:. @; i' T- I! k+ I7 Y

  N; K+ ^3 C  w1 L
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    4 [* N: _; q2 m3 j  b  p
  2.     // Логика взаимодействия игрока с NPC
    9 U9 g9 j; {3 ?" n( y
  3. }
    ( }2 |: S/ C  r
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    9 z7 a- U3 g0 l1 G6 d

: F( Z' l5 `. N
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)8 s5 d: {1 Y  R% P
  2.     // Логика перемещения NPC
    4 O3 s1 o' C- Z  Y: e# k1 T4 S
  3. }
    - c% Q6 w1 V( z% z
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:1 E% g5 w- V4 U. y* x1 W
' ~7 p1 c/ J& {/ W$ {& F- I: ^
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример9 H! h  ^8 e! a9 U5 t
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)" X! A2 {/ {- G5 p1 ]
  2.     this.health -= damage;  // NPC теряет здоровье3 j9 @$ l$ T. I! Y0 A: ^# ]
  3.    
    7 @4 ?; u2 l# O( W6 m6 u2 o
  4.     if (this.health <= 0) {
    & O4 y# D9 W8 N' ^( D( |
  5.         die();  // Если здоровье упало до 0, NPC умирает/ Q+ P) _& ]5 B; ]
  6.     }  w8 P: B8 T  G0 k5 D
  7. }8 h$ i3 o+ e, k& a4 r
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример7 P; p5 `7 F$ @. O, c
4 @6 k; y' ]+ o4 a! {6 Z
  1. public void die() {  // public void умереть()0 Q! ?- M7 P9 G3 ?
  2.     // Логика смерти NPC  A+ J" ?4 g0 q% z# e+ {- E2 [
  3. }; c5 |6 \5 m8 b* ]+ j
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    1 z) V# T* D6 a) R2 Y

5 b3 @" X! E7 U% t  X% W3 h
; H! L4 [; D5 q4 V  r, N
  1. public boolean isDead() {  // public boolean мертв()
    " E, m& k5 F+ h* _5 l
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    / k- ~( G! n. l1 M6 ?
  3. }
    . T. M* z, E/ v* [: d' R% D: V  M
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    9 t& }) E* I% `9 |6 _
1 N, J" y6 N7 E5 P" V+ ]( g
  1. public void heal(int amount) {  // public void вылечить(int количество)' y1 p( u" a5 m. F' M; s
  2.     this.health += amount;  // Увеличиваем здоровье
    9 k% J5 p: b/ }3 {
  3.    
    ( Z6 Y1 _) ]* L) C: ]/ ?7 i- m
  4.     if (this.health > this.maxHealth) {5 Z6 C$ t: U' U  `% W- Z
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    9 ~! l8 H$ a1 ^
  6.     }/ O. `( F! s- e! @) e
  7. }
    ) {& C( e( T8 h
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    ! J' H) n3 p9 t! P; B8 E# Y

6 @/ p" [; G0 N' C9 i
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл); @7 K0 T: ^' W) L( H
  2.     // Логика применения скилла NPC( w* P; l; S% V: o4 }3 T( j' ?
  3. }8 Y  |5 i: R) \; o
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    0 F! m) z* V: [: n& P' f0 t4 L6 \1 y

7 d( D4 Z1 x0 a' Z* h4 e, Y
  1. $ k" s  W" T8 B6 H: P: J  E" j+ H% ]
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)# [# `+ p0 S* J# m- P( J& {
  3.     // Логика взаимодействия с NPC; i) O5 Y5 Q7 z, ?- _* h( ?- d
  4. }! Q' G. W; v9 o" W  i% i& u9 F1 i& r: G
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    4 s  U( P8 A6 K; w' u* z
  E9 E( d2 v% r' M
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    7 B' v" R) e' v; k, r  ^( r) v
  2.     // Логика открытия окна диалога# i+ ]* `+ u  K$ C/ z" v
  3. }
    # {5 t$ J, s4 X# i/ B6 j
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы." c6 F+ i6 f; _1 Q
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
+ v" S2 P, E5 s+ S/ k
1 Q6 E( i& \  \
/ U$ K+ F  y9 r5 k( d# h9 J7 `% d
) E! b1 u! |% ^" N8 e
" K5 M2 W1 b9 o0 v6 S) p
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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