Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 ! m3 Q% B* e  Y, k; ~, d

4 G, t9 b* T9 Q% l
3 g/ \! q7 [/ v- U% i# UШаг 1: Введение в классы и методы на примере L2j_Mobius7 c7 V9 N: R# c" Y+ L7 S: C9 e
С статьёй можно ознакомится в разделе Обучение > Читать: y. b+ S" u; f$ S# q
# A; z* L- o7 J9 o
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
# M8 s" c, ]0 @0 G$ ?. ^& w! z8 L. r
Обсуждаем:
  N: f* T! @; w. G) P4 K; i4 n
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.# j- P! ?& m7 N% f* e+ i
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!+ G3 j7 b; ^# A! [$ ~1 K
* b4 q( h8 m7 \/ P6 H, |


5 j" S9 m, U) W  t( HИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!. L! o2 D& z4 [: f( O
/ S9 R8 j1 C. T& O

) S# F; d/ K% d/ V% h& |! y" q1 a6 X+ P4 b+ G
! t* i- E/ l& k* w$ V( @
5 d8 s) c4 p; Y% w9 u" I" @

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?7 ]+ L+ O2 R2 U" ?4 a
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17/ @9 e, B# Z+ M& m- }2 [6 X0 T/ E
Почему мы используем ключевое слово this для ссылки на п ...

