Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
' D1 a2 X: j2 j! `3 I6 b& n& e9 v+ K; m/ {! Z5 Y) m. }
4 y5 U$ X2 |5 V8 A5 M" n) K" R. o! U
Шаг 1: Введение в классы и методы на примере L2j_Mobius2 y( c3 ?, ~4 ~2 [
С статьёй можно ознакомится в разделе Обучение > Читать
* A2 r8 Y' _3 p6 Z" q4 @1 K. `) S, K6 Z9 t/ A0 \
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.+ v% C0 N, e( {
9 S) D3 f( m2 }2 O( r9 I, r* H
Обсуждаем:# c0 x" j4 u3 h) N, E/ Y
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.: q4 ?8 a! k- L* \- i( @, v3 C" X
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!/ A1 q2 u. f, Y

* _4 Q  B1 ?7 @# _
: Y& a& B( o) m" r/ Q
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!4 X# w' b& P3 G1 {- V  l: E$ j# X9 [

: e4 [( w& b* Q+ [/ O+ K  Q1 r
% d5 y! W/ O' j+ W
3 ~3 }) \, Q4 g, O$ F& R
, ~$ j, |2 B: L( W7 T5 b  j8 i5 O+ g; h# r2 N) {( R

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?8 Y/ O% l  d% i, {* J
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
$ K: W2 w7 B' T' c5 S+ FПочему мы используем ключевое слово this для ссылки на п ...
( K0 ?9 n7 a4 E1 i- k- q
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
9 h) |# `* w0 L  i9 P& wПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.$ a( ?, ?  J9 ?8 R4 Z2 ]

/ @( e% y7 G) N4 B8 u% bВот пример:+ L  t1 ]1 u* P8 [
  1. public class Player {, i, |+ h2 N- F& z3 K" k/ S# a
  2.     private String name;
    / s5 Q" r  P! d6 a

  3. + Q, T! K# H$ j
  4.     // Конструктор6 @" J( W2 z3 e9 \: B
  5.     public Player(String name) {' u6 j/ T  e* h. [8 T
  6.         this.name = name; // Используем this для указания на поле класса: N! I8 ~2 H6 g- D0 x0 Z2 P
  7.     }
      L$ c' ]4 F, k
  8. 7 q$ I( w+ `! V3 A1 C) u' y) X; Q
  9.     // Геттер для имени
    , @5 y* u) J6 G6 W$ |
  10.     public String getName() {9 X( z; Q% ?8 z9 j% y
  11.         return this.name; // Используем this для обращения к полю класса; H; U. o! k; f  {
  12.     }4 J2 t8 ~1 U$ f6 c
  13. }; h7 ^4 H. h+ p
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
, _6 Y! E" y1 `; J# }1 F3 z+ h7 r- w
! Z4 i5 J* p1 y" j( w! z( xКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    ( M; [) R% n0 `: x  B; L

& M- v. Y; W( C2 ^$ H, eПример передачи this:/ V: Z3 ]2 y1 }( x' }
  1. public class Game {
    0 c6 Q0 l5 g  j- H: B6 n$ o
  2.     public void start(Player player) {" R' @; B4 G; e( S, L7 c
  3.         System.out.println("Игра началась с игроком: " + player.getName());0 M9 h4 S- Y9 p  |% G
  4.     }
    " n- F3 W9 b4 x$ |% q
  5. }) y' I2 f4 K  u) M
  6. 7 z: F! m; z, ]$ I3 ~; J- v
  7. public class Player {4 l) A. Q# a4 T* x0 ]8 v$ n% e
  8.     private String name;& b, e) r" P2 o5 T! R2 W( b; K" b

  9. % P7 [! x$ i% D4 K: k# @
  10.     public Player(String name) {* v, O& P9 {1 o4 K3 w' v4 O/ I
  11.         this.name = name;- P8 D4 e" w1 ]
  12.     }
    ! s2 Z& a* t7 B- e- [7 e. R- J
  13. 3 Q4 T. z9 p9 P
  14.     public void joinGame(Game game) {
    ! n! t) \! B% H- ?
  15.         game.start(this); // Передаем текущий объект Player- t# T. S! U# _$ E# [
  16.     }
    3 J3 ?0 r6 D% u
  17. }8 Y' r/ O. Q& |+ s* U6 \% b
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.2 Y1 W! h+ J8 ?8 j! |4 Y; I8 p. {1 K


9 h# I$ \& O( H5 n3 j' \# n2 yПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
/ S7 X' L6 j. ]0 v& z) S! A8 }' T  [) y) Q, x# H+ m  f5 `
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! 9 A5 K# V6 k! |5 `
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
8 V3 ^) O5 x- b/ N8 S
Mike123 опубликовал в 2024-10-17 20:05
+ A  a7 G& q) x; uДобрый день!
' a4 Z5 n4 G6 y% E. {2 E9 |) aКак создаются и вызываются методы в Java? Мо ...
8 {9 p  x/ c4 w
Привет, Mike 123! ?
+ ~4 y' K7 a9 R6 S% V8 u. `7 ]Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.4 h! B) r3 w6 ], O/ g+ M3 C
6 Z2 \% r# f% l) p. f$ i. w
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
  Y- E. E2 }: }. Z. ^1 W
  B! G2 O+ K0 }( V) c) L0 ?$ N5 X# o# w  R/ \0 d' P
Как создаются методы в Java?
, t6 s1 s" X2 l! [
, w  o+ Y" j$ ^& H% j! Y7 P8 ^Методы в Java создаются внутри классов. Вот базовый шаблон метода:+ @$ C# Z9 K% X4 x8 W' h
- ?( z- D" C* \9 y  d
  1. public returnType methodName(parameters) {, F  D0 g8 g  r& S1 r" z4 X
  2.     // код метода
    5 o& I0 B! A- r7 H" c" o
  3.     return value;! _# X2 E# p- o" q. ]
  4. }
    / w4 h$ m' s& d1 D
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    9 K1 j& m. d( |6 k; L
# H* L, _3 E: w9 \
Теперь перейдём к примеру.
% l( c- v! [$ i5 o1 r% l- u% i- b( A* L* l: D0 c
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода% A$ S  N3 q1 `; T  ?4 ]
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    ; Y# O4 B5 h2 R( @
  2.     // Вызов метода атаки NPC
    + [8 M5 i5 }( `7 Z8 T% {& F
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    : i: @. h' [" L1 ?  a
  4. }
    $ W& ]3 A4 ^$ C! Z; l$ O
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).8 z+ G0 ?: m+ Y  I3 h% H9 x0 H

( \' l  s: j! g( f  ?4 {; O8 f* z  ?
Класс Npc.java — вызов метода
2 i: ~  L; h- H3 n# M, ^# P
6 @2 v$ t( ~) Q" R& t9 _
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)  u1 G. y- z+ E/ f; H
  2.     // Логика получения урона NPC3 n$ m7 B- t9 r
  3.     this.health -= damage;  // это.здоровье -= урон;5 W: [& A8 R$ F0 }0 a' b
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    ' x( }4 e8 ^) ^+ D; R3 }
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());+ I) p! L7 l0 L6 n- n
  6.     ! G! m( V( Q+ u9 P4 f8 W
  7.     // Проверка на смерть NPC
    2 M4 C8 o, ^" @3 D
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0). n- G3 v% j8 ]9 |
  9.         this.die();  // это.умереть();
    . f. W! p% a( D" q
  10.     }
    6 _9 l2 F- U& ~* I2 D
  11. }3 s& A' L  F4 U& p6 o
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).5 e2 [9 v2 t( L( e8 r7 Q
Пример взаимодействия (с переводом)8 m8 K( c& E6 {
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");! o5 P, l# I" {% k" [
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");6 q+ o' f0 Z! R" \: G$ V

  3. 1 \0 s7 ]) n( D8 b4 U
  4. // Игрок атакует гоблина" r9 j3 A3 ~+ S3 F1 t
  5. player.attack(goblin);  // игрок.атаковать(гоблин);* {' {6 k9 @+ _2 R" {
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
7 {4 }  h9 _/ E/ C$ f5 a; M5 W3 {
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.: m* {6 K2 q& |: }
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
0 p& }+ D% J4 z/ g
' V. i7 Y" s% |7 W3 M
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30" q8 b) \1 i3 U0 c3 h& G
Привет, Астралия! Огромное спасибо за твои разъяснения ...

: b) c7 a) J  c+ [4 }Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
4 a) C- t' G% t4 ?1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    3 W; M# w, B- ?
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    . S& ^( ^5 ^- L% B1 C; J
2 o- {; t# f4 D7 _9 c0 o5 I
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)% C/ X* M% y6 W8 Z  |9 c7 |% C
  2.     // Логика взаимодействия игрока с NPC
    ; Z1 ?8 U# r; @
  3. }7 Y) _' ~) H/ F, C2 F
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    & m; b' H( K$ R+ N; ~
" Z! R; x& y% u1 e
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    8 h% c1 d. n4 G% E
  2.     // Логика перемещения NPC5 d1 r6 T  W5 l
  3. }+ G- `. \' j! e$ o& u0 h$ b
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:1 u0 Q& t' \8 e: |5 Y& R5 k9 v

& c& T4 Z+ g$ \& X: w3 ?5 p; E0 ^7 M
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    , o+ p  H5 Q& e) r9 M1 h
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    5 j4 Y/ l4 \3 _! _2 v
  2.     this.health -= damage;  // NPC теряет здоровье
    8 w5 D( R- p) L0 ~9 o  P
  3.     ( i: N" {: g: ~5 R6 E+ M
  4.     if (this.health <= 0) {$ u1 l7 F& O( C6 `' E
  5.         die();  // Если здоровье упало до 0, NPC умирает
    0 A3 P+ [( N) K5 s/ W
  6.     }
    2 i, M1 G) D# w2 Z
  7. }
    5 v$ `- I) ]! A
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    ' g4 G$ b( I2 a6 R8 W6 u2 J

+ ?- J/ b) y( x6 ^
  1. public void die() {  // public void умереть()
    " E, r7 n' F( ~5 J7 T1 ?! P
  2.     // Логика смерти NPC  D% s4 _* b3 B5 C# A/ Y& e
  3. }
    8 {; x# }- g9 s# t
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:; P! P& V" p* w, U
! c+ H3 r0 {2 l" `" ?/ l( C

