Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 0 @3 v$ a+ x  [' b8 _' |3 m
- t. H, G! ?3 F
. i  i0 g" d% W* _
Шаг 1: Введение в классы и методы на примере L2j_Mobius
/ I6 ^/ L" o" gС статьёй можно ознакомится в разделе Обучение > Читать. y0 k) ^+ D2 B0 i; }0 |) J* |7 c
- `% [$ E9 Z1 F$ B, \" v& M
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
' [' G" A. R0 A! Z
8 J. ?! G* C% M. C5 sОбсуждаем:
3 @$ Y9 X% r: u1 s+ a; x
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.) t: i8 I* H8 ~$ Z: n
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!* c) R. d+ e" b; z& i; K+ m0 w% ~
3 E; j& p/ u2 u1 ]9 m


  f( @6 r$ d, F3 {. f/ g1 tИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! 😄 Но мы вместе разберемся!5 ?7 `/ Z; T8 Y* t" R4 V  `! H
1 y1 S" |3 s/ K

/ K  L/ `  j* T5 X. o" Y" @2 j" }# T6 K1 M- y+ k4 T

6 u$ P4 r) A- w6 f, `. y- t
8 K, {- ?( d9 P5 H& t0 }

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
/ a# W( h: {3 M# ]3 p8 K. |
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17  Y! S' q( S4 p" ~, x
Почему мы используем ключевое слово this для ссылки на п ...
/ ^. W& J" z: e5 x7 Z% b+ x
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.# I6 S* Z! D  [
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.  {9 o# a! v* U1 n6 j( D

& M8 L. @. R0 n0 }# S8 iВот пример:
) E+ L  h: B$ l& ?9 ]# Y; z
  1. public class Player {( \/ C& q/ m7 a$ p
  2.     private String name;3 i9 u& @2 w! a; R1 A9 m
  3. 7 ~! |; I  f3 j
  4.     // Конструктор% ]: F8 G& g9 l  D+ m5 \
  5.     public Player(String name) {
    9 }9 @3 v; {3 I
  6.         this.name = name; // Используем this для указания на поле класса7 i) b! F# O- K( z' x- ^' c$ S
  7.     }) m9 o- n+ U6 A7 u9 N1 p
  8. * z# w+ Q% Z0 T; r; g8 U
  9.     // Геттер для имени
    6 g1 x' ~" L) S, J$ n
  10.     public String getName() {+ s5 x0 `0 O+ `
  11.         return this.name; // Используем this для обращения к полю класса$ l0 c8 S' B1 h3 _$ L
  12.     }! t& }& l$ ?# w9 a8 I- z, W
  13. }9 ^1 K& N/ ]" M2 K4 r+ \' y
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.3 H9 U5 q3 t$ y& a# |  d

. y+ m, L8 u1 y" A* qКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.2 g- f- X  P0 K' m
/ G; s- J/ e! I5 L) C5 g4 x( ]4 I
Пример передачи this:
6 o5 Z. B7 ^+ s7 A7 N4 }
  1. public class Game {
    2 d9 n, y! Y9 A9 l. J
  2.     public void start(Player player) {
    ; o5 Z- v# J6 `1 S- r
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    $ F2 _/ y9 X! J- o; I3 _& F
  4.     }
    0 y" K+ o. J& @6 W' ^% ?2 q
  5. }' A" v" S! S7 O

  6. . a2 B0 W4 F8 C# z7 Y, m$ T7 o# N
  7. public class Player {  Q! }# n) I% O8 C
  8.     private String name;- l* y  m; }( G  t0 B& u6 C
  9. ' f0 n$ h: f- \4 ]# e
  10.     public Player(String name) {- Q1 N3 E+ G7 ?) l
  11.         this.name = name;
    3 c8 i0 _% W' w* \
  12.     }( G1 o4 ], Y6 K" R: P

  13. 5 P: U( s9 u8 h( V
  14.     public void joinGame(Game game) {$ L7 [! {2 l* n3 k$ ?0 y
  15.         game.start(this); // Передаем текущий объект Player
    : W$ q$ l* J% G
  16.     }
    " p3 @8 n8 [; P1 ~
  17. }9 F, T7 V% y; K) P4 O
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.7 Q) I5 N# f6 W6 Y8 q3 y- U


) f( F( m4 Y1 x. l' ]Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! 😄$ d2 w0 v1 M1 z

& V6 ]: w$ r0 V+ Y
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
& E+ e6 |; k3 wКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 4 H; i. O; \) n1 y# u! c! l
Mike123 опубликовал в 2024-10-17 20:05" o( a! n0 Z2 c( b
Добрый день! : j9 P1 w; s; K. o& x: k  z
Как создаются и вызываются методы в Java? Мо ...

* N) f7 k, d2 S* jПривет, Mike 123! 👋
5 G2 e  }5 @! D- s5 ~# n4 l+ NОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.- r3 f) {1 {1 t! e0 X  s
+ _& @! t( K" a7 g) E+ F
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией." n: U4 H$ z/ E4 r
- b- F+ v6 G6 I7 p8 q
" Y6 K  B! z9 k6 w' d0 G
Как создаются методы в Java?' k' S0 I9 c; v$ ]

