Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
# C1 E# O* U; n0 d  }* ^
4 u% I9 a+ t+ `
# Y9 h# ?9 _+ ~6 L9 pШаг 1: Введение в классы и методы на примере L2j_Mobius4 [$ ^0 t  j, P& z. B) Y4 u! }
С статьёй можно ознакомится в разделе Обучение > Читать
/ Q0 R) P4 [' X' Z$ @3 D$ h4 c: d8 u
7 e" A$ c4 g' o% \Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
. j6 K7 q- p$ }- h
5 j# q; b- x' q# eОбсуждаем:
1 }! _& `) w$ p: W7 D8 f
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    + q& e# I4 S7 i# `7 \& Y
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
5 H  c+ g+ @. D! X$ R
  A/ X4 V6 {: _& Y
* `2 U/ M/ \/ @1 d  t# s, W
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
) w* B$ h! d1 w, y8 n
( Q) n5 b- ~4 D- |. e
' ~: q! V- u. a9 `) p) @
( w! o4 Y8 Y' }; l6 I; F) ~1 j. S. l/ S
1 w4 W" }5 q; K' U5 }7 o/ d

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?* ?. ^0 g2 o6 T( e5 i" w
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:172 L! L: F& B- q  z" M# a
Почему мы используем ключевое слово this для ссылки на п ...
, m! B4 O7 n* Q; E9 g8 A) d
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.- ~$ F+ p5 K5 Q1 m3 H6 v
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.# m8 C/ e" T/ [2 y) `5 z9 [- [$ r2 T

0 l! Z3 X$ c" a' }6 U& o. YВот пример:* Q2 m- x# F. L% j  @
  1. public class Player {
    $ O/ A1 m9 s, t2 e8 y
  2.     private String name;
    * X7 y: \- f9 ~  _; U# @
  3. 9 c$ p9 I& v9 U( C5 a
  4.     // Конструктор1 ]& K8 s' Y4 A0 F/ L
  5.     public Player(String name) {
    & J7 {) P% L, v* _8 f: |" T
  6.         this.name = name; // Используем this для указания на поле класса
    # @( h7 L' s2 _
  7.     }+ \2 B/ n% x6 R0 |' A2 T) Y
  8. ( h! s- Q- u  D, R& I
  9.     // Геттер для имени5 O9 O. M* B9 l
  10.     public String getName() {$ |: f* f5 i0 p3 l9 B; j8 G6 j6 n
  11.         return this.name; // Используем this для обращения к полю класса
    / k2 T4 m5 d1 L2 x+ }' ]3 ?- [3 t/ Z
  12.     }
    " ^  Q: n) u) S! A' I
  13. }
    1 X/ |  m, i9 w% g" `. K
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
$ R# R6 q/ [! C% V/ |2 N) H( ]# {9 ?. v$ u4 B  k+ @
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.1 v# w* F7 i- I, q. k4 n: }) n
  ^$ a' v1 {) `$ d0 o4 D9 s# v! t) W0 b1 x
Пример передачи this:
) U! I- j( ~8 [7 M6 Y6 _
  1. public class Game {
    0 p" i% b* x+ s, }7 L- g5 ]
  2.     public void start(Player player) {$ @2 I$ c# C& _; l/ B
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    . x4 K1 f" k/ H* _, L3 E9 T% d* N
  4.     }5 L8 i, U3 Y8 Z9 T- G
  5. }- U& H# f7 \1 c( \7 \

  6. % G6 Q9 @+ `3 D& b
  7. public class Player {0 n6 h/ ~$ {) i1 c
  8.     private String name;- u7 z1 X& Z( h6 A7 B
  9. ! F( b! i7 X' R3 W7 ?
  10.     public Player(String name) {
    2 C* D4 e4 n; U+ J
  11.         this.name = name;8 q* t# ^) h8 h* N' V% p" w: _
  12.     }
    1 j* c: r# K0 n% [; k$ w
  13. ; Y% U* {. O6 Z3 Y/ n  i
  14.     public void joinGame(Game game) {
    % l" i5 h( D% m5 m& M& i
  15.         game.start(this); // Передаем текущий объект Player1 ~* E4 R! A. B" ]* q9 B
  16.     }. d7 q0 t6 Y- J3 l$ t2 A. C7 q
  17. }8 R, U/ o. N, t- @" P. [& G
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
7 Z" C4 _  t9 s

& N5 o( k( f* `0 Z1 {: KПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
3 Z* `- R( k0 z' I% N/ N; A) |
6 j; q" c, ?. E+ Q
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! ; _- h+ m. R$ n: V( q: d+ Y+ |
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 8 n) k( A, @- @/ b( C
Mike123 опубликовал в 2024-10-17 20:05
7 K1 m9 Y/ h: s0 ~Добрый день! 6 e6 n$ T3 {9 C% _0 T, P0 m
Как создаются и вызываются методы в Java? Мо ...

9 j8 I% K- [: ]9 ~: CПривет, Mike 123! ?" \) H- ~: u- y3 f: b
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
( |( R7 t: \2 ?$ K  H* r+ |" A  A8 t7 q# h
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.( A. H2 |& L; [; R6 L

" o( ]6 A+ d" E( C4 ~. t! M3 S3 m" @# X$ f
Как создаются методы в Java?
7 @& q. I2 k9 h) `) L2 l3 f* |
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
( _3 G, U8 D+ R0 E' z* |
3 V9 N" i0 i6 Q9 B3 A' Y# ]
  1. public returnType methodName(parameters) {2 Q! ^$ _% t3 I. Q6 ?& M) l7 P
  2.     // код метода/ y$ E, r" r. j8 \2 i% p
  3.     return value;2 n* J* U6 t8 o
  4. }
    . r' S7 e1 X. u- B( H
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
      D- D" k% |, I, g

7 n7 n- \; M; E' W* w( ?0 VТеперь перейдём к примеру.8 o% k6 j' K% U

$ Q! Y; P( g5 Z* Z4 K, A$ \! j% YПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
1 D* m8 A+ C& u0 k- ~/ C
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    ) b! O  w. z. H2 T" L2 @6 K1 ~
  2.     // Вызов метода атаки NPC& [( z  N  r: h* N5 d+ f, i! x. J
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    - a+ e/ c! |/ x8 I7 H) ]5 Q$ B/ I
  4. }
    : S" O$ [) l; [# P+ w3 B; F
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
' C3 _8 Z6 X# q; J  [4 g3 ^- @  M: g, K0 ?. J; q, q; V
. }# V* p# n. a6 r
Класс Npc.java — вызов метода$ g& j. E$ ?/ L, |

