Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
4 G( d' {+ E. Q% J' L% E0 ~" o! l+ J, W, H8 J- c

2 v+ q# X! ]1 R! D' x2 CШаг 1: Введение в классы и методы на примере L2j_Mobius
7 n$ ~2 T0 P2 CС статьёй можно ознакомится в разделе Обучение > Читать( C6 s! _% S9 z# Q* Q+ z
4 k. V& \( t$ G( ?% N8 |
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями." x$ a& F$ o& ]; k! Y0 k
" e5 I2 ]! n3 _/ P7 K
Обсуждаем:/ x1 }* v; P% ~8 Q+ |
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    ! w6 X4 M4 G4 f% e4 O
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!  z" I. M& F# `8 f
+ w) u/ e. m0 h4 k

1 T7 C& R7 O0 t6 i# @
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! 😄 Но мы вместе разберемся!+ T/ `( _; Y7 d5 q) t. ?6 h' H
) [" B) Z/ H% E
, M* z6 H/ I- t! C5 g  m

0 s; E9 b* l% ?5 p+ g
" o: r! D+ M7 C9 f+ S5 N" F
0 P/ A  X0 q% V0 ?

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
) h1 y  K4 _: d, L
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
8 u9 k8 g" x2 uПочему мы используем ключевое слово this для ссылки на п ...
* g7 L' m  w$ z7 c$ f0 L
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.- Y  [( V8 K) ~% `) T& ?" \
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
2 d1 o) V1 Q+ M' h( t. P/ u6 ]9 r
2 Y1 M1 c& c- s, `- s; H; ]0 bВот пример:8 r& ]* _; Y9 N: R6 K9 Q9 f
  1. public class Player {
    2 y' I; _/ r, q7 i3 O5 m$ N
  2.     private String name;% @1 P1 ]7 P; P) y; l/ k
  3. 9 ^0 ~, t1 n' v& n5 F. i5 j
  4.     // Конструктор' p7 M) w; Y0 k1 s5 g8 g# K
  5.     public Player(String name) {
    . v3 s2 I1 Y) _+ Y. x
  6.         this.name = name; // Используем this для указания на поле класса! W2 N9 U5 K! f& [, o. b* z- y( X
  7.     }) k) {8 ^$ x9 u

  8. . }$ j) R( k/ v1 P, x" z
  9.     // Геттер для имени
    $ B1 y& A3 s5 x" t$ u6 w7 r  H
  10.     public String getName() {/ P. k5 Q% P8 M$ f
  11.         return this.name; // Используем this для обращения к полю класса9 M4 P! R4 B4 c; P1 M& W3 h: a
  12.     }
    # Q) ~# D+ H& ~; K7 l0 x) ]
  13. }( u4 Z: [/ U3 @# _# w7 ?  }
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.1 p# c, X9 J0 {8 @6 S4 D- t
6 T" x  D. e: j
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    4 Y% `/ s7 o& p# j* F  ^) d. y
$ A* q- j2 m( W+ u3 m
Пример передачи this:
6 {; I! b# P" a! E4 C" j* r8 m
  1. public class Game {
    " A6 d, e8 S2 g- S
  2.     public void start(Player player) {
    , R# W7 c) e8 G4 M
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    0 E! _6 f+ |3 C9 P# A( |+ Z
  4.     }
    * z1 [% |7 Q8 Q7 ^
  5. }
      |5 }. r& w: b

  6. . [' X* F4 d  r' J* a2 t& \  j" ^6 A9 E
  7. public class Player {0 G2 x; |8 G5 @" o! c+ h
  8.     private String name;
    2 ~$ z$ M2 b/ r) G
  9. : ^+ n; N& w* T4 @& [3 a! ^
  10.     public Player(String name) {$ E: `6 n, i/ I9 R% b3 c: U
  11.         this.name = name;
    2 e0 m2 \% x( x- D$ S3 J, ?
  12.     }$ j7 u+ C8 N! k3 X( y

  13. & l' b+ m2 r$ X
  14.     public void joinGame(Game game) {6 }! B8 x& l% [8 e. y+ T
  15.         game.start(this); // Передаем текущий объект Player
    5 c/ c8 a1 I# S3 q) Y3 A; R) A4 N, s2 `
  16.     }
    ; G0 u1 f6 y# w6 _7 P# @
  17. }
    2 S# @( D" n0 r7 w0 |
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.2 z% o6 N3 N4 A# M3 ^' @+ j7 Z


# w7 {6 e# }" l' @" W& }Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! 😄' e# O: P  c6 n( @
  c& s# P6 S, M- ]; e' A
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! 1 M& {* Z5 S$ @8 |5 w8 U9 H
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 * ^+ K5 K* i% M/ c8 I
Mike123 опубликовал в 2024-10-17 20:05$ A4 O' l- f$ r! D, J
Добрый день!
& _% r( n( q9 h6 ^. p' m$ p9 P& BКак создаются и вызываются методы в Java? Мо ...
' L$ Q( p! v# l: |$ m0 O
Привет, Mike 123! 👋
( E4 G( s" d+ _1 rОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать., n: O2 X7 y: Z
. `7 [6 z+ x7 p8 K
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
4 p1 E+ f; L/ E/ @% T# S$ ?
: ?' G; g6 Z" A! x% Q$ X9 G: [, U
/ N( i' R4 T- U9 Y, L. t& AКак создаются методы в Java?  E  f2 m0 q% N$ e0 ~
/ Q: r6 U. t& T4 Q9 ?
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
' I8 s7 J2 q* _- M
0 K. _9 y9 Y$ C# }6 m% u! F
  1. public returnType methodName(parameters) {1 r% l# W* D0 {8 [0 \9 e
  2.     // код метода
    ( A' C! g2 j% [# N, G) ?' j% |8 x# f
  3.     return value;
    / Y8 ]7 T; H0 g* b* X
  4. }  ~6 f; W$ T7 `
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    . i2 c2 N1 Q7 ]" Y5 @7 R, |' X

! n7 d0 U5 H* v8 d) XТеперь перейдём к примеру.7 B4 `2 |' o: W, ^: P/ x  q

7 g  F' R, t0 m+ t( \Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
3 X  m& R0 R1 c. S3 C6 E5 [
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    6 ~/ |5 Y; J8 ^+ L
  2.     // Вызов метода атаки NPC
    " M# G: q7 B& g8 |* i
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    6 f# @- b9 h5 x$ a0 W
  4. }
    1 Q$ n' [& m7 o% I# Y
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
% Z$ s0 d" i  e" ?+ g+ c
, t/ H& v+ E- J' `0 ^) \, l7 ~6 M2 x, v, _7 l% v0 H
Класс Npc.java — вызов метода
; Z& m- N4 m/ p6 E$ T5 N/ V/ ]5 A! n5 e9 `$ q, ?) f
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)' `, m7 U$ _) u$ @9 O
  2.     // Логика получения урона NPC
    ! `6 I0 [1 t- C! M, U. f) P
  3.     this.health -= damage;  // это.здоровье -= урон;
    6 t; r% S- i5 R# E  m" r- V2 u
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  8 [2 d8 m3 J+ P  U. f1 X
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    / N  e5 U. r; N% L% x
  6.     8 I/ v4 H, f. o& q
  7.     // Проверка на смерть NPC5 m' b2 |; I) X- |& I+ w
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
      a" ^) \: H# a( X4 `; w$ |
  9.         this.die();  // это.умереть();0 `5 [6 M+ k; U' i
  10.     }
    . p8 t& W$ l" W) R, O" r
  11. }, l* u) z4 p( W# q0 H$ y
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    : y/ Y* j4 B- w& }
Пример взаимодействия (с переводом)
. T, g7 o  L: G5 C* a, o
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");6 t" {) q$ S+ t! N" ~# u
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");$ w  N; S9 f8 C( m3 V- J
  3. 2 [6 S7 D: r  m" H7 j: y  b: _- _9 [  z' ?
  4. // Игрок атакует гоблина% i0 ]; E! V+ g
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
      J. {+ g6 `' ^1 M
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
* B" s' O9 n9 P! w" o; g
) y* p: d- X/ ^9 K$ ?: L. m8 L
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.% f- K* ^* }$ r" ~' W3 B( T
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
8 q; r  q9 x) I! V' [. e" t$ G
) p' ^* h. z- y
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30/ ~( k. B" p4 d- F
Привет, Астралия! Огромное спасибо за твои разъяснения ...

& S: d) E4 S6 i7 Q; K, JОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
; q" {3 ?! R  ~0 y' ?0 h1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    . p+ A6 g; f, @
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    . W: e- j/ O3 ]4 C2 @

, C6 T5 r( a4 H' M+ @% _
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)6 k! a5 g' z5 b# }& X% o; C3 @2 }  B
  2.     // Логика взаимодействия игрока с NPC
    0 P2 N7 ^9 w. c
  3. }( H0 x/ c' R) y: q4 e& |" v
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    1 [6 _* a/ N2 m* G/ Q& y+ l

) `9 H* x% N0 L
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)+ c, v$ G' }- N
  2.     // Логика перемещения NPC
    + Y- s% P; ?; S( y& c
  3. }) M9 ]# h5 C5 Q* `, L( e
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    $ c9 Y* ?: t! e$ O# E; C6 s! |

