Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
8 I2 _2 l0 Q+ G- b' F: v& L+ _3 A: W+ y& g- S
7 ^( p! d( }; E% K5 z9 @
Шаг 1: Введение в классы и методы на примере L2j_Mobius
2 x5 x7 x) `. f) wС статьёй можно ознакомится в разделе Обучение > Читать/ ^/ e$ u9 K* T0 M* [
" x" u* p# i+ `1 A* R( J  h
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями., C! G: G9 N! }1 g6 |6 W

9 |6 F6 r+ A) @Обсуждаем:5 X# X7 B( y0 \/ i3 r3 v
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.8 j& c+ b8 p9 w1 C' V- p
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!- I9 Q% }3 m  Z- j( B4 T
5 F5 O6 W' h: v" i6 @


  {* J( R, a0 y, w9 eИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
1 T. f6 b& p$ X0 D9 D
* k+ h* x4 \5 H. _# P4 _" q. k: N- ]7 N8 T8 {8 V5 M/ x
( A1 q* p7 z) w0 B* Q" i

5 s$ `- a  X$ ]; H0 K. F( P
: C2 n- ]) t& Z7 d* @) A  |3 F

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?* t1 O6 s0 p- U6 e9 S2 @# y* y
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:178 _3 m1 Q* A. A4 s# u1 g
Почему мы используем ключевое слово this для ссылки на п ...
3 d6 d$ }/ _: Q
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
  O( {* [3 r7 t' b, hПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.4 c  z, M0 w- M: S

8 r2 c$ k9 s5 }) {1 xВот пример:
& U9 p, @; i- R( O$ y9 O( J8 Q
  1. public class Player {
    + Z) f& k" J6 u
  2.     private String name;
    ( t) l: v2 F" G9 B; W

  3. # u: w8 C7 W0 ?$ H- r* f2 K! b0 O: ]
  4.     // Конструктор
    + d; k4 A  f8 k2 m2 n
  5.     public Player(String name) {
    9 M* h4 Q) f4 z  I2 [9 H3 P1 j
  6.         this.name = name; // Используем this для указания на поле класса% y9 X7 |" v* ?( Z3 t
  7.     }% b! |( m$ h  a0 ~/ A% [

  8. 7 G, j) G2 O& l. ^  a
  9.     // Геттер для имени0 h3 k5 B) ?. o( S
  10.     public String getName() {3 V5 l9 A3 W  }" w
  11.         return this.name; // Используем this для обращения к полю класса
    . M( o4 L+ l5 U: O4 \  l
  12.     }
    ) g5 x$ F# D0 y) `
  13. }
    " V9 `2 J) [3 D: s3 [: \. y1 N
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.4 Q8 N; {0 g# h: E1 r( g! J
1 [9 R& U, b. P4 A' w( u
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    % }: n9 p5 N7 H+ L" V

4 y( G: Y  ?. a* ^7 {  fПример передачи this:. @; `- r5 n) a, W$ e" _) z' u
  1. public class Game {
    * ^) ~* u! w' A
  2.     public void start(Player player) {* {5 Z5 r( F# A" o
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    + n: a% {% c. H- {+ s& ]/ ^
  4.     }* }+ H) ^; C- k( o& e2 F# P
  5. }
    " E7 _6 p5 L4 ~5 t8 H6 a6 Y
  6. & h! z9 f! q$ ], G
  7. public class Player {
    + @8 i% v  P8 C) j$ H( K$ _
  8.     private String name;+ c* o7 z, H9 F. Q' c$ S

  9. 4 i( x& j8 }* \5 r7 |/ g
  10.     public Player(String name) {( t7 w+ s- a. P2 b% w
  11.         this.name = name;* p% t& v) f  ]- y1 u/ Y" y
  12.     }& }' n  N9 B; a
  13. " P6 i/ R5 ~7 B  M0 B& ]
  14.     public void joinGame(Game game) {+ [' d# w% P& B: T
  15.         game.start(this); // Передаем текущий объект Player2 \6 K+ J- \' k2 ]
  16.     }
    ! q" }6 C. Z* E) D0 l
  17. }
    ' Q) l+ `& v5 U0 U  M
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.4 g: }: B& [! |& Z* q) z3 ^# o


! L& R" j! ~  G0 bПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?& t4 Y5 q. x8 T* N3 W9 y+ L

8 r' Z# d7 b4 F  Q8 }, ^
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
+ y& T$ Q* {  |5 mКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 + x* O4 k- M0 z! c+ i
Mike123 опубликовал в 2024-10-17 20:05
% x( o- u; q; b! d4 p6 sДобрый день! ( V  n% h9 C: p1 _
Как создаются и вызываются методы в Java? Мо ...

; v1 ~9 J) L' jПривет, Mike 123! ?
+ f3 W8 s- w5 W, CОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.0 ~+ c: l- u2 q; `

* u+ A+ m6 b' p/ YДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
, A" a9 U% X$ b: W* X/ v/ m( c& t1 m3 f/ |9 N5 C

4 P2 P# I) S  \2 G- A; I8 T7 ?* {Как создаются методы в Java?  P. ?! P( u1 l! n; e8 L& m4 f

3 a& H) X" d* ?) B: dМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
6 s- T; A3 |8 t5 J6 u0 H- R' b% l( I3 p" A4 p  m
  1. public returnType methodName(parameters) {& Q0 `$ T: E( i* _) V
  2.     // код метода: L; _  S* u+ a- e  e- S
  3.     return value;4 b7 Z7 c, [7 r/ Y. B
  4. }
    8 @% Y) M- F5 ^1 {6 h
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    / f! ]$ `; g. ?( i
$ X; r4 G" p% G' Z. @
Теперь перейдём к примеру.
6 l* ~: h1 O' ^2 a1 k4 u; ]7 \- G; \' \5 s+ Z, O" t7 H
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода1 g- e6 F6 V- O
  1. public void attack(Npc target) {  // public void атака(Npc цель)8 f4 A- t5 ?2 t1 T: R6 M) O* A+ c' v- U
  2.     // Вызов метода атаки NPC
    - q& B6 ~8 d$ u+ B1 d
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    + z7 F) F8 Q; Y2 \1 f- Z. n
  4. }. r. f: j9 s. B$ y
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).( P* l. m4 `" ]9 ]
3 O' {) M; S1 \! V$ R
5 e* r  p) `+ \) ~2 p2 L
Класс Npc.java — вызов метода
: W" r6 g. Z$ s3 b- c& l, e2 [: Y( Q) S; O; F0 I
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    * P) y: O5 F) m$ s8 e+ Q
  2.     // Логика получения урона NPC3 H, G4 N: B7 P2 t
  3.     this.health -= damage;  // это.здоровье -= урон;
    + q1 P+ V) t& J; k; M, i: \6 E) `" t
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    % V1 v+ s+ L& Q$ j# s$ {
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    . P& l" i- T2 J- ^6 `9 n; X
  6.    
    - {4 c& b) u# c4 t& q
  7.     // Проверка на смерть NPC
    + H4 K8 l7 U2 I  Q% H
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    * d/ _* u% e5 b
  9.         this.die();  // это.умереть();
    5 ~6 U& l# ^7 o9 [
  10.     }
    & m' V& R- g# T* j0 H, L6 o% G
  11. }
    & u3 O1 [! u7 \( n. j
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    ( H3 F3 _0 N4 C! u4 c, L) Z
Пример взаимодействия (с переводом)
# U# H* L! r$ I( |/ j. C
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");$ q" Z: w( a; Q% Y, Z: Q
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");' U1 K3 n; i9 {  @6 ^9 @

  3. + I. Q' X; p. O4 v) T7 |" l, K
  4. // Игрок атакует гоблина! I! F5 r% B: a/ V) k
  5. player.attack(goblin);  // игрок.атаковать(гоблин);4 g) j* t# ~, H, ]! `/ c
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
) b8 d4 g% I4 d- {; S& {2 n
+ K2 R/ \# ~  R; U8 ?
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
, t- @" A, T6 E/ K% j/ OУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
1 S6 D8 h& m- V" O  u- p- N1 M) }8 d0 D' B( `" Z* a, d& c
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30! b* u+ \) v% g  n2 ]+ A( v5 Y
Привет, Астралия! Огромное спасибо за твои разъяснения ...
7 C* k0 S8 {0 h0 o
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.; e  H0 N+ z% S5 }& j
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    , k0 ^! [- i4 _: c1 e0 X, l$ ~
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    # w: Y( ^. g8 G7 X" K: O$ t
! d3 [* ?' ~7 j1 u! [3 |9 E2 I4 W/ o2 ]
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    1 s; ]( c" B$ E7 Y, o* J2 Q
  2.     // Логика взаимодействия игрока с NPC/ `+ W1 k0 o4 S& a5 L2 [' g- }
  3. }1 n! `, R7 F0 q2 ^( B
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:/ E2 y) E- d" C+ `

/ X  m- }+ m! _7 P7 E
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)1 m3 Q+ p8 X5 ~: I/ Z
  2.     // Логика перемещения NPC
    , E1 k; B! O8 g% W7 e6 Y
  3. }2 r  v# J* ]: I6 a
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    8 _+ V: `  Q" [1 W
4 ]: Q5 `+ b$ Y9 ?9 Q* C+ E
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    ) F, R) ?' ^! O( N6 c
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    1 }1 m- W2 Q. Z! S) h
  2.     this.health -= damage;  // NPC теряет здоровье. V' X1 g0 q3 u& O( Z0 C3 L0 b
  3.     $ t9 C1 G" m, {2 |  A; w
  4.     if (this.health <= 0) {" h" l% W+ k4 U& O1 \' `
  5.         die();  // Если здоровье упало до 0, NPC умирает, R) k- ]3 j6 J# P0 a) C- u
  6.     }* Y8 B2 B+ W. q& k7 n4 F* D
  7. }
    $ u( z! ]; W  H" W# z( Q* K; c
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    + J  F8 Y2 o& t$ t

