Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
9 ~( a$ k$ V" G( _! u% H, F1 s. X  e$ v& m

) n1 r' x6 w, x1 p( d7 WШаг 1: Введение в классы и методы на примере L2j_Mobius: m% A- F9 p2 \" p1 N; x
С статьёй можно ознакомится в разделе Обучение > Читать' Y2 f9 J, h& |$ l" \
3 E( ~: |5 R( w6 c- C9 A2 f
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.- Y/ o0 E/ @6 `. Y& C0 Q" `
/ u: `5 a. w! J! b; Z2 n" }
Обсуждаем:
8 A3 C% d  d/ G5 n8 N$ h
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    ) X0 R2 z+ I, h
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
# b* e+ ~% q# g  m7 m$ `1 R" w4 d2 n1 [0 p5 m4 D6 X

$ {, B. K# _. O( f/ `/ v. Q
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!& v4 }0 Y1 i# f3 L3 k% a! l4 g' x
" q% i/ Q! o+ r' `+ w

! k* v- H4 @; Q: t
: x+ I& K; h- C
; `7 ?" {' e5 s2 q9 u5 `" q& c# `7 x% U

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
% g2 c8 f' T2 Q8 x9 t
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
1 p" x+ d0 o8 F2 y" iПочему мы используем ключевое слово this для ссылки на п ...

* I: {6 b& d( j) l4 YКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
. i6 h& C8 I( f& h6 cПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса." D  M& v  Y1 b5 q: a! O) t

" k" M; z) y+ \' CВот пример:
9 \5 u. x$ R, U- E
  1. public class Player {
    ) s, i! u1 O  N. z- G7 u
  2.     private String name;
    4 n( s9 k# S0 |# j+ r7 Y! L& B
  3. * D- q- \; O3 X* M" j1 {6 U/ h
  4.     // Конструктор
    9 `4 e  d' ~4 f! z
  5.     public Player(String name) {
    " ?3 S8 _) _2 }, x5 {
  6.         this.name = name; // Используем this для указания на поле класса
    - u  i  t3 X  G) ]. o2 X/ k8 ~
  7.     }
    1 q+ m8 T+ T- f- b* t5 m) y1 F. a3 h
  8. ! T# o4 d! e9 `+ U
  9.     // Геттер для имени6 K+ W; {9 L# W  m; t/ I/ R
  10.     public String getName() {% u8 ^9 |! w  ]! P3 K+ m  {
  11.         return this.name; // Используем this для обращения к полю класса
    - H% e5 w5 n8 e# Z% S$ U$ J
  12.     }9 L9 c* B, K% v* H) w% {8 l
  13. }
    / O5 W1 L# j( r, O% E
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.$ z- d- g, i% O' M' J% @- A0 I

  }3 B0 x" i, }+ S7 E. D2 n4 tКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    ' H3 F8 C: Q: G+ Q" O
