Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
2 u, f( J2 a5 p) Q; _& w$ G4 c9 `2 @5 s3 F. m$ m
' y- m  r8 j( D1 t7 X; O
Шаг 1: Введение в классы и методы на примере L2j_Mobius
, \4 r# a% d2 }8 G* B, BС статьёй можно ознакомится в разделе Обучение > Читать
: K6 V8 [0 v$ g0 x
  f- d0 F. ~# h+ u! Q" }0 mДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
9 _' c1 N* J* H8 J3 T: w1 T, I3 q& W$ l- W  Y- U6 M5 _  g7 C7 Q# T
Обсуждаем:
1 H% u0 Y" n" u8 z$ a7 v; P0 c
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.# Q( ^; `! Z. d! `
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
3 V' O" Q  `& e
' ]3 ^5 ?/ E! X* d
' L+ o; x" K" b0 M
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!  u# D5 B4 z- [5 h! c
8 I& p( ]4 A" E' l6 g% k

4 t' B2 Z1 E2 H( i" |! Z
  O; _) ?, Q' O) `4 }0 J0 J. X
* m# M7 _3 y: u5 S3 w+ L- u) A6 p
1 i, D: k2 b& b* L9 }# V, P  R# f

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?# E7 }- @$ M8 D% M4 ^! \
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17# J( E/ s8 J" V0 x: ?; s* V
Почему мы используем ключевое слово this для ссылки на п ...
# p3 P% Y( r0 ]5 e, P
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.* t- X. F, ^8 p8 M$ _1 C
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.' V" _/ A8 E7 N% B3 X% P

