Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 5 s) K) d) j% H9 V4 S7 z) _4 O
- L4 ~% K" D* j8 {" |: }% h" `/ K' i3 k
7 U( K5 A  ~1 y$ x4 H; Q* {. @
Шаг 1: Введение в классы и методы на примере L2j_Mobius
1 p1 ?8 |# j8 r% DС статьёй можно ознакомится в разделе Обучение > Читать2 `0 s; i5 d2 O$ l, s% T; x
5 w1 ?, `+ V8 U5 N0 N
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
! s. E5 r- C  v7 ^3 X  B/ U- b# c3 K: ^, a& K9 R# K+ S
Обсуждаем:0 K$ q$ D2 c% L  i
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    " h4 s- g; N9 h
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
$ i5 w8 g4 d6 K- f" \, o; f; D- |3 f0 n; g' i  W1 E1 u. v; `. l

0 [: {8 y( O6 v$ [& p
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! 😄 Но мы вместе разберемся!) l$ I8 T) i4 [: h+ f& H+ A
- z: T) j) T5 }, W. b$ Z( A
7 m7 |" J1 v7 f4 v) d9 k  U

! \$ @/ D+ E- f8 L6 c) r# O0 E( L& n! I) y
2 g8 ]. T4 O5 J, F5 C

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?5 s6 y# X6 O, v# f3 }
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17+ i9 L, {9 X; [0 M
Почему мы используем ключевое слово this для ссылки на п ...
' T+ F: b+ e$ k; S( X( M% g
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
# h) m  Z  \+ p/ ?, p0 c  nПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
5 u) g4 [( k1 R5 l% y, Q3 v$ k
. x7 T  v+ w* }7 bВот пример:
' R- h% q+ f! e! ~
  1. public class Player {
    ( [! ~  i9 B1 \) G: P. O
  2.     private String name;
    1 J# ~" c/ Q" t7 b: _
  3.   p, G, W  d2 N8 l: e
  4.     // Конструктор/ G0 q5 ^2 D. }9 h
  5.     public Player(String name) {. A5 Z; h6 n  l2 l  T7 A: k: r* r0 V
  6.         this.name = name; // Используем this для указания на поле класса! r5 U6 Y% H; Z4 o" f$ E- y5 {
  7.     }
    6 a! u( a+ V) \$ j/ [

  8. ) [* I* b; j( j1 h* d
  9.     // Геттер для имени5 D& N# `) R$ s. J
  10.     public String getName() {& A- B. y  t+ g" L3 _
  11.         return this.name; // Используем this для обращения к полю класса0 a- L) K" v# k# j' K* x
  12.     }
    0 r" U. t5 p3 j
  13. }
    - ?: D3 @1 `0 |+ i8 V
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
! k, t" ]" u! U3 @+ l, M$ @  R9 {5 ~; G7 q2 x4 N
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    ' l6 S3 {5 ~' V. h
4 \, _" Q0 \  ]( ^
Пример передачи this:
$ s( ^5 d# a, E$ i
  1. public class Game {
    8 \4 S5 y6 \/ j" s7 ?" E3 ~
  2.     public void start(Player player) {
    # r& A+ C! Y8 o7 `) l8 P
  3.         System.out.println("Игра началась с игроком: " + player.getName());
      `/ `' H8 B# v* k
  4.     }8 |) {3 o0 }: W
  5. }9 b$ x1 V: s% {0 [! h3 u

  6. 9 V' N" l/ u) B+ I
  7. public class Player {# n/ L% K/ `: ~+ X$ v
  8.     private String name;( e2 L# p3 ], y" a/ y9 M! c
  9. & |5 [8 s2 t/ b+ y. B
  10.     public Player(String name) {
    6 T3 z3 y/ p- k6 V! ]
  11.         this.name = name;' Y: V+ {3 `1 ]% D4 z
  12.     }( u& x9 W9 l+ i5 P- Q

  13. ) Q6 A: _* s$ _
  14.     public void joinGame(Game game) {
      j* l, Y6 o& ?4 m; Z
  15.         game.start(this); // Передаем текущий объект Player3 S6 t. d# G. T5 O- T- v
  16.     }/ R' D0 L6 {" b8 k! @
  17. }
    * `- n: ^" t7 L1 K# F6 W0 j
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.7 ^! z6 S' @0 G; L" t/ l% S  ]

. g9 y( o: r4 L8 M  Z+ U
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! 😄
. H( X  L, L: Q) @
8 B9 b" [8 }8 U# Z6 a2 w7 P7 {
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! % n- p7 n0 p- _6 N
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 7 y7 r9 O- O7 |. Z6 M* n. i
Mike123 опубликовал в 2024-10-17 20:05
+ [0 _* J' a1 E8 e/ I, g1 rДобрый день!
% u: m7 A8 b. t) j' y  c' e' I4 LКак создаются и вызываются методы в Java? Мо ...
5 F: L; x  e2 M! M9 E6 |
Привет, Mike 123! 👋
/ D) [, N( A; HОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
: O& L  ?4 Z2 D' T. }) B7 r* B: q$ T  L  |; \; X2 m. b
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.: l$ i7 S) D3 {* }/ Z8 H2 C& @( @( k% i2 L

  H  r% S( K) y6 Y1 ?0 [# V7 ~; i
; w+ Y" N( r. ]- E7 JКак создаются методы в Java?" U- [' q: C; V4 v7 n/ r
8 Q) T4 x: ?; b: S9 m. D6 j
Методы в Java создаются внутри классов. Вот базовый шаблон метода:+ a0 P/ h% r( [! v+ ^
& C4 t! r" {; \/ I9 t8 _  Z
  1. public returnType methodName(parameters) {
    1 Q8 u# s- }5 c) R9 x& Q
  2.     // код метода2 Q% T5 E3 {4 ~* \- p8 M/ o$ n3 b
  3.     return value;
    . s2 w3 I% c7 n
  4. }) Q. @" M# P/ U" R+ t9 A, f5 q4 B
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    1 _7 `  m- t; S0 N/ p) J$ q
2 U. w& D7 W8 O& W+ s
Теперь перейдём к примеру.  A7 d1 K2 B% w# W" H
( V; q* h( h$ [) l! `4 X
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода' k  R2 H) v3 z
  1. public void attack(Npc target) {  // public void атака(Npc цель). v7 _$ S6 N9 b, e  h/ C$ o" p6 {
  2.     // Вызов метода атаки NPC$ S$ |) k) j. Y. E
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    * x; m, g5 y* p, E, _2 ^. U
  4. }
    - o$ b  ?9 p, y% h& L
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
2 X8 b' u* `2 t
! [) m2 O4 P: |( L. t
* V: @3 @8 B. y9 hКласс Npc.java — вызов метода
7 P# R- G# p" C: U* V4 A& H$ ~: |, |+ V3 v! X2 l
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)' p; L: R! r+ z' m
  2.     // Логика получения урона NPC
    - g" v& S% [' F
  3.     this.health -= damage;  // это.здоровье -= урон;
    ( w- q' w8 I& C5 b0 `% T
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  / O9 s: I% {: ~2 A* p, w
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());  U0 W2 v( i( C9 S7 j' S' f" u, ^
  6.     % z  N& T# l* K+ `1 S
  7.     // Проверка на смерть NPC
    " D( F- p/ C- R; G
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)" j0 a) i3 J- V/ ]8 d- I' d1 j$ t
  9.         this.die();  // это.умереть();2 g$ C+ d4 P; }
  10.     }
    9 f' G- w4 M' C) ]
  11. }" |3 a. |' e7 s3 x9 H
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    ! H3 X. h8 x0 P/ m
Пример взаимодействия (с переводом)+ e* X: o% \; d7 _+ b
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");; ?) U% T: D/ w( }. J
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");7 Y- z: ~/ @+ u% R  K/ z

  3.   y4 U* {6 q# W
  4. // Игрок атакует гоблина
    ( h" u: h$ M; j$ n3 n
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    6 G7 T+ L) ~( q1 E& z
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
5 u7 Z3 e$ d' |7 \$ D
: f2 w4 V; y% n  C! \# G% |6 b
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.; ]2 n8 G& u7 `/ v& h
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!1 i& W2 K! F3 g+ b* \) H6 {: J4 W# U; U

' C* d: g9 E7 f% ^) i' f, ^
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:300 P- }2 u( o6 Q8 [4 t: |4 d6 B, d3 C
Привет, Астралия! Огромное спасибо за твои разъяснения ...
5 {% n6 s6 g0 F" w) _$ \
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC./ |/ S- a9 r1 F' d5 K
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
      F* M' ]5 Q$ E/ j: |8 f! J
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    3 G3 q8 A: U4 k8 U- j

" [) ^& {% t7 w  S) r6 C5 E& t
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)2 N# `- G; Y0 a- r2 m5 {! \6 H
  2.     // Логика взаимодействия игрока с NPC# n+ Y3 [0 L+ E$ \; Q
  3. }/ Z4 q2 j. B; h. l% l* A
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:  ~/ P! K! o6 G' |

; e( Q1 ~. ^6 c
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)) E( A3 _7 K' O5 S1 G: k6 j$ m0 |0 l
  2.     // Логика перемещения NPC& f  i5 A; B3 ?0 ^3 }2 Z* \# b
  3. }
    * o5 @3 ^( K  v/ _( j4 j
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    ! H# N  L0 H* H; k" C5 m) B
( ~7 S# L; \" \8 e
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    / u3 c) ~% W1 |# c2 z" |) K" ~
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    ( `5 r, y9 ]; ^' p" z# b. S
  2.     this.health -= damage;  // NPC теряет здоровье
    2 w2 q/ n: c0 G3 V, U5 x
  3.     * o6 W4 S& \) s/ F& _
  4.     if (this.health <= 0) {
    8 @( O6 A& D. {" J
  5.         die();  // Если здоровье упало до 0, NPC умирает
    8 X* G' Q% u( N3 J. g% w
  6.     }- |3 I& ?! Q, I" p
  7. }
    + h; y# S6 O" F; s7 b7 u+ _# E4 ^- Q: _8 L
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    ; o- |( z  J, h5 B
% u3 f2 }( M% G5 Y1 r  o3 y
  1. public void die() {  // public void умереть()
    ; C4 G" a8 g' g! O& T+ G+ ?
  2.     // Логика смерти NPC  p6 K. c; J  }( o; l7 j
  3. }
    9 z2 m" G  |0 M5 t7 ~
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    / N- z8 |; x0 e6 R
; b$ q& e  L/ Z; j1 ?4 Y: k
6 K2 Z' c8 u. U; L5 `
  1. public boolean isDead() {  // public boolean мертв()# K) R" I7 f' l0 l3 q; S: _
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    ( W+ \( |( Z. v/ c# h, q$ E. }
  3. }+ X6 I9 H$ }& K
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    ; s% p2 k9 u: R! v* O* M8 ^8 C

& G  \& }/ @: J
  1. public void heal(int amount) {  // public void вылечить(int количество)
    1 y6 w9 @2 p/ R- H: J
  2.     this.health += amount;  // Увеличиваем здоровье; P6 p0 K  ]0 o0 A$ W' X( v, X8 o
  3.     3 n! B7 z/ Y  [  E2 ~
  4.     if (this.health > this.maxHealth) {" Y+ i" {( B( t$ C$ A* `- L% T
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального% R5 @& [0 z0 l+ Z0 j$ l
  6.     }$ ~* y& V* h! `
  7. }( \! {* U: X+ Z: _+ H* n
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    * `4 L  _2 ?- d& F
+ f/ c* u! D5 R  M- I. Q( {: t
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)% _* @1 N9 U1 n3 f
  2.     // Логика применения скилла NPC8 e# T6 H5 q% m
  3. }0 Q/ c  |: M; a! f3 Y
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:; r+ C. [+ h- m. S4 \
% X  s7 H# @) [. e2 g$ o
  1. 3 C1 H2 E1 h0 X6 J
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    $ l7 X( t0 O& t7 y( j
  3.     // Логика взаимодействия с NPC8 F+ z# P7 c0 z
  4. }
    4 H: M7 _% M: q% T3 f9 [; F" x
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    ! \+ n% j2 p  G& p6 }* Y6 [- ]$ s) R

4 K4 y( a1 e& u- @. a' o+ J8 P
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
      E9 s# A- t9 _& B1 U3 u2 y
  2.     // Логика открытия окна диалога
    ' k! p8 T  m, |8 F
  3. }) m$ B9 b8 Z6 f+ W
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
  M! {" [+ {* xЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
* J$ o" ~0 _3 O1 b+ k
. j7 e, X" A! i0 m; A& i, I; u
3 q  D5 N# G4 s6 B8 ~3 ~4 Y/ _- E+ r, O

5 k; Q, I$ H6 b) y: i( A! C2 ?. p
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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