Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 2 [& R2 r5 c3 O, k2 K

) d/ C8 t" n- B" }
) ?6 Y/ C1 u$ V* }# yШаг 1: Введение в классы и методы на примере L2j_Mobius
# y3 h! C2 e' A1 c2 G0 wС статьёй можно ознакомится в разделе Обучение > Читать
6 E( G# M, V- u5 }
0 s: P. b3 T' w, R& BДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.& H: k0 B( W; X& W$ m* }

4 }  f4 z  ^6 k  \Обсуждаем:
2 k4 v' ?) F0 q: }) l
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.2 P8 X6 e/ P: g$ w
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
+ t  i6 j: S; r* {
7 |: \/ }+ ~# h( \  W- W

- R  ?; ~0 v4 p$ p: l, \* UИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!2 H: w9 H0 Z. n

1 `  a# `7 T8 j$ M7 ~* e( e1 G* k" t  R8 H" r

7 t0 v+ F% O9 V9 w! I
- I- P1 P) ?- ]6 S! G" R, C1 q7 R+ k4 L. G

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?. d( I# {! o/ r2 b
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
. j, G# Y& F! M7 ^$ r6 f5 Q7 nПочему мы используем ключевое слово this для ссылки на п ...

/ f9 O+ V3 K4 d$ ^9 O7 h4 o, i, LКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.4 F3 Q  @% D( T4 @4 j
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.$ c2 z1 U# Y5 |, W0 S4 p* B

# u+ ?" c1 O4 P0 _2 A% N: `' k' MВот пример:
/ W0 b- ~' h# N9 b$ S# C
  1. public class Player {% M* H) ^3 ]1 |- j
  2.     private String name;/ z" P+ l8 `* f* B$ p' x# F8 _
  3. * p( ?6 s, L$ m# u' p8 |
  4.     // Конструктор
    , o2 A* `  c. h! L+ Z) G# }3 Z
  5.     public Player(String name) {3 h' b. g1 c& L' h3 g; r1 T
  6.         this.name = name; // Используем this для указания на поле класса
    ) [# a) N' s0 C: g! O6 \& V
  7.     }1 A+ e- X9 V+ \/ \- J5 A
  8. 4 a# q0 J1 ^$ C7 ^
  9.     // Геттер для имени
    4 U: N6 A$ |& A  ]5 @; D7 Z& Z
  10.     public String getName() {
    % |9 j+ s- @9 P: v  Z8 Q. N
  11.         return this.name; // Используем this для обращения к полю класса
      S' \2 `* J4 q" ?3 G1 q+ {
  12.     }
    : I# q' J2 X0 x  c3 }  O0 p# u9 k
  13. }
    & ]1 \; G- d6 l3 f
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.% ~: J: N: L+ j0 t& o
, \" A. d% U. M/ s2 e2 G
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    4 |$ t  W: F. H  m! ?6 ~

