Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
+ n3 z  H8 }( P: h: E+ {, \0 z& s- \0 a

3 A* e9 F" @' \Шаг 1: Введение в классы и методы на примере L2j_Mobius
3 q* G( y9 y- n' B# bС статьёй можно ознакомится в разделе Обучение > Читать
1 q) w7 @( J2 m8 F. ]7 |$ O* y' ^. u( x; @+ ?2 D
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.5 p5 i$ p6 S  Y3 Y) k
$ O7 S3 m/ k% z7 w' \) ?: [7 h
Обсуждаем:
: i, M5 p. q7 @6 }! g6 Q
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    " N- S; W5 |# x3 G3 V$ L0 {5 y
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
( f' G! Y  |4 C: r  X# g8 O: \! F


" V. O5 }* I6 [И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
+ D8 _1 O& u) }/ W  W3 k: G; n3 A5 V# P. Z9 u6 _
( o. ^7 l# K; G: Z5 d; e0 E$ `. \" U

* Z- Q1 I" o& c! q' T2 q. D0 I( n" w9 W9 z* l; }

3 ]# W2 ^( s2 x! a

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?: f! }" |7 Y& S
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17, h# L' N( B% t3 V( j' ^
Почему мы используем ключевое слово this для ссылки на п ...
2 n4 e( p# g% Q6 ~: p! u
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
% I5 a* p. E8 ~7 C$ lПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
. _, Y; V) P9 N6 A8 H
3 u) q  C0 K& A$ u& [9 }/ @Вот пример:6 A+ a1 n; E) N
  1. public class Player {
    ! R. _8 W8 V- V8 W5 i+ O
  2.     private String name;
    1 n! q6 Q% Z( z' L; }4 d8 `" D1 E
  3. , {$ W, u, A  x' z  i
  4.     // Конструктор
    ( m5 X( Q% i1 g' o7 J6 {
  5.     public Player(String name) {
    - m, `( z3 _2 l' P; u
  6.         this.name = name; // Используем this для указания на поле класса- q( H! w! [' M4 L- w
  7.     }
    $ D' h) A" s: z- x6 X: [: G

  8. 7 `( a0 p/ g2 Z) e6 Z/ a$ J- b
  9.     // Геттер для имени5 m# z+ i! }; k% c8 Y
  10.     public String getName() {
    8 ]$ \3 c9 s* H8 E
  11.         return this.name; // Используем this для обращения к полю класса1 Q  f, l4 D. E( k! O
  12.     }
    8 A$ p1 `$ f* b6 E0 U* b
  13. }* Z# ?# P: U4 t4 ?  m
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.( }8 t$ J' N. |! e

" |6 \' m+ k: `5 L3 FКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    ; m3 s7 {- s  R8 P1 \) N+ B0 U

3 F+ X7 v6 H' H7 G# OПример передачи this:: W; }. T' U, j* h3 y
  1. public class Game {
    9 Q# a% {& Z) ]: p  x6 ^5 C
  2.     public void start(Player player) {7 R( V3 o3 j0 B" y
  3.         System.out.println("Игра началась с игроком: " + player.getName());
      m2 u6 ^. B& y2 y2 O3 X
  4.     }( i% W, @2 R$ G" \# N8 s# c1 Y
  5. }
    ( `" j+ Y  l8 k  D
  6. ( t7 l* L9 W& r3 H" r! {& Z4 E) d
  7. public class Player {% B! l( e( _# K% p- g" b8 d: ~
  8.     private String name;! Q4 _7 W4 |! m, \
  9. ) j" Y: l* h$ M& E. ~' N
  10.     public Player(String name) {
    , a# v9 n" W2 t
  11.         this.name = name;
    0 n" f" v( A) D- |! D' J/ }
  12.     }( |9 r8 g; e5 m$ q# J- I; h6 m

  13. ' g9 [0 l! M, I  u& p3 J
  14.     public void joinGame(Game game) {
    8 ~0 Z4 I# t9 r- |+ u5 D( o3 F4 s
  15.         game.start(this); // Передаем текущий объект Player
    " _& T* [5 h, ]$ p5 m1 \% z7 I# Q
  16.     }
    0 K7 A% d8 \* a+ S. }5 V6 y
  17. }% ]- E9 D) w4 H8 T% |+ p1 n7 M. ]
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
5 C6 |( {: G  n

5 |' C+ R1 |2 D" Q' U' S6 w7 _Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?% u: `6 H. z, r; M; q

: X8 J& T: }+ B+ o( r
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
  \/ s% X. f3 f$ v' l( W- pКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 1 y( H1 C5 @" d9 Q4 X/ @
Mike123 опубликовал в 2024-10-17 20:05  v+ I1 o. Q  {7 R, e. ]4 k
Добрый день!
  O# Z1 h* d5 OКак создаются и вызываются методы в Java? Мо ...

9 X- g- l/ h; e$ ^Привет, Mike 123! ?0 L7 C2 O* A% |$ [+ c
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.! ?4 y/ Q& d% }, G' [

# C9 [4 v3 G5 d. ^" Q: S- gДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.) B9 M% L" a% @' T0 ~' |

7 D4 `: ]  p  {
: Z. k2 Y: {& `Как создаются методы в Java?
; X. A# f9 w8 ?
$ o& \+ R2 g7 R2 tМетоды в Java создаются внутри классов. Вот базовый шаблон метода:* l0 j5 H9 g( `' v
! v( I7 p$ }9 K3 F
  1. public returnType methodName(parameters) {
    % G! @8 q+ U  g1 ?
  2.     // код метода
    ; n( {6 W; t3 `
  3.     return value;. j3 C( S; }$ D
  4. }% G2 \1 w3 @4 s& f* u  t$ ]5 k- M( h
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).+ X2 j. t" O7 R; @/ L
' \; {% T9 Y; Z, `; p1 B5 }' a2 O; M
Теперь перейдём к примеру.# L6 v6 S0 \$ n+ ^% l: p- X2 p

0 V5 U$ a& S' h8 G! WПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
3 E1 i" j. P6 l1 H8 [
  1. public void attack(Npc target) {  // public void атака(Npc цель)  R. |) I' a$ V8 ~' X
  2.     // Вызов метода атаки NPC
    # m2 r* D, ~" ^9 p
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());: N* L# L( k, v- w3 y
  4. }
    5 ]( J; g- Y$ L5 W9 C, ^
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).! y" k* ~% J1 _

9 K' e( g; t  K, e1 p+ e* [+ e( a0 o; h2 [) X3 n2 G: j" `( e
Класс Npc.java — вызов метода& K: R4 {1 i  y0 T7 u5 N

. W: y4 R" u8 y: U
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    " [& [4 F8 _& O! H
  2.     // Логика получения урона NPC
    % V7 u; \3 ?; h) d. z, ~
  3.     this.health -= damage;  // это.здоровье -= урон;
    6 R/ j+ x& _6 s. u+ V" J
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  - X* l! i& c9 T% W8 B$ i' V4 t: Q; O- D
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());# _9 g0 p7 H% A
  6.    
    8 @! D; v) t& T7 e# q
  7.     // Проверка на смерть NPC
    7 _+ `2 S5 B, E: q
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)5 f" |+ V& C' V; j# L, R
  9.         this.die();  // это.умереть();# D0 k& A! j5 y" Z# z
  10.     }8 g; ^7 j+ i5 w3 G& Y9 V/ b* W
  11. }
    % ~- i. E" u/ x# b5 D$ d' E' u
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).3 F8 b- B) V# W
Пример взаимодействия (с переводом)
( |5 ~! t8 y% J3 I/ G. L
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    ! ]5 a  U. g9 {; ]9 M$ M- h3 M4 S8 c
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");5 g& n8 J% u' V4 C/ G+ N6 ]$ m: ~

  3. # Y: h( w0 h$ z2 M* z; c1 m
  4. // Игрок атакует гоблина
    2 h1 C' y6 o$ z# w
  5. player.attack(goblin);  // игрок.атаковать(гоблин);0 ?0 {. }# [, k- [0 U! h
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. ; j6 M3 u" {9 v% \! g
4 f+ c/ V, c* `: F3 t8 q3 @4 A
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.$ m( J. _! @4 ?3 q" g
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
. y1 j7 r* O2 L) F  c$ s$ h+ P* V7 v/ g
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30- V4 H; A' f& m9 r5 H! ?( r
Привет, Астралия! Огромное спасибо за твои разъяснения ...
  g' e; c+ n( m" l
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC./ l1 \3 ^' o: W& ^- }# x; ~
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример9 `2 S1 A! F3 O( C4 L) z
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    + {* C* T2 E  R' l; W
+ c/ W* u  X0 L$ i
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    9 U1 o! t& V6 s0 l8 J1 F& n; Y
  2.     // Логика взаимодействия игрока с NPC/ h. L+ U) ?3 }3 u' s  M
  3. }$ y. U2 @2 ]6 N6 f. S8 h4 `+ y
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    . w; O9 E+ C' V% A6 K* X

( i' F. {' |0 T9 I; N" V
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)* z- V: I- p+ U# h& r# H
  2.     // Логика перемещения NPC
    2 Q. m  A" y3 b( g- m  h
  3. }7 i9 @  e, l' }9 C, |' D, ~
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    7 P$ n4 D8 [5 q, t
% }. d! a6 f. c" y( z/ r$ n
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример% b' y- `# |0 x% {
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    * s6 K7 V/ j9 K5 t
  2.     this.health -= damage;  // NPC теряет здоровье
    # A6 }8 n. n, }- G1 @
  3.    
    & i, w7 h* P; p6 n8 r, H
  4.     if (this.health <= 0) {( N& G5 |3 R* f( X
  5.         die();  // Если здоровье упало до 0, NPC умирает$ J" F' H3 x$ }9 V4 D- {
  6.     }
    3 O- E9 n) B! {/ ^) e
  7. }& O+ y$ B9 K1 T# z6 R. l$ g
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    6 V3 V3 j. }1 O- h% I9 l$ t
  K4 Z$ E& y5 k( a# E( s
  1. public void die() {  // public void умереть()
    # G) N, E. L4 y) |/ g: }
  2.     // Логика смерти NPC
    ; X' A2 f2 d1 B- u2 R7 T; H( Q
  3. }% d! F# Q8 d; W" d2 ~
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    9 K& I- M# i  K
$ n/ N- }$ y, t8 }5 e, h1 ]

