Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
8 A/ o6 h# p) L/ `9 o1 q) E& H1 l, O; s3 |- e2 C

  g- ^- @% N' g. tШаг 1: Введение в классы и методы на примере L2j_Mobius% y3 R& C. l" \! w) `
С статьёй можно ознакомится в разделе Обучение > Читать! B" s& y0 S5 i% u

' U9 S7 n  C5 D) n  V7 fДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
6 ~3 k- ^5 A5 r2 C7 N
8 C& u* A- ?; jОбсуждаем:( }( b$ C: ~" E, _( l
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius./ f0 ]" b: B8 U* V2 u
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
% B$ |* w0 `% `8 t; g8 b7 N( }0 i) E' z
5 R* g. r# c$ H
; p! x9 n  h2 L3 Q1 w- z
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!* {" k6 O7 r% N) g6 z, a! [7 t8 W
/ T. g- }% ~/ r* y" L) r; y9 X* L
( m) S  v, v* m, F; j/ g, j) P

9 j6 e  g8 S3 V1 T5 A0 G& M6 ^8 V: m( c* f( C
( ]* r' ^1 ]3 L0 l0 r2 P/ E

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?3 A0 o5 S0 h/ s9 o) m* }9 P3 e
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
% x! ?# \8 D) p! OПочему мы используем ключевое слово this для ссылки на п ...
& O' `5 \) t; `% s2 ^5 p" X
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
0 f: ]* x- a9 H/ x3 sПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.: }( w2 I- E# |

1 F( R; y! }- EВот пример:
; I. Z2 F; U& c: ^! M0 ?( C
  1. public class Player {
    5 V; O& `, m* C* v5 ~
  2.     private String name;& \- `4 p- a. k* b7 t. Y# S
  3. - j# P* S3 M% j& F
  4.     // Конструктор: n$ }" t% B9 [- L& V
  5.     public Player(String name) {8 D0 h( V" |. S  D5 o! c
  6.         this.name = name; // Используем this для указания на поле класса& w6 a# D! R" l/ _  I1 k
  7.     }
    $ {" Z. R3 {5 P7 W0 O7 f- G3 n
  8. 9 k! R# S" J; p. _4 S
  9.     // Геттер для имени
    . G6 S% o$ I) S. c+ ?1 |$ ?
  10.     public String getName() {7 ?5 Z1 B+ e& Z2 Z. P& e. I' R  [8 ^( {
  11.         return this.name; // Используем this для обращения к полю класса% Q4 Q# b+ C) Q- r7 p
  12.     }( r. [( B2 Q# E6 I# y) A
  13. }
    : o. T7 W: Q% B; n
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
& m2 {& r7 c& t+ m3 d% [9 B, J. t4 w+ i- D+ ?' i2 B
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    : q, O6 k& T4 x2 C+ M
- M  s/ K! {8 O: r7 `
Пример передачи this:0 X$ }$ T, k! w  R& D
  1. public class Game {
    4 B) y$ [8 c% Y
  2.     public void start(Player player) {
    ! F5 d! T4 s' T& A- T
  3.         System.out.println("Игра началась с игроком: " + player.getName());* G* `% t' |& G8 \* E% g7 o
  4.     }
    % f# ^  R4 ?# J7 f% c8 t8 f! }# B+ [* b2 a
  5. }, b) e: Y# q9 K5 A5 ?  n* w

  6. + s, o9 h. ^, Z* e# E% a
  7. public class Player {2 M- z0 C5 r* ^3 y5 W
  8.     private String name;
      l3 A6 x; F2 T/ d' J7 D
  9. + U* s( k0 k; |) K  @: C1 `
  10.     public Player(String name) {
    - G! S4 D  z% N  \" c
  11.         this.name = name;: {- H, [4 ]/ j! P) O
  12.     }1 \$ E' g3 o+ C! i
  13. , O, i8 i% H- W% v1 x! R' L
  14.     public void joinGame(Game game) {
    / \) B# V1 O9 o. e4 |- ~# ~
  15.         game.start(this); // Передаем текущий объект Player
    ( n5 G5 s3 v1 F  ]7 W
  16.     }1 c5 a0 U. G; X0 Y
  17. }
    ' |/ ~. f2 ^6 q" e! k
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
4 O* i" Q5 P: f* v2 E6 h
; y. U4 z; K3 x- w
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
2 |* p! U: A2 ^* o" L
6 o6 B* u; ?5 ^+ g
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
2 h* p. g+ M  L% FКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
% M0 Q/ q; q8 g& f  A. g
Mike123 опубликовал в 2024-10-17 20:05; F& T2 [$ b3 F/ ?- R
Добрый день!   F4 d, q0 k* w" e
Как создаются и вызываются методы в Java? Мо ...

, Q5 E7 f, C6 HПривет, Mike 123! ?
( v: U! s- z5 M$ nОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
/ V$ F% w6 C$ N4 ~
8 b" w. d3 y, JДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
+ @% _, Y/ \2 t9 F0 j9 m
6 @, k$ V, L$ l% c# U. v
  }2 C/ w; j( f/ X/ wКак создаются методы в Java?/ ^$ e9 I; E9 M0 H

" t3 r4 X8 {  V8 F$ Z3 Y: |* ZМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
  p8 F" p# u* J1 N; m" J3 r1 ]% |, B; Z0 o9 X1 Y! j
  1. public returnType methodName(parameters) {
    % k6 Q# {8 L( T8 z3 v
  2.     // код метода
    ; s/ I5 \" F! P& e: z+ C
  3.     return value;
    / L! V& ]& J- r1 u. P6 M
  4. }# g( q2 c; G+ Y7 E- X
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).# T9 Z7 t, o4 z
! W9 Z0 p! Q1 y/ v* v
Теперь перейдём к примеру.5 b9 F' N3 S% ?' i6 u* p; X+ r% f

: Y' ~" H8 b, N8 |6 P. ~5 JПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
" x5 l% G) P; I( X
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    ) H4 h+ G8 I1 p6 }5 C7 a  n
  2.     // Вызов метода атаки NPC
    0 G/ v5 T9 m* Z* g8 h% J# s
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    6 c0 |" \* h/ ?
  4. }
    ( O3 B" C. i& ]6 |9 c! G' `
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
7 \3 Z* i1 G; G0 n
1 g6 C; o1 w1 P. U8 g2 J, j
% G6 U4 O6 v& m9 J8 b' KКласс Npc.java — вызов метода
1 s' X5 r- u2 z. X7 x! u5 h* B1 b% C! ~
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)+ d, d9 R; X( ~( W$ }7 P5 |% _! l8 b
  2.     // Логика получения урона NPC8 I" t: E1 e* V+ U+ E
  3.     this.health -= damage;  // это.здоровье -= урон;4 W9 y) ?7 J/ i' f3 M7 i
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  ) {2 J3 C- m3 `: M& ^
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    ( F: u& k) i- }. _1 N7 E
  6.    
    " `: u. D7 m. @( X0 n; M- ?$ G
  7.     // Проверка на смерть NPC
    4 M3 W! I" z3 |3 _# @
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)- ]. v* y/ b3 g$ a2 V' Q
  9.         this.die();  // это.умереть();
    / r- Q( F5 v: X( H1 _" f8 T
  10.     }' _9 ^$ \% _: Q
  11. }
    + J: @& l: i$ F4 g2 i
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).1 [: A) Q: P& O3 P; K0 a& J  @
Пример взаимодействия (с переводом)1 E7 e( p6 I& R3 |$ E
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
      ~( Z; D4 n  ]3 l
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");- X4 x7 Q. i8 w; M: [' E
  3. , [1 P! ]; }+ `5 v8 g1 h) \
  4. // Игрок атакует гоблина
    8 p  `5 H- Z9 E, V% ]
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    / k4 D* r* ]* {) j1 K
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. ! k+ B) a$ u' n$ K# B

% N9 Z8 |6 ]! Z% P* H% ]; U
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.) n$ R1 W9 L3 F# R) T$ H9 g
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!. O: H7 V# r; P% a6 i! ?* ~
; h$ _2 k. f8 n8 Q
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30' N; E! [$ L9 D2 Z. P2 }, Y
Привет, Астралия! Огромное спасибо за твои разъяснения ...
$ Y0 X& B' f6 V
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.% y+ ~# |* @7 o, S5 ]3 U% t
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    ) K( c' Y' i( e6 n7 b
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:- j* L- m- ?, o$ `: H: y, A

1 a* V; a4 a1 U" H  M- G7 z. n
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    * \8 ^( \& W- M8 }2 `$ W9 O
  2.     // Логика взаимодействия игрока с NPC/ _4 Y3 E8 D+ V. g: I" F% l
  3. }  ~- h; L& H( {9 `" H& o! R5 j
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    - h, Q$ U' L! \+ A( R6 P6 r/ o

- [# i' S# k9 u% f1 b# `
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    6 K* l5 {  p% _; h
  2.     // Логика перемещения NPC
    ! a$ Y* k6 c+ v. Q9 p" B3 |% M6 T
  3. }
    # h: z/ T& m) [, V* S
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    + y6 o# l( M7 K1 u" P1 t

7 P! C. Q' _3 G3 z, x
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    ) b9 B+ A& S0 d- K3 |
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)6 i# u! m3 l$ T$ }! ]% h& x
  2.     this.health -= damage;  // NPC теряет здоровье7 O! e5 o- S0 Z# ?
  3.     ( E4 s$ |3 _' m( @  V. V) ?, M. h
  4.     if (this.health <= 0) {
    + J' z  r  }/ Q& v, Q
  5.         die();  // Если здоровье упало до 0, NPC умирает- j5 J7 g$ N; g9 q* c! L* ~
  6.     }
    6 M. v8 ?  m* a& \
  7. }
    . |' J" @! q+ e2 x. e
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    4 G+ |$ ~! l9 B9 P

7 c" e7 p* z" W- c- D2 |; B
  1. public void die() {  // public void умереть()% t$ M  D! F- M6 |, J- ~  |
  2.     // Логика смерти NPC& c# Z/ k; ~: y2 c7 ]6 i$ n8 Z9 g
  3. }
    % s2 v: c& K- a3 J" v
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:0 I8 h9 T+ b9 p  M
4 z1 O- P, h9 [8 H
+ u, M% a" Q3 B
  1. public boolean isDead() {  // public boolean мертв()% k6 @4 F5 Z+ j$ R$ J6 Q
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    " F. [! f/ m. f6 g
  3. }
    / n3 ?- n' c. U
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример$ t9 X- S3 I9 r3 ]* Z4 s

, w7 A3 q# u! }
  1. public void heal(int amount) {  // public void вылечить(int количество)
    . I8 ~" h. R, `
  2.     this.health += amount;  // Увеличиваем здоровье
    9 _' u* `& m5 T7 x5 p+ d2 s2 D. I5 \) w
  3.     & }& l( R. Q! ?$ z3 g) w/ I( c& {& R
  4.     if (this.health > this.maxHealth) {) c; r& r( L# `7 \% n
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    ) m2 o/ L6 t! ~6 p! d
  6.     }
    * b- _, e' e4 m- C: m4 m: p
  7. }5 Z4 V. x8 g* T7 o! R3 J- e
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:5 K2 O1 A3 U$ x1 l+ @" @! [
" N& U1 Y! Z0 ]2 v! h
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)8 D! R/ M2 k* V0 R  d' _. l8 A$ I
  2.     // Логика применения скилла NPC1 X+ m7 e; I1 P( ^% x# n
  3. }
    ! Q( l& S+ g  @$ E: z5 Y
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
      t% f; d9 s# r3 i0 O
8 }* Q+ ]" Z  E6 h
  1. % n2 N; B9 s; I) z
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    ! p) H6 q  E6 u5 v6 P
  3.     // Логика взаимодействия с NPC
    % R& W% T( O% A4 K1 a0 F
  4. }
    4 w, C( Z0 S8 g/ K' x) Z& _
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:, k. a" [( c& c0 i. x

6 h, {) y6 N& L9 S: m
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)( N6 R! L! Y) o6 M! W- l$ M
  2.     // Логика открытия окна диалога
    ; f: b. X7 V5 ]5 f6 ?
  3. }0 Y' b$ l4 M' Y
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
% c4 J' {# x5 |Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!! ~" w# G# T% o& h7 G

8 S- t2 S/ _: g. L
0 b7 a% q% `1 ?" O, l4 d- p: d: F$ k/ P

5 a7 M. [  R& L& G/ A
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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