Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 8 X7 ?' b% z3 p& z4 N. A$ I
1 N/ Y9 n8 n3 S7 M/ H# S
3 Z9 q, E/ O; T8 t7 J0 ~1 b
Шаг 1: Введение в классы и методы на примере L2j_Mobius' z# a3 u  N* C
С статьёй можно ознакомится в разделе Обучение > Читать
8 q7 g8 a% _6 x3 B  M- M* `: w
" V8 s  _7 ^! I/ R3 g( e/ uДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.5 v1 O  K7 c5 y6 a- G9 t

% l. W: n" O3 r- bОбсуждаем:. u0 H/ C( h% m! ]: T) y
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.7 c% O  L3 M6 s' @/ w
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
0 G$ h# b! X3 W7 `8 M) k& `; m, Q7 c8 [" i; _% W  u9 g( k" z


" H5 g6 }; k1 l: `6 ?И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
+ I- T) [. o7 j* E4 T& h7 m/ m1 ]4 g3 s5 {
( P; X7 ]; P( e

! X$ }- B" M. x  |3 M) Y* Z
1 a8 c3 }2 `8 r; C/ _
  [! E) f0 B- f: R0 U

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
0 v6 S0 R/ U& t3 g5 z7 Q! j
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
4 p( D9 C' F; C0 K+ bПочему мы используем ключевое слово this для ссылки на п ...

6 T  e0 Z7 X6 u, _4 P0 KКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
7 v4 O% {3 F2 t5 V/ ZПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.9 Y8 ?: y# n3 A+ \. R, ~0 A
) X4 w( M; A" x1 @
Вот пример:
; ?; s* e5 D4 t: Z3 Q4 {, m
  1. public class Player {
    ) p3 A- X' ]" y1 W3 M  |6 y" d8 W$ `
  2.     private String name;  ?) R% c" p% C' A2 A: m$ E
  3.   Y2 m# O/ o. t$ H) d
  4.     // Конструктор
    ( R" |4 a2 a6 A' f( ?. h( g
  5.     public Player(String name) {
    8 s# L1 f3 m7 x
  6.         this.name = name; // Используем this для указания на поле класса
    ( d; Z& U- u% C$ b7 ^/ |6 o$ D
  7.     }) y! _5 L$ e% O  a- y4 W% L5 X( Z
  8. 0 q: d" H+ q( G; L  W  a
  9.     // Геттер для имени
    5 }8 a7 P' O4 W, V, t( M* ~
  10.     public String getName() {- B# I1 |9 ^5 ?7 S
  11.         return this.name; // Используем this для обращения к полю класса
    ; H% Z3 ~9 C& |1 s" |
  12.     }6 u# e1 n2 n3 s! A. ]
  13. }1 I% f" b0 F* z- S; P
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.2 J* ?: _  z  U8 Z) C( ^% D

. Y0 y5 u0 K; j, ^/ IКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    , b$ A& T4 o6 M. ~
# F$ M& Y( z2 L
Пример передачи this:! G0 K& [/ p# d8 g
  1. public class Game {
    6 P8 {) F# m/ e" S! B* ?5 c, [
  2.     public void start(Player player) {" O  T2 L& Y- l" b
  3.         System.out.println("Игра началась с игроком: " + player.getName());9 O. [) a  J, o! y/ G$ k' C) T
  4.     }
    ! v- Z# H( F' u
  5. }8 i! B: _# W% V- E% o6 s9 v; L1 v& Y

  6. & Q" @9 Z* B- R9 d6 q
  7. public class Player {1 n- U6 A* [9 X6 z1 {2 F
  8.     private String name;
    & g" [  m& p8 ~5 {5 {8 Z

  9. 8 r' b; f! B) Z4 @- O/ `
  10.     public Player(String name) {
    6 ]* A4 Z1 l* n, f6 U0 o8 c
  11.         this.name = name;
    : p9 T4 ^  i, `; y( _+ d5 ?
  12.     }! x. p! H  M4 ?; p" v
  13. - F6 L  T/ J# I: \' g/ D
  14.     public void joinGame(Game game) {' i/ v, I& h$ {
  15.         game.start(this); // Передаем текущий объект Player
    & k( _% q/ S8 p
  16.     }
    6 ?  O: Z0 @" A6 A
  17. }# o: Q) R6 U4 g) C
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
% O4 ?2 p  m- L

4 A) w1 |1 k7 s/ J: cПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?9 Z1 u5 w5 T) @

0 L" `% i9 k1 |% ?+ r& K
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
" [  E+ r/ Q3 oКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 - `2 _2 h* q; i* M" q+ j
Mike123 опубликовал в 2024-10-17 20:05
4 r( r' g. g; r1 ^" _& u1 pДобрый день!
3 K$ o  I7 A* }  v& K" CКак создаются и вызываются методы в Java? Мо ...
4 F# H% [0 y+ l$ A( z
Привет, Mike 123! ?
# ^$ j* n6 e/ D; I% \; WОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
' t' K7 \* k1 [0 X$ Y0 n( K& g0 U: e9 ]6 h# v# g- r: T1 e! `
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.' L6 R7 Z! G2 v
- P3 M( {, [" r" f  Q' c5 n
* w$ _9 V1 p9 `/ Q7 [
Как создаются методы в Java?/ C9 ^8 G* U0 n( o
: Q& M  E5 M% X; v. \/ M- b+ q
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
/ c8 Q! w- D; |, S2 K7 A6 h+ F9 f# N; o* N% o7 b9 O9 Q
  1. public returnType methodName(parameters) {
    ) [. n& j, O$ q* G# p9 i
  2.     // код метода
    ' {2 d* p+ r! f% m0 R* u# ]
  3.     return value;
    7 \4 w: ^% Q& T" z9 K3 V
  4. }% R0 n4 k( ~3 a: l  @
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    5 x" z" |  {, @) U4 C1 z& w" o$ A
/ f, R- H$ n7 c( ?: P! L2 f
Теперь перейдём к примеру.' Q, t. k' z, M1 A0 _
* a7 f( o0 v( Z0 ~
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
4 ]: w3 \5 V9 [( o  H, ^& ]; t9 F5 D
  1. public void attack(Npc target) {  // public void атака(Npc цель)) ?; L# T7 w1 f, q. _# p
  2.     // Вызов метода атаки NPC. ~" g% q! {4 C6 e/ q7 ~
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());. j: }1 A4 N2 w0 q
  4. }0 W$ Z- Y0 [. C( v1 C9 E& y" f+ H
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
! M+ e/ N& g* u9 T! D$ n+ b. M5 B% i  _$ L" {3 ?
! y$ m; s, j& Y; j, W8 e% H( Q; y( L7 w
Класс Npc.java — вызов метода
" ]* H0 u7 }- `
! o: _4 p/ V: U1 T7 I
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    : B3 K9 |! `% F4 P, w
  2.     // Логика получения урона NPC
    ' H% F0 ?9 f0 e
  3.     this.health -= damage;  // это.здоровье -= урон;8 k5 U& R. p/ w) k1 O' _- w' G# y
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    6 z; e- N$ f' {; W+ z& V! Y
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());( E, @7 {1 C) ?1 p
  6.    
    ! @. b6 p5 a/ {/ m/ K5 o# O
  7.     // Проверка на смерть NPC' N; Z7 ?" P+ J1 y+ y
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    6 A6 j, [  F: y/ u
  9.         this.die();  // это.умереть();
    6 ?1 F* C7 I8 k5 A. N% a
  10.     }' \: b# O3 h: r: I, i
  11. }
    ' m. b1 P* `. K, D
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).8 Q% N5 q- s, d- y; Z$ [7 ^7 S% j
Пример взаимодействия (с переводом)/ e5 Y3 f2 G) t/ [
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    8 v4 O* V6 G( e  U+ o2 v
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");0 C- u+ \4 ]" f; @8 A
  3. + B; T$ S" b: L& U& p
  4. // Игрок атакует гоблина
    # ?; [1 }/ s, A$ c! x3 c% R
  5. player.attack(goblin);  // игрок.атаковать(гоблин);( R% l( s. U; y8 s, p
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. - H+ k, i" Q! c; y- k0 K

8 D  i5 D+ V3 N! z1 U: K6 z. {
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.% A" n) d! z0 q
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!& d. E' X" c+ @6 o* e# }

- ]6 r; S- k4 \( |) y# j  x3 s
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
4 V3 O8 B8 X4 A; iПривет, Астралия! Огромное спасибо за твои разъяснения ...
8 F5 d$ P  j; j6 R
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.3 c, b3 Z5 w: s3 \4 ?
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    : g1 f$ U2 b6 F) W
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:# o  ?: a' [, P9 V5 }& W5 B

, s1 {& q! o' v1 G
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)' c) g9 U9 D, c  O$ u
  2.     // Логика взаимодействия игрока с NPC5 y6 }8 ^% ~9 \7 e3 E
  3. }
    ' p- D6 \5 d& _2 a  r
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:% F% m* D* h+ n% C$ E- n+ P1 a
+ k' c: {2 j' l* p0 D  ~
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)& g) n, Z% v3 F% w
  2.     // Логика перемещения NPC0 @( L5 z' K2 c. N6 r
  3. }$ p: e2 p! E1 A& \
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    + g4 R$ h+ E" ]) v

/ Z# j- w2 k/ T0 }) r
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    ; T" q( n. F2 T0 H2 {
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)% ^: M& R: E" [
  2.     this.health -= damage;  // NPC теряет здоровье# W0 i' Z1 }# a
  3.    
    ( V3 ^% X+ V7 \) k' Q
  4.     if (this.health <= 0) {# a# ^/ Q0 V; e: b: C
  5.         die();  // Если здоровье упало до 0, NPC умирает
    ( [) u* ^* X8 @1 V
  6.     }1 f$ s4 q6 L: I! U: H9 ~
  7. }) r; F. M" U) T1 b* E( ?
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    # B2 M: t# C5 o. ]4 V/ T
& n6 y5 P2 d6 ~' S% c7 p) u7 m
  1. public void die() {  // public void умереть()4 X8 A9 j8 g- k5 n. c$ _
  2.     // Логика смерти NPC
    / ?' @0 i( x. N% Z/ j% }
  3. }
    $ y6 n" u5 O  Q
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:0 f8 P; H. `, F# a

1 l6 z1 }5 {4 r/ |9 W, r0 S  R7 B4 A! b( N! d; D
  1. public boolean isDead() {  // public boolean мертв()$ f  `  F5 D" ~. X6 \% T- J# z- C9 F
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0# r4 h3 j7 g5 L$ L: b* F0 L1 Z) l2 o
  3. }2 K4 e$ f, o1 b+ d, V
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    ) S2 m# N4 o; e$ E5 l; z7 r

. M( o6 |/ b7 z$ v
  1. public void heal(int amount) {  // public void вылечить(int количество)' N( N' I* A9 D& o
  2.     this.health += amount;  // Увеличиваем здоровье# U  R' Y6 d" E
  3.     3 x  _2 h) w/ N+ G, y$ m
  4.     if (this.health > this.maxHealth) {
    + p5 u3 L& H8 Z* l: y! b! ]
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального& ~9 e+ q" G4 `5 P" u
  6.     }
    " n; P" V4 N  _3 w
  7. }
    ; k/ @" ~- R, N5 E( i( i- e. m6 b
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:3 _- h: ^$ k! A- s7 w
6 v( z* D4 X% U- I$ O9 I
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    8 P: o0 M- J" w2 C
  2.     // Логика применения скилла NPC* ~5 f% k; _3 p, ^! I, [
  3. }7 `4 X$ l0 Z9 W9 D3 }7 G2 B' s+ i
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    1 }6 [. X; K" L. S  T4 X
1 y- }) R# C4 B, D2 H

  1. ' m/ l% P. m' G$ S, i2 R
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)( `/ I: P/ f1 n* k& Q  r2 _7 V
  3.     // Логика взаимодействия с NPC
    * f6 ]3 ]  G. j8 ?' ^
  4. }
    ! d* z+ d: Y' a- H5 `. `5 p
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:. O* K& j9 S2 R" [3 x+ K
% p! K4 B7 @! |% K
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)' q; h$ P8 o+ d4 N* \
  2.     // Логика открытия окна диалога# }4 z) n7 q$ w; e0 o- l
  3. }
    3 ~% s  V' p* a, A8 z
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.0 W( O8 t/ O; R) O! V
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!# o. [- }5 y+ H: M
6 b0 m" P+ P: Y+ }5 q3 y

' C( P+ j5 r. e. ]6 ]5 L' E6 S2 N- Y0 R; a
7 j( x- E3 m% J+ Z5 {& A
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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