Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 $ y! X( h7 L1 l3 `

/ c' m& K( B+ o( l- `. W4 b6 k- a& l% b$ U
Шаг 1: Введение в классы и методы на примере L2j_Mobius
& }# A- o/ A- O& A5 U  R  `С статьёй можно ознакомится в разделе Обучение > Читать; \: r' W; C+ ]& ?

/ L! M1 {- ?, m& @8 D( cДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями., t( [4 m) w( I- g

$ S& z* J1 q' z) RОбсуждаем:1 d3 U7 ?2 }# v' q# [; F5 S
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.6 T; Z! S( w6 @
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
3 e  w) r/ `7 m/ ?+ M2 E$ U; x/ R


3 c3 J3 K2 `- D! r8 I) @$ g/ s- KИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! 😄 Но мы вместе разберемся!- E! n) S* J$ ]& _4 P2 b8 Z  G

8 b, ]4 |+ B7 }" P# z
% C5 k7 y% C; }5 D  p, v! m
% I8 m& g; j/ c" G% O) V+ X1 `6 S

, E) K. _3 x  L5 o; y# g

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
$ Q  r: `3 G0 x; `. r% l
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
9 Z5 P% `) f" \. w6 w; B$ uПочему мы используем ключевое слово this для ссылки на п ...
  p+ ~# S) t; N+ K
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
. P5 p, z; @% X" Y2 eПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.8 }% w' A' g, a! p2 G! r
" X0 h: T- f5 n7 N8 b/ \
Вот пример:
/ ?& k& @1 f5 h( x+ v* P- b! S9 ]
  1. public class Player {
    # R; D- F* ]" Z, r! s/ }
  2.     private String name;  v$ y) J% {* B* S6 U3 x; A% q0 ]/ N

  3. , J) x( P& k0 I0 N  F
  4.     // Конструктор2 ~* j$ Y( v8 Y- y) l
  5.     public Player(String name) {
    * j) B; m/ J0 h. n9 @
  6.         this.name = name; // Используем this для указания на поле класса
    / o8 f5 T. n1 T: q: I% B4 S
  7.     }
    ' k1 I* P' V; Y; V# X4 b
  8. 8 ~$ F; Z* V' R7 _# }$ z( }. X
  9.     // Геттер для имени: a  v+ T+ K# e1 ]
  10.     public String getName() {
    ! J  y5 ^+ q- h
  11.         return this.name; // Используем this для обращения к полю класса
      `- Y8 `; D8 w) }+ j' j* Q7 i
  12.     }8 e+ n1 Y- ?, K8 U
  13. }
    ! s8 R0 E7 U. F5 V, l: t
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
/ `# G" F" U$ s' e
1 B, o9 ^; o  m5 d6 `. `, A, UКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    ' z0 z" @6 n& K8 |9 D' }$ ^
2 b. Y9 l' x. y4 w0 E- |
Пример передачи this:  {) O0 I# X, e& v# e
  1. public class Game {4 `2 ^& q- ~5 w2 N9 D' e1 K
  2.     public void start(Player player) {
    3 o5 U+ {% T5 w# P6 c
  3.         System.out.println("Игра началась с игроком: " + player.getName());5 B# q) D( d) w5 ]
  4.     }
    9 R& n# r: O% @
  5. }
    - L" K4 K% _2 O1 v8 W6 g4 }/ s

  6. + t( e2 ^6 Z5 x# l. D( L& G
  7. public class Player {/ `; Y7 U5 l' _
  8.     private String name;
      Q1 }5 U+ w1 R* B% d3 T
  9. % ~* M+ @. V/ s2 I2 z
  10.     public Player(String name) {
    3 c6 M% i' Q3 Z! [/ p( o
  11.         this.name = name;% J1 }- F* J) Z0 u! O! B
  12.     }! g" C$ V1 g' r, P; R  R0 k' t

  13. 4 W3 I! H# v3 M
  14.     public void joinGame(Game game) {
    # a  d0 d4 h8 F! ]' x4 W
  15.         game.start(this); // Передаем текущий объект Player2 v. Z; D8 _( O' F
  16.     }
    " i1 o$ U, s& A4 t  P! J5 U" Z
  17. }
    & U4 U- `8 ]/ Y' e* W
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
# w6 J8 V/ ~9 g* F  ^

* n' O7 n, j1 \( Q9 |& Y; q! yПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! 😄' {' `# ^7 q) }/ r) p0 b9 t) P

