Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 4 _' N) h) r1 A

( H- R% K. N9 {9 l/ ~  Z
0 N$ e, W7 j) P3 \/ p5 O( Q; \Шаг 1: Введение в классы и методы на примере L2j_Mobius$ o7 d8 F% x9 h5 q
С статьёй можно ознакомится в разделе Обучение > Читать
! C: v2 y2 ?; q3 O  s2 s% s7 U% N2 B" N; n  }# J, f
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.. ^9 `( ^$ n* M6 T# z
, T1 z, b* c& G4 ~- {9 P" F' Z) K
Обсуждаем:+ w0 N4 U  _# i* v1 C$ M
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.# x7 T0 O' u0 o- T% Y, ]1 P& d7 k% a
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
$ A5 w3 {$ g7 K$ \- R& C
$ |0 Z# G! T; {; F5 l, j$ d
1 H5 Z0 m2 W% s
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
/ O2 [0 F/ a$ s; E4 V  C
$ {# R/ ^, o5 Z- F. X  Q( L* b+ ^6 Q( t* T7 x

$ w7 R3 f7 K8 b
7 o8 ]% j6 l. |3 [; o! G
1 g' \& p. s. f

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?; ~! v1 C7 x# S1 p" E
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
2 {) I4 |3 U. h+ [4 CПочему мы используем ключевое слово this для ссылки на п ...

# p) O: q% E- zКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.1 F) R$ y; O# g: P: E
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
: Q5 _7 a: k9 y$ K( y% D! c2 R" i. ~$ `! G
Вот пример:
" K1 Z' D2 n8 ]
  1. public class Player {
    2 x5 F" w$ D, w
  2.     private String name;
    $ N4 W9 a: E& n; ]

  3. # U' u* Z" e/ w
  4.     // Конструктор
    1 a/ X2 ^3 L5 y& j
  5.     public Player(String name) {: V6 i2 }3 e7 l  j' o
  6.         this.name = name; // Используем this для указания на поле класса# g& @- }1 L4 A; ]3 ?+ s7 h
  7.     }/ ^( G6 I8 J2 W5 O& M

  8. ( b6 C. [4 N1 a' c" j
  9.     // Геттер для имени
    . m4 x2 S* [/ e3 W' M
  10.     public String getName() {
    # D: W9 g! M, R9 o% N1 G
  11.         return this.name; // Используем this для обращения к полю класса2 s! b& Q) y2 B3 n1 R8 j) L
  12.     }
    ! k  D1 G3 F7 f
  13. }* l' F* C; x) ~& J) C4 \
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
% D+ K) d9 ~' ]+ `& [4 a3 @  J+ y" @' F" Y: S$ P; v( r1 ^  I
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.9 E! v" P8 z* c  g  a
3 G9 R, I2 P1 U% N6 D/ Y- s
Пример передачи this:
8 }0 `8 _/ x* g2 f+ S9 Q3 n6 r
  1. public class Game {
    ) X0 n6 x9 U. p* U, D
  2.     public void start(Player player) {1 p3 h) L1 k' H1 G: B$ b
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    " A/ @! O  Z- c1 h7 f2 A4 c
  4.     }* i9 c  g' R. P
  5. }+ l: R  y5 j/ T7 B+ U

  6. ' i- V- }4 t% h& M) g" K  z
  7. public class Player {
    , t. P' ?4 k& \. x- ^4 l: H. |& I  J
  8.     private String name;# F7 }. i% y# Z! a
  9. 7 `1 U/ P, l8 ^# {  _% C
  10.     public Player(String name) {6 `0 M, h1 j2 A
  11.         this.name = name;
    8 @  B, ~8 k2 |1 J
  12.     }
    % f/ z3 T8 f% M
  13. ) `2 O4 u( R( K
  14.     public void joinGame(Game game) {
    & g) \$ W" I5 U3 I* [
  15.         game.start(this); // Передаем текущий объект Player: S" l% L% y! X9 f, m
  16.     }( h- Z8 X2 g6 N" y3 _- |# _# M: ~
  17. }
    9 |9 J; X$ f9 d# b: m
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
& s% T! P! z4 P
6 S6 P( H8 z0 Z$ N% {4 a
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
3 B) I) O3 k: s- k( A, \
, |0 N- g; x' n5 B
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
  z+ ~% Z. ?$ Q$ Y1 d& G4 HКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
1 a8 T& D7 D( h  \+ z
Mike123 опубликовал в 2024-10-17 20:05" }- _7 k2 i( E- x3 p! C
Добрый день!
3 l+ p5 O  X$ H) o0 r$ U( aКак создаются и вызываются методы в Java? Мо ...
9 r* D7 W* a( \7 \. @! j
Привет, Mike 123! ?
- e9 I6 E! h* s1 _4 U5 P6 N1 ~! v& p# [Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.; Q5 u1 d- Q5 G
) G# p6 I: L8 G/ P- o6 o$ J" s
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
, T0 c$ s# @9 {. X* Z) f0 A/ H
/ N+ ~0 h* b  ]# V/ k: N- z7 M, p$ j% \) e2 U) R' P& L
Как создаются методы в Java?; `1 C) p7 t  x( O# B! _

! J8 L9 `. ~& I! d; |  QМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
! ^8 f: i4 J3 W" q' `& U4 {4 K' t! h$ ]/ @7 K% K) |: V% ~
  1. public returnType methodName(parameters) {4 `. E- j; \5 I: h7 s
  2.     // код метода$ E$ F+ N5 v& N5 m' M
  3.     return value;
    + u- A4 D" u" W- l3 ^+ Y) o
  4. }/ O4 H8 h1 N, a6 X9 z4 X
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    5 {5 K' x* V& P- D; J, i$ [7 M

4 g# S: o+ |' s- D5 R* C8 e& EТеперь перейдём к примеру.; ~0 R2 T* U2 K  n" I

% h* g- S2 G; ~$ eПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
0 x6 e* n& S7 D1 @2 W' `
  1. public void attack(Npc target) {  // public void атака(Npc цель)" z. v; w) b5 a9 `
  2.     // Вызов метода атаки NPC
    3 O, @8 Z( |- T
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());0 C! j! b- N; g* T  X7 [
  4. }8 |: h% m0 R( Z& S9 e8 O7 d
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).; L6 j. n/ p8 S9 W0 F) R$ @  p* w
3 T, G$ ]' l6 R

* {8 B% T. N7 w, t# l) FКласс Npc.java — вызов метода
& H+ J2 I9 v/ O9 I# u# m1 A+ X; e( l  C' `
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)+ k& E& N  M2 [; I
  2.     // Логика получения урона NPC
    ( L8 e3 p$ U( @0 |
  3.     this.health -= damage;  // это.здоровье -= урон;+ W. F3 e; i; s& R3 Z' I) S1 N
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    5 Q- d' S. E$ {8 u8 B
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());- t* Q; X, f9 j( Y
  6.    
    ' k; z) L" R8 j( _: u6 M9 |7 f
  7.     // Проверка на смерть NPC9 X1 o% B% ~) b( u# }
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    & g1 T' a  Y) ?8 I/ {
  9.         this.die();  // это.умереть();
    8 R  }8 x- o3 I: X2 A
  10.     }4 w7 Z3 T! J- c, Z' N- D
  11. }
      p3 _: B* U% e4 _# X+ D( O
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    ! q3 F6 P" i2 X9 |3 {' T9 N$ ^
Пример взаимодействия (с переводом)8 h! }( {+ n1 {* N# q# @
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    . O; Y7 ]" y; m- `: p, q  H, {
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    - r- ]5 x- d2 O; w$ b* P& r# Q
  3. ) G3 r, _+ H( z$ ~- t" \1 q2 O
  4. // Игрок атакует гоблина9 ~# I6 Q$ d' y4 _. C
  5. player.attack(goblin);  // игрок.атаковать(гоблин);( X* J! v  }% O8 \, O5 K
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
; x! }$ [9 c" ^3 t' q$ L+ M0 T
) g! Y( |# V- ^$ N& F
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.+ n9 ?- p9 r- X% R/ O8 j( n2 {
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
! C0 v# F- M( Z/ l/ c9 a/ X; o9 o$ M( j
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:309 ~$ g1 ~1 K1 a: E$ B% z
Привет, Астралия! Огромное спасибо за твои разъяснения ...
3 M3 G4 g9 B0 G) U
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
5 b/ w+ j  X5 ]& c* k1 C& y& H1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    ! i, i. b6 a: s8 V) U, @
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:) k4 I$ F# [# A* W

7 L  j. A# x7 k
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    : s# T+ j3 e/ b
  2.     // Логика взаимодействия игрока с NPC
    1 G  v$ J0 S  [# G
  3. }
    ' N3 q. R* P- Z5 r' B" m
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:/ C( [% x4 x6 T; M  _

/ b6 ~! M$ t8 C  s+ r& V, J/ j
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)6 S. w( |4 o- Q2 l+ T
  2.     // Логика перемещения NPC3 B- |6 f4 _2 `6 B  l. i/ F
  3. }
      M' i. _" L2 D1 i, G, ?1 j
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:! X$ r- d* g3 k/ o" X
+ K+ J0 }, Q; p* @% W
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример, w) y) y0 `; G8 @  U: P6 }
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)+ F% t- L- O, }3 Y! ]% \8 m# G6 t
  2.     this.health -= damage;  // NPC теряет здоровье
    4 q6 J- `0 Z/ H
  3.    
    % L; W, d4 h: o2 g( \& q
  4.     if (this.health <= 0) {$ O% c' e5 ?: D  M' J: f6 E6 g. y
  5.         die();  // Если здоровье упало до 0, NPC умирает
    " K' q* R) D. z, J
  6.     }
    9 A! N) [% r; R5 j# E1 C1 H2 o
  7. }
    ! k' u8 _2 j: V# Y0 w
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    - Z- k% j5 `9 R; ^3 \
8 F. h7 x( z: I% r  {2 p( J  r- Q
  1. public void die() {  // public void умереть()  c( I. i- t& y% U
  2.     // Логика смерти NPC
    ! T6 k; O6 A) I0 p, F  A$ G- _
  3. }3 ~$ `$ _' }' i8 T* T9 t' s9 u7 G
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    # s9 H" ^; G" l# P8 X  r% |- V
0 A5 p7 s9 {/ w! r
1 c0 z9 N; s, I  [( \1 a& I/ h/ X# {
  1. public boolean isDead() {  // public boolean мертв()& D! x6 E2 Q$ l/ K; V' g4 t
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0. }! W( U/ M  l. X% A# q
  3. }
    6 k  h9 ?. ?+ k
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример! _  Z# s' u2 m- S' C  t  F
1 _% H& {  X' h8 P
  1. public void heal(int amount) {  // public void вылечить(int количество)
    % a7 f- K) M( Q) }7 p7 |& s
  2.     this.health += amount;  // Увеличиваем здоровье
    " V5 M, N0 r9 A# o7 y4 w, a2 d
  3.    
    " p8 T, a' {; A
  4.     if (this.health > this.maxHealth) {& a& u- e- P1 Y& @1 I6 p: }! |2 S
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального* }! o+ y! N4 @7 F
  6.     }
    1 Y7 ~! l0 c& d& r( q- p: o
  7. }
    8 {* e3 [; Y  q; o
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    + P# S  p( A; T$ r8 \( K
+ y: e* R5 M$ P' L' z
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)7 Z. C( W, W2 W) i1 l
  2.     // Логика применения скилла NPC3 R- ^/ J% t$ R  A8 m6 k
  3. }
    5 e! h* Q4 g1 s" D* G- Q/ d
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:0 V+ y5 Y/ I9 i; Y. u
/ r( @( ~4 P) y2 z" f
  1. ! R: m0 A. G, T2 E4 L
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    ( `, d8 f  E  s2 n6 ]" }/ n- q( m
  3.     // Логика взаимодействия с NPC& _' d" |0 ?2 g+ R( G! H: c
  4. }/ P; {& i4 Z. ^& F" E8 U- X4 v
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    - _# W9 V! Z+ g1 z4 _& N: U& l; i
$ |+ d3 y% R& k( x, M9 Q3 o
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)! I0 A. O: G( F# \- B
  2.     // Логика открытия окна диалога
    # C, t) C) _' e/ `  T, A* [
  3. }
    7 W. H% \5 `) O4 y" H- P
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
5 x6 \' a/ U6 A! R) Y; qЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
8 b+ ?$ E  j1 }8 Z0 [. N6 J( q  V5 k+ ~3 d8 v& R, k! H

2 `9 h* v# Z( z2 _" g' Y9 m
0 M) f4 P# _  ~9 W
% Q! q  L; \  @2 _6 S5 u- B
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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