Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 8 v& M) Z& D. N3 X/ d

% K3 Q8 y% f* M! V6 G
: t: v4 A  M0 u3 }% a, o; lШаг 1: Введение в классы и методы на примере L2j_Mobius
2 @6 t& U8 a4 J: ^/ E9 ~С статьёй можно ознакомится в разделе Обучение > Читать
& ?. h1 r& i! ^& q8 \2 l4 C+ K: d: |8 ]/ s, P0 }/ a5 Q
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
& c$ p7 t; W6 v% G- I
$ G) u' H: c4 T6 |" QОбсуждаем:# J  c% i8 U# R( [7 m
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    / R1 v: c# R( ]' A1 ^
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
% {- ]1 t- M, z& T$ H2 ]9 I% x9 j* A/ [

% k) Y8 P3 B9 n( ?6 f; w( E7 }
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
7 [- Q; H* a& U+ `0 ?6 m, m7 b! j$ Z% X

8 P, t. Q. b% H( a( g7 w$ N( H
0 t+ C7 V0 Z: f* ]2 ?, ^6 u% i/ P9 R* a- y  c

! B* D9 p: V7 @( \9 b7 I

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
5 T) ]( a' |  C' Q& \
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:171 J3 E+ @5 r- G
Почему мы используем ключевое слово this для ссылки на п ...

& w- O! ?! P$ OКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
7 N$ b$ H  B7 F/ ]: DПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.. C3 c) [% Q7 s

% |) U2 }4 w7 r- I: ^4 P. l6 ^! HВот пример:
. ~7 m/ k  A" T& Y2 k
  1. public class Player {
    2 I, y/ c9 o& ~& \1 c) J3 f
  2.     private String name;2 |, w. H8 E) M  N" U4 o
  3. ) C1 i( j6 b* J  ^3 S
  4.     // Конструктор
    4 \" z& c6 s! ~& K
  5.     public Player(String name) {, L% b( U6 |6 R$ _6 x
  6.         this.name = name; // Используем this для указания на поле класса
    ; ], B1 `) \; }) `
  7.     }1 l5 n: o$ C" \

  8. ) h2 u8 v* v; [* \4 L
  9.     // Геттер для имени
    4 T, n+ r0 o$ h% c) K: I7 @
  10.     public String getName() {
    $ S8 D# {6 U1 M$ |
  11.         return this.name; // Используем this для обращения к полю класса
    7 A0 @4 t! C9 S2 P  u) ^$ a
  12.     }( B$ Z* z2 G2 M( W& `' u
  13. }1 b/ M" @' ?. h% e+ v5 p' T
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
' g* S3 B$ R2 l4 \6 |1 P7 Y- B
, n. I7 E1 v2 X8 W7 e' ]Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    8 }* q" q# n# ?' I/ T/ Q& k% a

8 ~7 H! I+ {( P& a6 y* o& oПример передачи this:
( K% O" Y, z3 h0 U
  1. public class Game {3 F8 L" N6 G! g+ L" a
  2.     public void start(Player player) {; ~  m0 n* Z& O. D0 d' _# d
  3.         System.out.println("Игра началась с игроком: " + player.getName());' D( s$ @: _; y+ J( k. o) h/ B  h2 Q
  4.     }
    ( n$ ^: I9 ~8 C9 d6 J# e
  5. }
    , w; {8 o! F6 q) U6 w5 U" ?: @) g

  6. . t' v9 G8 ^$ f0 k2 p/ I
  7. public class Player {1 w, j  W% p& o- L. @2 p4 |
  8.     private String name;! F+ N5 h7 r/ H4 K9 r
  9. # F' }2 m# V# K7 e% y8 S" U$ @
  10.     public Player(String name) {8 |" [9 G. a8 k7 U. b
  11.         this.name = name;# a5 k- I3 N) p! E- I  `  T- y
  12.     }
    7 t0 x/ A, Y, t* j4 c) E

  13. 0 u2 p; Q) v% i  ^) B  `
  14.     public void joinGame(Game game) {
    $ v7 j2 {4 w' C% I  C0 _# e7 ]
  15.         game.start(this); // Передаем текущий объект Player
    : M' y5 E. G, o) b/ Q
  16.     }
    ( U$ M7 H) e9 }1 q
  17. }: J. C1 T9 c) ?* D# d9 O- J
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.2 ?( a( K8 O( u6 J4 l: n8 I: `. ?


( }! Z  v$ L4 ~" c  V; ~Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
8 t) P6 K1 v6 o, X* P$ s
& b& X7 r  s$ Q* [) n
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! , [- B, W) R/ W* u  O9 m
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
7 v* W+ K$ }9 O3 y
Mike123 опубликовал в 2024-10-17 20:05
! [3 ?& q) w- M0 CДобрый день! " ]1 P5 n, y" e9 ^( X  w# h
Как создаются и вызываются методы в Java? Мо ...
: H1 z: @2 E! ^6 f  z* e$ o! q. N
Привет, Mike 123! ?
1 d4 x" [) K( iОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
# z; M+ C2 U: `- M3 E+ }( }' f7 A- F9 N) _$ N( J
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.; ]" w* q$ U5 C, B8 @( I1 l

