Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 5 u$ n0 S+ Y% C& w+ U: f+ H
; e% f) b7 t- S; {: {
$ ~3 d: Z- J  l0 X  {( F5 ]
Шаг 1: Введение в классы и методы на примере L2j_Mobius2 Q5 s  {& k6 r( J1 w2 M1 d7 R
С статьёй можно ознакомится в разделе Обучение > Читать
: v; r' A: n$ |' A9 Z% I. x) y- D' ^3 o6 ^! x$ B: P7 x1 m
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
1 K- j$ q( \( M' z. x6 C7 [
! V0 A( }0 _& {& E: y  qОбсуждаем:
! t  b& k" q+ P: r2 w* ]
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.5 Y$ Q" Z  C% K* e0 a& A9 B3 o
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!# V; o* H# a/ S0 V# Y

" h( p, R' ~$ |( D% G
2 M' F  H, N5 M& F
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
/ m6 Z/ Z4 v8 ^$ p4 d* X
" O. f+ k$ J$ X
$ v- J4 O8 R# b+ }& K
; `( Q- j( f! L( A5 M* e$ h& V9 K

1 s" }; l4 p0 D

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
) H+ Q; x% |. I+ g' U; v/ D
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17# }2 {' J4 d5 U/ s
Почему мы используем ключевое слово this для ссылки на п ...
0 e' y% a0 @, r& l  d* @% G
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.7 F5 f% K0 x  m: A* z. _/ ?
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.* H: r7 m) Q8 I* _" S, s- W" j
+ J$ y  j% G* O: y4 k8 A
Вот пример:
# S9 u0 q. W# l3 K5 L4 A4 ]5 n- U2 W5 K+ [
  1. public class Player {
    3 G. m) r2 a8 f( _: C) h. H
  2.     private String name;3 ^: x1 ^& Y+ T% r- T# d8 F
  3. & Q# z( |" i, G% B4 h
  4.     // Конструктор% D5 W" x  r0 @8 Q- r
  5.     public Player(String name) {
    ! i+ P2 O( M; }  D' ?/ v
  6.         this.name = name; // Используем this для указания на поле класса
      B5 T6 U: M( e2 k1 H! s
  7.     }7 d* c: {6 o# ~# Z3 O
  8. . {% j  ]+ J# Z" S
  9.     // Геттер для имени8 F7 s, d* \" K: I3 p. F0 h
  10.     public String getName() {
    8 N. q0 p( x) x/ m: N
  11.         return this.name; // Используем this для обращения к полю класса
      l1 E. k; Z4 ?3 C7 s. i, z6 E
  12.     }  Y( ]1 Q& v- h) m
  13. }( E  }2 i9 Z! d" C- m
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name./ N9 x: Z  A+ @& F) y9 N
! O% \+ f0 G6 B# G* p1 s
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.$ [" X( p6 @$ R7 \/ R& M- G& P; _0 z
% J9 R5 w# B5 d
Пример передачи this:
' Y1 C3 s6 N, \
  1. public class Game {
    ; \3 o: S6 M/ W# H/ b. w" J
  2.     public void start(Player player) {# Z  V$ J5 W+ T, @; \
  3.         System.out.println("Игра началась с игроком: " + player.getName());# C4 d) N/ H! ^1 k+ D, s
  4.     }
    ( v3 z. a4 h- _+ l
  5. }
    4 R9 O9 P& l8 @% f6 i
  6. 6 ^- w! I1 m! s1 [1 u# ^8 G4 ?
  7. public class Player {1 z$ \( }1 g0 C9 d
  8.     private String name;
    4 E" T+ Z2 S0 }6 k

  9. ' ~" E: I% s% U* a, Z1 m; r
  10.     public Player(String name) {" G- r6 n) {' N0 G
  11.         this.name = name;' i$ J" v" ^& U4 b6 k. G0 @
  12.     }0 w& C* }2 y6 _2 L# L/ `: k4 @

  13. 4 g$ b7 ~' _5 j7 ]9 q
  14.     public void joinGame(Game game) {
    6 `# H& N9 l' Q3 b' r( G9 e
  15.         game.start(this); // Передаем текущий объект Player
    + H8 u  y0 g' j* H/ S" |
  16.     }
    $ v" p) i/ ]1 h* v
  17. }
    0 R; @- f1 ?6 Y9 ^; s
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
# Z) d8 {; ~  H# U* U/ k
* U, E5 g0 Q0 o8 X
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?/ ]7 z1 \0 L' s* f8 w5 k5 f. T

8 G5 e3 ]& ?- N4 H: G
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
, U! D- b: P1 ?" d# GКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
" c1 ?- @5 p. H$ s# P7 O
Mike123 опубликовал в 2024-10-17 20:05
& {9 L+ ^: _1 jДобрый день! 0 I8 O( v( n0 V5 O# K6 |
Как создаются и вызываются методы в Java? Мо ...
+ F* B+ ]# x% d
Привет, Mike 123! ?
) o; p9 q& I3 K, C" Z7 tОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.3 B* Z; W3 x/ i8 i+ I& z
1 d) l: m1 f! ^. Z; d
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией./ X; [; ?( P1 ~8 c- R

/ d) ?4 T$ }+ R; w1 U0 m5 i' j- X0 a7 M# G7 I) ]: E
Как создаются методы в Java?
1 x- ]: S) ^: e% a8 q. R& S  c$ v+ e& Y9 Z. W
Методы в Java создаются внутри классов. Вот базовый шаблон метода:! k# ?: O% p1 F/ v$ u! w1 j

) W3 D' w, [+ B/ _
  1. public returnType methodName(parameters) {
    7 g( {6 q9 c; M
  2.     // код метода
    0 D- ?! ?# b; Z/ ~7 g+ R6 A
  3.     return value;( A3 b# \7 h, W$ N+ j
  4. }
    : O4 Z9 w' Z; Y2 a/ a2 Q. v/ k
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    & ]7 `( V8 n/ b8 g' [

0 R- f8 X! ~3 ^4 ?, xТеперь перейдём к примеру.
9 t; m/ ~% |# Y* [* E
" A* P# B9 q. e4 f. E' h! eПример на основе L2J_Mobius с переводомКласс Player.java — создание метода; q1 Y7 g# q( m5 m+ m6 E, N
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    4 ^4 V" ?8 A+ @3 p) n3 w$ f: G8 Y( a
  2.     // Вызов метода атаки NPC
    5 P. U7 a4 N* O# S
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());( y( e4 s) j) U9 t9 A5 @5 H# ~2 Y
  4. }( w- B- K- ?1 j8 b$ t  V/ H2 r; @
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
/ B. |8 d" o7 x" @3 N
+ b' C8 u6 f" C/ X- Z9 k+ E5 t. O* u
Класс Npc.java — вызов метода6 E4 F" g# K( E  \
* `- l# e- R- o  m2 H& j7 Y
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    + Y+ U6 Y# e6 m4 N' e- ~
  2.     // Логика получения урона NPC
    , U; I9 {! _0 _6 n" O2 [
  3.     this.health -= damage;  // это.здоровье -= урон;
      |3 f8 ^" n- C  B9 ]! f
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    4 d' R$ c1 a6 P, O; B: G
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());+ A) M1 Z4 [' ~7 _& z5 V2 X/ ~
  6.     3 o) z) F) ]) {0 r  }
  7.     // Проверка на смерть NPC
    & j! ^' Q; o5 k8 V& P: o& n
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    8 J7 x0 j. S0 p& u
  9.         this.die();  // это.умереть();
    2 [+ m5 _6 x& x/ S
  10.     }* C; h6 v8 i& U* @
  11. }% @- n  O; M( f' F# i. ~
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).  G6 |* ]1 r; G2 H$ z0 s# k5 v5 I
Пример взаимодействия (с переводом)
* M3 D3 ~6 j" ?0 z. _
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");7 N# H* _# E1 `
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    # k5 \8 X1 O4 O  V, C1 _& {
  3. ! X) p5 \8 Q6 p/ v  b! d; u
  4. // Игрок атакует гоблина
    9 E; M9 j  _0 O( H. x
  5. player.attack(goblin);  // игрок.атаковать(гоблин);$ l0 F4 h; Z( s0 f$ e! C
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 3 B! f7 B  ?4 J# y  E
5 q# H2 w# _/ T6 j! b5 o' L# H1 Q
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.7 t8 w6 ~1 M% [, p  f
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!% J* o1 q" ^+ |+ k2 V
$ E0 S. @  n& b- \* C
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
0 Y7 Y% H! q  g6 Q' W0 W1 tПривет, Астралия! Огромное спасибо за твои разъяснения ...
2 [! g( E2 X  h" J7 q
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
3 K5 q$ w: T2 J$ x6 p1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    ; k' m- n$ y7 f$ b! E. G' N
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:; `. {6 A2 l, g; X7 c$ _& }

* D) M6 ^# v7 }4 W2 c2 x) y
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)" d' l5 Z; k: c: @3 ~# ?
  2.     // Логика взаимодействия игрока с NPC: |0 g" V! b, V2 x0 n; }1 W
  3. }
    0 Y' D7 P4 P* d) h$ o0 e
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    3 o# f3 P9 `, }# Q: ]8 B! H

! @+ Z! W* D: g4 A5 J
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)3 o; L! b" r# C) K5 J* ~
  2.     // Логика перемещения NPC
    # W+ K6 [% `# M
  3. }
    6 U' M. D% c2 e; s
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    : {1 Y) }% p- a( f0 M; e2 F" o

9 u+ H0 f) n* L. b. |: i
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример8 s2 S. I# ]- G0 _
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    4 z6 k. L% B! {+ @5 I
  2.     this.health -= damage;  // NPC теряет здоровье9 Q0 e  f9 l' T0 b: M, l
  3.     , t+ W: Y3 r! x! w( T
  4.     if (this.health <= 0) {
    8 Y. C+ x; e$ p0 L+ G1 }
  5.         die();  // Если здоровье упало до 0, NPC умирает
    , W1 @! F+ k/ |0 B
  6.     }9 o0 _, i, u& [1 A% d
  7. }  Y% s/ m. [1 y  B7 e5 a! L4 Y& [0 l8 z
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример; _6 S+ q7 c4 x
" f0 G. K6 {- A
  1. public void die() {  // public void умереть()
    ! C6 U" P9 a( i7 s9 {4 t
  2.     // Логика смерти NPC! S/ w; S! @' O2 g& d1 F( g- d
  3. }! w1 `4 o! Z- Z5 I; S
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    " s' K7 S1 X  o& y  d

& G& @( s9 z: Z* U9 x# V' I; M5 e/ r1 A8 A2 m, J. z
  1. public boolean isDead() {  // public boolean мертв()& Z6 p& M* f% L/ c4 d
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    ( I1 d# r( u4 K
  3. }8 ]" U5 s5 \0 j2 @& i
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример0 ]: l( [7 J0 I! C
- l( _2 I" {8 ]9 ~# r8 i' c+ J
  1. public void heal(int amount) {  // public void вылечить(int количество)$ x4 P' e4 u+ x8 V* t# `# y" G
  2.     this.health += amount;  // Увеличиваем здоровье
    ) E  [6 ~, b. o: d3 R* b% u# ]
  3.     6 Q2 I  Z! I' x) p. H' N/ S; k/ M
  4.     if (this.health > this.maxHealth) {; K& V4 @, t2 k% ?
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    : ~1 B6 `" D$ u' w) Z0 H3 z$ O" {
  6.     }; w* O. j, q6 u  Q3 i  t1 l+ e
  7. }
    / s4 T4 W  M7 M9 D6 ^' |  N$ q- g
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    . D5 G3 n  q% }8 T1 X8 M2 |! ?, S

3 y  M6 T! F  u( a0 D6 t6 E' x
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    - Q6 P# d$ @! F9 d5 s) E
  2.     // Логика применения скилла NPC7 w# K! |5 V+ f7 t
  3. }
    * D- a% c  C& Z* U3 y6 d
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:+ ?* T* \2 g  A1 B  ~

0 E4 f$ R1 \& R$ r9 f' }3 [& S

  1. 1 J/ D! p3 L' Y" b7 [$ T, ?
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    # ?% L6 y$ e  E- r% Z9 E& q7 o& s; g
  3.     // Логика взаимодействия с NPC7 |- B: O5 q+ d$ r8 K
  4. }" o4 q! c8 j- X& R' `
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    ! Y% o. S5 R$ o& t! m
4 w3 O9 P  r/ D' F( j. t
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок), C$ {$ I2 q; ^* b' F) q
  2.     // Логика открытия окна диалога/ A+ A% S! W9 C' u' b3 c7 U
  3. }2 [' _0 |7 ^& t! e+ f+ m9 B0 P
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.+ U2 X9 h# [# Y# a6 r9 o
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
8 E2 K& S5 j, i) b- c1 P3 f; H' h6 P0 J% G+ O
1 ]+ B( Q. C$ B& O/ A4 a2 E; T# E
- _. ]$ E0 Z/ f2 |( x6 y  S2 I) B# f

7 R- `( _7 ?! I5 i* v: C
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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