0 `1 c8 q8 _( Z& M# x) n( R
  1. public void die() {  // public void умереть()
    : c* F, b  g; ?8 K, f
  2.     // Логика смерти NPC
    * R/ Z: |  Q. {# ?" n. p
  3. }
    $ a2 e" p# W! W; |& k* N' _
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    ) w* C: U" i4 Z0 l0 [" F7 X& Z

" K* Y5 w+ K9 o  V# C% Z4 X. n" z. }0 h  ]9 H! K
  1. public boolean isDead() {  // public boolean мертв()8 p/ K, k6 C/ q; H' s% `+ [! N1 d' f
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0/ I+ z- R7 `: i
  3. }
    . W2 I; H& V' \) W8 i/ E) `
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    1 s% u, r0 }4 p+ G' Q5 N

4 Z% D8 B$ R8 y) N
  1. public void heal(int amount) {  // public void вылечить(int количество)
    * J5 g3 @. s; g$ m/ S
  2.     this.health += amount;  // Увеличиваем здоровье
    ; {' b( T& G3 ]3 X' I$ B
  3.     6 b8 A7 ?; h8 l( ]+ Z  n3 A9 e4 `
  4.     if (this.health > this.maxHealth) {9 G7 w- Q9 e, r1 ^* X+ L8 o
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального* C0 n) f- a0 V0 M$ H6 ]9 F
  6.     }
    ) q$ x' f9 @: y
  7. }; s2 A% A% Q  V8 H
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    + w2 a" s' A( }$ o3 s* f

/ Z& p) P- h6 `6 f
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)8 j: A' X7 x: ~# F
  2.     // Логика применения скилла NPC" }) b9 C$ o+ d$ w$ U; Z3 r
  3. }
    ( D2 |$ \$ ~  i; B8 i/ ~) \8 a9 j
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    / I1 n. Q. l) \! v' o
2 b* l3 |# \0 H% n* `1 E

  1. ( i# b: x  Z9 ?$ A, I( J
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)/ [+ ?$ X( t  O1 V2 |) H
  3.     // Логика взаимодействия с NPC3 I2 n, p: U" U, W
  4. }
    0 u: l# u% U) V! f8 d9 n
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    # G- G. {: {: B" _, j9 N
& z/ w$ B6 v9 o! @
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)) \: D4 }  _: }% K0 u5 Z) g
  2.     // Логика открытия окна диалога
    ) q% J. C3 |% g  ?3 u: \+ i
  3. }
      _0 F! k6 {/ L4 M( \& e5 @
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.8 Q$ |- |/ v3 X5 k& H# I
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!# K* s% L" l: ~- _3 N% y) B! Q6 s
& P8 k7 ^! l( P0 |; S& {

. X. J# t+ T+ v! H3 @" U2 z2 q4 a3 T9 B! `* c
9 u7 p7 k9 W& z7 _3 q
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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