" Y  m. o4 t! D; k3 [3 V
  1. public boolean isDead() {  // public boolean мертв()! Q0 r" R# x) p3 }
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 09 a2 `9 N$ W. b( v* x
  3. }0 N5 n* s% K' L
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример) {9 }! \, ]- l" m

' l4 j% |5 y+ I
  1. public void heal(int amount) {  // public void вылечить(int количество)5 M. z5 J4 C$ |! [9 y- V
  2.     this.health += amount;  // Увеличиваем здоровье3 j4 i+ {. `! X8 l5 {5 R6 V: |/ |4 K
  3.     / o8 h# s2 T) g6 J- x: B' j  q
  4.     if (this.health > this.maxHealth) {
    , ?3 c7 ?2 T6 x& `; C
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    7 ~2 C; D$ o/ s2 }' `: |
  6.     }) O$ |( ~8 H8 A) g* c1 ~# ?6 \- t
  7. }
    ( [; d" L$ _2 `: V9 q+ z- p* B
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:" ?3 y( M$ {) _4 N7 b+ H% C
! i4 G' M- p5 W4 x3 o& r" _, p
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    # v" N3 v" D( V" y  J9 Y
  2.     // Логика применения скилла NPC
    $ Y6 d0 ]2 H+ o- b
  3. }5 M0 N( K' ?, U) h) g
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:, V6 T4 ^* z: r7 }/ A& j
! K9 D- |2 K" Z2 V% u* h
  1. % d$ h* X; ]$ b3 g% R
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    * |4 v. L8 [5 h$ |8 Q/ a% H
  3.     // Логика взаимодействия с NPC2 b$ \. J( F" o
  4. }
      h' k7 ^6 ]$ j
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:+ G& u/ {6 y2 N( m( ^
5 v+ z+ |0 t5 Q9 r" F! r2 o) a2 u
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)7 }" j5 A8 T  \% o/ K
  2.     // Логика открытия окна диалога
    ! U" k$ Y0 a7 g, S
  3. }; y6 [( ~" c! [0 a* q
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
" N+ H0 _8 z) ~5 LЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
# M/ j( D9 ]5 h1 P. v8 ^- p
, w6 y6 W. y  ~3 E' n5 l6 o, L, |& z& {$ C2 t6 {

% A; o' @+ M" s, M# g0 X2 y6 v+ c  n/ f% F$ |2 O) k1 L
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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