Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 2 G  p3 m& M& J+ a* I7 {$ k

* V  ?. K8 t( ?) }
- x# l) ~! H+ k/ G' t2 a: `Шаг 1: Введение в классы и методы на примере L2j_Mobius
4 S1 f' x6 q# K/ HС статьёй можно ознакомится в разделе Обучение > Читать* n6 a. b1 t, j0 Z

* h/ g+ G. e4 \. DДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
  K: H& d* F! c: ^7 D$ }: F2 n5 K0 E5 M( V; l) n+ J. o8 ~, L
Обсуждаем:% p$ M) [% q1 D5 V) c2 E
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    " n; H$ F6 J0 v- w1 E) r( }
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
" u8 ?: ~* `" @+ m2 g: s. ^' j
& K$ _: D$ j( `+ M9 H

1 E' m* {' V3 b9 e! O5 ?5 F0 ]И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!0 ~8 S- S, x9 S

  F% N7 y) p2 h5 r! R9 i. F2 i4 m  f( G( X, t+ u2 C# I

8 P" y7 R  ?! B6 b
; N! x* W2 ]# ]1 k* R3 t4 N* {) N( X

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
! [& }9 j- j+ b: R
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17" _+ T7 d- Z8 w. ^2 M- e1 j( L, p
Почему мы используем ключевое слово this для ссылки на п ...
: |8 x5 [" _- [1 B8 p! k& m
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
0 o3 e, g& i. X3 O5 q8 M1 IПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.1 U1 W- B! I' b5 c. |
! a  I- l; _4 B# H5 |  }* P1 G( {
Вот пример:9 K( x5 B; a1 [, J( N; L
  1. public class Player {& e2 K# A+ K/ X* {( P0 b* e
  2.     private String name;
    0 r4 y  U% a6 ]8 M1 t

  3. 7 B1 e! c2 o: H7 \% D. h7 `
  4.     // Конструктор
    4 R4 R: r: P6 [. B
  5.     public Player(String name) {
    5 v- u) ^9 B; `% \, V
  6.         this.name = name; // Используем this для указания на поле класса
    # }  B  C, i! u) l% Y- v3 ]
  7.     }: f3 V: P1 s# z' B
  8. " y7 b  ?! B  I
  9.     // Геттер для имени
    5 u  y( Q) }3 W4 a; u! j3 a
  10.     public String getName() {
    $ j2 I9 Y# z$ _+ s: J. A
  11.         return this.name; // Используем this для обращения к полю класса
    ; J2 h7 F9 h! ^: r& p
  12.     }) J1 l+ B, i0 L6 Y8 _
  13. }
    & E' S0 `& D2 k. s, }7 P
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
9 x3 f, R( U# J
) ]- F- P5 B! ]Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.. @4 c( b+ S9 n5 {' \
! R% E5 U! k9 N
Пример передачи this:
- t  E8 q1 x( u, r. B3 A' G
  1. public class Game {
    5 |. s7 {: i/ c0 X- G& J5 y
  2.     public void start(Player player) {1 j  c, u; u- O0 L- ~: ~
  3.         System.out.println("Игра началась с игроком: " + player.getName());4 X# v1 x" R; h5 K  g
  4.     }8 i; w! z# T" A: E9 d9 J
  5. }
    : F8 G# y9 P: G* f

  6. 6 b2 M1 W1 Q* h. N4 \% B5 `
  7. public class Player {
    & g5 O) U/ k' g0 s, E
  8.     private String name;
    # p% r& g" G2 w; N5 I' R+ E

  9. 6 F6 d1 D/ z2 a7 U' @; c
  10.     public Player(String name) {* D. |- ~! y! y4 i$ W; I1 X! d
  11.         this.name = name;
    4 b& q. {% p6 I8 J3 M9 b
  12.     }1 ~$ E/ y8 |1 f3 g& v0 l( V7 R/ {

  13. ! R7 w( G9 R7 y7 r
  14.     public void joinGame(Game game) {
    7 H! _) X& n  [3 Y6 u' W
  15.         game.start(this); // Передаем текущий объект Player
      J/ f. r; K% z# m7 X" N6 {" V
  16.     }
    ( J- R" g: J5 x6 d
  17. }/ x, [6 f' Y/ w% y! `/ A2 p
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
* N$ [6 W6 v  w: x+ U

( ~) y# c- z3 f: VПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?; r! C- n( p4 F5 S# S' M
5 ^  ?7 C, S6 P) ]9 m
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! 6 ?8 M5 d; C6 p
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
% j1 Q- S- p3 T+ O/ J6 w6 j- h6 V
Mike123 опубликовал в 2024-10-17 20:05
. q, L! d' e: I2 y  WДобрый день! 6 E4 Q' i6 |* e# d! ~, d
Как создаются и вызываются методы в Java? Мо ...

5 N$ b# P; [+ L% aПривет, Mike 123! ?" Y  h. P) H' }4 a
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
- I/ Z* S- S6 `1 |7 p* A' v; ?: Y  R4 u  N+ V
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.4 Z. K+ z2 A: j$ s0 S+ W
% a+ d% u: z7 C% H4 W  e
9 W1 y1 [6 h& a' q
Как создаются методы в Java?" K# ^4 V) W& o# j' c  J* U" I

% k( o1 _: M. p7 ~  {" }. pМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
: ?7 A/ [* ^) @- ^6 w
2 m: o; K- w' y
  1. public returnType methodName(parameters) {
    6 h  A, L$ A) ]3 S- y6 b6 f
  2.     // код метода
    + g8 U8 v9 v1 v' ~* V0 N  u7 M8 t
  3.     return value;
    - @+ a$ @1 C. q( M2 M+ E
  4. }* z7 y+ i6 \& f6 y- R- L1 u
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    + }3 l4 }) |6 D; @. G3 ]' S

7 r1 }6 t: A8 W7 PТеперь перейдём к примеру.5 }  V. x, q5 X
4 |' @, M* f$ L8 v+ C5 ~' T
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода+ D' p$ i/ u& g9 h* x
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    " w( R" y) t6 `( h& d# t8 X# X
  2.     // Вызов метода атаки NPC
    & }% N7 \8 _0 C. d# j1 Y3 V1 K" Y8 G
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());5 [  J; g5 M) d3 o; p4 Z
  4. }
    . O$ N5 L& O& n
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
) a) {/ ~/ H: ]4 m
5 m1 e1 U+ E0 ?6 D, i# s. I
, o& w& m( w6 f2 z2 ^% |) Q# D* ]% aКласс Npc.java — вызов метода% w6 l& S' w. d. A
& L9 D2 c$ M$ n+ I; g! \, t0 z7 E- A
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)7 t) T4 n' t3 ]2 q( d' F# |( y
  2.     // Логика получения урона NPC4 K1 m$ O2 ~/ ^- g7 X9 ^+ i
  3.     this.health -= damage;  // это.здоровье -= урон;
    . ~; p; Z* z4 F0 F3 w8 L
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  ) b! n( x+ u5 n' [; Q1 d  I
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());+ Q3 b. x8 Z) S0 ^# v0 h+ B# V: S
  6.    
    ; }7 P, _2 o" J# g0 {; w
  7.     // Проверка на смерть NPC0 i( n( J+ ~9 M( i
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    9 N8 b1 x" d% w9 [
  9.         this.die();  // это.умереть();% b" Z5 m' l- j
  10.     }7 w1 u3 v5 \7 m# d
  11. }* r( Z$ N- B$ [3 U. u
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).; B1 \5 W! \" Z( C8 I, _, q
Пример взаимодействия (с переводом)% X' t3 Z4 g, s/ a0 e2 d
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");4 [4 F8 K# f9 Y5 D4 S# a
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");- k# p8 A% @! o2 }: }# F0 v

  3. ; _% M. O; K6 [( q" H& e- ]
  4. // Игрок атакует гоблина
    % x  }1 |" B7 U
  5. player.attack(goblin);  // игрок.атаковать(гоблин);+ h- {- X8 ^# r( L( X  n
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
' V7 Z- _. m& Z: N' s5 f/ M" e: \
  I1 g# ^; m% p( \
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
1 A8 V7 G* T: W) j# M# VУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
. b* Z2 d7 ~3 K! m( I" q+ m5 I: J9 O: y( b3 ]  L! C/ I1 @% e
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
4 w5 N+ l) l7 n: ?9 n, vПривет, Астралия! Огромное спасибо за твои разъяснения ...
) o8 V) i  j  N% ?$ ?
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
7 B+ K1 ]& @, }$ z" B3 Q2 O" ]1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример1 B( ]6 o' o* U! \) T" _
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    % c8 T+ j& ]3 f; k

