Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 ! g. c/ C& _" E3 b4 E

0 ~) [1 ~- G2 t+ h' G% j& w3 R. o+ a3 J; J6 S
Шаг 1: Введение в классы и методы на примере L2j_Mobius5 Z) a; ]) s' X' V
С статьёй можно ознакомится в разделе Обучение > Читать/ D: X" R' r) J# ]# O( s! G: g. d
( g" S- m3 K  g/ s, z
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
2 e* f/ M/ u5 u" ~
8 Y# }2 ~$ B  L6 fОбсуждаем:5 X7 h6 Z* ^  T4 s# s( R' ?4 E$ O
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    " a$ a" T! ~0 j+ \/ v
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
6 ~: g" f. ~9 @: x; z, Z4 I. C/ L, v  s  u& ^2 H" s% T' r/ I) M* C

4 c. W: V+ G8 J4 }
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!- P# y2 j8 W) d4 g  Y

! {' u3 p' m; t- r3 f; c. \  U  c: C. f5 i5 O1 v
& _) \- Y5 A1 x

! K% e+ p- z. w' y. q2 u& G8 _  h0 {

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
/ U% `5 v+ X" M- U* B) s3 R
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17$ l6 N) [' ^2 S/ ^3 [# r7 K1 _
Почему мы используем ключевое слово this для ссылки на п ...

& ?: V  U; F. o5 j/ A' s. {Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
7 u$ ^& Z6 ]& y& t# SПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
; O* U( ^. j. ?$ z1 Y& W8 A6 ^1 z5 r, K- I$ a
Вот пример:
3 y5 f! ?( r. Z. m
  1. public class Player {5 T6 A; [( c' z4 ^& }  @4 O/ w
  2.     private String name;
    7 p" G  {- i0 F. i, ^5 L

  3. - D' d0 E- X6 t2 }
  4.     // Конструктор
    ; P. X( h6 U0 o$ K+ B
  5.     public Player(String name) {  \+ G  K: q$ A0 C4 J, Z2 \* H
  6.         this.name = name; // Используем this для указания на поле класса
    ; E  V8 E" W7 \7 m* H- v, A
  7.     }
    $ T9 g2 _8 ]; J+ U6 C

  8. 1 p3 D: e. C8 Y* I% n$ B2 `) k
  9.     // Геттер для имени- m" Q0 m, p/ i: o: L5 Q
  10.     public String getName() {
    ! X6 I3 z% f( E$ f& M3 n
  11.         return this.name; // Используем this для обращения к полю класса
    / x! f' Z* ~# P
  12.     }
    ) I! q! w/ k* T7 o! B/ r- i4 D
  13. }
    ( H$ ]8 J+ H2 Q+ t+ j
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
2 P8 R; \. V# s+ r, R9 v- M
; E7 _8 ?  k2 w8 V/ wКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.  X; \8 g" n1 v* @$ v
6 S4 e( u) G: a9 E! n
Пример передачи this:  i) ~# q* C+ d' {6 ~' p' H
  1. public class Game {
    3 n2 w# P. Y  T9 A6 C
  2.     public void start(Player player) {
    0 l" ?# O4 H$ N  [' w
  3.         System.out.println("Игра началась с игроком: " + player.getName());, d0 }; Q, j( q7 ^3 r3 w( M
  4.     }
    7 R+ p' M" G' e5 g* W
  5. }9 K; n1 ]2 L0 Q" Q% e7 |% y; f

  6. - [1 V: x1 d% m1 j; b
  7. public class Player {7 a# {/ _+ x% p3 G" a
  8.     private String name;
    - v/ Y1 ^. z/ F" I4 X) K

  9. 9 c1 V/ s9 S) p& `
  10.     public Player(String name) {6 e  L" w6 r4 k/ H2 J
  11.         this.name = name;
    ! v' ~! g; b! w
  12.     }
    4 M) Z& B- `) d/ q9 L3 s3 |

  13. 8 i2 u( d# P: A: A1 x' `4 N
  14.     public void joinGame(Game game) {& G( E, ]0 M+ }4 f1 Z
  15.         game.start(this); // Передаем текущий объект Player
    ! v2 e0 p# C, B6 S
  16.     }* S: ~1 _9 d" l7 H* H" `
  17. }
    * U7 z2 i1 n5 ^$ \% V- @" E
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.3 s7 R. f$ I$ ~+ M+ Y0 h

% n& I9 _. H* M5 l5 f
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?0 V7 B) H! p5 ~' o1 H, f8 n) T* _

7 R6 ]' _! W" q* u- b
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
( \. _9 q, \; P7 \3 l8 A' k) X% qКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 - s, t; O6 p) ^# s% M* k
Mike123 опубликовал в 2024-10-17 20:05  z7 F2 K/ T: ~" k4 ~
Добрый день!
- K! r! s( L" j, ?' d5 KКак создаются и вызываются методы в Java? Мо ...
, |+ D8 g- t4 i1 [1 g; W
Привет, Mike 123! ?
7 d1 Y1 T8 \1 [4 ]Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.& W$ ~- o$ v4 e7 A2 v
8 a" W7 O1 {  b* _
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
' q8 D* }' ?5 E% f2 r( M3 [2 R/ q
" ]- Q: j- _. O) W% H% r8 S) J; V, V
Как создаются методы в Java?
) Y9 N* W2 y, b0 B2 p$ K1 H7 Y
Методы в Java создаются внутри классов. Вот базовый шаблон метода:% Y( h( I1 ^  ]: I4 O4 |

. Z9 A7 |% ], N! h# ^0 p5 I$ W
  1. public returnType methodName(parameters) {  X: Y0 J! h3 k$ g
  2.     // код метода
    0 h2 Q! I5 J0 j
  3.     return value;
    6 Z4 W% i' i' R6 X
  4. }5 v5 L& M+ w0 |8 I4 U
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).; d+ y! c* y! ^3 E6 G
% H6 R+ p+ S& Z) Y
Теперь перейдём к примеру.) F9 l+ D1 v7 }9 N. J
, D/ a1 Z0 v* I/ Y! ]8 h' A
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода7 V7 w  y) f6 [5 P1 z$ c
  1. public void attack(Npc target) {  // public void атака(Npc цель). c  X2 D  x/ a# N  @" u
  2.     // Вызов метода атаки NPC
    4 j$ T+ o6 h, I) f
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());9 E6 S4 J" n# ~7 H+ Q5 k' t
  4. }
    - q5 }/ U) D8 I3 J
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
" A# W9 C7 j( q3 ?- i5 `8 H' o2 U9 m
4 Q2 r* _6 t) X( r8 Q) |
1 I( Z: h! `9 s1 t3 e: @# n; vКласс Npc.java — вызов метода* f7 \3 u( j' m' Q9 w
8 |" w$ M2 ~) ^( l/ s
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)5 C0 W: w. v2 f$ N. T+ \
  2.     // Логика получения урона NPC
    ; x5 k: }( x9 y4 J
  3.     this.health -= damage;  // это.здоровье -= урон;0 @2 j  t5 S  u- B9 v
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    5 u$ {% ~+ A- ^7 b" @4 S8 G' B
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
      {% N& |8 X3 i" S# W% D
  6.    
    3 n3 n7 g3 @* W( a% v1 O# E
  7.     // Проверка на смерть NPC" z8 k; f; O+ p$ [: S1 j4 N- |
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    1 E7 N# Z1 j9 q/ `$ p  Y
  9.         this.die();  // это.умереть();, Q9 W; o( c3 B4 w
  10.     }9 N$ ^' G/ D' ]% V: d7 P
  11. }
    2 K0 b4 ]+ E& f  n0 Z9 p% n* @
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).$ I* c$ P* T3 j
Пример взаимодействия (с переводом)" P3 S" l1 v4 s' _# B
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    " N- V, N5 h: [( n! z5 M
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    " j3 C( |7 G1 ~
  3. 6 B0 N3 S8 G. c! c. U/ |
  4. // Игрок атакует гоблина: `! }5 S3 q  R4 g9 D+ w3 i5 O
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    9 V" e8 l3 F8 O% ]  |
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
" v# d5 h9 b7 j/ G+ T, i# d* F8 j/ O' u
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
8 H& c! b& u% N; NУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!. z3 d# ?2 D" ?: L
- G" M( N( P% g2 v  r1 U  _! l; E+ n
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
5 E4 J! _" j' [$ fПривет, Астралия! Огромное спасибо за твои разъяснения ...
! y: _0 ]( _6 u. H! Y; n
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.! G5 ?2 s3 ]4 X5 ~* T; h3 k( s9 @
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    8 N# D: _4 V. o( q1 o
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:* P* |: W! Q$ `* w  n: {; K
  n5 \& o6 q5 A! z5 e, D( G6 f
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)3 B4 U3 Q1 j/ X4 i+ I: A, w! [
  2.     // Логика взаимодействия игрока с NPC, F" L* N! B+ `# }/ n2 K4 \0 @
  3. }
    $ ]0 ^* m% J8 _$ h
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    + m" ~2 q+ g( {2 ^2 Y, [% s
1 u4 W! f# h% P4 G  b  a
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    0 X: i& Q- d: d- ^$ V6 U
  2.     // Логика перемещения NPC
    , O" s- c2 e7 I% {3 v
  3. }' _( M( l' f2 h, L' }) P
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:! r) _% k- b( @1 M
: P) t& I) _6 E" M8 J# T
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример2 c  y+ ~% y, ?$ `% I$ @
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий). t' y6 ^0 t) _9 G. F
  2.     this.health -= damage;  // NPC теряет здоровье8 A: M: w  \9 W" ~/ B
  3.    
    : b4 M2 U8 h! `7 t( k
  4.     if (this.health <= 0) {, I4 u. n- c- l$ `
  5.         die();  // Если здоровье упало до 0, NPC умирает
    2 W* _# S& _* G! l
  6.     }" p9 e5 ~4 q; x7 u: l- J
  7. }& d8 h5 q9 i3 {* h0 L6 w" V. ]6 h
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    * @( p! u  x5 ?( M
" O; a* T. B- q- A) t
  1. public void die() {  // public void умереть()
    9 T9 N) G* @2 I
  2.     // Логика смерти NPC
    6 a+ Z% ^) k) Y) N4 }
  3. }- Y5 }# {: N, j0 p
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    0 G. f  f: Z: J' h7 r  c" v) n

+ L8 J( A' }+ S- x( Q
. h* e1 Q  @7 Z- ~  M
  1. public boolean isDead() {  // public boolean мертв()
    2 \% |' y9 `# A2 @) v1 @
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0! u; X/ n) ^$ V9 u2 C
  3. }! P0 U0 {' e4 O5 ~4 C
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    2 k1 f* T- I  F
2 S4 w3 U- d4 r  t
  1. public void heal(int amount) {  // public void вылечить(int количество)
    5 v5 o$ ^# X0 m' u3 ^4 L2 B
  2.     this.health += amount;  // Увеличиваем здоровье
    , i7 ~: n6 _1 _' C; a3 {
  3.    
    * f1 b3 g! }) L
  4.     if (this.health > this.maxHealth) {
      i' ~% T) R: c' A- s! O, C
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального3 a' {! ^" f; ]$ ^9 Z" n* K; G" c9 ]
  6.     }7 l2 Y% |6 t; l3 p4 [  O
  7. }2 W+ _0 w: U& R
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:7 @! m% }4 D, r0 m) k: ]/ e