. y. m$ D0 E) ~! x, ^" |
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)! y# S: x8 r) W8 @$ }4 h
  2.     // Логика получения урона NPC& q; |8 L  G7 p- l# p9 s7 L! p0 f2 G& Q. o
  3.     this.health -= damage;  // это.здоровье -= урон;$ r/ j- }2 D+ Q( Z  P
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  ( q# w1 K- p1 S% l: \* Y/ c# q9 I
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    ' Q3 K" V% U1 F6 d" b% O% ?
  6.     , d/ Z% y  c' P; z. }! x" n' l
  7.     // Проверка на смерть NPC! ?. X0 H  s) e, S
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)4 g/ o; y* ^8 X0 J: m" P3 x! z$ U
  9.         this.die();  // это.умереть();
    5 e) i! w& a' g' e) L' z- R
  10.     }
    : Y: }9 ]! W2 n9 d9 r
  11. }
    1 w; j. h! }6 L  ?
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    $ r6 U2 D! z) z5 }  @
Пример взаимодействия (с переводом)6 W* H& |# |& R1 Y* x2 B) T, N
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");' F1 D+ V/ t9 W; m7 H! @  D
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    9 a) N. Q' k- U) {7 W

  3. 5 F+ F6 w" h( C; A5 K
  4. // Игрок атакует гоблина/ b; S5 n$ Q8 l: `! k0 j' h
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    + O9 y: \/ {7 _" n# w
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. % w  [( |$ e- G/ h; x! J% D
6 ~3 ]8 b$ N7 C9 N9 t' |* B
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.& }, ]* V3 k) E3 ~
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!( N! B1 M, C$ I
- A% J; r0 Z) D8 j% t
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
) e7 a! }+ C# K# c! oПривет, Астралия! Огромное спасибо за твои разъяснения ...
- q8 R7 }' I5 ?  ^$ i
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
- i% J0 Z. `( c8 o8 f1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    - }& V5 b" }; s* o
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:0 s: f5 B, w1 ]9 [+ `8 c  h( w

! @; u$ i5 y0 f. p
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)8 B6 C# b" K) l4 Y- A0 t% w. e
  2.     // Логика взаимодействия игрока с NPC& y9 e& ?+ Q" N" p
  3. }
    1 r# [1 K( {! }( N3 N$ d
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:9 x+ P) M) u+ A, A& X. M
2 F* C0 g. L0 ^( t& I' f' d
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)+ D* @1 _! v$ N/ x
  2.     // Логика перемещения NPC
    # P  m$ ^5 C7 `& T0 X9 E
  3. }
    " T  H% e, A3 V' V  C8 n* G
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    2 c( y) l, N8 L! q6 J