% D6 Z  k( I$ o) ~
Пример передачи this:4 Z  \& r  g+ h# |  m
  1. public class Game {
    $ }$ v2 B7 H2 c; u9 X$ u9 X
  2.     public void start(Player player) {
    1 P; t. h) H: m# e& w% e" D
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    ' ?, j3 E3 T+ k1 D8 p  s
  4.     }
    + l9 ^, A0 Z; S( G% q' G
  5. }4 \# n* s/ M' W7 o/ j) v  r  o5 G
  6. * J& Q5 o- j0 X2 K0 f6 J
  7. public class Player {
    6 K6 c8 ?; t6 q4 x; {/ V
  8.     private String name;( U6 _4 L1 \4 Y* i5 g9 w# T

  9. # ^8 y  K7 n7 W2 i: N' ]8 K  _
  10.     public Player(String name) {
    1 J6 H( ?2 h& `3 r" r
  11.         this.name = name;5 X8 @& T, M/ }: J* G/ t' U
  12.     }3 i& h0 b7 U3 ^, Q' I
  13. 3 w. o+ ^! O7 Y1 c
  14.     public void joinGame(Game game) {9 k8 D6 ]0 l6 I# `" p7 @
  15.         game.start(this); // Передаем текущий объект Player
    $ U9 g/ f0 ^- B
  16.     }
    ( D. h4 t3 G5 ~7 C; e; `* X# U
  17. }/ G( W2 D0 v3 i& p7 F2 ?
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.& z0 D  e4 l2 q& _6 j* S

. ?+ W- o8 |6 Y+ Y% F: }2 D
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
+ J, H+ f$ ?7 V: }3 T' i: \" v; W$ ]6 t5 a5 w0 R8 a
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! . x0 }- i' f$ `2 C* t  a6 v$ u# D
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 # \5 Q/ M% ?. @3 A0 u2 Z7 M
Mike123 опубликовал в 2024-10-17 20:05
. u4 |# M/ \; _# F4 {Добрый день!
8 N) F, d1 y& l% T: IКак создаются и вызываются методы в Java? Мо ...

: _# J# s/ ^2 g2 N$ \' pПривет, Mike 123! ?7 z3 `" |2 T! ?
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.( _) `- L) j$ ]2 f
9 x6 U. d) _7 p% G7 w) j
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
& r% n6 g) y1 r  `5 }2 R
9 C9 a0 m  p0 T  u6 G; L7 Q1 C
7 j. }9 D& G9 E! A, k5 \Как создаются методы в Java?# }9 B9 J8 _7 k
- `3 t8 Q( r' G5 T8 {5 X: j1 M% Q
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
" `, y1 W7 e9 ]& N- b" q& b
2 f, }" R* `0 x: J/ E
  1. public returnType methodName(parameters) {1 O  p- f, |4 H) O) P, |0 Q2 q
  2.     // код метода  p, s' i1 A0 P6 @& q- N  h
  3.     return value;* n: Q: s1 u/ p+ F+ M
  4. }
    - u. _% U, L; l; Y$ w
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    " K0 N: m$ k' T8 e0 @( g% U: H$ @