5 O0 }; Z: G- P7 M9 y
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл), K$ N' n' ~  d# f$ `6 |4 f
  2.     // Логика применения скилла NPC
    ) K8 D* Q) J! U* f- ]7 c2 f2 X
  3. }* V2 O* {6 ?, i- u( u
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:+ @  [6 Y7 |# \* F& c

+ r2 V% K/ e( |9 Y' S

  1. * Q4 {3 I. ?  ?) v
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)( N" o( A" H. l2 z) H  t
  3.     // Логика взаимодействия с NPC9 q: u* ~( B2 d9 S
  4. }
    , ^1 n; P9 i  u0 S$ i8 r  e5 o5 X
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    9 X3 q2 W3 h5 [/ r+ ]& {& N( O

7 M8 ?! r( b8 [0 F# {/ `
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    % I2 Y' D3 M) t2 N
  2.     // Логика открытия окна диалога
    , {- T8 J# F4 S7 n
  3. }# w: I& B! E/ B+ ^. S
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
: E" a9 k4 i  D0 I9 [$ M" k' yЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
  P$ v7 x) L/ ]5 K8 G: r4 P7 I, u5 y! s4 b+ p
% o7 Y' z" ~6 v* h3 B7 j

- S) J" M8 C+ \% D$ p: S! Z1 s) u9 n6 A; ^
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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