Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
$ s/ b. y, E$ I3 A; s
2 m  S5 v7 N3 {; ^; ?% ^) |4 f0 G( E# |
Шаг 1: Введение в классы и методы на примере L2j_Mobius1 W9 c0 f1 }- j/ d/ c
С статьёй можно ознакомится в разделе Обучение > Читать7 h! ^3 H- I  i# _, x9 E

( q1 N9 F1 f9 \5 R1 KДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.: D: T. \6 v4 a2 t, l
* d# v( G- |# ?
Обсуждаем:3 V$ c9 f4 ~* e8 b! }% _
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    ! K# v  Q- l) X7 T: I
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
8 O# @+ n3 W% p3 P6 \0 K1 ~9 u$ [

- J# P$ {1 g/ Z+ D# ~% [9 ~
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
" q) g7 T6 I; `# G- z, b, M( o+ J4 \

2 Z% h8 b, ^7 ^4 X  U7 A3 n* G& k: \( i7 _

) c& S4 n. C' B( x8 \/ {# t5 U- Q2 e6 k1 r" z. ?& h" G2 r2 [. z

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
+ N3 I2 q% k/ P3 z  S2 m
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:172 y$ z; J. B5 t4 h3 _
Почему мы используем ключевое слово this для ссылки на п ...
# M5 K' W4 K- v$ I4 J
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.+ D( h$ _6 `0 @- X' d% {" D0 z
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса., C! K# k8 U5 w

! d9 E5 B4 x/ F8 A( iВот пример:- ~  J$ x2 E/ _$ S, _# r
  1. public class Player {, H- R; ]( C9 K3 n
  2.     private String name;
    ' p8 R! I# D( |2 X
  3. - ]. v: {5 I& L) O" p, `. B
  4.     // Конструктор- D9 F$ z3 z8 M3 Y3 u6 {$ {  X9 [
  5.     public Player(String name) {4 E9 o5 y2 n- V7 D" k" c* M
  6.         this.name = name; // Используем this для указания на поле класса
    ( O. b# t% G( y- z4 {  v9 l: J
  7.     }
    % u  i( |; t/ i7 W. e3 v- f; Q0 b6 ]

  8. 2 e/ T6 {: Z( Z1 E7 C* C
  9.     // Геттер для имени( [# p8 ]1 A( ?, T( ^/ p
  10.     public String getName() {
    9 B  T2 e& k) I9 `
  11.         return this.name; // Используем this для обращения к полю класса1 |' y' F/ [4 p, E; S! o2 p
  12.     }: X: R8 m, M  b3 m  k* q) r
  13. }1 h. d  N' h$ y$ R
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.' j/ }; L/ W1 i
$ B) T2 C9 r1 `" _/ P9 b2 V
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.  b$ X' e/ q0 n) s* w
$ q5 R+ |) D% {; E( C
Пример передачи this:
9 t3 t$ O/ @& P& Y/ ?
  1. public class Game {
    ; I1 @* J! ]/ i
  2.     public void start(Player player) {
    * c2 b& l  q1 ^4 w/ E: \9 {. k$ F( E5 B% O
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    ) v. }9 k" h1 m( T
  4.     }* @# \1 t- t4 d" w$ U
  5. }
    ; p! U. E( s) [+ i& j3 r! j& D
  6. ' X. |1 G& K# T$ `
  7. public class Player {
    9 U; K8 m1 s7 l
  8.     private String name;9 h8 B- }0 q1 L) @* c
  9. ( ]! j# y* M/ e' @3 {
  10.     public Player(String name) {7 U+ y: Z& C# b/ s: T
  11.         this.name = name;
    $ h. |* [2 P$ p( w/ k1 u& x
  12.     }
    * l: s0 R% I( K* l/ ?9 H8 n

  13. ! h  s# d# {- R
  14.     public void joinGame(Game game) {6 Q8 F/ O8 U4 U7 s
  15.         game.start(this); // Передаем текущий объект Player6 q  q& J$ A" H
  16.     }, ]  v* T2 |2 b" t4 ~
  17. }
    . l' W  [# @$ s* W" ^$ m* K
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
0 F% K) Q( R9 T/ G& T3 A
. f1 l0 K+ S  z6 {
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?  a- {0 }: X# h6 u* l

2 }7 D# ~% p2 M; ~- I9 D* U, V; _7 [
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! ( c1 V# _9 R3 ~+ {& X! T
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
, E1 R& }/ L2 ?0 m' j" f6 b5 d
Mike123 опубликовал в 2024-10-17 20:057 }& Z! Z4 l3 C
Добрый день! 7 I$ `) U2 c- f3 Q, }4 V
Как создаются и вызываются методы в Java? Мо ...

$ g& k. S% {. L* T# QПривет, Mike 123! ?: @7 {+ q; h  s6 K. T
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.; J5 \7 Q  C6 h5 ?" O+ U1 Z
, }1 ]& b. L( o; G- f7 y8 H- @7 i
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.8 m8 l( g9 Z4 q5 _/ I+ m2 N3 n9 p
" E0 A6 N4 ?% p% S
, B, F7 E8 h9 G" c2 o3 q0 u! \+ D
Как создаются методы в Java?
+ Z$ B. z5 D, U5 ]: g( g" G) H7 _/ l- M. W
Методы в Java создаются внутри классов. Вот базовый шаблон метода:2 ?5 h; H; l, U$ n7 Z9 w0 X

: E# H4 X& R: k' H
  1. public returnType methodName(parameters) {
    + u5 B$ S3 A4 |
  2.     // код метода" d/ V/ p# \% m& }
  3.     return value;; |4 f* Z1 d* p- z* R' Z
  4. }: V) ~5 t% d0 n7 c
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).' R" X* v4 G  Q# o3 H/ w4 T9 \% O3 A
; R0 g2 V, U5 C1 G
Теперь перейдём к примеру.
" ?6 }5 A" m6 q( G  h
( y: U- B5 ~$ AПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
* a  P2 W: u+ ^
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    5 F! A/ ^- n4 [: ^# Q) [
  2.     // Вызов метода атаки NPC
    4 V# |1 [( U7 l! U; o  S2 [% V
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());' K, a& E6 o5 V: b2 r  k; c. ~% ^! d
  4. }
    5 g) K6 m1 t' D$ B+ F0 X5 m1 c
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
8 V$ K8 p1 `; A. |
0 |+ G# m5 Z% ]1 U' Y7 {
" Y  e. h- u3 X5 c$ X+ w* o- T( F5 L% VКласс Npc.java — вызов метода
4 Z2 K+ _/ ^* C
, v  ~1 x) H5 {5 X) _; x/ z$ r
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    6 ]; [2 o8 a# o* l0 Q
  2.     // Логика получения урона NPC/ t: x* N! j7 Y& T% Z
  3.     this.health -= damage;  // это.здоровье -= урон;
    6 F% O) `# ^2 M' h
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    ' V5 a% f8 ~! N+ z
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    ( g# l0 W# m# x. P+ D2 Z
  6.     , w( R" S, |$ v; \& u" W- }, {
  7.     // Проверка на смерть NPC, M( ?* r' q  E# R; c
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    1 w$ {0 Q5 b1 p% R) K
  9.         this.die();  // это.умереть();& z: L% Q0 X9 p/ t! H
  10.     }9 ^8 {4 B* J. K0 W! g
  11. }
    ' @* ]% z% Q& f3 `2 F
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    ( V9 o" t! f1 K0 u: [8 k
Пример взаимодействия (с переводом)
7 r! j/ J$ _1 q
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");, k5 }# H& ?% z8 @* T3 k! K
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    1 U5 g( }) {3 y. C9 ~
  3. ! M( _+ B' S- y5 q' q
  4. // Игрок атакует гоблина
    " u; S$ G3 j; C
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    * u/ t  k7 J" A- _+ L0 u1 f& X: N; {9 T
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 9 i5 S1 o0 Y$ w9 J" E

8 n# U6 t9 |$ \
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
0 Y' k# j5 e% l, }: i$ R+ a9 OУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
' I% I% O1 @# |" D  r- g
1 r( _3 z1 P  Y# {5 B4 \0 c  k3 U
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30. }6 x3 M  u& k5 B* I
Привет, Астралия! Огромное спасибо за твои разъяснения ...
1 C( R7 W2 l0 L; a
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC./ f; z9 C5 B# ]7 P& [: ^
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример  }& @/ c- B  v* p4 P: }* C+ G
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:% ~) w. q9 Y" T& \( l6 d; u

# T/ X4 J  v' e8 l0 |
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    5 ]& q7 W" b3 M# W7 h1 Q1 I
  2.     // Логика взаимодействия игрока с NPC" h8 R2 D, B! q7 j
  3. }
    , Q1 t8 l2 X! x( @2 ?' N9 u; J
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:! h% Y1 O6 g8 D+ ]7 m" W
. ]; J7 ]9 P* f. k9 Y/ D. D! o
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z); A/ M* e, p( w% b
  2.     // Логика перемещения NPC9 L0 r. p& w1 @+ W& R' c+ A5 o$ q
  3. }
    ) r4 ~! F. h5 r  \- B, k
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:: ]2 c* K( e* g. M+ ~
3 p. X9 _2 b6 [1 y+ j2 s/ Y0 Q+ N
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    ) c+ T. g! @+ n" N3 k$ t: |
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)6 i6 C5 Q3 s4 m5 m% Z/ w6 @
  2.     this.health -= damage;  // NPC теряет здоровье- W" A2 o/ |# g$ S' r/ ~. t+ u
  3.     $ H3 P) z- k+ h, j) |: \6 p
  4.     if (this.health <= 0) {
    - x4 O( M; J2 J& K8 w
  5.         die();  // Если здоровье упало до 0, NPC умирает- O: D7 l' v6 c, K( x  i: B
  6.     }
    0 t( n) i7 \: [6 Y
  7. }
    $ V! W& Y8 q& B
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    2 e5 M. L( Q* q8 L% J
/ s5 p0 [5 V1 F1 i* t
  1. public void die() {  // public void умереть()5 \2 L: f( U* ]
  2.     // Логика смерти NPC
    1 x+ y; `3 M' l
  3. }
      ?" u( F# W4 ~# X8 \- z5 X: C
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    0 A4 k/ {; ^8 a! f9 j1 ]6 v. T$ h/ X

& l- I, _8 d( N6 }& o
1 }) i) U" @9 [( g% B% l0 e3 F! p$ g
  1. public boolean isDead() {  // public boolean мертв()
    0 M$ }  B: y) F$ n# a+ Y" z" a: D2 u$ N
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0! _0 W: f. Q8 y: n0 M* Y% ~6 w
  3. }
    . y% c6 e, i+ i- Z% h
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    9 K" Z4 d3 C- B$ e
( z. S6 i& V" p- |
  1. public void heal(int amount) {  // public void вылечить(int количество)6 W# I7 g4 r3 {. G
  2.     this.health += amount;  // Увеличиваем здоровье
    , m+ E3 X  M' J& M" _
  3.    
    5 _$ d: n; J# N2 O) w2 Y! n" q
  4.     if (this.health > this.maxHealth) {; x! _# Y& Z& N5 f; X& H
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
      v$ y2 B' V4 c% q/ Z; E# D
  6.     }
    3 s4 m2 e+ M$ ]$ ~
  7. }
    . u* Z/ U3 ]. S  P* K6 n
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    & B) M7 M- s  |

$ \. a) g1 a2 ~% ]4 f
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)- `  }# M6 S; _% u; W7 \, ^+ j
  2.     // Логика применения скилла NPC
    & _2 j: K+ k& F1 H
  3. }
    + U* {2 V( `( W
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    . S- ?7 n0 `# l! B5 i$ i% }
; ?. T& u: V$ g1 E

  1. + Z6 v4 {$ |8 Y2 w" Q- a/ J6 a
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)4 R  {3 C& u" ~
  3.     // Логика взаимодействия с NPC% A6 `+ b$ Y8 _$ X/ h: R4 Z. b) `
  4. }
    $ B( l! ]5 r4 c# w
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:2 b* Y; n$ h9 E( L( O
( o' T& g! Q8 t1 A0 t  S' F
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    2 k: N8 {; F; W6 E
  2.     // Логика открытия окна диалога: j7 ~, `* \5 }$ P
  3. }, e9 A) t- o  T+ _0 A
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.0 f+ n4 r* y+ K8 ]; I# G
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
" j- f% o; S7 \# [
% T/ k4 F" t  C7 j1 z( H5 U
/ Y" \0 s4 r1 P' w& R2 d% {. j9 k
9 {# o0 e3 s: }2 n# \, v' F2 x3 D+ s  }( c- z9 K
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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