Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
1 H: c$ U: ~! {4 u. H% A5 h0 L- h$ m$ i
( ^% l! A" I0 H& m3 _
Шаг 1: Введение в классы и методы на примере L2j_Mobius
3 j. ?4 ?' k! b8 U; F. mС статьёй можно ознакомится в разделе Обучение > Читать
% `6 D7 K0 m0 ?* p: G' Z
' A6 f6 x% A" O' _8 uДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.. X  O( u+ P5 M8 h. ?! D

8 e; u. R' z/ ]7 g) A  [; QОбсуждаем:& B7 @! j, U0 @
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.% i# u1 O* X2 x
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!* J9 q+ Z+ O9 B. Y7 A
* P1 i8 s- u* u


* ]( X' R, r2 ~И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
& n0 X; {4 e: s) ^0 ~
. P- h: [- G6 M( t7 @- d8 V! v$ L# {6 H; x$ y" t2 B) r. O
! |) ~5 n# e! J$ D  q2 Z

3 p4 O' t: V; o$ Z6 `
8 O- w3 _6 [. ~" {. U" c2 s4 H- v: d

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
* c" I$ W; K0 x* X0 \! Y
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17: p, w' x* f: Q8 `# a
Почему мы используем ключевое слово this для ссылки на п ...
2 y& {& Z* m6 W! P" \/ |$ r2 q
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
- Y! h+ M, h5 q" }Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.& m9 |) W6 o: p5 u! k
- K) i: R  s3 n; Y6 F
Вот пример:
& A3 h6 a6 U9 a8 x1 e
  1. public class Player {
    & X" U( Z( ~- l/ V1 x- M
  2.     private String name;
    4 ?; |0 L5 `. F% L" }3 ^
  3. + d/ a' c3 n+ \$ M, z3 H
  4.     // Конструктор8 M& I  k7 y2 m9 p: Q, h
  5.     public Player(String name) {8 P2 x1 n  D" S9 `& e8 v7 j- H
  6.         this.name = name; // Используем this для указания на поле класса" [  R) I- M" l0 E; n
  7.     }
    " f- m5 t! E4 ]7 E" T
  8. / t5 ^/ K" Z8 n4 ^/ ^# ?
  9.     // Геттер для имени
    / U- L% t$ B* k! s
  10.     public String getName() {7 _' x! L+ U/ i6 `! [, \3 ^1 f
  11.         return this.name; // Используем this для обращения к полю класса7 n5 Q9 S8 t$ y
  12.     }" {  e8 n. ~  [% e  D
  13. }: m8 H- f0 U' q+ E& p
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.  e1 Z5 Z4 w) N4 A) l
. O0 a: A1 W. U& h
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    " b" B+ w6 G2 x& D9 x