# H8 w( o; G' e9 |! B8 p5 J
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
+ g; P  E. s: N: Z  vКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
0 g4 G# D. c" c7 H% G# l
Mike123 опубликовал в 2024-10-17 20:05  k' f+ |8 X7 O/ d- Q
Добрый день! 9 a# s" t8 }: k# i7 y9 E
Как создаются и вызываются методы в Java? Мо ...

7 @; S0 _/ [0 x3 HПривет, Mike 123! 👋# @: c% m2 [: w% ]# a
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
4 q4 J- I3 T  i7 ~3 Z/ l" f# |
1 S" X5 L6 z9 Z% |. d6 R$ kДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
# T. V; Y% j; Z% t% e1 J
% y) k2 j! R6 h4 d7 f
4 F5 f: |9 y/ N& b5 NКак создаются методы в Java?$ ^3 J/ v( q+ z1 G) h
1 n7 v  h8 |. t% X& |, h
Методы в Java создаются внутри классов. Вот базовый шаблон метода:4 k, V5 G9 ?1 ?

) T. X& |& d2 H8 F! _1 P  y
  1. public returnType methodName(parameters) {
    2 i6 I+ i+ ]9 S8 H
  2.     // код метода: ?5 \9 G6 W; g, s$ s# r, e9 D; E: f
  3.     return value;; D" V/ X7 s& h7 S6 N, H
  4. }8 M; a5 o  o6 k' X
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    * k  L* O) O! ?7 r' D# S1 N2 ~

6 c8 c- A! K" X! N; f) L8 TТеперь перейдём к примеру.  V9 P2 k/ W3 l( _4 X

