Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00   R7 O0 `- J6 L0 _% Q* i

+ o- R/ ~% {( v0 b7 h  _
8 N9 o6 M6 d& T2 T' x8 eШаг 1: Введение в классы и методы на примере L2j_Mobius
" Z0 [+ M" n- k8 ?" l- n. nС статьёй можно ознакомится в разделе Обучение > Читать
' A9 Z' ^6 \& N# c( }5 ?" D4 ?1 @- R
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
# l/ S% Z1 y8 b# r, Q( |; m9 h, r
Обсуждаем:" |9 O" X: Q, m! I- N4 \( s
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.) Q$ ~; v4 N, s' e& s" b: Z
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!+ D% |" O4 g6 N& ^8 L8 a/ S
9 \& `+ [* J1 h* e4 T

7 d; `4 T, e1 F# m* ?* |, b% R
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
2 f9 @3 i8 T* K3 r" V5 n( l8 h( i; K4 O

3 o% Q, C- V- S6 O9 k5 T
) j& n1 I, w; D
9 I' q/ q# @, }7 r
' {7 y2 A- ~. E, u) Y' s8 K

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?2 A: C, w2 G& ?3 m$ S" `: G# Z
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17# _# d7 T1 L. B6 ?9 Y" L) y
Почему мы используем ключевое слово this для ссылки на п ...
/ c9 P" m6 N7 e2 E2 K
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.9 P8 h, B: T+ @4 o, a; p
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса., x8 S. m) W) F0 m0 D) |( g

* w5 f0 ^, G6 j& A) E; O; K( kВот пример:
1 w- |, Y& ~; I% r' K  W
  1. public class Player {: q% H3 o- u6 V3 z# T
  2.     private String name;+ {( [- s1 l+ p& Z$ \9 D, U

  3. , g; |2 G$ Y, A3 A3 A
  4.     // Конструктор0 \5 g+ t: ]# \
  5.     public Player(String name) {$ [# ?; P! O" X
  6.         this.name = name; // Используем this для указания на поле класса
    8 r% b. H- l( @
  7.     }
    $ }, l% _8 }2 x& }4 x
  8. - Q4 ^6 S: c9 ~8 ^; Q
  9.     // Геттер для имени; V9 W# Y2 n8 C$ M9 d* ~
  10.     public String getName() {
    , N" \" j5 |+ g( F7 Q
  11.         return this.name; // Используем this для обращения к полю класса: G  g+ L! ^$ `; g2 A
  12.     }
    ! ]1 K' h# f! b6 i8 v7 w2 q0 a' @
  13. }
    7 Z9 ~' Y0 h! y: e# _4 Q/ Z* z8 J
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.! q7 {7 @7 @  S  R
; E; |4 ]4 J: u7 Q$ M: V
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.2 y& e8 Z0 H8 \: ]4 `. {# e
* k& \# p0 ^8 j
Пример передачи this:& W. C4 ^! A0 w1 J
  1. public class Game {
    ' \$ E. r3 u8 F
  2.     public void start(Player player) {' w3 O( C6 b. ~- s
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    # }- P7 O: e' N1 Z
  4.     }
    & Z' ]! R6 x8 c  w
  5. }- G7 O7 K' v/ ?  _: ]6 a
  6. 0 l9 s5 s% ~! K
  7. public class Player {
    ! c- f) B% e9 S6 a* @, v
  8.     private String name;! }7 M1 \, t5 ?! d% M% E

  9. : L& Q! X( L7 T0 ?8 U1 v2 X' u* d
  10.     public Player(String name) {
    . N8 A: H; I. r  r" [1 b
  11.         this.name = name;- L4 `5 {: z5 A/ |8 \
  12.     }6 ?5 M1 i8 A0 M6 A# z
  13. 5 x- t2 D7 T! i6 \: O
  14.     public void joinGame(Game game) {7 ~0 i' a" i5 B+ L' b
  15.         game.start(this); // Передаем текущий объект Player4 l$ T7 U5 l% g, Y4 N# O% d
  16.     }
    8 i2 ?# S7 q* ?7 B2 q0 o6 v6 x
  17. }
    , w8 o( w: C1 I; Z+ k. P
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
+ J( h& V/ K2 U/ \' N

7 }; V" `3 p7 OПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
# }8 j9 r. k; ^. _9 \" H+ G4 F# G7 d& U% N( p% Z( z
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
# ]7 I8 B& H7 q$ r  TКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
) x* W! F6 z: O$ R! L6 ~
Mike123 опубликовал в 2024-10-17 20:05) L: B+ o  P5 T8 N. o1 t# S+ w1 N
Добрый день!
+ m) R9 U+ N+ sКак создаются и вызываются методы в Java? Мо ...

