Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 + J6 v- l" t; M4 S: A' P

0 l4 G4 P, ~9 S& d' S, \; e6 i
3 n* B  t, e! E$ K7 G0 rШаг 1: Введение в классы и методы на примере L2j_Mobius
/ G& \1 N: O; T: ~- }* uС статьёй можно ознакомится в разделе Обучение > Читать
. ~: G( _4 v0 M$ z5 n
5 B8 b5 M; {+ K( w2 G: \Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.3 V7 g+ J6 ~% L3 v+ n. P+ C5 X# C
( Z  T6 Z/ \, c( B  t/ J
Обсуждаем:
( [2 k" q1 o+ ?9 O. \+ k( X) `
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    + O$ `# c* j" ~; a# _1 C- R6 Z
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
9 F$ C( [4 V- u: ~
' Y4 {! b8 e" i; c# R

/ w1 {. L' B0 CИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! 😄 Но мы вместе разберемся!
. Y* w$ m' E. u# _: F- [4 h% {$ e- A6 Q2 I$ z9 J

( I( i4 V8 x; P# E3 D' Q/ V5 J# w( z: @+ z2 P- ], O0 o8 _/ z
7 O/ B3 r% p0 w$ }) ]5 H3 j1 i% s
) E1 Z- {# p# E" L. f: Q

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
" L+ K, U0 c: ]$ I! U
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:170 e  C. R4 g& o0 b! _( k; A- Y
Почему мы используем ключевое слово this для ссылки на п ...

  b# g" f3 l! ~/ ]0 \Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.! s4 ~5 S6 Y& G/ C  l) ^
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.2 r+ n% [( Y% A; H7 s" [* P, G

# e7 y# O, Y1 |, V9 C1 ]( D- ^( oВот пример:; A* P8 o% e5 B8 H5 ?6 {
  1. public class Player {' g% |8 n( c1 _. ]
  2.     private String name;5 b7 W) A3 Q( Y; f3 X

  3. ; C" v1 L9 x$ E! [0 b4 i
  4.     // Конструктор
    0 r% F7 |/ i1 O. e6 l) [9 o% j, l
  5.     public Player(String name) {* V: c  y* J- _% J
  6.         this.name = name; // Используем this для указания на поле класса
    ) u1 j9 ~. H/ ~
  7.     }% m3 |: s9 B# g6 Z
  8. ( a2 T% S: d, @+ N8 p+ m
  9.     // Геттер для имени
    : c- l9 ?5 W' K; c  A
  10.     public String getName() {  C) B+ x% u( Z6 X. j
  11.         return this.name; // Используем this для обращения к полю класса( F* S) ~8 m2 I% J- q* w
  12.     }+ Q9 [% ^8 q" L# b% ]' |$ B; B
  13. }
    9 {9 r3 H3 ]6 F/ V) \' s" s
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.* F0 f) \- C& z7 Y# ~/ o+ L9 f

, u" ^' L5 b; \0 N) pКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.9 x% m# y7 b  \7 `1 e  P
% a) @2 i: X3 M& Y
Пример передачи this:/ u- B3 I4 N2 ~& N" [& z$ j4 a7 n
  1. public class Game {
    2 R- ]' o) H0 Q+ T
  2.     public void start(Player player) {
    + ~8 c2 y  g. |! A) `% y
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    6 v+ z5 C# c6 G4 W
  4.     }
    5 H4 Q3 |+ V% Q7 V) Z* O
  5. }) X$ q2 \# e8 \% V; l. J9 l$ ]0 y

  6. . P- b$ A, j" b" e
  7. public class Player {
    $ L$ [9 O3 E3 q
  8.     private String name;
      z* z) S% M) ~7 f  b& g9 Y8 l% U
  9. % N- ]( W/ G5 j% u" B  h
  10.     public Player(String name) {9 X9 M7 M6 p* v- u9 R! A
  11.         this.name = name;
    7 r3 Q2 ^. N* }& q' n" T% k8 B0 j
  12.     }# J- c1 L  V1 ]! |5 u  }

  13. 5 _. F% P! M& j0 A, m) X
  14.     public void joinGame(Game game) {
    5 s5 e2 _' ?/ r  S( Q0 p
  15.         game.start(this); // Передаем текущий объект Player
    & @' }* b1 A# x2 o
  16.     }8 E4 X1 {# X( E- {  J& r
  17. }
    + V1 q% o( J) F) f% n( n$ J
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.* O9 q  f  S; [, V- e


9 p0 x7 h! F) |3 XПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! 😄
' j9 n) P* p' t4 f) _' Z0 u/ V
! l. a9 d6 n0 p$ }$ z, U
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! ( w8 |/ f7 V- X7 b, m4 F
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
+ g( y9 `. D" x
Mike123 опубликовал в 2024-10-17 20:05
& S3 Y3 S  y6 _* QДобрый день!
7 W4 S4 w3 S% G, y# o( _Как создаются и вызываются методы в Java? Мо ...

  b2 [. f* E' A9 T5 Z" @Привет, Mike 123! 👋/ ^0 }  S, |" Y0 K; l  I
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
) E& q: a3 N* M; ?& P9 x6 ~. [) B9 \/ l( k; V
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
8 B* `8 {- N, @6 Z" R" h2 V6 G1 E! _" J

; }5 D" z/ `2 d4 a3 U) LКак создаются методы в Java?
% Z2 r0 ]8 \; T2 M% u
5 `! M6 C; s0 w0 qМетоды в Java создаются внутри классов. Вот базовый шаблон метода:- x$ v7 J6 a- I1 ]
$ E$ s' X/ _* x7 O- m
  1. public returnType methodName(parameters) {
    % h: ]6 p7 Y; ?1 Z8 I- h. g4 D
  2.     // код метода( V/ L5 u) n7 Q8 K/ i  u
  3.     return value;
    3 F) _( Q, q, P  m, a3 C9 d2 F) q
  4. }; s0 ?0 v1 c/ }% L- i  E- c
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).- |6 p% d  Q7 O' x
5 E6 V2 X2 F5 Y
Теперь перейдём к примеру.4 Z. w3 Z" |* ^: s# `- }

4 k& N& }' X! Z& [+ YПример на основе L2J_Mobius с переводомКласс Player.java — создание метода8 Q7 }8 ^: G2 Z  h" H- y6 m
  1. public void attack(Npc target) {  // public void атака(Npc цель)  S, Y/ S5 g5 h5 u4 a$ o' t* a
  2.     // Вызов метода атаки NPC# p- q$ s# U# O2 i* c- ]" L
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    7 q. L4 e( `% r
  4. }. X/ V3 v: |: G$ ]
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).4 p5 ~/ J0 y* \

+ t- F# l& q! ]0 I& B/ T
% E0 ]; ]; M* ]- ZКласс Npc.java — вызов метода
: u0 A, v3 K7 R; q5 [( d# x/ y3 z  r) u; ]
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон). p9 u: s7 [! b' q6 w
  2.     // Логика получения урона NPC
    1 k' v) w  N# }* S& v
  3.     this.health -= damage;  // это.здоровье -= урон;3 `% X/ D2 I7 U5 o
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    . O5 R6 k/ K( Z; l. q; t
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
      s! b/ B! Q. r$ O+ o% t3 v
  6.    
    , j4 K$ c0 v# w, x/ D" X
  7.     // Проверка на смерть NPC
    7 v# @2 L1 J& a" I; ~6 x1 y
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)9 p( P  g$ T  i" N0 `
  9.         this.die();  // это.умереть();
    9 J7 v! p  J6 p$ W2 e' T7 i
  10.     }
    6 h. p- E; u' v7 |7 e) @
  11. }
    8 `6 z. I. }0 N6 n+ p
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    4 \  o, y+ [, `4 s
Пример взаимодействия (с переводом)8 h/ w+ h3 c& a/ t3 n
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    9 I/ s/ Q6 J  u/ ]6 u  Y( n; P
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    # W1 g4 ^9 p* v# F7 I: l6 b
  3. ! d3 o7 Z, B) X
  4. // Игрок атакует гоблина" r  n: M7 F; G/ G
  5. player.attack(goblin);  // игрок.атаковать(гоблин);6 |) }' j: M7 s3 M& Z, e
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.   I' u' a" ^; B+ X. H
  Z2 g# A* [$ m' F) A% C
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
+ q8 b/ v) }* Q+ O* `9 }6 ?3 EУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!! b( A" x9 U6 H9 B  c# y6 P
* v! I2 V/ M8 F) g) O3 Q
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30: p) V, D, B) `  ]: Q- y& i4 v
Привет, Астралия! Огромное спасибо за твои разъяснения ...
# K; H" R- k) Y4 ^% E  t7 h
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.& ^4 b( b/ W0 N; k2 p
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример1 M7 u/ }, J+ h, E2 X
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:% B9 i/ d8 [0 H7 k# N/ O
' V/ ?8 q( Z+ Y7 W5 B+ I" I$ W
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)6 l8 k+ B" U& K* V' i1 r0 A8 s% J
  2.     // Логика взаимодействия игрока с NPC+ U4 D% Y& \) p
  3. }/ i/ U, f5 B& B4 M6 ~# b
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    . I* t+ ]: ?) [! e. O
" ?" t+ ]6 G( Z4 I2 b0 M
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    4 s$ J$ k* |1 W3 H0 }
  2.     // Логика перемещения NPC
    " o5 W0 s" w, M$ ?
  3. }
    0 `/ ]( ]& X8 v1 d$ e; g/ l2 N3 B
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:6 s# ^; N# R4 n" Z$ _
: v& ^( b1 @5 J! Q( t6 [
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример. H) c3 S& N3 G- S: x
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)& n  E5 J' D) t7 u# l
  2.     this.health -= damage;  // NPC теряет здоровье
    1 Y5 X, t# ~( W: n1 t" `2 N0 k* }
  3.    
    , ?$ l2 x9 h  S  V! m( G. e1 Q
  4.     if (this.health <= 0) {2 F7 ?% c; G. ^! a6 u- e% Y
  5.         die();  // Если здоровье упало до 0, NPC умирает( Z) G. f3 @+ L. q) k
  6.     }7 \0 H4 C6 n% y8 y4 A# z" I0 p8 s
  7. }
    6 U& n" O  m3 G* s  [2 k
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример2 I& g7 A/ a6 o, T3 x) R: E