, G9 x- a$ Q" K3 Z" S# R" `" r: L  _Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
% s3 U3 W+ D( dПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.2 x* u- u% t! E" q( S) B, {1 T
$ @( z) [2 Y7 v$ x* \( {
Вот пример:
3 e/ ?) J' C3 v4 @2 W5 \
  1. public class Player {1 B3 k3 P* G  y
  2.     private String name;
    5 J# e/ g. w9 s& L7 ~( c
  3. + @/ t, x; M, |
  4.     // Конструктор
    3 b3 ^( ^9 g& A$ u
  5.     public Player(String name) {/ ^' B9 ?/ k7 m: I& T
  6.         this.name = name; // Используем this для указания на поле класса
    ' |5 }$ H9 N6 F; S9 q4 n# H) l
  7.     }, w9 V6 b  W2 f4 e# S. \

  8. & P6 E! E! Z: B; t- E0 Q: U
  9.     // Геттер для имени3 O# Z2 @! @8 F- m/ s
  10.     public String getName() {
      k7 y: r5 s- }0 c) \& t6 N
  11.         return this.name; // Используем this для обращения к полю класса8 H- ^/ t7 ~, u0 D2 ?+ S$ o
  12.     }
    3 _' [6 c$ ~9 m5 |$ l
  13. }
    / g+ M+ x+ O/ W; r( S0 n; r
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.; L: y- N$ r  k6 E
8 D5 i6 J3 M5 F. X* i2 m0 l- W
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    ) F2 v5 m; ~2 f
3 G! u9 K& {+ j% O; g
Пример передачи this:
8 z9 u; f6 c" G/ e; |; s
  1. public class Game {
    ( O7 t5 C6 a( x
  2.     public void start(Player player) {' f) O% F. N5 A6 I2 Z7 D2 z) b
  3.         System.out.println("Игра началась с игроком: " + player.getName());  v' s/ T6 ]4 X" r0 n/ m: N
  4.     }
    + p) g% F, j+ k9 D, K# @
  5. }
    . u9 V% k; I  M. T

  6.   s3 m4 Z4 W% c* |- C
  7. public class Player {
    7 {4 F, R9 d5 Q" F1 M9 v0 e7 C
  8.     private String name;7 u8 C$ b4 e2 E$ k

  9. 0 v$ W' F; l8 Y7 e
  10.     public Player(String name) {9 {  j  c% S+ v1 O0 _; {
  11.         this.name = name;4 G- s* j# f6 {9 n4 L
  12.     }
    ' k( G$ e1 ~* U) u7 Z& O
  13. 9 J; b2 F0 E/ ?& u8 N& B! a: W$ n! S
  14.     public void joinGame(Game game) {
    - f& |* }+ i& w4 z
  15.         game.start(this); // Передаем текущий объект Player
    % k; ~# q' C1 O! o+ k) f! }
  16.     }
    / K! j( O( U- {5 e" q
  17. }7 c7 e& v$ k( h1 q7 P1 K
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.' _6 d) G2 k6 \9 P4 i

! m+ X! R* Z. f6 J  {/ a
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?8 r. |! ?4 d' s: v4 M

7 h1 q& V( k5 j4 p/ ^
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! $ g! h! I$ j& f
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 # @) g2 x2 D; d. l+ m0 o
Mike123 опубликовал в 2024-10-17 20:05. Q+ i- ?9 Y8 u% N5 u
Добрый день! ( u* E/ K* f+ E* w+ V
Как создаются и вызываются методы в Java? Мо ...
6 R* s' o7 B  |7 |$ z" m- T
Привет, Mike 123! ?
  }' R: V8 t' `0 c1 Q# ZОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.- q0 M8 f4 e2 b+ I0 d3 a/ X0 B

7 R. E( |0 m1 D  gДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.% ]6 w8 l* k( @

: g2 E: |/ H3 I7 K' W2 }0 g, S( @4 j& U
Как создаются методы в Java?3 |8 h5 m7 e  F
% j7 ]- a5 J# e; B9 `- S" |
Методы в Java создаются внутри классов. Вот базовый шаблон метода:9 f2 t/ G0 O1 }' l  x
" |: i& u7 J0 m! G! x
  1. public returnType methodName(parameters) {8 O$ P  c- d* g% u" d2 R5 S
  2.     // код метода9 ^* m$ q  l* P
  3.     return value;1 _2 d6 n3 \( S) F& P! g9 t3 M
  4. }
    . h& o$ T1 F  P& y- Z+ A9 \
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    ! E1 a: X, H7 R/ B: n
' U( q. G0 B, F1 K5 }: c" L
Теперь перейдём к примеру.
3 ^% b# o# n0 ]7 b5 C; u+ O* W2 U; A6 m5 v: K& G  X6 t
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
% j0 H3 [& \, a+ v
  1. public void attack(Npc target) {  // public void атака(Npc цель); l7 Z9 x/ p! r$ `
  2.     // Вызов метода атаки NPC, {$ h5 Q2 A- k5 w+ M2 F6 n
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    ' A4 w! S" C$ [1 r9 ~/ X! P
  4. }5 _- N1 C4 s6 }
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).- X$ i. h: i. a" }/ G5 {

5 g, }+ i9 O* y  x+ X6 W4 K  P& Z1 O! e, j% P
Класс Npc.java — вызов метода
( L& W& f+ F+ W& L  Y9 s: V7 v- F; ^& |5 A
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    7 D, X+ V' Z* y6 ^2 c
  2.     // Логика получения урона NPC& j" b" ]6 q' g0 y% v8 ?
  3.     this.health -= damage;  // это.здоровье -= урон;
    ' Q# e, E: P+ X3 ?. w2 r1 g
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  0 q. ]9 k1 F3 s) I/ l4 q  c: v
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());5 Q* r' G0 w" u
  6.    
    - i/ g1 w* i2 }+ d. D
  7.     // Проверка на смерть NPC
    ) n/ T5 m" F/ t0 |; f5 Z
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)0 {6 j4 ]* d. b
  9.         this.die();  // это.умереть();
    ) U$ x# v* [2 J1 O* |% @" g2 a% L
  10.     }
    9 C5 r; H! h/ @9 g0 b0 ~
  11. }8 R  \) J9 w4 y
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    * J- f% }5 A5 v5 B
Пример взаимодействия (с переводом)
- b2 o( l7 v! ~3 ?/ j) j0 p" s" z
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");* y3 I7 z5 u4 G1 O
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");) }7 |; W' o  U2 c
  3. ) ?7 O( G, R9 s8 p
  4. // Игрок атакует гоблина/ j- @0 h; ?5 G6 E: t4 A* E) k
  5. player.attack(goblin);  // игрок.атаковать(гоблин);0 ?2 p. L- P; @/ D1 G
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 0 v9 E: l  v. f7 F
$ _- T6 \/ ]9 S* }
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
; {2 ?* L' r" z+ h& \" _У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
7 W! ?5 g$ p* x2 I8 c; l/ e- H4 P2 S/ c
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
* Z; M1 u- }- f3 I. uПривет, Астралия! Огромное спасибо за твои разъяснения ...

# R0 R7 o, A; l9 {Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.0 O9 B: s* D9 d! A  |
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    ) Z& P: g2 e) L, |0 _4 v" @
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:8 n* Y6 v8 x0 r0 H

