Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 1 m6 J6 b* B" }; D) S9 c6 w
: |" I( V3 }8 m8 `1 a# b
% l0 |) `9 |. ]& `( |+ P7 K
Шаг 1: Введение в классы и методы на примере L2j_Mobius) z  I9 M# W! q. `* l
С статьёй можно ознакомится в разделе Обучение > Читать
2 H8 y3 c& [4 u" U9 Q+ c/ y
; ?7 |1 O& U+ }7 B% F3 LДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
' ?; p0 ~8 u, B, Z
. I6 ]! X: d% dОбсуждаем:' K2 R2 V) ~6 j
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    ! i+ R! i; h3 l6 ~! T, n: V
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!: T, W. ], ^0 m0 `
5 m% {0 E. C4 r* S


/ B, S! H# X# X  rИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! 😄 Но мы вместе разберемся!* w; W8 Z, F; Y& L0 o" a

% f4 f( i/ Z4 O  H0 M/ j- n4 `! G
" }1 Y! L1 l# b! u0 o4 X
# e. E/ x, p5 L
7 L) i) I7 g9 B; U- J$ \# D/ l: h

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?3 h8 \2 T; y# U3 S5 d2 }
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17, `5 E$ `5 O1 H7 b9 T" u. M
Почему мы используем ключевое слово this для ссылки на п ...
  K+ c4 l* J9 \" J* Q
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.: Y. M5 {. t+ T/ C5 s. i; U8 H
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
. H& Y) g9 K6 @4 b5 h! H) B0 `6 R5 [% c% m
Вот пример:
; {. E( c/ m8 C9 ?8 a; B
  1. public class Player {
    ( C' K3 Q: D! ^1 E5 f. E- W( G$ f
  2.     private String name;9 j; m4 M, D! {* `2 Y

  3. $ H& j( h+ Q" l8 f7 U9 o3 e
  4.     // Конструктор
    8 ?. Y% I* x: ~4 Q6 m
  5.     public Player(String name) {) N) L$ l' n' ?! ?/ v1 u+ M* i
  6.         this.name = name; // Используем this для указания на поле класса- e/ R/ T' I- w2 C; J
  7.     }
    - R  ?; ^5 q0 ]4 K. H* [( b
  8. & X: t  d( r8 n1 o. H
  9.     // Геттер для имени4 ]; ?2 d2 E- X
  10.     public String getName() {
      A9 B6 U! e3 B" Q' R% i
  11.         return this.name; // Используем this для обращения к полю класса
    6 p8 ^8 u: J6 i+ q# Y/ D7 q5 S
  12.     }# Y( h& G+ U" H& e% e# f4 \
  13. }  X, b2 ?& f  |5 k9 h
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.4 _( [( e4 y* q" q' j+ p
4 a. L' d" n6 |- u8 d
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    " m/ l6 W/ f+ W4 G2 \4 D- K
* f4 H! |% {! p+ s& o8 V4 i
Пример передачи this:
1 ?+ |- h/ h0 O- ^8 x. P
  1. public class Game {8 X" ^( s" Y' I9 F
  2.     public void start(Player player) {
    7 B3 A. r: O  w3 P' U+ N
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    + P. ^( L& @# w4 n9 c. g8 V
  4.     }
    4 `9 ]# L  q1 A, |  j$ J9 y8 n* Y4 W
  5. }3 v0 g4 V4 B# [+ R+ ]# b, O

  6. 0 M( I0 z+ ~* Q8 Q2 V0 }
  7. public class Player {
    . O5 B! k# P0 q6 r& k+ _4 C  h6 U
  8.     private String name;7 N1 C7 m- r, _4 D6 V

  9. ! B' |5 q+ l0 P
  10.     public Player(String name) {9 S) M' x% [& N4 S( ~
  11.         this.name = name;- X- y. @/ P7 v* C) ?+ A0 b  t
  12.     }" F2 }, b* \- P, }

  13. 8 H2 ]# D! r- j2 F' j& K
  14.     public void joinGame(Game game) {
    - U0 Q8 w6 N3 \4 y1 q6 W+ S3 b  Z
  15.         game.start(this); // Передаем текущий объект Player
    5 c. i8 i9 k) O1 U+ [
  16.     }
      B! k7 {9 x( I+ h
  17. }6 ]$ r5 D. p4 z# I. C) i
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java./ w6 S$ l0 Q# k) z5 h8 {


$ i2 }5 a2 }* l' nПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! 😄, H8 {3 S. ^: o5 ~+ D- l  V
: ^1 ~- E7 G4 n
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
5 Q! v+ h; B9 n  SКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 ; [4 z& H& V) B4 m- n. n
Mike123 опубликовал в 2024-10-17 20:05
; g5 J* b8 P* _Добрый день! 9 h) H& L( T* m: x# G4 {
Как создаются и вызываются методы в Java? Мо ...

# c. q  b; ]' i0 m% lПривет, Mike 123! 👋
- ^3 s- I( V8 L+ IОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.$ {+ m+ E  ]" R1 b5 x  ?
7 r' d1 G3 G; b8 b- A9 U
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.! J$ Q/ j# W, A. z
, `; |, Z' a0 P& Z: N

, K7 f+ ?( I& S( X( v& B: sКак создаются методы в Java?# m) D* j) C# f$ n* _

8 {& \& n7 L8 y1 T) FМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
6 Q) T7 u' c; [( I/ w2 ?1 O/ G: `5 C- K( T
  1. public returnType methodName(parameters) {8 O) i/ W/ h8 E- z' o
  2.     // код метода" o. u$ [# i; f) e, y* _
  3.     return value;
    ) L0 n# F, s* w" Y& W( E" Z
  4. }9 [5 |0 D9 E0 N6 i/ p. r6 p+ }+ V+ t
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    ( E4 N$ U& G7 l6 E) w9 t
3 z+ B& o0 [0 r" `% @% R
Теперь перейдём к примеру., h! A5 L. O0 X9 ?
* o( L) @+ x5 _  q2 z
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
8 L- z6 s8 T6 H6 w4 K
  1. public void attack(Npc target) {  // public void атака(Npc цель)9 N" W9 d$ W1 O
  2.     // Вызов метода атаки NPC6 T# w( I: O$ W( a, S
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());5 M& u- g' f8 Y; P  t
  4. }, Q% o5 {* Y8 Q( L; K: ]3 Q
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).  ^) [. s0 x4 U* Q

* N5 x9 K+ L4 d
1 e( z3 t" j) w1 ?3 O0 GКласс Npc.java — вызов метода
3 u) q& @& r# M. {1 w; f7 v
$ h3 m/ l  S# i- {8 T
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)" N& L: B+ I; R$ e" ^* C
  2.     // Логика получения урона NPC
      j, V4 |* P" }. A# l0 m
  3.     this.health -= damage;  // это.здоровье -= урон;
      f5 t0 ~/ o. Y- n
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  / i$ U8 G0 k' }4 \( H( w
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    " P3 F3 D- G: S& P0 y5 f
  6.    
    " E9 A7 c5 @8 a$ d7 `- k
  7.     // Проверка на смерть NPC
    + ~* E/ n* l! g5 f7 }) x
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    & @! I4 E. I! s0 O* U9 `
  9.         this.die();  // это.умереть();
    5 T) E- Q4 x. e0 Q" T: ~# \0 h
  10.     }
    ! Z; n# Q7 Q% {* Q8 r9 i
  11. }  v, [' k" B# o* I" h
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    8 v9 G* g1 b* O+ f/ R2 I5 h% M
Пример взаимодействия (с переводом)
' r8 p6 Z1 t7 [' i; _" ~
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");1 J/ V" X  |, o/ `
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");+ I! R5 N9 t" J1 B9 s
  3. 3 O7 y8 t/ H8 M8 A' t& d7 h
  4. // Игрок атакует гоблина
    1 w1 z" S: K9 M& A5 ^' @/ Q! H5 n/ }
  5. player.attack(goblin);  // игрок.атаковать(гоблин);- m4 x/ B4 J. U0 V
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 5 p1 B$ A7 k& F$ S' F
% L* s. g4 z. T+ J1 Y
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
- y. O% k7 b+ a5 B; tУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
, l1 j, E; P: Y1 c' y1 i' `) @+ ^" t
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30* a2 s3 ?2 _2 ~; w' B2 \
Привет, Астралия! Огромное спасибо за твои разъяснения ...
4 C9 |# ?' y/ X, j5 |4 R5 X& v8 d
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.4 L6 t$ n; F8 n) [5 N$ R
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример5 x! M1 `* \2 |! F; m; r* @
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    ; a+ Q6 u+ w0 ~- m$ Z# r( `5 @

2 m- _, h% b0 Z+ ]/ [5 o
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)4 |! n/ e+ p8 [! w2 h3 h
  2.     // Логика взаимодействия игрока с NPC. `2 h8 c$ C2 G+ t+ m0 H
  3. }
    # s8 j: B% O0 `- s6 N6 o# ]3 D+ A
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:$ E' P0 {# ^: y9 O

, K  D0 x; W( P1 ?
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    - d4 J9 O, S. z0 h# L9 |2 y- a
  2.     // Логика перемещения NPC
    ( M9 O$ G+ ~) g% S
  3. }' i9 Z" u0 Y' W, ^( ~
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    7 B, r* ~0 o. R( M0 C
0 B; c7 s. T. `
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    $ |1 v+ V; `- q) K$ y5 R
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    ) m" V1 h. u' c- ~3 x
  2.     this.health -= damage;  // NPC теряет здоровье$ |! {: i1 B# p% A  T
  3.    
    * D& ^1 a& z  }( y
  4.     if (this.health <= 0) {
    2 E# |4 H2 A# l* `" B1 g* V
  5.         die();  // Если здоровье упало до 0, NPC умирает. ]- t& O6 x8 u, x
  6.     }8 ]4 B2 O2 D# p1 O) F
  7. }
    $ f( l. Z* A$ q: y  v) I& V
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    ! Y$ x4 ^1 E" H: E; h2 x

: q; T4 S1 Y% `+ y% J6 K+ Z
  1. public void die() {  // public void умереть()
    8 O7 j, c, h; `" `  u* f
  2.     // Логика смерти NPC
    9 J' {- z/ c1 X4 k; H+ [) q
  3. }7 U2 q( x3 i; _/ q) G3 E
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    2 P4 T7 K6 }9 ~8 y$ Z+ E4 e& j