" n/ y; X, E8 }. g) Q/ i
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    ' v( D: W' D: [/ a1 x" i$ b
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    1 g0 B  _7 |; {0 Q
  2.     this.health -= damage;  // NPC теряет здоровье! v2 D3 v1 U  D- T9 V
  3.     ( X+ N# y! Y; L
  4.     if (this.health <= 0) {% l! E$ s# O' ^( O) @
  5.         die();  // Если здоровье упало до 0, NPC умирает
    % _) z% u% P% Y! ?$ t8 f
  6.     }$ P' N: m  d) p  |1 D7 {' C
  7. }% [$ g8 k2 m' G* w# m) o
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример, a  |. v8 f3 y+ c  l5 z

$ h/ H" g/ S0 F2 r
  1. public void die() {  // public void умереть()+ ^% G8 t, D( U0 Q. z% B' J
  2.     // Логика смерти NPC) E/ A% w7 t$ Z! k- f9 J4 T1 e4 N
  3. }5 S+ j' w/ B* K" q9 c' v* q
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    / j! T- O" |" L. t/ M

  ~. `2 V7 j; t8 O$ Q  P
) x3 \  x2 g, c/ g' q
  1. public boolean isDead() {  // public boolean мертв()( d/ J1 \$ P2 W: x+ |( l
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0' r+ d. V$ k* t. @, w% @7 f
  3. }) R9 Y3 v* Z$ m2 K
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример( k/ F% R6 ~8 p

4 w3 b$ Q5 a( O
  1. public void heal(int amount) {  // public void вылечить(int количество)
    + j( ]# v" g  \% f
  2.     this.health += amount;  // Увеличиваем здоровье
    ! @% ^3 i7 z( ^6 ~( L
  3.    
    & J1 O4 m7 `( [0 |9 m! Y
  4.     if (this.health > this.maxHealth) {7 B6 D: \! O, I% e2 M
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    8 P3 C- }$ y4 o
  6.     }
    ) Q! [9 L  W$ I: A
  7. }
    # Z. Q8 ^% T6 ~1 ?* A2 |
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    * D3 \. r! ]3 p3 A1 l

' l; A% u9 O, m
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)! C3 j. `3 t& W% ?
  2.     // Логика применения скилла NPC
    8 o* B( N* t; z. K
  3. }& a  \$ l, ]% m3 e" g) U( c. U. a
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    * l# y3 Z8 P. K: p# K
6 S% L% n) R* l# O
  1. ! K  U% @" ~( u& s
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)! z" c% [9 F/ U6 K6 H6 k
  3.     // Логика взаимодействия с NPC6 ~( O; e1 V4 |: W0 |" X- z: {
  4. }
    ' a' z- o5 Z; h+ F
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:$ ]. B$ ^( z3 k/ {# r2 G& d( R

6 [3 ~" X/ w+ c( H6 X
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    " n* n3 h$ X( M2 d! n
  2.     // Логика открытия окна диалога
    ; v6 C* u- Z8 Z  m/ Q# D: k5 S  y
  3. }
    " ?  u5 a) \  T% F$ m
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.; x* J( H7 a" _3 g
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
8 P- O4 f, T5 u- Y+ _7 X
8 W$ B5 N+ k6 R" S7 d0 {  r6 n/ _
/ O1 r- ]* p' {  m9 |6 {8 e1 a; x: j/ Z: g
* ?6 ]7 d6 w5 G4 {
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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