0 d1 K: D! ^/ P) v' x, ?* cПример передачи this:0 z& M* v$ W  W$ x8 H. n6 e: c) l$ P
  1. public class Game {' u, X- c5 B# b- X
  2.     public void start(Player player) {1 w: |( ~$ l: e8 X/ m7 q) _7 T0 l
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    " [% E$ d* f- z$ Z3 Z/ @0 @
  4.     }8 ^( N+ S/ z+ P0 U' n
  5. }/ |! _, E4 [# H# q" N, I
  6. * s3 M' S. I0 o% w
  7. public class Player {) o6 @" I3 H$ g& c: s) i
  8.     private String name;0 w% U4 b% c( p( T- u

  9. & J  u; t; ^* w# [/ e2 u
  10.     public Player(String name) {9 p/ K: w$ j- Y
  11.         this.name = name;
    " h$ N) x  u5 Z; m
  12.     }$ s; l" ^& F* Z
  13. ( V$ p2 `6 N! r* [* ~
  14.     public void joinGame(Game game) {
    1 I, q: c( e" ^1 d" _1 s! d; |0 j
  15.         game.start(this); // Передаем текущий объект Player0 X) O3 y6 o/ @
  16.     }
    + S+ e/ K7 p1 q4 A& o3 @& b. F
  17. }: z  L- }% J6 T6 b# ?5 S. L8 H# [
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.3 G+ o5 k+ u, [. m8 f% M# {5 s

$ t; Y% T; c- Q6 \! b# z/ R
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
% [6 M, J# D4 C" ~# H& E$ T' W; L! f( T: T
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! ) ?5 E& z. I, b7 z
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 7 X) t2 z* W/ y7 Q% ^
Mike123 опубликовал в 2024-10-17 20:05
* z! ]. Z* E, g. c' j# p# E: ^7 k% VДобрый день! ! i' j' ?$ j6 c8 z) O
Как создаются и вызываются методы в Java? Мо ...
1 n8 [( u4 N$ {  F# ^
Привет, Mike 123! ?1 G3 [8 ?% F; z5 n, T5 C
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.1 U  d# e- B* X1 f3 C

; e& N0 ~& i6 h4 o$ HДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
" z4 [) Q7 X; h& Z6 {8 \- x" k5 U4 K5 f( L# s2 i

# s- N- O, G0 @) c& E1 XКак создаются методы в Java?7 M( f' E$ o1 o% D2 ?* f
$ }! G4 r* a" S6 S& A6 g
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
* v- ~# V7 i# C7 P$ M
: r& a& @. S2 V% {. v- A
  1. public returnType methodName(parameters) {
    ) Q' ~+ E+ p- W, _' }5 y+ v
  2.     // код метода1 c, `( g2 l( |* H: j
  3.     return value;$ F8 g9 j& Y" K2 c
  4. }
    4 Y% c  B4 k3 p; k
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).( {8 U; x. Q, d0 w

6 `- A1 r+ _! x4 k4 JТеперь перейдём к примеру." Q% b3 ]6 u+ C& N; t& o

) [4 p$ U6 j4 LПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
+ l7 ]1 _9 R/ Y& p* c, {; T( j: J
  1. public void attack(Npc target) {  // public void атака(Npc цель)8 d# F6 N, ~7 w! _5 V) m- k2 e
  2.     // Вызов метода атаки NPC: \) ~* D5 I; Z( K2 G
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    3 h. ~% n1 B7 S: m4 z' u
  4. }* F- C% q* o0 P5 E) w
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
# h2 u* C/ F& L$ ~/ M( s% d/ B% ]$ G0 L. `. p- I" Z  A

  g# p0 ?! r( \& UКласс Npc.java — вызов метода1 E# ~5 w7 \8 q5 g. M" C
& s& Y4 G' x9 v# [0 ?8 A0 [4 z# t! P
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    6 s: B( W1 r5 E, `
  2.     // Логика получения урона NPC9 f8 O! ?! _) F9 w  h/ l. w4 _
  3.     this.health -= damage;  // это.здоровье -= урон;
    2 }: h" d" u; W! [$ `9 c
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    8 K0 x! p% f! L/ {
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    & @3 r' T* V, z
  6.    
    ( E3 S" y9 {/ f" i0 z
  7.     // Проверка на смерть NPC
    + B6 m$ @& T$ c& w. y
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)  o' b$ N* a' x" P% Q8 Q
  9.         this.die();  // это.умереть();8 O: N3 |1 f/ r* A; v2 b
  10.     }4 c4 J% P# u/ k5 U) [- ~
  11. }. c8 ~6 E& h. W9 y
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    ; d9 t0 [1 W+ i7 a) X9 t
Пример взаимодействия (с переводом)9 U+ b% `, T6 ~! G/ o
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");: u! r$ T6 o1 U3 I
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    3 [. o% \2 N- {1 o
  3. $ ]* _) j: _/ Y$ k8 h
  4. // Игрок атакует гоблина& e2 r% x& ?5 F! m
  5. player.attack(goblin);  // игрок.атаковать(гоблин);( U5 k) f# S, N
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
: ?$ z" J7 [5 \1 i/ `
8 O4 F% g3 }! y8 B7 k
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.. n3 f+ C0 t" n5 e  k+ P
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!$ e3 I. F" E' `; {2 B9 q# C- V
- g& r6 S6 Q& }  M% \0 B5 b0 t
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
; K/ L1 g3 ^( N0 e  g. E5 SПривет, Астралия! Огромное спасибо за твои разъяснения ...
4 I. \, n# v3 i3 l) }7 _
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.0 W1 k0 F: @) m6 j
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример# s3 F2 L* K6 [
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    ; ^5 t  }$ Z8 o" b7 o

9 g' d4 C: K& n' E
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)+ k; ~, _& ]7 j
  2.     // Логика взаимодействия игрока с NPC
      X# Y* A) U0 o9 `" L- M/ b
  3. }
    0 F6 S! D* `9 n- e$ o% X
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    8 ]0 Y8 B$ g* d6 e! c
; H: F0 [) [# d" Z8 L% G1 ^
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)7 x& }' C, u# y& I; p5 M
  2.     // Логика перемещения NPC  V. C5 \8 t  V
  3. }
    - X9 ~2 [, y% l* i4 M
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    : v6 l3 F/ K1 A8 Y: Z: Y& y. ]

2 F  r( N6 [8 a# b5 W3 e" `5 |
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример: f3 K5 J8 C. |4 j1 l
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий), \0 [. z/ I! H1 \, J& y
  2.     this.health -= damage;  // NPC теряет здоровье  F+ c/ v' A4 e" s
  3.    
    * ~% x8 C- s8 _, _$ @6 C
  4.     if (this.health <= 0) {3 S$ Z- i9 f" v2 Z1 f
  5.         die();  // Если здоровье упало до 0, NPC умирает
    ) t* U+ A( \! i' B3 `0 d
  6.     }2 O! L  M5 q( k0 y# c, w* M
  7. }
    3 ^8 u0 d# P& G. T" b2 h7 U
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    1 q% n. \, c# e

9 ]% r# w/ J: ~$ i8 M% Q& {% n
  1. public void die() {  // public void умереть()1 {, l1 Y% w: |0 s
  2.     // Логика смерти NPC4 u7 _  c- X0 \9 X! [4 E, V9 R
  3. }( R! m% K; [! @; a2 D5 o$ }/ D
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    ! T* v7 E3 j. N/ k7 z

; C! Q6 ?" A8 a1 }) X6 Z
7 Z/ x: b+ ]# d4 y& c! w$ N
  1. public boolean isDead() {  // public boolean мертв()( D3 N, j/ g+ P' m
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    ' F! y( U" v+ v1 k5 u/ j
  3. }% x+ V* S6 |2 A2 K' |. E( m
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    # B  T' w! ~7 h- C3 T/ K) D: U
: z  k; y5 W! q, ]6 A5 s# q( g7 ^
  1. public void heal(int amount) {  // public void вылечить(int количество)
    , V' _+ k9 ^3 ^
  2.     this.health += amount;  // Увеличиваем здоровье' P- j$ y% u0 a
  3.    
    & b. |  B2 D6 }/ H; V) g
  4.     if (this.health > this.maxHealth) {
    0 y) |- a2 Z- W" B: r
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    ) `9 l8 r$ `+ K" j0 ?
  6.     }
    " u( G" T$ K% p' g& O
  7. }
    " o9 b8 x0 S! ]3 M% b$ e8 h& M
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:( U0 H1 l) @7 B
8 `, M) \  {) }! K
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
      n& W" s3 J  U: T/ a
  2.     // Логика применения скилла NPC# f: ~& ^' E$ R+ h; }" j( R
  3. }
    . E5 D# `$ \8 x4 z# t4 V
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    9 t  }+ U  v# z7 F; M! x' |+ `2 Q

4 }. {4 I1 _" p; P7 d

  1. - ?9 {! u8 `2 s! N
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    + z9 r# Z# H5 n$ q
  3.     // Логика взаимодействия с NPC! j& i1 R2 f1 b# d: Y3 w  |
  4. }
    ! U4 D1 Y6 C1 X( l& ~8 t
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    + k1 ]$ `# I9 U3 _
- t7 s+ P5 {5 J; |
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    * s% Y  u9 N. {- O
  2.     // Логика открытия окна диалога
    # G9 @1 B/ z: u( z% L0 M
  3. }
    ( x6 C; K6 }/ l& f# s
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.# n$ a) j( C( ?
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!$ ^8 [, X3 ]! i  t( r* S7 ]

; I2 @: }4 }# d) Q5 ^4 s+ ?6 j: v
; D' w% S5 A& f5 ?; ]: D8 \3 ?6 b) O1 G# E2 O# g
4 ^6 v. C' Y3 z7 B' a  ?/ \- [
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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