" Q& Z1 _# S( ^# @5 x' K
  1. public void die() {  // public void умереть()1 j7 q: U, g# ]# h& O
  2.     // Логика смерти NPC: m5 h; ?; B' t3 l0 |
  3. }
    4 L% g. s. }- A: I5 l: W; T
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:" ~  e& s/ e7 K7 q

) {1 d& M% u* f5 X0 A' }8 `9 ]' `) ?8 K' l: C# k0 b
  1. public boolean isDead() {  // public boolean мертв()
    3 Z* A; m$ I0 O* K$ S
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    ; Q% r/ L0 J- i7 h- ~
  3. }
    : v; ^( w) O- g
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    + Y, f% f  j- R1 y3 O; o9 i6 h- k

! d! G1 x3 A- k, S- i
  1. public void heal(int amount) {  // public void вылечить(int количество)5 z, C! ~( Y, H6 q8 i2 c
  2.     this.health += amount;  // Увеличиваем здоровье+ W0 O5 o8 {, a
  3.     8 T/ r; ]' ]# Y
  4.     if (this.health > this.maxHealth) {, u4 I+ k) z7 p$ {! a% M
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    0 k: x8 U* o) \7 Q7 K8 V6 Q4 Q, D8 _
  6.     }7 U* c4 G: c* }" m
  7. }
    " K; Z& h9 D/ ^0 w, R( Q
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    ' U5 J7 u+ i2 j# U8 i

5 R$ M- y( v& Q4 G$ B- P
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    * B9 @  C3 b( B# |& s! J
  2.     // Логика применения скилла NPC
    : r1 y# P: r! U) d" `! p
  3. }
    # M  m6 k( |, J3 c; H: u- i
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    * k# r6 u/ ^0 o7 C3 F
9 i& b% ?9 A* F& F$ R% v  `

  1. ; }; H6 t+ m: D" O! H. e/ f8 n
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    % k3 E3 [2 F  n0 {7 h  C1 ~
  3.     // Логика взаимодействия с NPC
    7 D$ @; I; a+ o% t+ W. K$ `
  4. }1 ?" S" s; J* D7 o# u
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:% F6 M% L5 k! R" Y: Z$ p% |
& o) \, }, w2 ]3 A9 p
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    ' R2 v$ |& f, k7 T6 G9 |2 r
  2.     // Логика открытия окна диалога
    3 K" t3 ?! e2 ^* N
  3. }
    * x0 ?5 B5 e5 b. ?/ E5 L# c8 m! S8 ?+ c
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.% Z( C/ s- q) I& A9 d! P5 Q
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
' c/ @6 C* o; n4 l. P) i
  ~, m9 Q( F6 G1 d) Z
) D, W0 D; o( _5 }5 T* S" Q: W2 z/ v0 o) V$ t$ y
% N/ [7 {, O2 |5 b! J$ q
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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