Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
5 w3 W* F9 V+ c0 Y. |% ], B8 A! `2 `1 |5 D) m( j

1 p5 b4 Y8 O2 }! g/ _8 uШаг 1: Введение в классы и методы на примере L2j_Mobius
: x, m$ j0 G9 G, |* e- S+ oС статьёй можно ознакомится в разделе Обучение > Читать$ ^( ^, s$ C4 K- h
& I  }' O: n7 J$ N7 C3 J4 G
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
7 B# i1 T9 P* J* m( s8 g
* [* I" W# T+ p* w4 @2 m5 iОбсуждаем:
, @: W0 X- w; u! l4 e1 o
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    4 m2 X1 A( m2 a1 Q$ r% T4 D9 I; @
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
) _. f9 Z+ x% M; S3 {! S( a1 |/ j( @5 X

2 e" w$ s4 x& o1 e' ?, n" O
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!" A1 o: u' K, o& w' A3 \
: r! ~/ b) n+ x! Y  N7 t
0 o$ d, d1 q" A7 R3 `
+ w2 e2 F( z3 Y4 @- [

6 N3 A) x) i% |! ]6 S, ]1 a
+ I% f. z* }8 K( \9 Y. T

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?: Q. k$ x/ r7 {9 z5 k
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17: h: P# Y( W8 t; C# U/ j4 E
Почему мы используем ключевое слово this для ссылки на п ...
/ m7 k. v# Q" Y6 d$ E9 t. G7 [
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
9 s/ y  O# {. |Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
! o/ D. ^- Y7 H2 ~  e+ i$ |* U) V& q1 @3 q9 I
Вот пример:
1 x* P, X6 f" ]& M/ A' N( d) Z7 `
  1. public class Player {2 f  V6 L% F  M  R
  2.     private String name;
    7 a% ]7 g. }/ Q! r3 d

  3. ! S6 G' i2 t  o! h& {  }; I5 t
  4.     // Конструктор, r; \) }# y: j& q" h& N' m) p
  5.     public Player(String name) {
    % v$ k( L% j0 @/ ], M6 r- h
  6.         this.name = name; // Используем this для указания на поле класса
    5 J$ z( V* {( P) \5 ]1 v
  7.     }, j0 {( Q' v- n3 u! P" j; H% A

  8. ! e3 F# K8 |3 G8 Z, [8 v
  9.     // Геттер для имени
    ) [  ^  ^9 T" s  [/ E
  10.     public String getName() {9 a- ?" R# y' e: r5 j
  11.         return this.name; // Используем this для обращения к полю класса
    7 M) `2 O$ B  G. A- `
  12.     }
    % v* \- z" w+ O- N" O
  13. }
    # d3 ^- M: l* ~' ^: e
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.( T5 [9 h, T% j& z9 k* v( |

5 k3 A0 R- s2 ~/ K) x: ZКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    5 G3 Y/ N; w3 }* x5 m1 K) E

" p6 u' T' S8 R6 d, hПример передачи this:0 J6 M) k" D( d6 _" O+ W0 b
  1. public class Game {
    * g4 X  @" q7 u, j* `, n
  2.     public void start(Player player) {- B8 a* z. P6 g
  3.         System.out.println("Игра началась с игроком: " + player.getName());7 }/ @# h, ?: k4 _3 w. e
  4.     }
    + I) n. {! u$ |$ {' B
  5. }8 [/ Y' ]4 f7 O7 K. Y3 x* ]
  6. 8 F+ B3 d& O: d$ n
  7. public class Player {
    $ A& h4 I* `) j6 G+ ^1 ^
  8.     private String name;4 D3 \7 a! d+ g) B$ p6 C

  9. , I8 b9 ^0 w8 t* \9 g" d9 M, J
  10.     public Player(String name) {
    5 O: X% x7 P+ g  v( D, f) y; [1 b
  11.         this.name = name;
    8 J6 c: D9 `! B. r7 |1 `0 h3 I6 z
  12.     }
    7 P" x* a# Q! k; m# j% h

  13. 2 B, D* W4 Y8 \1 ?
  14.     public void joinGame(Game game) {8 T# f9 e- p3 m* t! b7 J2 e5 R" ~
  15.         game.start(this); // Передаем текущий объект Player- h% F( s% }% W0 d
  16.     }
    / \3 m% x9 K7 Q
  17. }" j0 z5 z6 f1 H' V3 I9 @: w- ~: V
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.; l) O; S# o# X# h+ v9 Z. f8 k


7 a- H) t- f7 V! r0 p; [7 |Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
2 [7 M, u) ]( }
6 ]" R: z4 {- g: W6 x1 b
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! ( t" ~7 x2 ~5 W* d
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 / C$ t7 f7 f1 r( C
Mike123 опубликовал в 2024-10-17 20:05: @. D( @2 p' x
Добрый день!
( a+ ?  R* h+ |* y) b# B2 t* a1 HКак создаются и вызываются методы в Java? Мо ...

5 T9 h' G9 |1 i3 XПривет, Mike 123! ?
0 E/ d# i% F3 O* V5 B5 RОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
' Q# x4 P. `# W
1 c: S( G) y$ l  q- l5 mДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.0 j- e$ ~; h0 @& N! ?
# z# y: X8 A; g, V

5 L2 x, Z8 y  f$ wКак создаются методы в Java?
4 Z' e. N1 |+ G1 d# `5 T; b* N
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
$ i! j5 u( C% ]% x
; {# q) g0 C1 J' i- f' }% [! _
  1. public returnType methodName(parameters) {( z( O! Q  k5 {  D- W
  2.     // код метода) z. u# S9 k" U" I
  3.     return value;
    - B( L1 O0 V3 u" Y6 Q0 {0 ~
  4. }/ s" E) x( m9 Q9 o+ ?
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    ; T1 t5 I- z2 {# @. `- j& O

1 S4 S0 T! Y! k) b' b$ z2 sТеперь перейдём к примеру.' j; S+ O" w) c5 y* p

2 N" y: W0 X  e! }Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
* a4 E5 {! r: p+ j/ k
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    : \8 `4 G/ H. H& t
  2.     // Вызов метода атаки NPC
    8 w# g1 S: M9 e% S: D% O$ _
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    # \, U! J; K1 T, U
  4. }/ ~9 D3 s( N/ |9 f; o
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
' S/ e0 G+ ?' v% ]& x, F4 n/ y/ ~5 U

& P0 I0 e+ z  ]/ PКласс Npc.java — вызов метода
( `# x- |8 F" Y. M6 B
2 R3 d; g) k4 D, M
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    " ]& X1 r5 Q- L- h0 |2 I% D/ A
  2.     // Логика получения урона NPC
    , H# `  F# @( N0 @/ C2 ^6 |
  3.     this.health -= damage;  // это.здоровье -= урон;( s. s! i  ]8 D" d  s5 }; @
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  # ~; ^1 k/ Y! o0 c) {
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());+ @1 h1 u0 p+ ]- }; f8 H* A
  6.    
    ; s: g9 w) [& i! m1 A$ ]- l% W
  7.     // Проверка на смерть NPC
    7 z9 ^  @$ N6 C; {$ d7 m; p* t
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)- p2 I% L( i  p0 P' m
  9.         this.die();  // это.умереть();
    6 U! G5 r, M% p6 U7 l; x
  10.     }0 V$ O+ H  W" N  R
  11. }# c+ a/ C( U# Z% B' c
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть)." }# `5 H5 P3 p$ c2 e/ _/ R) @: O
Пример взаимодействия (с переводом)3 D5 |) H  E3 K( o* n" U
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");3 ]1 ~% S5 _8 Y! q
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    7 ~8 e4 i! n7 N* w

  3. $ V9 `4 b! M& S5 Z" |
  4. // Игрок атакует гоблина* O0 Z* s; [4 w- A2 G$ S& Q
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    1 v) J- ^6 k! {3 X! {7 j& Q
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 1 k1 _8 i- h3 i8 `$ _2 }

% K% d; b% f% X6 n& S6 k
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения., \+ l) \/ T' r( q" y
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
. {! l) V7 D0 p* Y8 s7 a2 }6 @- G+ S; v$ n) j) ?& ]4 d
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30, f# m& E) ^/ J
Привет, Астралия! Огромное спасибо за твои разъяснения ...

