Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
) G5 p4 e7 `; X
' q7 T. H, f5 o' f- Q% f7 V" i. [
Шаг 1: Введение в классы и методы на примере L2j_Mobius
  s- t; ]% R% dС статьёй можно ознакомится в разделе Обучение > Читать/ g, b& N) f7 S# [
1 V' h# T# w. l  p5 D
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
; w2 H1 ]! S7 O) D) l+ [/ K% V3 C9 v' ]/ G
Обсуждаем:
/ G& m8 _3 {2 [  v' ]* e
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    ' J0 Q' k1 R+ w; [, S6 X
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
" Z4 K$ D0 w: [6 D: A6 y3 I1 n- Z# ^8 |  B5 }& T


+ @  X  T0 H& ^3 yИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!* [& T+ Q2 D- w" V; S6 d8 a2 D
- q8 n8 ~  ^# c2 b
! b, b9 ~7 h6 H) K- B3 c8 O; I

( p! I* h5 O% K) w  E9 G
% F- m5 z& W5 C; g9 {! N! J# s, p

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?0 v  h, {% o% ~- `
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
9 E1 L0 r% h' Q( kПочему мы используем ключевое слово this для ссылки на п ...

% |# x# {+ R- t1 g9 f1 I* \Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
9 p( `3 S- S* MПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.8 y, V. j9 t/ S. p. g
1 h$ d4 K! }4 k! a7 h
Вот пример:
: E# q, D0 g# g
  1. public class Player {
    8 S5 ?; I! k& o8 X# J+ V8 q2 b& |9 {( P  M
  2.     private String name;. l% X* E( o2 Q# G7 [

  3. ) N& Y% z, ?, X: Q; J8 L
  4.     // Конструктор
    " A0 Q( f& _, M) M
  5.     public Player(String name) {
    3 \, C$ O$ X5 z& `; R5 w% Y, [0 E
  6.         this.name = name; // Используем this для указания на поле класса
    : o2 f1 }5 y. z& k
  7.     }3 j# i! Z8 F- @
  8. : U" ]4 @( J' }/ D
  9.     // Геттер для имени
    0 B! a# r9 @' g0 k
  10.     public String getName() {
    $ w! |, V, i. z8 t$ v5 G: c
  11.         return this.name; // Используем this для обращения к полю класса
    ' i8 E# C; ~7 j1 S$ X0 Q/ _7 }
  12.     }
    2 H/ U! o% X! G
  13. }
    / i9 W5 @# \0 g% D6 P
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
5 D5 [. I' E+ F/ h4 E( y4 d& b+ k
9 f/ f0 @4 k( g& Z7 B) |, h$ k3 QКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.% _9 k. O: @. k  B( `; f1 y

0 s$ I) G7 H* T7 g3 h# IПример передачи this:' V: J: [0 I, P
  1. public class Game {( s5 T7 V0 N$ I2 Z5 P( `9 A+ Z
  2.     public void start(Player player) {
    8 @7 b6 k/ L% @- M9 |9 f
  3.         System.out.println("Игра началась с игроком: " + player.getName());% K5 y( e6 F2 D! b
  4.     }
    ( \% d; L6 |9 b: j2 u
  5. }
    : \4 {5 S3 M; h# i* x6 m# U/ B
  6. ; _, O2 b6 A/ p9 ]
  7. public class Player {
    5 `* z/ j% Q3 v' v7 j
  8.     private String name;
    ( j( p2 J6 K( D. a

  9. " {/ x( r) O0 O) V% h8 D( \( v( X
  10.     public Player(String name) {
    ' I! k" Z% q6 b# e; V! r/ k
  11.         this.name = name;
    " W9 m/ \. f% m; m  ^5 s  I8 a
  12.     }8 B  X6 t" ?$ o; @
  13. 7 X+ }+ L) z9 M" l8 }
  14.     public void joinGame(Game game) {
    " }9 b; [4 i( Z) R* H3 `6 m
  15.         game.start(this); // Передаем текущий объект Player- I4 f8 Z* h$ U6 x8 G4 ~
  16.     }
    + d6 @" q: z0 Y
  17. }; M6 V. J$ t9 O1 l6 E
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
- h5 n( a4 B4 D) |

, c4 j- t# V! |Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
: q) l$ t3 H% E- _- A
3 U% L3 g9 o; i2 O
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! 9 D4 }4 K% c* {, a$ h. o8 j1 o
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 ! ~* \! F+ N1 d  i/ Z
Mike123 опубликовал в 2024-10-17 20:05
& @. ]( s  p9 r( {8 y+ f+ o( `% UДобрый день! $ j0 H, a( s( X. h
Как создаются и вызываются методы в Java? Мо ...

8 a0 B1 c8 w5 `2 `Привет, Mike 123! ?
3 P+ Z' l6 n6 o: @. G+ iОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.# K: O% X* W2 v3 J8 A( ~% K

, S7 O/ l& s4 f+ F$ ?/ qДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
, A* K" H' O. b1 _* k" X1 b# U
* b1 M2 @; l6 F! w" U" ?9 f: H) B! B% _) ?9 @- Z
Как создаются методы в Java?
3 j+ b" ^2 I1 k$ P  w8 P( u' q1 @* I) c$ o2 A( S6 L
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
, d" c, w  S  r7 [
4 J5 w- F7 v+ J- Q& y
  1. public returnType methodName(parameters) {
    / K9 o0 u. b/ K  D" ~
  2.     // код метода! Y8 C$ B- |- |* \' G
  3.     return value;; e0 `6 L' |( S7 Z
  4. }
    3 L2 y) b0 }, h0 d/ }5 C, G! _% v
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    5 V2 Y! w" [  T. h
: J6 l/ i. n3 ?  }1 T
Теперь перейдём к примеру.
% a& F; C4 z- p8 i3 N1 r6 Y" s( a/ |# B4 |8 y& H+ u; N
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
1 c" i( n' K: Y: z
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    2 C8 @$ L  |$ Q# @# \& ?- ^; d. [
  2.     // Вызов метода атаки NPC) M1 F) g, B9 L5 n9 {
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());! R: d" p; H- N. a- L1 t8 ], M9 g2 g
  4. }
    : w7 I/ I! m1 W. z1 X! u5 R2 B# f
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
' E* {; z9 n2 z0 j" U$ R9 E. L4 d
; L: E% o# Z7 I- r3 d
Класс Npc.java — вызов метода/ g( |  I: U( H, o1 S

5 S* R/ n; w, ]2 R  Z/ q1 e
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)7 v3 f4 ?+ C% _' E8 {
  2.     // Логика получения урона NPC  o% ?/ {1 B8 j+ J
  3.     this.health -= damage;  // это.здоровье -= урон;
    ! p/ `) J  ]" ?7 L& v+ c
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  0 ^- Z$ b! _( g3 ?. a$ {6 e
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    ) b6 S) }+ V$ E& n
  6.    
    4 j5 O+ V. z9 m. w
  7.     // Проверка на смерть NPC
    7 {# G5 ~/ e4 P* p; b( @
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)4 w; a  s9 i1 |4 I- {9 d: o9 M, T& ?
  9.         this.die();  // это.умереть();5 p6 F  m6 W0 V, \3 E* O: [
  10.     }+ K/ S, \" `3 N! t0 i# T* W
  11. }
    : C; K% f4 G/ E. k
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).- r$ F3 u$ k" I6 o! |# b
Пример взаимодействия (с переводом)
( t+ A8 W% t; {2 Z% j+ h: i$ U
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    7 Y. @( H* U$ {1 x
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    & N; i0 \9 r6 \7 J

  3. 2 y8 I  u+ O$ L0 f: I& a% {% x
  4. // Игрок атакует гоблина
    7 Y/ S2 w/ F, ~% F, @, _' q
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    + D! M( ?6 F7 W3 @2 O
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 3 E' m) W7 F6 _1 j% Z4 a
  a( e( F, `& h9 A4 s
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
3 z. B" D) e: d) O7 S: l) IУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
& }+ n+ M2 w' P" |
' b  y- `6 N1 m% O+ x
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30$ j8 \9 e# g! [! `7 W
Привет, Астралия! Огромное спасибо за твои разъяснения ...

( R) w2 N+ u. l3 W$ m/ y$ NОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
% l5 ~9 @* I, g, ~8 u1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
      B4 Q$ {# [9 M, P" h  `
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:9 E) A8 u/ o0 C1 `# R  F

; A* c  M+ \$ F( a* o
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    * p8 A7 t' a8 R' p) i
  2.     // Логика взаимодействия игрока с NPC6 C" q% [5 M; Y* y* V5 T
  3. }
    ( U  r1 T/ Q; s( P. n
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:1 _; O4 d$ z/ @
' _! g2 w1 ^9 f+ @3 W7 {6 v
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    5 @& Q. O% Q. a4 \" }9 F% h
  2.     // Логика перемещения NPC
      n" R7 }' ^5 i1 u8 C8 _
  3. }
    % x0 S% o& W+ z6 m
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    # U. s$ d7 ]. K0 F8 L- B
9 [2 C( x, M* b1 h7 F5 p) Q" ]
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    5 @/ N7 e' \, J. I- G
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    4 B3 D' q: }. A' h; h
  2.     this.health -= damage;  // NPC теряет здоровье
    * r- h" ?- K5 @$ ]$ I( e
  3.    
      h! z# u0 h) Q0 k) v& g
  4.     if (this.health <= 0) {
    : N  m6 r5 E) [) A0 S$ a* V  W
  5.         die();  // Если здоровье упало до 0, NPC умирает, ]6 p* i7 i, R
  6.     }$ R0 ]4 \. l6 F* m* c' m
  7. }
    1 W2 \& j. g1 G% q& x0 A
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример( g4 s+ o" v" q: |  _, x8 O: ~7 C

  X9 r; ?. f2 B% J% i9 z& o
  1. public void die() {  // public void умереть()
    % L5 T, i. D- b1 j3 l
  2.     // Логика смерти NPC
    4 z! W, z7 l' T( L" H/ e, N
  3. }& o0 j4 O" i. a" O
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    & l7 D. E* c1 V9 f( t7 n
* J1 N1 O( |6 f' g) R4 I

7 n+ K0 _0 d4 p6 ]4 Q$ V
  1. public boolean isDead() {  // public boolean мертв()
    % H5 c, {$ g# X. M
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 06 r6 a+ z1 s( D# T6 W) E
  3. }) q+ x2 |6 f* X/ c; k+ G
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример3 F9 M$ H# S; N: F0 r' x6 J
0 L/ \3 M, l/ b, ~
  1. public void heal(int amount) {  // public void вылечить(int количество)
    1 J3 u2 {% n( Y4 }, ?% i, k
  2.     this.health += amount;  // Увеличиваем здоровье4 @* t3 L( r+ F
  3.    
    5 e+ i0 e+ b! t5 A/ w7 B- L
  4.     if (this.health > this.maxHealth) {3 `8 h& p1 r( V( O. a
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального. b; O+ w3 C$ t7 S
  6.     }
    / b$ E- ^# d" a* i2 ^$ {* P
  7. }* ?& u% t: W/ o1 }
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    6 M' c1 Q. u) A3 [  \

8 O- T+ z  \  f$ Y- Z# b
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    5 p% A; E2 K  @3 ?# @' _1 X
  2.     // Логика применения скилла NPC
    6 J& b- Z9 X8 |, c6 }
  3. }
    3 W1 x# V. E1 H7 H- V
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:0 k, Z8 h1 p5 O  K/ ]
6 M2 P" _) F6 B6 ]2 b3 @
  1. " H) A) O. Q! L
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    7 w4 ~$ @- i$ P2 t  r8 n/ V
  3.     // Логика взаимодействия с NPC
    3 C) P6 p% M! K! A
  4. }
    6 {8 m  I& i; V  G8 {1 v- e
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    1 R7 N( k1 k3 b- ]9 M6 P! P! \5 E: m
9 k) P) {5 ^' F6 s+ S+ t9 f7 B0 g" M
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    4 A; f( ?/ c  }/ F% g- l6 N2 l6 w
  2.     // Логика открытия окна диалога& E$ x! R( l* Y; T' |) I. ^. ^
  3. }
    1 i, d/ {  y" M) q7 C0 Q: [
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.* z' I1 V( _/ ?! c3 U" _4 c2 C6 W3 v
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
- e$ z2 v; u1 F# K1 T2 `) k
& G5 P/ }7 Q! J, G7 P
' t  o  p$ {) \8 [7 Q( l* b% L& {7 @& L) d! [7 c  _
. M0 a0 u$ w8 {" a4 ?' C8 W
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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