Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 6 p+ y/ V+ Q0 R+ R# t+ @& d: B: t

6 V4 G: B! P; K; B+ D
. b' Q  q2 p, ]$ j, D) p; wШаг 1: Введение в классы и методы на примере L2j_Mobius
2 [! A: `' g1 sС статьёй можно ознакомится в разделе Обучение > Читать
5 \$ A1 z) N* c% x2 z* M; r. P9 a5 x
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
' p) k' U' N) n  [& V9 S+ f  i! N  r- Z
Обсуждаем:. ?9 D; B/ e  n) a4 T
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    * X8 A8 o' H" R- k+ b% _9 [0 F
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!: \- h7 E. j4 H+ N' @

4 \( ]! e3 A$ W% ]

) g* }3 G+ f( ]4 _И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
. p5 ~9 c2 W) G" f( t; @
' l$ N& i3 W2 g* \! t+ N" h
4 o5 {2 l" F0 w/ y' b# l
# ~* Z% m( L2 o
5 o8 Q7 H2 t9 Q+ |1 G
& X( c9 m+ s, e4 O6 @7 _; R( c: U  w  j

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?3 f$ K- t2 Q- x/ o- S3 A2 ]
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
1 p0 s# z, T" o5 Z. X) O- PПочему мы используем ключевое слово this для ссылки на п ...

% p9 ~# T/ [4 UКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
  {% r1 t3 c+ Q1 i$ j  mПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.4 \; v( d  T' J" H3 v  k1 C$ ~5 K
& d9 [7 D4 A7 H+ |) F: t
Вот пример:
' v8 K0 I+ m$ ^( o
  1. public class Player {
    # a4 R8 I0 J5 ~- c3 F) b) p
  2.     private String name;
    , |; x, n. z; ~
  3. 4 }$ ^& t9 B; Y* h3 D6 ~
  4.     // Конструктор
    1 K% H5 D' A! y) J( S' o
  5.     public Player(String name) {- f( M0 o  Q& D! q
  6.         this.name = name; // Используем this для указания на поле класса- ^5 s" C' M: R7 s% }+ W: Y, S
  7.     }
    ; F3 ]4 V7 M& c4 m5 Z/ s' ~0 X

  8. " H( l8 Z% e6 G2 a
  9.     // Геттер для имени
    ' M" v, S" K) Y6 ^. P2 R
  10.     public String getName() {
    ' z4 U0 X3 u4 X7 t3 P5 ?; ~2 E
  11.         return this.name; // Используем this для обращения к полю класса
    . f. s) j: A, y# A
  12.     }6 Q) `* Q! m" s+ w% W
  13. }) M4 S  f* H9 k: V! W: c2 n
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name./ B/ O6 Z  Z4 l# \( P$ v2 V5 r
3 c6 u6 k: h' L) [+ A" Z
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.' w5 D6 c5 I- Z2 E, C
# l4 _' H$ y! \+ O+ Y5 I  ?
Пример передачи this:
+ W% O' D* U; k( v0 K
  1. public class Game {$ I, B- n" f3 r5 d" k2 j1 D: x
  2.     public void start(Player player) {3 d( [, C3 f' h$ D, j2 ?
  3.         System.out.println("Игра началась с игроком: " + player.getName());
      |2 h" ^% R- T, B% _* ?8 s( T
  4.     }1 Z6 x- K8 s3 o" a. r( ], v) U- O
  5. }
    , Z  W8 b7 v5 c" w' U/ K

  6. & X1 C" \& f. B& o. N4 {* S1 R
  7. public class Player {: f2 h3 `" i; r2 m6 x. n9 d
  8.     private String name;
    8 @/ P& h1 B+ S) g4 i; W
  9. # L; d- P  I# D) g" o9 j% {
  10.     public Player(String name) {
    , M0 d( `2 o4 K/ e2 ?4 Y/ Z  o
  11.         this.name = name;
    ( T; b- W3 [3 d, }, W% Q/ e. z
  12.     }1 d% t5 N- g) S+ R% p7 n

  13. 0 Z3 d; ?, I: C9 n7 d  ?
  14.     public void joinGame(Game game) {
    " \/ [6 d# I# G* G7 {
  15.         game.start(this); // Передаем текущий объект Player
    1 k6 I5 n3 U4 S! O* Y  d% d
  16.     }$ @8 Q3 V: Y: A# I+ ?6 Z7 x2 _/ u
  17. }" V0 O! A! ^  Q% _. k2 n* A
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java., h9 a% p: h$ ^3 s7 k% _- f

, L# D7 H$ I6 A  `. C7 c& U1 ~
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
' v! y' m4 m; y0 d% \! V
7 `8 c  L+ u4 T$ R
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
/ B+ j% Q! L$ Z, E# v) j& dКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 % g5 w5 j+ M( ^
Mike123 опубликовал в 2024-10-17 20:05
# E: w& j  E  n3 MДобрый день! 2 t6 F: K- L5 q3 V" a- ]
Как создаются и вызываются методы в Java? Мо ...
- f# T+ s. [4 r& U
Привет, Mike 123! ?
" q: r6 p: B3 x3 F8 E* K6 hОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.; v3 o& G5 \3 G

* r4 i6 l& d( tДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
& z& t' \0 U; w
6 q! d+ D! u/ Y& C. g" }% d: G% m# t3 P+ n. H1 Y, o
Как создаются методы в Java?
8 i5 i8 R, M7 X4 P2 s& P$ _
& K" Q  M* v' ZМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
8 _, Y$ J- I: {  n( y% P
$ J' X7 U) E% r" H3 D
  1. public returnType methodName(parameters) {( e7 J) B# ~; K8 z% H3 z
  2.     // код метода
    ! [! k) x5 \, ]0 z8 R8 Z
  3.     return value;
    ' z5 }! d% ]  K9 Z$ t2 c% |& j
  4. }
    % `, {, S9 |5 e0 }3 m
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    3 C2 R0 n  h3 M1 d7 @* w

. g- B, k4 N( _; N; eТеперь перейдём к примеру.' w# k/ b& ?$ a+ d" k1 c# R

) Y2 @% k2 Z- I3 ~3 l3 H" VПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
. N- m$ w& Q% i
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    ! M0 }8 u3 e8 g1 ~8 K
  2.     // Вызов метода атаки NPC" ], k( @* x* A' [9 k* f
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    % `5 n/ G3 P% L* T$ ]
  4. }0 c: y$ {3 O, A" h/ X& b
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
. k7 S& _4 W8 h) f6 ~/ f1 g4 N3 z$ O+ L# R
' x4 E; C  W& I7 N1 p  q
Класс Npc.java — вызов метода) |0 O# r* K* Z) P
  o& I- p6 H2 \$ r( Y& b
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)7 z/ X3 c0 O/ l+ ]
  2.     // Логика получения урона NPC
    ) q# s+ F1 k" i) r' b- V
  3.     this.health -= damage;  // это.здоровье -= урон;
    * i6 S, X4 y9 G# P8 W. t; O
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  ) a8 |) ]$ v4 k' b
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());+ s; L( d6 V. {7 a7 J& G
  6.    
    $ D9 H) Y) p0 m; B; g
  7.     // Проверка на смерть NPC
    7 _8 l' B, F  i7 L( r
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)" u+ `7 M4 B! ^6 t
  9.         this.die();  // это.умереть();) P* Z  V* j8 m/ _( _
  10.     }
    1 L. m* I  \  j/ Q2 o! i4 x
  11. }
    6 e* x4 {$ d/ O
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    # C) D  M* ^; G" b6 H
Пример взаимодействия (с переводом)% Y8 o3 r, M8 i! ?: E- Z4 A% D
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    + L% W# {* H/ t# |: u8 ~7 O
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    ! l+ X) m# B; R$ {4 Z. L9 V9 w

  3. ) ]- [( Y* q# _% @& X. T# f
  4. // Игрок атакует гоблина
    ; K  P5 A  p/ u6 y
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    & p# B0 @: S& E# R* [+ x0 }% ~1 ]( B
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
/ e  B8 h! N' @& D5 f- `; P5 @0 X6 X! X2 c
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
& S  J6 y/ F7 S# Y' k1 Z, D- OУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!8 E' {& B& I- `% ~/ a$ h$ p* i# Q
5 `8 {! C4 \( c5 E
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:307 G, L, ]# }8 H: t* O+ n1 H
Привет, Астралия! Огромное спасибо за твои разъяснения ...

. V& l& |7 X) o1 F4 @Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC./ `2 I" L0 o* r3 t+ D0 _8 L6 ~
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример  n6 y6 r# \) s1 O
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    % j6 X/ o1 l7 b  b  e: ~
# @' j8 J4 X& J3 G' R! y* c5 [  \
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    . S" o: V! R) o- R& |/ j( @* s+ y
  2.     // Логика взаимодействия игрока с NPC
    + W) a: R5 a+ Z6 X8 N+ I( V
  3. }7 E, Y2 O* ~) ]8 N3 [! J) Q- x) E
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    - P6 H  m3 X, Y8 P) @

) ]: V# u0 L) a3 F
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)7 B/ o5 q$ N$ O" p7 M! ~7 i; H' W
  2.     // Логика перемещения NPC
    * q( y4 ?+ \% `- W
  3. }: Z8 z# J/ w+ H2 s
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    7 x* e4 ~3 l' c3 }( m: ^) s, Y
  q1 \! k5 Z0 o% j
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример6 p, G& t* N2 s8 R: G
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    ; d' P: J! [* d& P* z3 Q
  2.     this.health -= damage;  // NPC теряет здоровье
    . c% R, _; e. X- X( F4 M& H7 ]. }
  3.     * }. O6 H, Z  S8 {- }
  4.     if (this.health <= 0) {# ^& Y' s2 P9 G& p
  5.         die();  // Если здоровье упало до 0, NPC умирает8 B5 M: V. z3 _7 P
  6.     }
    + X! H* ~/ K+ [9 W0 M
  7. }
    ' x' a5 Y1 T; G9 A, W
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    1 l8 w7 y* [) l2 T& K

9 m1 i7 [5 r! y% I. u% r
  1. public void die() {  // public void умереть()0 M, e# A% `" G* i' f3 U
  2.     // Логика смерти NPC
    - x7 @4 [) z# e0 n# i
  3. }+ M' r5 ^4 N: x" o+ k' i0 ^
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    8 e* z. \) r! a6 f) P
8 p: }2 L7 ]% G  f( v

; p* q0 e1 ^* y' L! S1 ]7 Y6 O
  1. public boolean isDead() {  // public boolean мертв()
    ( M5 u" i8 [  P7 t4 G
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    0 J! Z3 p5 L' X5 ~7 I9 B0 ^& n
  3. }
    1 B! y4 q0 d) W  q4 W* e3 S
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример1 d( b& V* q! D2 E
5 g+ m. [4 |5 e
  1. public void heal(int amount) {  // public void вылечить(int количество)
    % \9 F9 P1 ], r& Y3 O6 O0 u% p: X
  2.     this.health += amount;  // Увеличиваем здоровье7 E: m5 P" a$ R: Q  H
  3.     7 y5 ^) |0 ]1 e/ Z
  4.     if (this.health > this.maxHealth) {
    * B( |" u$ Z8 O: P1 B. @" N
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    0 V& g6 s3 u5 S, [: G' q
  6.     }- p8 p* a. s. _' C
  7. }
    0 z; z. Y1 g+ l+ T
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:' ~3 D, E* G- c2 S) D$ ?. y
- k2 m$ y, j7 l& C, b4 k  N5 M$ K
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)& O( O/ Y# K& k, R' h5 j) k5 v
  2.     // Логика применения скилла NPC4 d3 h: z4 `1 v5 e+ d  L6 A
  3. }
    0 c, R4 A* o! T
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    , V8 ?* x/ a! @9 z6 s
1 A- j: ]% L* d2 R8 L# l
  1.   a$ K4 M; \: t; e7 Y+ D4 q/ Z
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    ! M$ l! R$ [- O- w* x
  3.     // Логика взаимодействия с NPC: e0 P' ?2 \% O+ B1 j1 F
  4. }
    ! ^( B( H5 |# y. A8 Y* o- ?2 j
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:- P  n3 J& w* S9 ^: B
, R- ^4 c: O8 ?& N7 b/ w# o3 Y
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)1 k5 w$ V2 d- c
  2.     // Логика открытия окна диалога
    . v6 A% T" [+ t/ ^* v  ~0 u3 c( e
  3. }
    : b2 _4 m4 p1 R6 D
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
% Y) y& S+ W( n" S- j8 B) V0 N  P; cЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!" w/ x; m2 v5 G) f2 z3 X& G

. j/ {& t+ x0 \/ A2 M' ]
. ]$ Y+ G8 v. f0 I1 w  n6 _) I. w) k

" \9 z+ G5 ~8 J+ [1 H2 X& ]" _+ `4 `
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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