$ P9 e9 |4 i; |- e; h) i* z, I
  1. public boolean isDead() {  // public boolean мертв()
    8 y$ [3 A. ^  q- t/ o( J
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0' b/ }  l( E- V* I: ~) F
  3. }$ f* b5 K, |5 V; l* o' }
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    ( L* w1 W. i2 p) v/ V& D

$ K4 ?2 G6 T- o- G2 I
  1. public void heal(int amount) {  // public void вылечить(int количество)
    ' s: O6 s# @& Q7 V% \
  2.     this.health += amount;  // Увеличиваем здоровье, i7 C6 @' C. I* r6 p
  3.    
    # w# @# }1 |4 N2 ]
  4.     if (this.health > this.maxHealth) {* L4 O, H3 z* L+ ^
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    + _7 e3 p) a- @3 u' h3 ^: |/ w
  6.     }
    " W9 a2 ^# ~+ D* y! L0 E5 v
  7. }) p, p& c7 Z. i4 @2 @# D. ^3 R
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:% v4 [* e: Y/ {, y
( A3 x* b; ]& h* q% A. v* o1 f
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)& a* u( ~8 ?. l4 _* x) u
  2.     // Логика применения скилла NPC9 M* Q# q6 I! c: c/ T0 `
  3. }
    8 M( L$ k, W& b. K4 |/ U
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    # _: c( C6 L# O

: K. i9 A: e$ z# a4 H
  1. ; H( q4 m$ {3 a2 c
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)# z* ^+ X: |: h5 |. ~2 G; x# P3 A
  3.     // Логика взаимодействия с NPC
    ; b0 c2 w# w; [+ b% p$ M2 S3 Y
  4. }
    ( N$ _9 z% a0 G* n/ Q/ a
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:3 g: [+ s( _6 v' x7 x0 n3 b4 U
; _5 Z9 c# G$ L) W  ]; e0 S
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    0 s$ ~) D. }# q8 G" V/ e9 p1 @
  2.     // Логика открытия окна диалога, M# E: K( F+ S
  3. }
      W! n3 C2 S" \8 ]+ Q; ]
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.8 \0 R$ x. L& a- i3 c+ }; L
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
3 ~7 f, W4 i0 S* j2 D0 S& Z% m4 X- c) R# T

; L% {' t% U  F/ J/ J
1 w" i. o& S6 J
! l- c: c/ L9 o: o* D/ [( k
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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