Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 0 n! Q& o0 K& B* H& |

/ u! Y0 N$ D  n7 q7 P! v. ~, j5 I* ^' X
" E4 _$ D# n8 HШаг 1: Введение в классы и методы на примере L2j_Mobius0 X5 {. R* J8 C/ \- k- W9 h4 R
С статьёй можно ознакомится в разделе Обучение > Читать
$ K' A! R2 e: a3 Y% K
  m1 y4 X1 \/ A6 {Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
3 e7 O8 n3 f) x; H. E) p, R, c: E$ w" e3 K
( Y) F) {- O; X  w( i" K: Y- tОбсуждаем:
$ ?7 o  I  D2 f' _- ^
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.- w; o% H$ L: h+ d9 U& f- V
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!; e% w4 O) }5 u- U7 e

3 M5 Z+ p; G& @7 U+ ]$ N' O8 z, x3 k
0 o9 x* k& d; i: ?8 v, \
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! 😄 Но мы вместе разберемся!% i, r  u( o1 t. M" p6 P
- V. w$ @9 \) p& S! {+ F3 F

: @( B2 s2 Z2 z- E9 \/ G+ X- e" B& f1 `1 b' B

3 [- B7 R. j. A. F/ m
, ~2 F, k  N0 q7 h) Z, b

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?; ~* c) Q: x6 x5 R3 N# \
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
1 q) H& Y/ s$ u  d5 ?Почему мы используем ключевое слово this для ссылки на п ...
+ G* V1 W0 t% o1 i! x& V
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.$ {  y9 `% ~( \3 B/ o
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.( z3 D0 H4 E" u: D& [

& I# R* w; i2 XВот пример:
3 j& }( s* F' h8 C6 ?* ]0 Y9 w+ l: s
  1. public class Player {8 t& }, X8 _# m* L
  2.     private String name;
    : Z- @. v9 v% d
  3. , k; ?$ r  Z4 ^( \" `' @
  4.     // Конструктор
    4 Y: T3 F+ s7 x4 e3 B/ ?3 R
  5.     public Player(String name) {
    9 ], q# p) S8 X8 ?
  6.         this.name = name; // Используем this для указания на поле класса' X7 I& w2 _2 \$ z
  7.     }* H$ }8 }8 A- }& Z/ n
  8. & |. [/ ~2 ]# K: @( r4 @+ [
  9.     // Геттер для имени
    0 e5 X  u( F. ~- k) ]
  10.     public String getName() {9 j, w+ \' Z, l
  11.         return this.name; // Используем this для обращения к полю класса: g' @" P6 u! b3 i& G
  12.     }
    ) m9 ?$ t/ l  T" D2 ~/ Z; B& l7 H. l
  13. }2 S+ T9 r" x3 |* K+ @5 ~
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
. F; F4 M. x) e$ S& A5 y/ \+ b$ V4 \7 }% v3 L5 h
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    / M2 z7 t8 }, Z0 `7 j
. T5 [' c2 @7 ^1 R. ?
Пример передачи this:& |: c  Y# g4 i- O" g& u) {
  1. public class Game {8 V( W; q( F+ V& h* Z) [
  2.     public void start(Player player) {5 ~( W$ d/ U# `- e9 m+ k
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    - n' S. G- ^2 K& h6 b
  4.     }
    / X/ ]; L5 i1 `$ ]5 G: @1 @
  5. }0 K. V' W3 |  i8 F! u( m
  6. * I& a* I6 g$ ?, p# g' I; S! o
  7. public class Player {; [* X. C: A* ?* k: T, `
  8.     private String name;
    # J7 w- |/ H+ Q$ t8 S

  9. + J7 a* R# z9 a4 T' A
  10.     public Player(String name) {
    $ x: L% ^( x' E
  11.         this.name = name;
    % ]- h! m9 e3 L9 i3 S
  12.     }
    ) g7 A% t( o6 w. ~% f) _
  13. * q/ L9 I9 T, L! m' U% y. X6 P
  14.     public void joinGame(Game game) {; }  Q2 ?7 d" i
  15.         game.start(this); // Передаем текущий объект Player
    0 L( t& }4 Y4 K/ N. P
  16.     }
    ; h' m# l; U9 q4 U9 u$ c
  17. }' u( `4 r. I8 X$ A0 |' y8 [+ ^; i4 D
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
7 y. ~; |( [# k

4 M- k/ M5 g- uПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! 😄, N* I) K! b' m. y

" ?' g( e- }! f) {
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! % V) y& _: U3 [
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
6 r$ y% H; U2 _% ?+ j* k
Mike123 опубликовал в 2024-10-17 20:05* E0 |$ l2 r; k
Добрый день!
2 V# E+ k  _( m! L2 _Как создаются и вызываются методы в Java? Мо ...
& Z) m% w" R9 q( i. W
Привет, Mike 123! 👋# n) P* s+ {# G- N. V
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.1 s' @% n( _. W2 l: q/ k

5 |$ [8 {4 f' E9 QДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
6 n5 p) D/ g. Y  F4 f4 p% Z: p; Q1 ]) N
0 o) Y8 j% Z) Y+ Q% w1 I5 E& Y6 @! F6 [7 p: T4 C. P
Как создаются методы в Java?* l, _" e  L9 ?  s

. F+ x% |) B: X2 o* s7 uМетоды в Java создаются внутри классов. Вот базовый шаблон метода:( Y- z1 f0 C  A: C
! r: r: S% B8 x8 g3 J4 W( J
  1. public returnType methodName(parameters) {
    3 z. r' ~* U+ r4 W4 R- d
  2.     // код метода
    / J" ^& B% S7 t) p: t
  3.     return value;
    + T2 c( V) E& }* b
  4. }5 |' d( e3 N2 o& e0 y( Y
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    % L* L9 Z) K+ I5 O( N0 R

  v% q  w# O, x- OТеперь перейдём к примеру.2 |) p- M7 V- w3 o- o% L7 d' n$ s; m

9 Z3 c* T8 g9 L. M8 r4 C5 nПример на основе L2J_Mobius с переводомКласс Player.java — создание метода1 B% X2 c5 x2 r5 l/ [( q: D
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    6 G: y" M/ W3 t$ D( U, L3 d
  2.     // Вызов метода атаки NPC" m" r. I8 [3 p! g9 o/ ?6 |
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());; i3 ]8 _% C4 q7 b' Y$ X
  4. }7 G8 j# c4 R: |& z" [
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
3 p" w" s; r: T8 q; `# k
1 M8 Y0 j( K: o' [
$ ^; H, Z7 [; O% f9 m% iКласс Npc.java — вызов метода7 G0 t* j& i* G: p* u

5 K2 W; B2 n2 G  w& `: N
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)/ w4 c; \" }2 G, V$ L
  2.     // Логика получения урона NPC
    ' d9 X9 l& i+ L- l9 G2 N
  3.     this.health -= damage;  // это.здоровье -= урон;4 ~2 O# b7 g  x# E, \: G" d$ a
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    . u0 _3 |" g  g: V. c
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    # r) h. L& Y, R5 g5 {8 ]. H% z& K2 H% v
  6.    
      k% L% I7 O  o! K" ~
  7.     // Проверка на смерть NPC
    % n3 A  U' u3 A0 o* C  a% T9 w4 |5 J- V
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    0 M6 A+ c. y& Q1 C( d7 W' Q
  9.         this.die();  // это.умереть();
    # Q- p3 }6 q# W0 q, }0 x6 O
  10.     }+ n* ?2 v/ M4 @& i8 g* l# q) t
  11. }$ I( z* W8 B6 b6 J1 B& c6 y
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    1 }" K* r; F! h
Пример взаимодействия (с переводом)3 o. x+ f" K, L
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    6 ^/ r& U! o( @- r4 X4 i$ r
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");9 v" x3 M* H' J$ Z3 T, x

  3. " J1 ?1 ~& m3 s
  4. // Игрок атакует гоблина6 e5 j% e, Y6 q6 k3 N5 W- q  @
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    ' V) ~8 B7 ~' n* t; J& p
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
' m: E$ V9 i" u9 ]' ^& Y
, o; p& C; }% J$ i
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
$ f6 N/ `5 e( R: `+ ^У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
& m5 c5 Q5 D$ c/ V- i& J& S5 Y& P4 ~. D' o( ^
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30: ]( a% m) O& j5 k( F/ K2 Y) k% y
Привет, Астралия! Огромное спасибо за твои разъяснения ...
2 t/ S4 f) g/ c! r! \3 {
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.  \' U# }' K" @5 Y! C# X. Y
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    3 w$ z: ?. P7 l# ?% }
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:5 Z5 g3 r8 @: P$ W
( d0 u. {2 `5 N" _2 @, H& D; V- H- B" k
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    ; p- b( q+ v5 ~3 i' w* o8 ?
  2.     // Логика взаимодействия игрока с NPC0 I/ U- j$ u. d1 x$ s& o4 W% {
  3. }
    " {3 J. _, o) t, D: \8 p5 O
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:2 S. d$ m: l" i
7 W4 ~4 |7 E/ ~+ M3 q4 L
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    ; C! E( x7 D. B6 c
  2.     // Логика перемещения NPC
    4 w& H7 Q3 }6 o8 j. w* k
  3. }
    ; C+ ~6 O! x2 N
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:! N" U% P6 B! _$ m3 H
' M' \2 {5 j( f$ v( h
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример  U! J% D, {9 O; _; b. m7 ]' z
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    3 H8 U6 P" _$ a# D
  2.     this.health -= damage;  // NPC теряет здоровье8 `/ E0 f* R' Z# o* R
  3.     6 F! F1 d0 N1 m& o
  4.     if (this.health <= 0) {" R: T$ {9 `+ L7 G" V& j9 S
  5.         die();  // Если здоровье упало до 0, NPC умирает
    . l& W2 i4 A' ^# [# B. G
  6.     }
    + \2 f2 {" _0 }7 S# U2 o
  7. }
      }3 H4 y' k3 u4 n: O8 f& l
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    ' Y! u- e% z8 o% ~+ D

8 U+ W8 q- x# g$ k
  1. public void die() {  // public void умереть()! c6 I0 ?" x4 q" O
  2.     // Логика смерти NPC
    % R! X- h5 M5 o+ S! q' Y
  3. }5 r% `) n( N2 j+ L
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:8 K1 t* \, \0 Y7 t7 N5 r0 f
: V6 |( A$ r6 E* h& F% Z7 j8 p
, d0 @: w0 ^6 e( H# K
  1. public boolean isDead() {  // public boolean мертв()4 U' F6 l5 c/ J1 c3 ]
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    ( [9 `# R1 T* A) _
  3. }/ h8 U' K  l9 T
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    5 `/ c0 F9 f- [5 j- Q' ]; k

# Z) G7 y) S( \2 D0 b: z1 S5 a
  1. public void heal(int amount) {  // public void вылечить(int количество)1 x1 f! O, z; c- W
  2.     this.health += amount;  // Увеличиваем здоровье
    % s5 l: m, z* Z8 A$ v/ |
  3.     ( b3 N# s( }# L1 b
  4.     if (this.health > this.maxHealth) {( R; u; Z# k! q/ F1 n
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального9 @8 k3 F  l& l0 E  r
  6.     }
    , ]; b; D: j6 H! F1 W) }) O
  7. }
    / d9 [, K/ x, O( v) O3 j
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    ' e4 @( G2 R9 a& s/ R& h0 [

0 {. J! X7 U% e0 K" J
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)& P" A( B  c7 }5 y
  2.     // Логика применения скилла NPC
    / S2 l& R; R$ w- D1 T& S, h
  3. }: H- K+ [" {- m) v$ ?5 h' X" B
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    9 `1 j. R2 ]* H3 w* g! V# m

9 ~" y6 a( T% g" x

  1. + j$ G- M+ H+ r3 D, @2 Y
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)8 y6 o1 @4 c; A* m9 R. T
  3.     // Логика взаимодействия с NPC. w3 N6 B! w' P6 i0 n
  4. }' ^  B1 a: j3 h( B1 ?' T) ^
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    % O( E8 p! J- O/ u* L
; X& d$ H( l* e& C  g  a3 y
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    - h, ^7 [! `, a' x0 ]
  2.     // Логика открытия окна диалога
    / H; G9 S1 C7 B; G6 R1 c
  3. }$ b6 H( _6 D2 e, v2 k8 z4 `
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.; U2 |1 j: L+ v- Y, _- i2 c" J  |
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!* q5 d; F5 K$ e2 i0 \5 |

+ [% n# _! m5 B, \/ F% a2 s
- z2 B' k! t- h
: \; e8 P, R' G2 A. G) W1 M" ?' v( G( @# e1 p' B' C' E5 L% V- y
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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