* B& ^; s$ S9 a, Q1 AТеперь перейдём к примеру.
3 U/ Y5 h! a& D4 x( s9 F7 D% I+ X! h8 W3 W1 v3 _
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода" |2 F) o& d* Y+ I/ Q' p6 K
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    8 Q7 N: v5 t+ G
  2.     // Вызов метода атаки NPC
    1 B$ q; S0 k6 Q4 [, \
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());: R! W7 U9 c0 p8 M: [- m
  4. }
    0 ^% C( c' C6 V  m
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
$ e+ D+ _7 U2 l# Z/ x& E- `0 A" Y: I

' J5 G! k/ c/ e4 dКласс Npc.java — вызов метода
8 F2 K5 b% t0 J( Y1 Z- v
" {9 g' \* v" v
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    : `4 }9 o9 @+ V( w# d0 [' M
  2.     // Логика получения урона NPC3 B% n" Y4 e9 w9 G2 R9 g. K
  3.     this.health -= damage;  // это.здоровье -= урон;1 c5 K& x. t+ d/ F% O% _
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    . A1 Z2 E3 \+ [$ x
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    3 s, z1 |( l( A/ U( Q/ B2 L2 X
  6.    
    4 s! L9 k( M( b
  7.     // Проверка на смерть NPC
    & F. x  Q) \& X6 Q8 C1 g! Q
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    * r; i& P! m4 q. a
  9.         this.die();  // это.умереть();! W- A' s9 [' g# V, y
  10.     }& g  y- a) ^9 k0 R
  11. }! M. V6 ]9 ?3 f9 Z9 Y7 |1 _
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    : y! m! R: F2 B; z# L/ }
Пример взаимодействия (с переводом)
; U8 k( `4 T% S2 r8 E9 O
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    1 ]+ g2 K. _% G2 I
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    . C8 V" o; T" P; _
  3.   `2 A+ {/ t7 b' W
  4. // Игрок атакует гоблина
    ' @+ Z. h4 u: `# i+ X& _2 O- l
  5. player.attack(goblin);  // игрок.атаковать(гоблин);  H+ T' [+ I8 X" L+ `
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
$ o7 z" c: I9 e/ F: l6 M5 c3 R- {- U1 |% o, u/ ?2 `' U  S
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
$ w. P9 N8 P: r. ?6 OУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!; P& D* D; \! l% U( f0 w7 Z
4 i$ W. e, C; X# B- ?, a
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
% {/ u& |% W' A1 b  {Привет, Астралия! Огромное спасибо за твои разъяснения ...

4 m4 N- X5 a! n" X' UОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.& ^3 f; d! x! m4 x
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример! [$ i4 z8 ]: v5 s
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    + ]; `* z2 y) L3 e% P$ U

( S, T4 I0 Y9 j: {4 P3 @
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)0 P2 V  B. _% t/ ~
  2.     // Логика взаимодействия игрока с NPC; Z% {" Q1 D- k% x2 Z
  3. }
    8 l8 ^$ X# `" W" y3 f
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:  g) f  d. q: [% X/ M/ Z
  ?! v( p9 e  M! q/ x
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    / [9 G' O4 ]# N& C- I
  2.     // Логика перемещения NPC: q$ `  d. @4 `
  3. }
      ?, N$ P# j/ l" w; M
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:% c- _2 x2 {# z' \0 g9 V! m

. W2 V% _* q# D6 j5 F) ^
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    5 f. t5 h/ j7 P( K: f- i
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    & @$ E; v6 }4 b$ e& @3 V- j4 C
  2.     this.health -= damage;  // NPC теряет здоровье6 e4 G$ l2 V4 O7 @  B5 w/ V
  3.     0 c2 I( v0 [  s, k7 s: U7 t
  4.     if (this.health <= 0) {
    " n4 q$ {+ b# q  M
  5.         die();  // Если здоровье упало до 0, NPC умирает. g  U1 C4 [. A; b$ {0 P* v
  6.     }1 p' ?8 ]5 d; }; n) @% S
  7. }
    ; h/ s/ q1 T& P# u# ?: T, z& J, f+ I+ @
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    : s0 P) w: X. t: i% Z2 \
/ @4 u& o9 s% o7 e
  1. public void die() {  // public void умереть()
    ' J; L' D) }. Y2 ?4 s+ }/ o
  2.     // Логика смерти NPC' S0 Q- u# D1 H
  3. }
    5 O) b/ X$ r' T% |9 k- I
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:$ \, a# j7 C9 u8 Q- C% j9 w/ e
! p3 D$ w" m! {4 i

2 Y1 d3 Y' m9 c% ^. O: h
  1. public boolean isDead() {  // public boolean мертв()  E9 ~# I( ~. {
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 03 m! T' ?7 F( d4 w7 `0 `
  3. }
    * ]) h9 b* D- v8 e2 T1 P) ], N
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    2 @( f1 o8 u8 S7 ~

, W  @: ?  ]8 `% L
  1. public void heal(int amount) {  // public void вылечить(int количество)
    9 L1 N5 Q! M8 ~4 g2 j
  2.     this.health += amount;  // Увеличиваем здоровье
    4 g! @1 U/ X0 _2 V. t) D
  3.    
      `7 W- I& a# y" B4 ]$ u
  4.     if (this.health > this.maxHealth) {
    $ _6 L# q9 h7 [' T
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    - r9 T1 M7 V: j$ l( p7 N, e/ _  L
  6.     }7 i" A) F: w1 k+ ]1 l5 q; @. ?* }4 |
  7. }
    9 ?' y9 q/ m- B4 Q- f0 v
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:2 T+ J0 H; ^2 I' f

1 |7 P3 y1 P0 o
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)) g2 a5 i* ?7 @( F+ i
  2.     // Логика применения скилла NPC; G6 N* G) K0 o; L' ^. m
  3. }% z- Y6 U: B4 p( j( K! r0 l: T
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:& p, Q3 P: P0 v4 ?3 m4 P8 p) G
. g4 r$ m% `) G9 d1 w

  1. 6 G, J+ D) [6 s: b0 H6 M
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    & G( ?9 I( ]) o+ }9 i( u
  3.     // Логика взаимодействия с NPC
    + y- F' z+ s0 N) j9 L6 G9 |- x! a4 m
  4. }
    0 h6 U+ n2 D" b2 ]( ?
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:9 V4 `+ m# s1 D8 p! ^2 B

; c7 |; ?8 J7 A7 n% ]* D
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    + J/ M3 r4 d: V* e2 q* }
  2.     // Логика открытия окна диалога" f: L9 G! [4 K. ]; G) d
  3. }7 s! n; D" P- ^5 ~5 q6 {
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
1 E' z$ \  t. S4 U* j2 k; VЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
) E. a3 g, i' U" T$ V
( ]* d3 y1 \# c& U, f
% D# w7 V7 {" ^" V; |0 C
9 Z$ z6 a* Y- |& T0 w
8 z, g4 F6 e8 f- ]7 [, F0 H
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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