3 o4 t' _+ }9 I! R' |; v0 ?Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.$ h8 U  @9 H, ]/ `$ w& ^* ^  [
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример4 G& l2 [3 \# ~0 ?6 V9 r
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    3 d  G& D  D. `. ]5 [6 |  j

) K+ C! H( y2 [9 O
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    6 I& E$ H8 P2 D, z
  2.     // Логика взаимодействия игрока с NPC
    + [( t9 _) b& y
  3. }9 f! G1 S& O7 f5 I4 B
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    0 Q' q+ R$ l/ M8 A  ?! ^$ [

6 O; _: q3 ?# {7 B( g
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)8 k( E. x+ t* w- W! |7 Y) C
  2.     // Логика перемещения NPC
    0 R' W' v. T9 s/ Z* s
  3. }
    0 E; K8 C9 [$ j$ k) [* D
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    : M. g+ V* Y" `9 E6 ^4 M& b3 ~

0 d! j/ A1 i* v' |8 O+ I* E& ?5 T# ~
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    3 T# @; A! j3 S
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    + O* |0 K& m3 s
  2.     this.health -= damage;  // NPC теряет здоровье
    * m! \# i4 n* m, ~4 n0 ~; K: @
  3.    
    7 m/ X/ p' `) L* d
  4.     if (this.health <= 0) {' L1 b1 B" X& w7 n
  5.         die();  // Если здоровье упало до 0, NPC умирает
    ) z8 h  ~# ~8 N' n' ?! x) g
  6.     }) h% w4 G0 F7 F/ n$ M9 F, h
  7. }. B" Y* s3 A. Q$ W1 m
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    3 |$ F4 w& P$ v
9 R3 P6 `3 w6 w5 J
  1. public void die() {  // public void умереть()
    . b* s/ i* U  r2 t$ k# A3 e* [
  2.     // Логика смерти NPC
    8 |) a( f! g! S
  3. }
    * L$ x3 k. T( x; P( A6 o( F
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    % f% h" I3 c* d) ~* M) l
& F% D/ h8 c) W& C* O$ Q; ^! N
; c& ], H% o# {+ Y
  1. public boolean isDead() {  // public boolean мертв()
    : |7 _0 b0 X% ]/ @4 G; Z9 y
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    & o& i& N- X) p) O0 E6 Z7 x* T7 g
  3. }
    6 H+ @2 @& C9 i9 g( ~8 Q
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример. y7 o$ c7 u+ h

! E9 i/ i  {. R% _& e
  1. public void heal(int amount) {  // public void вылечить(int количество)
    7 w& q) P7 f0 i
  2.     this.health += amount;  // Увеличиваем здоровье
    ) R' x- n( G2 z8 K5 c" t0 ?
  3.    
    ( W2 L4 o% y1 `0 m1 a
  4.     if (this.health > this.maxHealth) {4 z& K% u/ ^! ~" J( d6 ?/ ?
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального& f% u, h1 O" L, b' b
  6.     }
    4 x1 y9 a: G8 i! L4 v8 S$ Q+ s: R
  7. }
    5 {/ d: n+ t( J
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:7 i: {7 d0 l; ]! P8 C9 [0 d

3 R. }: ]+ ^/ e3 D3 ?
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)5 l& G% h" m' `# A" @
  2.     // Логика применения скилла NPC
    2 J/ d& U! N/ c3 X% w
  3. }
    2 P5 b% I( Q1 P/ K* ]
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:* v. S+ K2 `+ Q# M" [) ~1 A

$ c; W! n( |2 N
  1. $ Z8 K, o$ x5 ~, a) D
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)% _9 d. t% Y5 f+ U
  3.     // Логика взаимодействия с NPC
    1 P( k, j( z, F# @6 [
  4. }
    6 k2 l5 F; x$ x
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    & {$ \% S6 i" S2 o. L2 w

; I/ _8 g; z# s
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    " @" x2 A% V( z& L6 y+ N
  2.     // Логика открытия окна диалога
    8 ]: |. k- @8 h/ o! O
  3. }
    4 q* C  z6 G9 f* J1 b5 x
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
; K- K, s  w7 Y+ T1 qЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!$ P, g& Q& I1 f; c9 T

) @0 X/ k! y- W/ s2 K1 l* l& K5 C( `% h2 u9 z$ c! w
  ^5 p: s$ B* ^/ W
3 I; [3 M, a9 _
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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