Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
3 z! A$ E3 R9 r* r! L6 q9 V3 |; o9 ~) s) c( h

$ r% Q* \. T$ z+ [" b: e) jШаг 1: Введение в классы и методы на примере L2j_Mobius+ y. n) }+ d. x# v8 c+ C
С статьёй можно ознакомится в разделе Обучение > Читать0 l& s2 \4 f5 z% b  b; ~  N" d6 E
0 u$ ^/ F- o3 a% l8 m5 g
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.6 f/ ~) T& ~* D! A7 T
0 v- ?) }" r4 {, T; j/ U
Обсуждаем:
* b* R  ]5 w0 T) f$ L
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.1 o6 U, X! ?5 m* M2 V
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!( s; {% c2 ?5 J. m' c
" `7 p8 ~- a$ }


4 c# H% q: l1 F1 p0 s- [И помните, если код не работает — значит, это он проверяет, насколько вы упорны! 😄 Но мы вместе разберемся!! t9 a  X. @* v

" x6 I0 G: @- W9 W& }
& E+ s- c6 n, }# e7 ^( v7 i4 L3 s3 J9 i2 I7 k3 ]
3 I2 ~, b- }7 [  b& A2 E

7 p1 m3 _) W" |- E5 Q& X

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?9 B1 q1 r& h! a# `5 I0 a
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
. }, i0 R2 u$ @+ ]7 i; r! PПочему мы используем ключевое слово this для ссылки на п ...
' P! f# s* |9 o; i  I8 _3 n; U
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
8 ^$ @( _5 c, ?5 mПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
8 S9 o* e! \# n: g* f& N; S  b$ {# m5 s- ~: ^- R1 U
Вот пример:
  [) Y! s- X9 `
  1. public class Player {
      @$ `' ]! {( k; K& M4 k  N% _0 o
  2.     private String name;
    , U! U/ a2 U: D5 ^! a! S" `

  3. . {1 U' S) W. I5 t, B" a, Z
  4.     // Конструктор$ \9 u, A% D( g$ P$ m1 g
  5.     public Player(String name) {
    . }2 q/ k: ~) B4 b" W
  6.         this.name = name; // Используем this для указания на поле класса+ F: y0 I; r8 Y# C5 V! U3 A
  7.     }' G5 D9 d3 v4 O/ p8 s+ v6 n3 I, W

  8. * X9 x" y8 l$ Q  Q5 V3 R' C
  9.     // Геттер для имени
    # u, h4 h3 k' h" \
  10.     public String getName() {  n, V- W3 Y) a! _$ `4 b" I
  11.         return this.name; // Используем this для обращения к полю класса5 n/ Z, M1 _# ^' I% ?9 D
  12.     }4 F+ U; s9 ^- Q
  13. }( ^, P, d3 O' h5 C4 ], `) k( K
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.( A+ ?5 f: R- |& x5 f* z0 P6 I4 q1 G

' }  a: S3 D  JКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    & d6 i: p6 p" c7 S0 ?: F
  |7 x2 t7 i5 C- K
Пример передачи this:
' [2 H0 ~5 O  k/ g+ V8 w# ?
  1. public class Game {% ]- p8 j( `2 K; s
  2.     public void start(Player player) {/ m) l: x' X& Z/ U. m2 i6 ?
  3.         System.out.println("Игра началась с игроком: " + player.getName());3 u7 P% S2 C* J/ P6 ?. {; i& N
  4.     }# \/ P+ B9 D9 t% N0 s  u
  5. }% [. J& l3 K+ O& E  B0 z
  6.   ^! G1 _6 a. m/ \( k7 b+ ]( \; Q
  7. public class Player {( _  Z9 g& Y9 l. B, O' V
  8.     private String name;
    $ X5 S' A' ^! h# T

  9. 9 f7 _9 ~! G# L7 x8 \# s
  10.     public Player(String name) {& `7 d3 j& z9 [& I. o9 r: Z
  11.         this.name = name;+ t% q4 Q  N: P: l3 T
  12.     }+ V, i. {1 G9 }+ ?. Z7 Z) D
  13. ' z4 R# p( q: ~& u" J* K! a9 @
  14.     public void joinGame(Game game) {# m  S3 t& g' M/ p
  15.         game.start(this); // Передаем текущий объект Player
    - G( w$ k" U) t: v
  16.     }" f. `, g/ m* J8 K4 X5 r! F4 z
  17. }
    ; D) b, ~* d. o% t! l
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.% C  x- _) q8 m- q" C

