Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
& c2 U! Z4 u' a9 l8 R4 s
8 T. N! I: S5 X, z- w* R7 b' T7 [- k) G6 ?
Шаг 1: Введение в классы и методы на примере L2j_Mobius
! X' d2 K- A& U" fС статьёй можно ознакомится в разделе Обучение > Читать0 i; `6 W9 m1 S6 U/ S
# y0 z9 U$ a% J/ u% q
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.$ S. i; r9 b5 P5 n
. {7 c$ `8 e" c
Обсуждаем:( E  g0 X( b' e6 Z0 R
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.8 v8 N0 t8 U% H" J1 i7 w' M( p
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
! \/ n2 [- L+ k0 ~7 @. N/ Z
2 j1 O" J! \5 ~+ Z- c8 Y5 V
' [1 `8 g3 T; R, J" g1 F4 A
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!9 q7 ]1 G8 |/ k* Q

, j* S/ [# t8 P5 p* I8 g0 q: t! b  P, T+ [! G3 J: z* J
2 T$ H$ N" G) ^& ]4 I
9 b/ B$ `) w) r  G1 v& a  p
/ c+ {4 P8 L5 |* Q$ F

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?5 ~- F" B9 A7 `; Y2 R1 f) q8 J
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:175 K* F8 k: {, s4 Z9 n& ^" X4 G
Почему мы используем ключевое слово this для ссылки на п ...

, z; e, l9 v( {+ mКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.( `7 _: c$ \7 ]& ]" y. Z4 C" r
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса." x' b' U7 [9 t
( q5 Z7 P& h! w0 k* K
Вот пример:
! j7 B* A2 G4 F* n
  1. public class Player {1 @; G1 s0 p- {6 S7 J
  2.     private String name;
    ( W; F; C$ h2 h* D6 _) M3 X% \
  3. ! W& C6 Y; R5 Q7 y/ n8 x/ C# E
  4.     // Конструктор1 \: C! B' N7 n% F
  5.     public Player(String name) {( S5 X' H+ l2 V. @/ D! k+ w7 }
  6.         this.name = name; // Используем this для указания на поле класса
    6 m! I+ m0 c- i
  7.     }
    * b4 A1 T$ Y0 D2 f
  8. 4 V1 W% c: E, _/ X6 g% ]
  9.     // Геттер для имени* X7 Z" \! v: U/ G
  10.     public String getName() {1 n! z  e* D  P  k& v
  11.         return this.name; // Используем this для обращения к полю класса! J& i$ ^5 k% q
  12.     }
    . [8 g& C3 _" {- k
  13. }: \, m% H9 q* b/ z. ?! c
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
! S) y$ C% G0 g1 d4 y) `. g- o7 T7 ?5 |0 x
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.+ Q1 w: q% u: k1 N  E/ |
: `, H5 w+ d" q3 f# `: g% S
Пример передачи this:- D8 s' b$ M$ A) L% N$ e2 w3 Z1 \" E$ ~
  1. public class Game {
    " o% C0 d2 T- D2 r! o
  2.     public void start(Player player) {# o; G- S  p0 A4 Q6 w; E& I  X7 J; a
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    9 f2 g. F, k  H: _; h% @
  4.     }  z2 {  M$ c7 P  j, h' L1 N6 {
  5. }+ t" ?; o( t& U

  6. ; a& r& P  V* C0 K/ b: y1 d
  7. public class Player {3 S3 z: |7 ]% v& R/ F$ x& Q
  8.     private String name;
    . R% p7 o" v( e  d7 F( U

  9. . y! B) r+ r4 N4 l
  10.     public Player(String name) {
    6 A# ]1 m& f+ _$ v0 ^5 C. d
  11.         this.name = name;' R3 i. m# x8 Z- z$ x& q
  12.     }
    8 d9 U% _2 y. |/ K) Z. d

  13. 7 I2 f% N1 f, r. {
  14.     public void joinGame(Game game) {
    , }2 h) [6 b, N3 O  ?/ Z
  15.         game.start(this); // Передаем текущий объект Player6 a) B* S& V' b6 ^* s! J$ v
  16.     }- C( U$ c; i5 Q: v2 {
  17. }
    4 f9 W, z6 F' g: Q0 L& A1 X
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
* b% l2 C/ t, K( u
# y+ F  R8 ~+ H+ Y
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
8 G7 |, i! C0 s' c6 `( V9 E
7 n0 C3 p, J9 C4 A: p, }
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! 6 `) B9 \% c! z+ A3 _
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 ! R  ]) t$ M( z; A) @) f) d3 e
Mike123 опубликовал в 2024-10-17 20:05& c$ l" I* c8 s( {
Добрый день!
/ Z" u, r' z& f; F3 {; @Как создаются и вызываются методы в Java? Мо ...

% j/ u5 w9 Q5 J% fПривет, Mike 123! ?# j/ G$ ]0 f3 L
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.4 \9 ~7 y+ d, ^$ U$ C, w. t6 S
2 M9 g) ~; L7 e1 R% T9 F  f+ j
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.  x. W% F' I6 x" z6 ]9 @7 j

. q1 r+ |. v4 L: ~2 O/ w$ ~( H. ^/ D, L# u) D. I$ H' |1 o/ q
Как создаются методы в Java?- p  M  o; _2 c" n
2 T2 x1 O& T4 {  ~, d
Методы в Java создаются внутри классов. Вот базовый шаблон метода:: j5 O7 }" w9 S( ^' {' K$ V3 H2 B
, \0 @, u) \$ p$ ^7 _& \0 \
  1. public returnType methodName(parameters) {- X. @' a. A- v7 _
  2.     // код метода9 Z7 U( h. C4 G9 d
  3.     return value;! K; j! @8 G& _# M& C, {
  4. }
    $ x) p6 x& q) |
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).4 B+ m, c) ~- r0 [

7 K) q1 @9 Y, TТеперь перейдём к примеру.
$ G1 O/ c, [* T% X4 k1 k- A  P3 _5 U8 ~4 s$ N2 D* U. V. h
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода& g0 K& T0 m& {4 S9 a! _% Y. J% a1 a
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    " k) l* T+ X" F1 P9 H
  2.     // Вызов метода атаки NPC' G! e1 K7 l6 }# [/ S
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());8 t8 T2 |, m2 R  ]6 d/ v& ]
  4. }
    9 ^  k% E: h, x2 x% W5 {
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
! d) L, X! |! d- i& ^' A
, u2 w- w/ W! M3 e! c6 m3 ]) G" W: U) [( [# i
Класс Npc.java — вызов метода" _9 [$ U+ S# s; q: ]! G7 ^
  q, G# ]8 u: B; L6 W  F
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    * U3 k& {! U: }3 `
  2.     // Логика получения урона NPC1 w% p8 `/ f9 d  S& _2 z
  3.     this.health -= damage;  // это.здоровье -= урон;
    . s- e  Q# S; ~, t' D, N  y$ a& f  d
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  1 ]+ _& ?8 {* ^6 V: q
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());' {3 {- j$ m. H0 @/ G- {8 F. Y6 E
  6.     5 [: T& H( l, i
  7.     // Проверка на смерть NPC
    ' U! O2 {( S8 U( f5 q
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    $ H1 n7 l5 S" ^. l" Y5 ~4 [2 ?+ L
  9.         this.die();  // это.умереть();2 ?* Z' c+ {( m$ U( t+ A
  10.     }, K' X: n: W- x, M) ?( J
  11. }  @/ [$ r2 t! Y+ t
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).2 s" }. o( W- G4 H  I
Пример взаимодействия (с переводом)7 O9 d6 i# L3 G1 V
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    : C; T# G! H! L: k, \
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    . c  \( s- x4 {. R" M
  3. * D7 H4 J, ^7 g' J7 G( D  X
  4. // Игрок атакует гоблина- F8 s$ [1 Z# u; _  N4 l
  5. player.attack(goblin);  // игрок.атаковать(гоблин);3 A. }; e2 d; h$ U
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
( }. z% c+ P2 Z+ c& F  l
: y. R& y% s  e8 ?
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
( U3 G6 G" K$ z4 Q0 LУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!6 \) ~; z" C1 a7 N. f

. U& V5 z, O; Y* `
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:306 U; |+ [+ V0 Y- L
Привет, Астралия! Огромное спасибо за твои разъяснения ...
( B- e: v( C0 b3 e
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC./ g* y" n- l2 N% p
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример$ e" \( s9 N" s5 I$ G  g8 v# j
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:0 l, w% r  ?  c& v$ O( s. P

8 L: \7 f* t4 O+ i6 a
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)0 q9 {8 r0 G% b
  2.     // Логика взаимодействия игрока с NPC- D  @" a5 ]6 ^. x
  3. }1 I$ v7 q; b1 t' H% ?- g' ^- j
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:: z$ M8 T* z. V  }

' L- {' q5 w) Y' A
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    2 P$ ~/ q$ G6 q! v& Y
  2.     // Логика перемещения NPC
    , _! X: F4 f9 h" a% X& }/ C
  3. }
      ~& q: c7 \0 Q/ ^) u
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    - r! S2 `7 L' z: f" z

9 {  l4 v* w* _8 E" q5 N
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример" \5 h) ~5 p! l, ~( R5 n8 F; |
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    " }" p* m/ Y2 R6 r* F9 |. D4 u
  2.     this.health -= damage;  // NPC теряет здоровье5 C* |/ A2 t. O$ ]
  3.    
    ) L4 A* S  L* X( h( `
  4.     if (this.health <= 0) {
    + T& }4 F) W; P& i. B! {+ N
  5.         die();  // Если здоровье упало до 0, NPC умирает
    # q! U( _* S+ f/ g& x
  6.     }
    8 A8 q3 G  W  C" e/ I/ u
  7. }
      @4 c) O/ U7 p. t- e
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    : B: v) C. H) u" d- K0 }4 N

) q4 D" l$ e1 e" }! {1 ^. ?* `: h: c
  1. public void die() {  // public void умереть()
    & ^$ `9 J: I/ l  i( ]" {
  2.     // Логика смерти NPC0 l5 A9 U% [1 T! |
  3. }
    " d2 e" {: Y0 C) [0 Y( C; w
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:8 s( _( d6 y2 n: r% v
$ b; j- N6 p+ }0 }$ _7 n9 [

  {4 D8 Q9 i+ O( N7 w6 _
  1. public boolean isDead() {  // public boolean мертв()
    5 C6 q; M( d( p+ Z& X
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    " V! \& a- O9 ]% u
  3. }
    & O0 p0 X% b' K" l" X3 ~
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    , K% c* a- l9 U1 h( l1 X; }

/ ~; Q- p. h9 D: F
  1. public void heal(int amount) {  // public void вылечить(int количество)" t$ u; _* {' U8 f2 e; E  O. L
  2.     this.health += amount;  // Увеличиваем здоровье
      n5 D5 _2 d/ E" ~
  3.     - t  ^7 {+ X' q/ u5 B1 p! w' L% L6 R
  4.     if (this.health > this.maxHealth) {
    ' t( y: y) A( @- l" M% B
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального% S5 `8 E/ x( c5 V0 U6 H" Y: g
  6.     }
    ; p% A5 |) C' L% ~9 L
  7. }; w/ H0 I7 Z) \3 `6 B0 [8 v
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:9 T: O% u/ B. n  P# O9 w

  ~" f' e3 G- H; K$ a3 a
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    4 q1 P. x1 l: b8 _3 ]( B% ?
  2.     // Логика применения скилла NPC' |; S" X- Z% o
  3. }, _; e; V7 ~) z& r7 X+ Q6 i9 ^7 S) h
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    8 R! C+ [% i# E6 x

% f) u# ?) u. ^2 _* ?

  1.   @% H: y; c, I' Z4 d! z0 u
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    0 p, g2 F& `7 {' R; [) {
  3.     // Логика взаимодействия с NPC
    3 w" M6 k) s3 \1 a9 p$ V
  4. }+ W  w/ k( n: R+ s" H3 H% w1 F
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    ; f; ~5 @; s& o' y" j
, d4 U5 o6 F3 [$ i
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)! g# p! b) A  {0 @) F
  2.     // Логика открытия окна диалога
    / S4 O3 ]% n, n
  3. }
      g# `; L; j1 X1 i' V$ n* N  o
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.. N4 j* B9 [5 C  c
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!2 G% |5 m; E+ o: @- b4 x

! [- [3 ~2 a/ ~. P$ _! {- v$ d- g6 q) B# d8 S) E0 F6 B( v
5 ?3 Z; C/ c" J3 {

7 [6 Y; v  h# l& J: A& d
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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