( o) D5 U" m) h$ b( m! _Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
! P* u) ]8 A. y. M! ]" R  Z) h
  1. public void attack(Npc target) {  // public void атака(Npc цель). E: v8 W% z, e8 S$ H& F
  2.     // Вызов метода атаки NPC
    8 u6 d6 t$ Z/ [; y$ I% v
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());" S5 t# c5 S, S7 a5 ?
  4. }6 |2 W# i- D! U# h
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
/ y* P+ r0 M3 ]' o6 D# K) y
: I# N# h0 @+ `4 r. {0 P8 r* U9 {. ?% k# o; J' |; K  @
Класс Npc.java — вызов метода, y2 l! L0 e; e4 C5 p1 {+ J

$ V$ q7 D1 s* c$ J/ s4 k
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)& x) b' f$ V* K5 N1 L
  2.     // Логика получения урона NPC
    2 A0 @( q& q9 m( h& m4 H
  3.     this.health -= damage;  // это.здоровье -= урон;
    1 Q. H5 v; g$ v5 e6 {0 C6 e
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    * Q  E! O$ |1 A
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());/ i7 j9 k0 R& W7 ~5 Q7 j5 V
  6.     7 Q7 O  s7 L$ h
  7.     // Проверка на смерть NPC! W2 L; N% i' R
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    # o& W+ O) F% R1 w( i$ I5 A
  9.         this.die();  // это.умереть();
    # w3 `' F, C5 a8 B0 A
  10.     }5 ^, w0 g: C8 D0 v
  11. }$ x5 e, v6 j1 K
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    $ p, y, w9 C) {
Пример взаимодействия (с переводом)& z2 Y- _5 \3 s6 n& N
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    " P- K7 L6 l& }+ K
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");: j1 R4 v0 _5 T' h# q# _+ {5 h. d2 }

  3. - u2 W  {* }8 h" w: d6 B2 a; f6 @
  4. // Игрок атакует гоблина
    6 ?9 P. V6 f. y$ ]! B: U
  5. player.attack(goblin);  // игрок.атаковать(гоблин);8 ]9 D' I2 D  i/ o  f
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
1 V, n0 n/ M2 ?' G# e4 i1 Z0 [
8 V9 H$ t; }8 A; J! T3 n& p
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.- w! }* k0 ]2 o3 i/ ?
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!! X; X* |: H; b# o* U
( L6 M* ]) K0 O% Z5 _
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30; |* b" O, b# l' M! j& `# |8 f8 B3 `
Привет, Астралия! Огромное спасибо за твои разъяснения ...
6 L( J/ |. _, [5 G# q8 m
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.* F# K( n3 p1 f2 X- |$ W, V, |
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример( x, e) u: S2 k3 v% t5 R
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:8 [5 p) n" L" A) D  m

4 z( E6 M$ |5 I4 S! f' K% H+ ]7 x
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    ( G. m5 A( t" _+ Y. x& m' k4 p' y* c
  2.     // Логика взаимодействия игрока с NPC
    ( y/ t1 f6 o1 j/ y7 y. A& c! s: b
  3. }6 T$ s' j! Q+ H5 B! r( m2 j
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:$ V# H& b5 l& y/ C
5 m' P; T. G: P$ ?
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    & q7 c% y3 A% m$ W5 _
  2.     // Логика перемещения NPC
    8 Z! b& J2 E# I/ ?: F2 T
  3. }' A: q  N" i" y
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:+ T& u" A0 O) c6 V- W9 o( U
+ X3 U: y! T+ w5 a# y( h
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    3 M9 x* j' Y( u, h3 e, b
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)  |$ f' v* B8 j1 u
  2.     this.health -= damage;  // NPC теряет здоровье
    # Y5 p4 P, ^; i# t- [6 W
  3.       ~- h: i' c- |) i) ]
  4.     if (this.health <= 0) {9 a* y- I" Q" E3 {7 Y" L
  5.         die();  // Если здоровье упало до 0, NPC умирает
    : K* E5 a6 g* O# B0 B" ~5 r
  6.     }0 g2 A5 o4 m* W. \" O. i
  7. }
    ; Z0 `7 v( A% F* r9 j- |8 z
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    " u8 ]' N6 i3 q0 @

$ m4 R, Y5 \+ ^( X
  1. public void die() {  // public void умереть()( Z. ~: W# y; }7 M" e
  2.     // Логика смерти NPC
    & O* _* S0 s8 `" y% w* d6 y
  3. }
    + X5 g7 x6 j8 m$ I2 D- w; u4 ?7 e
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:" `; \* z4 V* n! ^

7 F- l5 n7 T4 l5 i5 k+ ?$ Y
* ^& D1 k# L$ ?
  1. public boolean isDead() {  // public boolean мертв()
    - r6 F1 Z$ `! D5 \! Q6 ]
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0/ c% m; }( X2 c7 {, N8 X( k/ R: {
  3. }1 R4 \% n0 M) T7 }3 Q
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример* S9 w1 j& ~7 b4 Z& L

# D7 u3 I2 H! N& k
  1. public void heal(int amount) {  // public void вылечить(int количество)
    + u$ l) a6 f, r7 s( y
  2.     this.health += amount;  // Увеличиваем здоровье# V2 y4 R& x$ X* Z& _
  3.     2 S& v( O1 V* A; T. `5 [9 M/ p* ^& o
  4.     if (this.health > this.maxHealth) {
    6 t* Y* c2 @. E. \7 B) T
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального  i1 k8 g! H+ G4 d8 }
  6.     }
    . Q6 D% A+ |9 B. Y9 `: \' c, Y
  7. }  p2 f* a9 u9 G3 R; @! Y5 f
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:6 T7 k8 l, B+ ^  w% x! q

; v; U$ V* w# S  v5 q) @- s
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)% l+ D. v1 u2 z; c# }
  2.     // Логика применения скилла NPC' _5 o3 T& U4 O: s- f9 [
  3. }
    ! C( z& _  E9 e: }
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    : e  _+ E3 K: {3 G- u, ^. V
# y$ }, T6 V5 l% i* T9 d  v6 _) \
  1. + C: j2 R* q: y! v8 e* l; o3 k
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    5 J# ^, b& I; W" T
  3.     // Логика взаимодействия с NPC
    ! z2 l; x9 W  g+ ?4 M. c  i
  4. }
    # I2 O* d% f! P$ k8 F
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:  w% U5 r6 W! E; [2 u

% _+ `8 S+ k% R. r+ \
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    * E4 g# y. w! S  }4 U" N  D8 T/ L
  2.     // Логика открытия окна диалога
    $ t# y' u# K. y9 f8 {5 Z
  3. }% I4 ], }3 d6 G. D/ d0 J2 a. w
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
2 v% _6 |2 `1 z* S! s: K1 Q9 V0 pЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!! F9 D  O# g& U, p) x4 s

( o6 Z+ ?( i' l( m
: Z9 N+ {  j, t$ h
0 C, n1 h) Q; _! C; f2 t: P& n1 |4 n: r- c! M
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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