0 r* M2 O; Y* B. K& f( ]0 D& ?3 \6 b
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! 😄
- S' V' u5 j* \) g. `* o5 U; ^! f, I
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
9 n) M( C9 \9 U- G4 a' iКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
0 b! w* P9 j# {! D+ t+ |
Mike123 опубликовал в 2024-10-17 20:05
7 t  G3 f2 X  i. ?& ]Добрый день!   @% t7 n4 \/ M- m- p9 M
Как создаются и вызываются методы в Java? Мо ...

. w1 I! Q1 t% H8 l, {0 XПривет, Mike 123! 👋
9 [0 ^2 e, J4 r/ U# t* I0 rОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.3 ?5 k1 S& Z. ]
- E% G; m9 U5 {" B. r4 w. N
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
, A+ |' l* X$ A4 B; [6 q: i! G, ^1 N) T7 K. B' K
9 H% M+ p! `7 O4 [2 J: U8 X* X* U
Как создаются методы в Java?
/ s3 \9 ]/ y" g; e! @
* d' o# V$ _3 D$ y$ F2 GМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
/ u& f7 e( m* y# A6 r2 M# j7 w- [7 b
  1. public returnType methodName(parameters) {
    " E) O9 o9 Q9 ]; Y+ k
  2.     // код метода
    $ z2 W. U& @6 o8 A4 t! N9 m2 Z
  3.     return value;
    ) A# X' \1 t$ k" A# F
  4. }& ^2 w* L! }( a' p; E
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).+ ]  v3 J9 x0 X/ [
, |) t; W# C3 {/ M" w
Теперь перейдём к примеру.
/ P$ |4 K- i1 O1 Y6 P0 V: d5 w! @' D3 g! l
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода. @$ Q" A8 K- k+ u8 }4 ]) k' o  j$ W
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    # N. h: O! W0 U: S/ A. `! ~: M
  2.     // Вызов метода атаки NPC; l6 s- Y0 F9 C. L7 h
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());+ y2 y5 e8 R3 U! U5 P8 ~* }
  4. }& \1 b9 R" M. e9 l
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).  {. s) k" j) z/ d0 ^- i5 R
3 \9 a1 A: k" f' e3 U
# B/ C0 R$ {' F3 f' e* F' Q
Класс Npc.java — вызов метода" h" f) c5 w4 [! P. g7 @3 U# d
5 R1 i  Z: V. X# I# m
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)4 x8 {4 |3 D2 p5 c2 i) Z& c* ?
  2.     // Логика получения урона NPC7 k; f! p# A% x/ k  z
  3.     this.health -= damage;  // это.здоровье -= урон;  E# L) t/ S. Q
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  : A, |- d/ a% ^$ E8 j9 E! N1 i
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());5 i8 `$ {2 ]3 i: H7 U
  6.    
    , {1 r) A$ H- w
  7.     // Проверка на смерть NPC
    , r0 ?$ e: n) r0 e: y7 W0 W* i; m
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    ! S1 H. k# d1 u  l* w( e+ L, H
  9.         this.die();  // это.умереть();
    + l0 A( ?! O- f2 r4 o" v* V" M. F
  10.     }
    8 `  L$ E% Y0 R: f2 z  ~
  11. }
    . f  Z) G5 c9 `. D% e+ A/ E
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    1 N4 K7 p3 Y1 b7 B0 ~( G9 O
Пример взаимодействия (с переводом)5 b# F# J% V# Y1 s+ f
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    / Y* p* d: A7 L& n; B# C4 \' E
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    9 ?# C7 P$ O% {) U5 G+ C

  3. ( S6 V! m" }; @  R7 K3 U
  4. // Игрок атакует гоблина. a9 T, C, @5 ^: W
  5. player.attack(goblin);  // игрок.атаковать(гоблин);3 w, ?" k' v' E% g: ]* s6 ^
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 0 ^9 j0 T# l5 U+ D. }0 m8 s

- b+ ?! C2 V+ U" Y# n
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
/ N9 h; p* U# N) I( tУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
- N8 P  k. ?/ F9 f; n  U; j$ H1 H2 ?6 i5 j5 R+ F& F# L6 G3 G
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
. n( c9 N' g# K! a5 j! gПривет, Астралия! Огромное спасибо за твои разъяснения ...

- k/ Y3 }- D; U( nОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
) }8 ^* t; n6 |4 }" @1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    ! f1 i+ t$ u4 g0 U
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:$ {0 Q% o1 F  c/ w. B: \

/ ^/ A- X9 R! T) v: s* D
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)8 L) _) V5 d5 }/ l
  2.     // Логика взаимодействия игрока с NPC$ w9 o+ c( Z7 X8 _. C% T+ j
  3. }
    3 S6 D/ ?5 [( B. h
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:% B! D5 E1 ~# X% A& _; e, g

% B* Z6 |( F: Z1 v4 i4 k
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)! o" s; R( _# h( n, ]8 T3 P# P* C0 ]
  2.     // Логика перемещения NPC
    5 ]9 e" |/ G1 G& x, c1 \+ X! q7 f
  3. }3 }/ Z2 f- S4 D! \- l  h
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:7 G! ^- j& K$ z5 ^0 c' S- @

& \! ~- _8 {, o  L* w* K) }& T  ?4 T
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    0 ?! N* h% G7 e' l* j
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    0 m+ D: Y4 V* U6 x, {, k( B2 {
  2.     this.health -= damage;  // NPC теряет здоровье& X- b  }( t7 `
  3.     1 ~* t7 |  t" V. q7 t# c- f
  4.     if (this.health <= 0) {
    $ G+ E2 Y' c0 k! V
  5.         die();  // Если здоровье упало до 0, NPC умирает8 o3 e1 k1 z9 B" _0 o9 h/ O% F
  6.     }! Z, \' n! C7 f& n0 a2 Z
  7. }1 ?+ y7 Y2 a; R) G6 Q( V
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    7 p5 i4 A- Q3 u1 u7 x" O
# ^( c1 J5 E/ J9 v* n3 k
  1. public void die() {  // public void умереть()
    - l+ ^' O  Q+ Q% a
  2.     // Логика смерти NPC
    ; ^" p( v+ V( a( S5 V3 |4 r. V0 l, B
  3. }
    : ]/ {5 I" F8 B
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
      N0 {) l+ v! H/ {5 u

# H1 s) F  C* x" a
6 }6 z5 H  J9 {$ y* w% A* F
  1. public boolean isDead() {  // public boolean мертв()' Q6 }4 U/ y' U; y- L3 p
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0- E; o0 W& m( |" d
  3. }
    / x& N  W# K( b% I2 r! M3 M4 w
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    ; I2 u$ R3 D3 `' C! p( x2 a

! c& ~7 @% c* G2 N+ J8 m
  1. public void heal(int amount) {  // public void вылечить(int количество)
    # \  t( V* Y  Z( P
  2.     this.health += amount;  // Увеличиваем здоровье
    6 d, A7 n$ K+ u( ]8 ]% f" g
  3.     9 ?  ?6 O0 m. A/ n6 o6 {2 \
  4.     if (this.health > this.maxHealth) {
    $ F( v/ f  W. v) `5 l( d" |
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального2 M0 l) X- {! l& T0 @* D
  6.     }
    2 [7 G4 {& h. Z1 ^. h  b
  7. }
    , p, ?" @8 E# Y( @' R; i* r
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    ! b% j, L8 E" z: z
+ q5 ]+ }: z  O9 N0 V( }
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    # x' \/ ^* P4 f, X4 i6 [* F: \- y
  2.     // Логика применения скилла NPC7 e: X/ E) b4 v. K
  3. }6 e( h  T9 ^! I5 o
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    $ S! R; G. ^# s+ l

. t! |! d' x# ~4 B6 P: P

  1. ! j" K2 x/ W. T/ D$ a( v
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    3 G# v7 [- b# G$ m$ x
  3.     // Логика взаимодействия с NPC" o( {  G1 x9 t+ p: ]( V
  4. }
    ( x" g. S5 P0 j
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:! i4 y1 t8 r( \1 ^. E  C
% N2 N; r6 S. v( T9 k2 Y
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    " l+ G) O! n6 h6 s
  2.     // Логика открытия окна диалога1 W, R- n; s0 S) [
  3. }
    % X$ p, G* c5 D/ d1 Q5 R4 J) f
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
9 l! r/ F, }. M  O. l3 y, C1 Y' {Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
7 B1 _2 T# I4 ?) s- M
* Z9 H" [' u  u# F) O. E* t! f# C/ ]1 q' c
; j& D) J; \- u' W2 u
, I9 Y7 u- Y3 C6 T7 k; l
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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