, n% m  n/ X$ ]4 g# YВот пример:
( c' d3 }" ~0 z2 \
  1. public class Player {+ B# _" _: H* |" h8 c+ a
  2.     private String name;) b1 q4 V$ J( [% A

  3. & ^% K( g) s% c" D" L" \! P
  4.     // Конструктор. q: Z/ m2 N. b2 C
  5.     public Player(String name) {
    . Q# B5 X! j$ r. n# U! M
  6.         this.name = name; // Используем this для указания на поле класса( L1 U" h+ b9 `) Z7 t- Q
  7.     }6 n+ N* K2 M: C) R% r) I! D* J
  8. : m; C3 o# C1 A0 c; U7 f1 ^
  9.     // Геттер для имени
    ! T  @2 B) A3 G0 e& S2 Y4 e
  10.     public String getName() {
    * h7 H& ^. J2 i3 j
  11.         return this.name; // Используем this для обращения к полю класса
    , ~1 l0 K! V5 J6 r0 |/ F+ k4 n
  12.     }  R3 M! j, V1 {( i2 m3 Y+ `
  13. }
    0 n& V# P7 ^0 F
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
/ t% K8 R' S' `8 K& V3 |* p; J
& w; V: v& J! d- y# q$ e3 YКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    ( L) \- ?+ C2 _0 Z8 @
9 U4 a2 c# V* Y' i( y
Пример передачи this:
( Y. w' \' X8 o& @7 i2 M6 C
  1. public class Game {
    % E% E0 K1 B* }7 t" m6 j
  2.     public void start(Player player) {
    6 Y* J& o5 V- [) A
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    , t1 M. K* S5 n8 K0 C# u% i, h
  4.     }+ f  |" U; L1 I4 Y* s) N
  5. }5 k. F% L6 e2 g4 ?5 {* h

  6.   a$ V2 V7 E8 g5 l" c
  7. public class Player {
    $ b- p8 c# ~7 O& Y; ]- s4 m8 `+ ?6 D
  8.     private String name;# a& x+ e% q  G
  9. 7 p% Y( O' k7 |" Z" s! l% ^) w
  10.     public Player(String name) {6 r; x* `' Y1 r; ~
  11.         this.name = name;# u) ]8 R+ k+ ~
  12.     }
    " ?9 k) {/ O3 ]5 i: Z& o

  13. ' _& K. f. i! N0 f4 r
  14.     public void joinGame(Game game) {
    & k1 }* }, F* {. ^, h* \9 @
  15.         game.start(this); // Передаем текущий объект Player: g# n8 n, g& |7 j5 t
  16.     }
    " B& e' Q2 |* P1 l
  17. }  b4 v  ?6 z. W4 k' h# x
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.: j8 T2 h2 u2 r5 S6 |. t; z( E


' ~" U' E" o4 D8 m; b- e. ~" WПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?4 |4 s- o/ }+ b. |% @

4 P- J1 o' ~5 b9 C
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
+ c) m4 |* @1 O6 e) i5 a0 g; KКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 % h" F# \; w, Q- {8 L# C! z
Mike123 опубликовал в 2024-10-17 20:05
- a" e: S$ \5 Z% U9 MДобрый день! : N* j$ r( k+ ]  g$ p# ], W
Как создаются и вызываются методы в Java? Мо ...

  D9 p4 f" }9 t! Q) Z$ B5 eПривет, Mike 123! ?9 E6 |' t5 a/ P4 M) o
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.) F0 F1 A; d- X; _4 J
+ y" e% |8 s1 V" }3 K* L5 j% C
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
. C/ S3 D. m* ?8 G& f; L! R0 y$ \  q) q4 S" {  k5 K7 Y

+ V! S$ F0 r* ]6 n4 B, T! P/ f( \Как создаются методы в Java?8 E3 y+ O: y7 G2 p, F
; a2 d$ k$ }! S. {$ @0 y
Методы в Java создаются внутри классов. Вот базовый шаблон метода:4 @- w4 a& i5 C& U7 G& X
8 e6 R' P/ H) d
  1. public returnType methodName(parameters) {
    2 U" P& G2 a: Q$ x! y1 C8 G! n# |
  2.     // код метода
    3 M$ Z8 x) Y% s5 T- o
  3.     return value;
    ) ^0 m6 x2 r1 A7 V7 ]" X( {
  4. }9 [0 r% d/ v$ J' Q- }
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).2 N3 f* u- S, T" C8 z  Z

; J! p6 c- w( e. ZТеперь перейдём к примеру.
" u! t# S; Z: z
% k  G  N; v- G. w% jПример на основе L2J_Mobius с переводомКласс Player.java — создание метода5 V3 ^4 W: ~" Z5 R* S
  1. public void attack(Npc target) {  // public void атака(Npc цель)/ E, |2 `" B8 I9 j2 \
  2.     // Вызов метода атаки NPC
    . N$ y# l' m2 |* d
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());* k# r) |8 K0 Z4 I: Z7 a0 ~6 ]
  4. }, w! O" @! ]1 v/ a5 r
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).) w0 P2 A4 E) H
: }6 B# R8 I" R* K
% ]9 V" g, R$ r7 Q9 {. p  B: U" `
Класс Npc.java — вызов метода
( R6 l0 A/ R4 @" ~& ~8 T3 I* x# G
* [+ q& T: Y( Q6 H( L
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    9 h, ~2 w1 P, Z' Q$ Q1 M% \
  2.     // Логика получения урона NPC8 S! d  _! _% Z3 h
  3.     this.health -= damage;  // это.здоровье -= урон;, c; t! y  [5 z. ?* U
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    * r0 X4 z* l4 T7 S% Y
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    1 k1 D$ b9 O  q4 A
  6.    
    , |. i4 l1 g6 L; R7 g+ o: F
  7.     // Проверка на смерть NPC$ x6 t$ g( R" N& p# {1 i+ T
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)- A! K8 r, U1 B* r1 m0 r; T
  9.         this.die();  // это.умереть();) Z' h- h# Z0 G' M0 r" M9 D
  10.     }
    5 y7 \- V& K9 A- ~$ B3 X
  11. }" _( h) |" w5 d  s" A/ p7 R
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    ( l, I* C$ H8 n  r' F
Пример взаимодействия (с переводом)
# K+ E% @" b0 x7 y7 P+ i6 [
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");% \# R; ^9 L" d8 e5 ^
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");1 A: t+ j: P; a$ m
  3. ( i. I( @# c1 E
  4. // Игрок атакует гоблина5 R; U. ?3 b. q. Y. X
  5. player.attack(goblin);  // игрок.атаковать(гоблин);; j/ ^( o6 b8 ^: W' Q: S
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. * `2 X) l! [' W* y1 p0 A' }