/ T' @4 {0 P$ p) K+ S1 `+ z0 \4 M* M! X( I* |& B' a) l2 L
Как создаются методы в Java?
! t" |- D% ?6 g7 m; B5 p$ c' f* v' d+ r
Методы в Java создаются внутри классов. Вот базовый шаблон метода:" U0 ?1 W- e& N' ~( W: M
4 W2 c3 n  [5 S* h" D! Z6 N
  1. public returnType methodName(parameters) {
    ! j+ j! I7 T% }: o9 o  s
  2.     // код метода/ v/ ]9 j$ O2 @. z2 v2 G! {. E4 d# @
  3.     return value;
    - N- z+ Y+ \" e8 `4 {+ Q0 J7 L
  4. }
    9 g7 G+ L% B/ M& c4 ]& s# E
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).; k; z8 S7 k/ I6 m" G) ^9 [. X" N

: I+ }3 s* B3 u! fТеперь перейдём к примеру.
' S6 F" `* }, b- n" x4 P8 Q5 A' P4 q: a
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
% Q% r: a# s6 u$ r# l6 t
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    & j3 r8 x* k* g; e  N& z# ?5 O
  2.     // Вызов метода атаки NPC, j' y( M6 F/ p% y
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    1 C- a: i: h& X, m+ ~- o* `' X
  4. }* O3 y% ^0 {6 K& L7 z2 N4 l
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
) `) k# o1 G# z! K) o9 B) v2 f7 r  R* Q, j- a& {  I! A