. q3 T' ^1 y* J. d3 E. J( t
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    - h, }1 V$ u$ |
  2.     // Логика взаимодействия игрока с NPC
    6 q# I  y1 H6 R7 D/ c! h) i9 |
  3. }; r6 `: q% E- ]$ z, C
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:* N" u* k! M* M" u  k9 I8 w6 l2 j

- Q& P# q* }9 R/ `
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    8 `8 B% Q! w- T3 F! x$ S/ t
  2.     // Логика перемещения NPC+ Q% r: U5 [0 j. }1 }
  3. }
    ' ?4 B1 v6 l# M6 w' C
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
      W5 c3 ]1 a1 ^  K

$ u! N. h8 i  t# Y/ m+ }* r$ q
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример2 A0 L. j; L) t
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    ! q* g( Y& f* ?; G( [
  2.     this.health -= damage;  // NPC теряет здоровье: V2 U; k. y1 y( ^  Z! f
  3.     # \  E% F  M1 t. |9 ?
  4.     if (this.health <= 0) {0 m' [6 V2 k& N# ?! b. a4 _
  5.         die();  // Если здоровье упало до 0, NPC умирает: J+ n& B$ x! B1 D* L6 {
  6.     }
    & T& S1 l. H0 A5 o' }
  7. }" M7 }5 U- E! F: n) A7 }
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример8 Y+ E; f( S0 A
6 t% J! h3 P+ v! T6 Y. N
  1. public void die() {  // public void умереть()6 i) R$ J& w/ A, g! W0 i
  2.     // Логика смерти NPC
    + i/ \- T" V* U5 J* t, h. G8 i
  3. }
    , X0 g+ m( ~8 B# O% G
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    % ^% s1 h  G) u$ M% W

1 `; H/ L. d' x  `2 y: {2 Z
0 b8 r3 f& e8 u' M+ k& k
  1. public boolean isDead() {  // public boolean мертв()/ h9 ^% u+ Q; E' B5 x& x9 G
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0' `  @0 v$ c% m- M; C
  3. }0 {7 V6 M. k# o2 `2 R
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    ! ~% t) d. N" l
6 p0 U  q$ U5 o$ [  `8 E5 n6 b
  1. public void heal(int amount) {  // public void вылечить(int количество)0 G( a4 T4 t& T4 h( Z: W
  2.     this.health += amount;  // Увеличиваем здоровье
    9 L% @: H, X3 k7 H4 j) j% h0 P
  3.    
    + B$ B, B& S- U
  4.     if (this.health > this.maxHealth) {1 s, |( n# Q  x3 Z
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального' ^6 i3 x! v! N2 D* X7 f
  6.     }
    & ~0 n' H9 {( D; h0 U* V1 Q
  7. }
    + l9 Z& n) y, b! I$ N+ N
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    $ E5 L8 d# U8 z; Z: Q( b' L

! O% R$ L; {* U# m( n# h7 t5 S
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    * b$ ~' k8 y9 e0 s7 P* `
  2.     // Логика применения скилла NPC) r9 j1 e8 H0 c% L1 J' [/ n
  3. }
    # o# L8 i) ^  m2 \9 b8 k4 ^/ p
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:% {+ W6 B/ X: ]

+ N) z, [5 Z4 Z) ]- x% ]
  1. 4 o2 E. @6 ^0 p; p1 w9 ?6 G. g! j$ s
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)! [6 _) i3 G# Z" \2 M& T' W( u/ U
  3.     // Логика взаимодействия с NPC
    4 O, ~- k- `7 W  P) q5 h4 d
  4. }
    4 M1 g, g; p, c. R) X+ K
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:: }) t7 |" E9 O( o7 Y

: A) R& t- ]2 r0 q' V! a
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок); T$ a3 b( l' t
  2.     // Логика открытия окна диалога6 x9 s3 r0 N7 l; S* J6 F
  3. }
    3 V- i1 t! @( B" C9 t4 |
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.; g; e; c0 l, J2 d& V- j
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
  j6 U: `4 O& A8 a+ m1 O( `$ d
1 D5 |7 q+ L: t* q' K9 l
. D; U7 s  r2 m+ j
' p& N8 i2 F* Y! _- j% `2 l7 c* s. p+ W0 I  k
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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