0 o# t5 \6 ], B+ EМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
$ |2 `- O7 [4 A7 v4 O  P/ n& \# e  ]( L
  1. public returnType methodName(parameters) {
    2 n) K3 t' Z8 x/ n& m  j" B
  2.     // код метода
    % T5 s9 ?: @7 z9 D
  3.     return value;9 v" ]' n; a2 k! |5 q# I
  4. }5 {, R6 W6 d/ _
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).: k% y' g% }" G' V0 {! s
$ u* b3 ]  ~4 _  W. ]+ l- w
Теперь перейдём к примеру.
6 z& h- L8 r& }: X4 o
; f- k6 Z4 [" M$ r& ]5 RПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
0 Y- j) b9 \, U9 \1 _/ T
  1. public void attack(Npc target) {  // public void атака(Npc цель)9 W* ?  Y& a; e! q& z
  2.     // Вызов метода атаки NPC
    ' M* `- J* x9 a4 e' J
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());! B- n) x7 m8 x) n5 z& ~. m, j/ v
  4. }. |( Z. w0 Y3 [
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
$ E  d" R$ U* ]( ~$ n+ y0 Y4 d1 X' c- \2 H" e! V5 g
' u6 w; l; h) I( ]6 Y$ k- b0 {  Q+ r
Класс Npc.java — вызов метода
; T" V! i+ r: k  Y3 L
2 @6 S, D  U9 X, O1 O" v
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    ) {6 I; r% g- q- ], E
  2.     // Логика получения урона NPC$ Y' I7 r/ i! X
  3.     this.health -= damage;  // это.здоровье -= урон;. U4 ^, u) U' Y# E6 ?3 u: I( ?
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    + A  {& I9 w9 S- w: V
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());' z- O0 q5 P) r* |' M
  6.     : o6 A2 f4 V7 V
  7.     // Проверка на смерть NPC
    0 X' W# A( z! x) Z5 t  I
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)) Y8 \0 V+ p2 N8 x, J
  9.         this.die();  // это.умереть();4 I4 k' \0 ?+ [3 ?( A' m
  10.     }
    : ~- A' B- g4 M# e# B  U" l
  11. }
    ' i- v( ?8 Z- ]# f* h7 w  U
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть)." Y. b7 o) E8 ]; I& b6 p0 }8 K) f
Пример взаимодействия (с переводом)
7 _' X8 O6 v5 Q& h5 m) T% c- \
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");8 j; V  l6 f) ]- B2 u
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    ( p) G6 A* }& O! ]" q
  3. ! Z1 H' K* G& U$ T7 R4 s
  4. // Игрок атакует гоблина6 g. K: \8 e3 V- P# |
  5. player.attack(goblin);  // игрок.атаковать(гоблин);' i" j, P! L4 k+ |% c: o
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
3 ?$ M3 B# @% l: ~( G% j' @5 S/ D2 M3 U! H- f4 ?& f8 P* u
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
. b8 V4 e1 ^0 t2 K$ Q% @У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
; P' k: T% ]. O7 S2 U
+ }/ l- c( Z0 J  K
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30' V- R& I0 `; M9 F5 K& ]
Привет, Астралия! Огромное спасибо за твои разъяснения ...
4 m' L$ o' X- r3 S3 y
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
4 F- c3 L- M$ P5 f1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример, N- p( G) }8 t1 I0 n: s
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    + z+ ~; H" O) ]5 G2 Z" v$ j
$ t, }- R" L- I+ Z
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)7 }0 B- X5 J3 U# p  u( A! h0 v
  2.     // Логика взаимодействия игрока с NPC
    . a( k& {2 n, g  X
  3. }5 ^* H9 w/ d# X4 g
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    1 J% D9 {$ l$ i
( ], \- G0 j/ ~1 C4 D! `& v
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)3 B4 Y: W! D0 B+ q
  2.     // Логика перемещения NPC. Z% F$ [+ A8 r
  3. }6 c: ^, E, o; m# E
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
      B3 q- ?7 B/ v9 H: p9 Q

0 s4 N: v7 h" T/ N* X* b5 _/ B9 j
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример& B( b* Q' V7 O3 ]) \
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    $ m2 U2 K: a1 H& e: C' J0 L8 U
  2.     this.health -= damage;  // NPC теряет здоровье
    3 E" V- D. Z" X" a, G
  3.     ( I4 I4 s: I! s
  4.     if (this.health <= 0) {
    , L$ ?) v" p7 u  N; _9 G4 X1 B
  5.         die();  // Если здоровье упало до 0, NPC умирает4 k+ S# R" w5 Y- n  [
  6.     }
    ! e9 i  K5 y5 Y' C4 X# Y& [# w" h
  7. }
    ; `) @, e  w4 F: `
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    ) l1 \  a( M* q# M; ?" Q' {; t

' g; W' y/ E! s; ^8 ?, k" f
  1. public void die() {  // public void умереть()
    6 i8 v8 k" t2 Z( p
  2.     // Логика смерти NPC
    5 f/ `# m; m/ y7 y
  3. }
    ' n1 \$ b/ |; ^/ c: O
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:, U$ J, f( M  Y- Y6 K. N7 C" A

. M( u# L/ ?. g  G6 s
1 i) M. v2 z9 Q
  1. public boolean isDead() {  // public boolean мертв()- D4 F; d' w0 o( _6 S5 X, O
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    % Z" y6 w8 F  B/ m
  3. }- @! `  F" p! O( m( |; Z3 Q$ M
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    # z6 B+ m; E2 D* a$ m

( Q' E7 t: G) D& j; x
  1. public void heal(int amount) {  // public void вылечить(int количество)
    ' O1 c& t  n3 X/ l) G, B
  2.     this.health += amount;  // Увеличиваем здоровье' u: t4 _2 m8 W9 i2 h# a
  3.     2 B5 E: z4 s* \7 A% u7 e, h. W
  4.     if (this.health > this.maxHealth) {3 X: I9 A7 C" ?; ~# P- g7 r
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    9 q0 P3 n- ]6 @# m, d6 s
  6.     }$ J  s2 L7 \$ h/ E& V
  7. }" x0 d( g: i+ ]0 g) d/ x7 I3 \$ F
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    ) Z! H9 T( p3 P7 o) `- O

$ c! Z+ c" x& y& `* T7 R3 e
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)" z8 D8 q: y6 f) G: M
  2.     // Логика применения скилла NPC
    ; C$ h2 p- E( Q
  3. }* q- W' c. ?' U& v' h* x. q. l9 m5 G
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:/ W8 I" i% _. q2 w
: i) A4 D8 p' u
  1. 3 S  Y0 }/ ~% x1 i& P, w9 @- U
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    ' k7 s# k6 `/ c+ w
  3.     // Логика взаимодействия с NPC
    ' e6 Z) J; z. j; |. v3 N6 Q8 G" N
  4. }0 x  j3 Q* ]- R6 F) B
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:. p" ^1 Y# g- f  H' ~
) F0 {9 K$ @( l* k( }. |
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    6 X$ {( A0 U& u3 Y
  2.     // Логика открытия окна диалога( [" N+ _: i/ v3 ^* W1 `: o5 Q7 G+ b
  3. }% ?4 x9 b: n9 L7 n3 |  z
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
/ k; A6 v6 R. l8 ]Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
2 O+ ]& e9 U% @" \# f$ W( g) s/ M# `, t
9 n& u1 S8 N& m" U, \2 B4 S

' a3 ^/ D& F! {; c8 T; q
5 O  `& _' i# q% r# G
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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