" L# q- ]! @% X# d7 @5 [$ x
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    - f6 b- V* d) V# r
  2.     // Логика взаимодействия игрока с NPC/ o5 y: R$ x8 m
  3. }# P1 T: ^$ t% t
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    7 W8 S+ n& E* ]4 F
. |3 Y% p$ ]) P
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    # U7 c5 ?7 K9 Z; s
  2.     // Логика перемещения NPC
    ( f% T8 G) K* p& u. d
  3. }+ {: E4 }+ i' [/ C
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:' f/ j- l; m3 V; i
  g, I: l+ y1 H( `7 K+ Q
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    ! K  ?" X$ L# a7 b
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    / v! m( w% w7 G- v5 _' B* C# y
  2.     this.health -= damage;  // NPC теряет здоровье# C0 k  S0 e; Z: G' ^% N
  3.     5 g" P) I7 j& q6 X
  4.     if (this.health <= 0) {
      j( y5 Z( X: W+ X% b0 R* n' v, |" n
  5.         die();  // Если здоровье упало до 0, NPC умирает) I  o% H' F; i) z- F+ {! \! _6 F
  6.     }% b" K" S9 Q- |  Q! [  C
  7. }( h# ?2 ^$ x8 Z6 S$ A9 S( a4 f
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример6 R- w% V$ J6 y' f' B7 s
/ V+ n, E; w, w3 i. V7 b
  1. public void die() {  // public void умереть()
    ) D' J9 ^1 i' ?3 ?5 {3 @! @  [
  2.     // Логика смерти NPC
    ) ^* R1 Q" K5 ?( \2 O3 q5 |
  3. }% W& F# V4 {( A. }9 K
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:" z9 I4 t9 Q% @- g! }( ]2 a$ O
" u/ J& p( i5 _5 G9 Y+ v3 M3 I( h
  |( n( t) O* Q* ?* Q
  1. public boolean isDead() {  // public boolean мертв()
    # n7 Z% D$ f( ?) o8 U! e
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    + w( Z% T% }  @. |  a- t
  3. }5 ~7 p% H' U2 J5 u/ R
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    ' Z! e# W1 A$ f; h2 g) }
. C/ R3 x. O3 z+ J" {
  1. public void heal(int amount) {  // public void вылечить(int количество)
    $ Y# d* C& i, w7 `7 \0 P
  2.     this.health += amount;  // Увеличиваем здоровье% j% n) u3 e3 w/ C2 a7 r
  3.    
      o4 g; ^+ g4 _- g8 e9 \
  4.     if (this.health > this.maxHealth) {4 S" g4 X* N, H0 ^" p; w7 s
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального- b( z' ]+ C) x! H
  6.     }
    0 Q7 ~9 _; ^) T2 H3 Z! }7 ?
  7. }" Z5 E" v' s  ^$ _
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:0 H1 J5 b: c7 m5 P5 [- I

) i/ x0 P0 J) i1 t6 p: c: J: v
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)6 `, S- j5 Y9 r( C- o
  2.     // Логика применения скилла NPC" Z0 X7 r6 c2 {$ R$ ^0 C
  3. }
    ) z" Q" j. e: }. G/ w# q3 J
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    6 V9 ?2 ]. W8 a% i

: p( D$ o& p8 O& v& P8 c
  1. 2 }- d) u1 `+ I7 r
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)9 d1 ~: r% V. N5 ?& [
  3.     // Логика взаимодействия с NPC5 U. [" u+ |2 k4 {! `( k# E# G3 T
  4. }
    ! W4 {2 j8 Z  r$ u) O( S2 d9 ?# Y8 _
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:/ }# J/ V) w1 b; w. a

' X& w: t+ g+ z+ D
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    5 ?; K  R: k+ _- x9 M
  2.     // Логика открытия окна диалога
    , o2 J$ r* G1 y% Z) q
  3. }
    ( u; D* F9 F' k' m6 g
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
# Y' P& `8 A3 R' |9 x/ j* U# J8 KЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
3 l+ A' {; ~8 x5 R; l
7 R, C: K' a% S- d# l; ~( L# K& H$ V$ r% @$ B/ b
' Q4 h  M7 U) P7 v7 Z$ |9 k" O
" p; Y/ R! U$ G& j& H
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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