% b( I% c  _' W' h' p9 w. Z
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    ( p9 s: n" a0 k4 ]2 x
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    6 p4 d; @( z  q9 z! j: }) x6 u
  2.     this.health -= damage;  // NPC теряет здоровье" @# |5 l  r' p6 G
  3.     3 K; ]8 ^, O- U$ ?: q* E. T3 U
  4.     if (this.health <= 0) {
    , X9 L( H2 t$ M0 [
  5.         die();  // Если здоровье упало до 0, NPC умирает  e) f8 R! _, C9 U
  6.     }
    3 ~$ C8 i* W' v3 h6 N
  7. }: m0 u& }3 U' f2 C0 @
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример3 h& k5 H/ m# w4 f5 D: z

2 X! Y% [7 B/ i3 @5 d, I& r7 A  H
  1. public void die() {  // public void умереть()& f& t- @% _* z( f6 l; T/ m! y) \, R
  2.     // Логика смерти NPC, v  v; v! q; u: k+ E) \
  3. }+ p7 c( J6 R2 c' U$ g
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:9 J' c4 ~6 ~  e; u7 X+ G; u# V
! s) {' l$ }! o; \
; g) J/ b  ?1 v2 N. V* {6 H
  1. public boolean isDead() {  // public boolean мертв()! u9 t. Y3 U  r
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    ' V' y% ]0 f( o6 K
  3. }
    $ F. b; ]# t% v+ [/ N6 l, w
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример5 G3 Q4 `% B; Q

7 V8 a/ E, W, v$ Z5 s/ D5 Y% i
  1. public void heal(int amount) {  // public void вылечить(int количество)
    + W1 R' r/ g" o6 T8 Y3 V* p
  2.     this.health += amount;  // Увеличиваем здоровье" F; O$ k7 h9 z1 R7 \: E- J
  3.     ( g9 y7 a! N6 U; m  T
  4.     if (this.health > this.maxHealth) {6 v- t  H5 ^5 p5 v/ b4 a
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального1 o6 s* \7 G! E1 {$ f; X) l
  6.     }
    0 O. H# @5 e/ C- \  d
  7. }
    ! J1 h9 R8 i' O/ J- A9 I+ \
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    1 [3 x3 Q8 i, O2 z# y7 U

4 [6 _0 ?, }) P% p& [4 q
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    5 A: j! c; C2 ^  F. m& B
  2.     // Логика применения скилла NPC
    9 i5 S+ e& t$ W
  3. }" p# q! V( |  b: B. F8 G# s; g
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    5 }# n+ B3 D! O" A' U
2 O! G) `  w5 I9 L. N

  1. 9 r! w7 G0 V8 N
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    , @+ U" h8 X# E% ?& E5 c
  3.     // Логика взаимодействия с NPC1 |8 W" `6 J9 n4 K) a& n
  4. }6 {8 w/ n( m' Z7 D% J
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:" {4 V( P) Z. M" v7 F5 z
2 D. L% Z- L$ h9 m3 z, A5 `
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
      e8 z: J& v$ K, ~) O) [
  2.     // Логика открытия окна диалога
    + F( k  R/ {+ r; Z. p% }! t4 z
  3. }
    # f. ]$ ~  N# z: ^" I4 N. T) M6 w6 G
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
. E5 F$ ]) [; u4 D/ J7 h% M8 M8 BЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
) ?& t+ R3 w4 p: U. y1 V
- I6 s! a0 v2 s& X, m
5 z8 E) p& x  j' N; a1 \# L7 J/ X0 Z; `

7 z: p! v" E! D, R) g' C
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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