' d3 e7 u, Y2 u- {% c9 C, RКласс Npc.java — вызов метода
- j* C6 r3 i* }" @: P2 }: i$ A
8 I/ |' L$ i4 i  o: U* R4 z
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)2 s1 t+ I0 q9 S5 W2 [
  2.     // Логика получения урона NPC
    $ @) Z& _) v  F5 z: `/ s; m
  3.     this.health -= damage;  // это.здоровье -= урон;
    # e9 M; j) u6 ?+ I9 F" k% w
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    0 v5 _" }- Y- b1 {8 j
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());- U4 J& O; U5 V8 e: E4 P" I8 `9 S4 a
  6.     7 u1 r* L% T& C$ U4 ^
  7.     // Проверка на смерть NPC' l$ A# w( O6 d+ i! x! F
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    % R& p+ A/ q( r. \; A
  9.         this.die();  // это.умереть();; o* s& b5 W& t
  10.     }
    ( `' x$ T; H  u
  11. }% l2 t5 B: R0 Y
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).0 K: k" x* ^& y  M" n
Пример взаимодействия (с переводом)
- L9 Z8 P2 [. o9 s8 S
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");0 Z5 q( A) h  X$ o* W4 \
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
      b. I( ?: s( H& t

  3. % j/ B- W- W- Y% Z  ~/ n' |! u
  4. // Игрок атакует гоблина5 L- g, E( q) r! c) q, o- Y1 r1 L
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    * E  F, X; n: q; b
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. / D$ X! B* B. {/ ?) |8 e% Y) ~
2 i1 I) o1 l4 @! B! B. |4 }
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
' u! l6 C9 i9 X+ S; mУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
; A" L1 t+ f5 ?0 i) M2 @2 d' |" s
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
4 ^; R+ E1 h. _6 u- L$ I& c, VПривет, Астралия! Огромное спасибо за твои разъяснения ...

" @* U* o$ r0 N/ f$ ZОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.- \; o3 V1 S) O* @9 n% `, J/ b
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример/ [5 }8 T* `1 D0 c
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:% u( ]) U, L% |9 A  ^
; ?. b; f8 H0 p; M7 ^" J
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)' {; K- W: ?2 _" l( M
  2.     // Логика взаимодействия игрока с NPC
    " n3 I# U: C; z2 H# d/ u4 m; O! Y
  3. }
    9 d$ h; W* L1 C3 N1 m, ]5 s
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:6 K. S/ \6 R' n. ~

1 o, X0 u  b! B# M! O
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)8 k$ S) ?1 y2 J6 R( ]  ^# C! k
  2.     // Логика перемещения NPC
    + o8 z4 y" v, }. A, O$ L- P9 u/ n
  3. }- R+ G# k! V0 j' s
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    : ]* P4 {0 Q) K; f/ h
6 x9 M& O: s  q; V! a/ h
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример9 I, ~8 `" O: c. z! S6 P# d
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий), |0 O- V( l& a0 j% A. V* b! T
  2.     this.health -= damage;  // NPC теряет здоровье
    ) {& ^7 T( e) v; w. m
  3.    
    # R3 V( w8 x$ }( j
  4.     if (this.health <= 0) {
    ! d- [6 H! Y# n+ C  }
  5.         die();  // Если здоровье упало до 0, NPC умирает/ h9 O; A- p: j* c' g' d
  6.     }
    # E5 }# E2 D, t  c. F) [- e1 V
  7. }' J, K3 Q2 {$ k* @6 p
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    1 ^" d( I  _5 C: e! t  y
4 E: E! r4 T2 g7 z  [( D. T$ u- ~5 e
  1. public void die() {  // public void умереть()
    # ]$ L# X) o2 D. c! O5 Q. ~
  2.     // Логика смерти NPC" y: [3 }- z( q% g8 p
  3. }8 v$ Q0 O0 C; I
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    $ m( N7 B( i5 W' X; D
1 D( B$ S2 c& y" b1 ]' I

; D6 s/ a7 p7 m6 h, l
  1. public boolean isDead() {  // public boolean мертв()
    ( B  Y; Y3 o& g) F
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    " |5 F5 L' ^# k* v' j
  3. }
    2 k, g# l) f- V  j$ x
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    % T2 R' F6 v, O7 ?& D% c& H# h( _2 U
) M9 U- [6 P/ n( W- V+ }* O0 D! h
  1. public void heal(int amount) {  // public void вылечить(int количество)
      `/ ~8 Q2 [( J" x: K. \9 Y/ l
  2.     this.health += amount;  // Увеличиваем здоровье9 _# f' S4 ]$ j" l$ ]; Q
  3.     ' ]7 N) ?" a% m0 \2 T0 ^
  4.     if (this.health > this.maxHealth) {
    ' w  I/ v. x9 c
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    # Y# ~; E# b( d3 j- H: Q
  6.     }' `9 e4 j& }0 Y$ ~: Q' [: m0 j; ^( V
  7. }
    ' d! ^% j4 t- d& C
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:6 |$ J& Q9 L% Y! l% K

1 z, G2 N$ E1 }- a
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    5 ^2 s% H3 G% N) Y# G2 v( P' M; m: j
  2.     // Логика применения скилла NPC
    ( I( C% S9 }% \( u- o8 f
  3. }
    8 V# y6 \, c" |9 W0 z8 @( W) N
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:7 L( P1 ?0 l: u# s, q

) H6 j) l; a% x$ L$ |8 k
  1. 4 D/ [- \& L, d, k# o% F
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)! Q3 |* E  U  D2 t
  3.     // Логика взаимодействия с NPC
    & Z# [) H7 S/ r' ]! L) E: |: @: T0 W
  4. }
    " ^" K# c% L: U# h, j' w2 v9 x
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:+ ^8 X: h* s, X: V4 b# s% t$ h
, I) ~% D1 z& H' R- B
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)1 O( z4 D9 k, m8 F4 v8 C0 ]' F
  2.     // Логика открытия окна диалога0 w! z% R$ _* z) |. X
  3. }, z5 ]3 t7 C6 U/ d- `7 i
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
9 l/ t6 O! {9 B! S( v8 p6 ?2 b; lЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!8 V* O) E4 Z9 U& e
1 t3 t: j9 o; H; K( b5 Z+ \+ g

2 Z& B$ Q4 N  E3 ~
! L  }2 K  `+ ]6 W  Y8 ~  Y8 n4 z4 O3 ~9 R$ ^* W* n
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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