3 ~$ D' w/ x: |4 jПривет, Mike 123! ?
0 }% R3 F- O! d# uОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.  o' S! p, Z. X! }, {' a) \: w4 R

5 {' w  z; F2 p1 m9 zДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.% v  K8 ^7 o% z$ l

! j1 p( [! d1 Y9 ]& k% }6 _5 y. f: a$ c; f, J7 }9 d, I% m+ E4 n( |
Как создаются методы в Java?. o" H' I# |% J2 [# t8 _3 B( p
& y1 F; \: s* d) E$ q
Методы в Java создаются внутри классов. Вот базовый шаблон метода:1 g/ e/ ]# I% x* ~/ ?

1 |3 i) H" i; K( J: v; k; f5 V: p
  1. public returnType methodName(parameters) {7 s" A# L( D$ B/ x
  2.     // код метода" n8 y, O6 t0 K. E' v0 g/ `
  3.     return value;# @- v7 K; \/ p3 P5 d: m/ z2 A
  4. }
    + {0 }  ?; T. _5 ~
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).' `) S: N$ W3 o' Z" L: h

# h: I# l/ i, B6 W' O5 d/ u3 h0 mТеперь перейдём к примеру.
. Z8 [) {, Y4 W% R0 Q) ]
  C: D& _9 Q: ~0 \  i8 X9 BПример на основе L2J_Mobius с переводомКласс Player.java — создание метода+ ^8 X% P! H5 K, H
  1. public void attack(Npc target) {  // public void атака(Npc цель)( r9 ?/ u( E$ O" o" U
  2.     // Вызов метода атаки NPC6 d+ |) ^8 c& U1 p- E- U5 k
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());0 Z/ @9 L* o3 T2 o' b
  4. }. k. u+ \' F& W( P& z
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
2 u! D3 N7 }2 R" {- t/ V; R, K; S4 v5 \/ B* x2 M! ~# W: g
! r  A$ |$ x/ H# l5 ~( ]% j
Класс Npc.java — вызов метода6 E  l6 b0 ]  \0 K