- z- R! c, S* mПример передачи this:: |" U  a: S8 _" s
  1. public class Game {( I$ j7 L1 @6 ?; r) |0 |
  2.     public void start(Player player) {* v- w; X2 ^9 ?" ~1 O
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    ! N. C6 O. Z+ B" |( @
  4.     }
    9 F1 S/ o# t, h# b4 H" i
  5. }
    7 K1 ?0 a! c6 u" P
  6. 2 W0 Q4 N! y" A4 u! A& ?! j9 b
  7. public class Player {) x" |7 ^; G/ C
  8.     private String name;( G0 d& T  l' W% r) ?+ p

  9. 2 r6 f' R$ K& O5 `! Z  {' K
  10.     public Player(String name) {
    ' x$ a) R1 K0 J! N4 @" t
  11.         this.name = name;" [2 _. P0 c7 W
  12.     }9 e7 _' [5 S* h; T6 v1 ^: [1 T
  13. " {5 k3 x% \4 Z3 T. Q4 B
  14.     public void joinGame(Game game) {( X/ L' [6 c, O. Y  F5 L
  15.         game.start(this); // Передаем текущий объект Player
    ; y0 j6 l( t- U' M' l, h; V3 i8 q7 i
  16.     }4 C6 Y  D% j- N+ s7 [
  17. }& v. F1 G& r/ `
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.+ n6 Q2 P7 Z7 A/ ~) |+ g& m


8 x9 [. w9 p5 w6 O% B5 }Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
4 c, Q1 Q; a, c6 z
$ u: v/ K) ]5 }; y& X  b+ Z; k
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!   u/ F7 G4 _$ F* I
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 0 B) k! S' j5 T0 S: J% @& w) K9 z
Mike123 опубликовал в 2024-10-17 20:051 j4 c) X7 C0 N$ t  }1 u: J5 a
Добрый день! . ]: f3 a: c2 D) b9 z; Q
Как создаются и вызываются методы в Java? Мо ...

0 {( r1 j/ n# i& u: T- M4 JПривет, Mike 123! ?
5 Q/ }. T, x; k, u+ bОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
' s6 A' ^% |$ m6 r1 v8 t6 `# R3 P
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.  A5 A# c. ^  p/ b. J, K$ c

# }# b. [  \" I4 J6 s9 F2 k  |0 y
Как создаются методы в Java?
- s, D7 d( g2 X! W
7 i0 m- d. z. G) ~1 ~0 qМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
' |7 Y& N$ @5 t+ }: i  z6 `+ l; h4 A9 }/ K, v' Q
  1. public returnType methodName(parameters) {6 Y' @, w( s* Q7 d
  2.     // код метода
    ' F8 F- ^. T- F5 z1 e% Z$ V6 v7 d. c
  3.     return value;
    % w, d# p9 Y1 H% l, M3 V
  4. }& G: u) ~7 b- l* x) q3 j
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    ' r, V3 R2 M. o. t$ o
8 o" l& z* i( Z3 m, d1 k8 U
Теперь перейдём к примеру.! p2 T, |& d$ a9 n8 v* b2 D

/ f0 Z- |" z0 }! MПример на основе L2J_Mobius с переводомКласс Player.java — создание метода2 T8 _( _+ `* F" o
  1. public void attack(Npc target) {  // public void атака(Npc цель)5 O6 `' C* ^4 F8 j
  2.     // Вызов метода атаки NPC8 {, c; k  s$ u' C. y/ i" L  F/ \
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    # `2 |/ G* }1 G+ M
  4. }+ C. H, j. N: [% I
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
0 w* i: k3 ]0 [5 j0 E: @" d
2 J5 H2 c0 }, D- r1 g8 b0 A5 n7 E$ i
Класс Npc.java — вызов метода2 q5 v$ g0 q$ b/ d! d
5 D! Z. k# W( F) ~& f
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)3 g/ o0 l$ s. O/ c; i9 J
  2.     // Логика получения урона NPC
    ' \8 o9 c3 o  N! M4 q/ a+ ^3 {" a
  3.     this.health -= damage;  // это.здоровье -= урон;! }( x6 x$ [* s2 r
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    9 Y- u" S1 M$ }" ^
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    : v( |1 ~  s8 {% v. e0 I7 B4 |6 x0 e# ?
  6.    
    * C, i9 S& l+ v" ]) a5 L" y
  7.     // Проверка на смерть NPC
    6 q+ d9 p# W6 M+ G
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    $ w9 Y7 j1 O* {
  9.         this.die();  // это.умереть();& Z+ O: g, Y9 y
  10.     }
    9 A' \# f& n+ `  F7 K
  11. }6 v; x1 Y6 ]; M- G$ R
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    3 S* S  H2 }# i8 o6 w8 t& f* {+ d
Пример взаимодействия (с переводом)
# w. B) D( @# N
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    7 k& Z; R8 `9 ~: N) U) O
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    1 C# R. L. x% Z

  3. 2 P" F$ {7 h2 p# x
  4. // Игрок атакует гоблина5 {0 X5 s+ G! {9 a
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    4 ], T0 i+ m& S
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
$ t+ v7 C3 ?& P: ]' r% m& c+ a9 o' G  S! H" Z, P8 J9 P8 L3 Q# @
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.1 T+ X1 I/ }. S/ f, O. s
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
' \& z0 ]2 U/ R) J; c
3 z7 V3 q$ @, O8 q
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
8 X# S! P9 g1 y8 ^) ]Привет, Астралия! Огромное спасибо за твои разъяснения ...
9 M' U+ e3 ]" I1 `
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.# |0 ^; I& Y* r4 l7 u% X
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример+ S3 \, A& C( x" x: l6 ?4 X
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    " q* V) C6 Q0 a9 m. N% `

3 n) U8 E: @* Y! Y
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    * F3 K0 h" @6 \% d) ?
  2.     // Логика взаимодействия игрока с NPC
    ' Z5 }  k& q9 e$ d  m' Z7 f
  3. }) R0 N6 ?" ]/ }
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:- {* h+ c5 F3 ^9 o0 o8 t( {% t2 H

) ]; ^- h1 m2 _% [
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z), }- g. A: `5 r1 i* O! Q2 D
  2.     // Логика перемещения NPC
    ' B8 g! t& W$ k: s
  3. }
    ; G$ |! y& y" j8 ~5 ^$ k
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:. p4 L: w3 c; a, Y6 U( p+ \

0 S% W9 j/ d4 n: a# \
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    ' S+ g% `3 T7 ]$ ?& s7 X3 w2 ?
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий): g) j: z2 r& u6 g- Q# u& p! \% @5 ~
  2.     this.health -= damage;  // NPC теряет здоровье
    + m- t9 M( Z5 `! e) n+ X( {9 ~
  3.     3 v. i3 {5 N% l0 Z7 ^8 m
  4.     if (this.health <= 0) {, Z: H5 B1 U+ c" b* i
  5.         die();  // Если здоровье упало до 0, NPC умирает
    ) I" V* \& N, X$ K2 Q& [; n
  6.     }
    $ q2 k3 }( \- {) s% e
  7. }
    7 r2 L8 [" F& K5 v( W/ u
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример# [6 Z- R8 E9 U% t# X0 Q

$ A, V) E3 |# w% J8 K' a
  1. public void die() {  // public void умереть()
    1 J* o; v+ _' k9 L8 Z& W
  2.     // Логика смерти NPC
    1 v0 z- d- L. j* D$ c  p! v) W
  3. }
    " f1 n# [7 p' J8 |( Z# o
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    . U2 X6 Y. i# f; ~$ \

4 S* F3 r) [" V; ?! @' r6 I" ^: x$ U8 D1 c, [$ f
  1. public boolean isDead() {  // public boolean мертв()
    + w) h' ]( C* A9 |( ]. }0 z2 g/ W4 g4 |
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 03 @8 J/ H/ `- }+ F! e$ t$ j# l+ ~
  3. }
    6 o( \9 K, j+ U' q$ U5 _0 B
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    8 ?! e0 |  {" J6 U

1 Y; [. J, u9 B$ i" R# D
  1. public void heal(int amount) {  // public void вылечить(int количество)
    * U9 W$ T  W& q( o
  2.     this.health += amount;  // Увеличиваем здоровье. a0 `" h3 z2 P' G& q8 K
  3.     ! `/ G2 ^2 I" t5 s! c: j/ [6 [& E# u
  4.     if (this.health > this.maxHealth) {' r* Y3 i1 I! J
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    ' ^; O6 T9 D1 j% g4 L
  6.     }/ ]2 T7 x& e6 M- F
  7. }
    " Q7 C. U) u* V3 e: f8 U
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    ( c" f( Y  m, G. O  h& f7 U
' B, Z8 c) p2 m7 m8 c
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    . I  A, n0 j% v/ ~2 S! I; R
  2.     // Логика применения скилла NPC
    ; _! n& E! z! C6 Y
  3. }
    $ H7 `6 s) H9 g
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:2 d( X; u) A- c. F6 F: v# o8 v, I: G
: r5 D9 z/ `' J7 W6 s

  1.   U4 z% [0 E: ~. e- Q
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)6 H3 H( \$ m2 D& ?' H  D
  3.     // Логика взаимодействия с NPC
    / d" M/ k' y8 O* Y
  4. }
    5 a; L8 q# M( h, Y3 U
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:  u& E; l3 z4 f% b
/ X, X: P: m1 {$ U: x' y3 d- o
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    ; l) Q2 T+ L9 y, d: j
  2.     // Логика открытия окна диалога1 O+ p, N: R' ]
  3. }) Y) k: Z- Q# w1 C
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
! Z& P! V: M* r7 QЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
) ~* G+ ?' b% \0 v- v* h9 C4 ~$ B; M

: V8 k- f. ^# q% ?/ n3 _, n! I3 ~- K" k) p7 u$ N; c' W
9 @. V$ U% t6 H+ w* G
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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