5 j6 N; o- ?0 e" b: r
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
0 j6 k( Y- h4 M+ B0 E* a4 j: EУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!1 K4 F7 O' k, F- T9 T7 L
( t0 C! g  S! z3 ]* N
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:302 j; p' P$ R" B6 Q! ~
Привет, Астралия! Огромное спасибо за твои разъяснения ...
& F5 d& G$ h; p1 v" r/ {' V! S
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.4 g+ ?! Z, x' S2 N, j3 O& I
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    4 ]/ J+ f' v3 g5 m
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    ! a& U( J$ G+ c. o# \3 B! m
6 O1 k2 y2 S! s; t  A* A' ~5 x4 C
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)5 S! _* V4 N4 E2 w% Z+ T0 y
  2.     // Логика взаимодействия игрока с NPC5 |5 @; [" \2 _0 P4 x6 z+ w
  3. }
    ( \5 b2 [% \7 t  l
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
      `; l' j" L  S! u
5 n! f& j; T  T7 M; K
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    ' q% \+ i0 V, j- ?& P
  2.     // Логика перемещения NPC0 y- N* i) i- r0 @0 c
  3. }5 u- Y6 G% A7 T" @+ G
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:0 Q' {( I% e, @

% m1 h1 F& ]0 r9 }) s% d+ u
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример5 B; T2 K- w* [. R
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)6 ?; D3 a4 d# `: m; Z
  2.     this.health -= damage;  // NPC теряет здоровье
    ! c* _& [/ U% X' d
  3.     7 H! `8 F" B$ u
  4.     if (this.health <= 0) {
    - }' |  q" x( d+ v; \/ ^! F- n8 `+ \
  5.         die();  // Если здоровье упало до 0, NPC умирает
    . O+ E& q5 O; E7 [$ O
  6.     }
    / D& f; u; A/ r6 N7 t  ?: z
  7. }5 ^4 a6 }; n: M* ]
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример8 F' B+ ^. K2 j1 f0 L, a* K
6 e! }: `9 Y* V5 E3 @! u9 u9 U5 T
  1. public void die() {  // public void умереть()( n/ A) Y7 s2 Y
  2.     // Логика смерти NPC' k0 a. k' }  h9 R4 U  s" k
  3. }
    * \# j! M: X6 c! E. M7 K) F( ]- j
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    8 e: ~2 V$ G$ x/ N$ j. L

$ @0 T. V1 m( E5 m# [, G8 ?
$ n' i+ U* \2 M/ I) t
  1. public boolean isDead() {  // public boolean мертв()" W! I, p  e/ E8 p9 P
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0. n' x6 ]/ ^/ m& D. ~
  3. }& }: u$ o# Z5 ]% v6 j. Q! z9 R
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример9 [1 P: z5 z3 a

7 z) n: N& G7 o) A
  1. public void heal(int amount) {  // public void вылечить(int количество)2 w0 T; r' K2 o$ w( \. S
  2.     this.health += amount;  // Увеличиваем здоровье  M* @+ p/ V+ H3 z
  3.     1 J* J% f, ~1 y+ l' r* L
  4.     if (this.health > this.maxHealth) {
    ' n# y4 j+ L$ |! ?4 h1 [# }' [
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    & i0 X% T) D& @
  6.     }
    : Y* B' H. ~6 E" q
  7. }
    * A, C& M# d# g8 E5 ^* j  x4 L# x% Z
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    " H3 W, V  v3 t4 ^
- u" n: V& D0 }
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)1 Z! L+ s( H( v  x3 h) b
  2.     // Логика применения скилла NPC
    " Y; Y2 l% E% |% C, |3 L$ D
  3. }
    0 o6 T: ~  m8 L! e4 K% `  q
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    2 C1 m7 @% J" x+ n! N% Q4 x) _

3 C/ Z1 R, R! t! U$ J# i1 g: X

  1. . z7 Y- I4 w! \" K+ M: s
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    - |; ~( r0 y8 S* @9 S( c1 G- R
  3.     // Логика взаимодействия с NPC4 N/ p: {! h) f# a3 |3 k6 i3 M
  4. }7 r) z1 p5 O* h! L) W
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    # \* u  [& V/ W8 w! Q2 k6 J

7 M, x! Z: q- P' E6 m
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок); E& A) b9 r% [: B
  2.     // Логика открытия окна диалога3 s+ T9 f* r, l2 c  Y
  3. }
    9 X+ b* L# U5 r! U' r
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
$ N5 |) p7 x) y: z' xЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
5 n5 r' x9 ^. l, z. X9 X% ?. q# U/ D
* z, ^( S8 U+ D
0 l# s; P0 M( R: m- y* s# f. }$ V. _7 g
. R+ O, j5 w4 E. D
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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