. f+ Y4 a) g4 w- p3 ]5 D0 M
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    : g5 K( J8 y* n" J+ N+ Y9 k( u
  2.     // Логика получения урона NPC  |* P9 Q& u. \' q4 |8 E
  3.     this.health -= damage;  // это.здоровье -= урон;9 S- e9 {( R2 I
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  * j: R* Z8 W$ {0 i( l0 n' p1 v
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());' j& O  v+ R# B. ]
  6.    
    6 C# c* Q1 m; n$ E* m0 G+ h
  7.     // Проверка на смерть NPC
    ( |5 h) G* Y3 w; |4 j
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0), p% |* f( V: H  k1 ?# X$ A0 X
  9.         this.die();  // это.умереть();8 ]  c/ P4 z* b6 d" y
  10.     }% v0 Z! S, w  w" G2 I( j
  11. }8 g0 ~5 ^. }6 w# F
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    % R5 m3 S8 F6 ~% P. c& X4 v! F( W
Пример взаимодействия (с переводом)' ?3 M( S* H$ I+ Y8 `2 P7 \. g; e
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    , m( ~$ f2 g5 O- \  v
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");; c: b3 U% p8 q
  3. " X3 r- M% X8 ^: E2 c  j
  4. // Игрок атакует гоблина
    2 m# T  ^8 h7 R( @) ]- A9 J% O6 x: Q
  5. player.attack(goblin);  // игрок.атаковать(гоблин);# [4 E# Z/ F$ n3 U$ C; x6 g. b8 l
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 2 p9 V+ M6 G- S( |& j
- i( e; O8 h4 z9 y5 k. r2 q
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения." G* o  }* q' i) x, U
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
+ q, a' s/ ?! Q) B) i9 W6 A" _$ a; w
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:309 W7 g8 x/ G3 R- H+ f2 n0 a
Привет, Астралия! Огромное спасибо за твои разъяснения ...

7 v+ G* J( g- S, B4 i2 _! M9 rОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
; p5 A) G: b. I2 J, {0 R1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    6 \0 v% V/ J3 _) _: H- _+ z; e
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    1 ~; e5 \* E' R( p" f, ~  v4 P+ \

  }5 |- |! R. @, j$ e5 T
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)9 p% S* T* n, w/ m% J' r
  2.     // Логика взаимодействия игрока с NPC7 ^$ \0 J7 d$ p4 p. Y5 C: D' n7 w
  3. }8 n6 V2 D' |  t8 z3 |8 O) K
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:5 F& L2 ^' X& Y" L9 n

" {. u7 X) y3 i! _' k
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    * S$ Q4 @7 T# j- ~1 P" S
  2.     // Логика перемещения NPC# Z: c! t% w+ ?5 o
  3. }
    % C; z) ?' ^% o$ D( |/ \/ h
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    5 y- |& j: n2 B" w3 I! s
6 t9 `8 u  B/ t, [. {2 ~
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример8 K! x( K5 N: K/ j) Y6 g0 n/ R
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)' e1 x' \+ \7 d3 [$ E( [$ x
  2.     this.health -= damage;  // NPC теряет здоровье" p, d0 N: t+ z) C
  3.    
    # O6 J; K# Y: Y) }) {) s
  4.     if (this.health <= 0) {
    4 q+ u; Z& e  ]! K, ?
  5.         die();  // Если здоровье упало до 0, NPC умирает; y  B0 U4 T- X0 l
  6.     }
    ; T7 L- Z# u8 S/ m5 K
  7. }
    . \! w. D6 z! u: R2 r3 d
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример# T2 `( M6 B9 _9 S+ n: E

, C) |2 O; \* I$ w
  1. public void die() {  // public void умереть(); l# O! S# {$ ~( a% \
  2.     // Логика смерти NPC: ?! }& K- W& v) G
  3. }
    - d# A. L; C: A
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    ' z: H9 E* {) w' ?" c8 \
$ N6 w3 _: j  A9 W/ N. c6 Z
! m* r% |7 `( c" l5 Q+ L
  1. public boolean isDead() {  // public boolean мертв()
    & U% C, h3 ~* r1 G6 n: a1 J, p; ~
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    # d. y" l$ D& H' q  P) F: {) t( u$ V
  3. }+ @7 l7 ?! a1 K: ~- [: x
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    ( @# u' `8 P7 G/ Y5 w& @
8 t% h- u9 ~) l0 y! [: l
  1. public void heal(int amount) {  // public void вылечить(int количество); I8 d4 L0 x  o* B- d- N8 A
  2.     this.health += amount;  // Увеличиваем здоровье, y0 z: H2 m( I
  3.     ( b% Y' m' V" A$ z* Y
  4.     if (this.health > this.maxHealth) {
    8 {' [( n* y) h+ ?) d8 A) Y. L( d
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального* i: m1 e4 ?' G8 B4 c* x- k
  6.     }
    6 E+ m/ x% r5 T2 j# b
  7. }
    & n- V/ w2 V* I
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    ) \9 L. H- l' Y1 G) Y, Z4 p& h3 p4 c
$ I* {/ U1 {  n/ n
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    1 K  {2 c2 X; G4 ?
  2.     // Логика применения скилла NPC) {$ Q& d0 h$ l3 G* ^( N
  3. }
    6 d1 }8 P' Y" }; V9 I$ h, O; Y
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:2 h) ]0 _8 C# _/ j) c
, Z$ P* n) b+ i0 @% F
  1. * j+ c: E# j0 b6 F- g0 x8 `
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    . i+ q  f" v6 d/ v
  3.     // Логика взаимодействия с NPC. y$ t8 N9 X5 e  X; N+ U3 U1 Y* y
  4. }' V7 x2 ]$ h# E$ Z# U
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:: V  g2 t, Q, v8 m  S# Y0 N7 X

# M3 _; y2 S% {" q& L# F' T
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    7 S& g  e$ u$ n$ {
  2.     // Логика открытия окна диалога3 i  G, ]9 ]% S. m
  3. }
    . @: \1 S. M1 n: t: g
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы." J; q* W  \- U5 A& s. H8 E
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
" @& M4 i' l% B: b4 z8 S; z0 Y9 }& Q6 ?1 ]8 E/ i; s

( m) p' a1 o1 E3 e
% R3 w- I: r3 {: h
  Q0 j# e" ^. ^& d- U# L
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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