* v- M7 r4 g, a  x4 _5 U
' Z# w# M1 _1 F! f6 K( z9 j
  1. public boolean isDead() {  // public boolean мертв()& u8 `0 x! V. L2 L
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    9 U* Z7 V5 O: G' V
  3. }6 ]% h3 R1 Y2 B: T' ~
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    7 n- j* e- M. D- D0 [# e
$ ^, ?/ Q+ y  t; M% b: c
  1. public void heal(int amount) {  // public void вылечить(int количество)# X+ j  C( [/ b; X' D! e% j
  2.     this.health += amount;  // Увеличиваем здоровье7 X3 p; {( O+ W5 P9 m
  3.    
    ! a2 K/ e, c3 n* J% I# e
  4.     if (this.health > this.maxHealth) {9 X; Z# o- L4 A
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального1 _. ]0 b- J" f& k! ~  |4 M
  6.     }
    6 j' G' B; [% J( S
  7. }  @9 ^; U/ ^0 ]9 j6 C
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    " D- }$ q+ Z9 [3 U, ]/ Z
3 q5 i) E2 H, E: x" i: Y$ E' z0 H- u
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    ! h# n% d4 c# H% S( n
  2.     // Логика применения скилла NPC+ j! o3 x% c+ x1 L* K
  3. }
    + Q( U/ ?5 M3 o$ B
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    ! W9 |! K* |. s
( X3 C8 G" D% {% r9 [7 p# U, p% Z
  1. 9 t4 t. s. H, e$ Y7 {8 s. A$ I( Q4 G
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    & i' `) f6 z1 _7 r, O3 S
  3.     // Логика взаимодействия с NPC
    9 A/ m" f' H& I, q: v) x
  4. }$ i6 H% \& v* q3 Q
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    1 H- h. c/ O+ {0 d9 M

) h- I" |+ N+ }$ b6 a; `
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)- U1 a0 I' S3 C! W* X& m3 j
  2.     // Логика открытия окна диалога
    & j* @* r( i' @  p, D, F
  3. }
    . f# `* [* J0 }9 j7 k' ?7 V% U
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
1 {+ v7 ^4 E2 K1 mЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
! R4 S; a& ?8 ~. m# h1 B: u: N
& H2 y5 ~# I+ o+ m& k1 Z, {* @6 h- t9 ~/ X6 O

- Y. Z5 u' F: Y* z; a( F
1 ~2 B! O4 T1 g
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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