Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
! I8 o+ ~2 j, W4 O1 P7 M
$ ^' I; Q; y4 @* C8 K/ \; ?8 R, v: x6 r
5 q1 D+ h0 H4 k9 L) |Шаг 1: Введение в классы и методы на примере L2j_Mobius! J0 ?9 F4 A  ]  ~3 f
С статьёй можно ознакомится в разделе Обучение > Читать
, Z6 e( V1 |3 r( b( c) v) n" r! @( ?3 Y* w4 h2 p. {: J
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.) {1 _+ @  @5 E6 R5 {) O2 g+ Q% ^

1 p2 R0 u! K- o/ E8 o1 _Обсуждаем:# H3 @* w, z4 e9 W0 \: x/ s
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.; ~8 U& u8 |5 l- b( M& S
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!2 M' O" h/ `" {" f% U

  g$ _2 a/ P+ A* e

# ?( h, E6 g/ b- _( U/ p( U, I0 xИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!! w2 P" G- J- i
4 C0 t  |$ T8 R5 I, G- L6 y5 u
+ q; D/ S/ R" _  h, ~$ U
# H  h/ Q) s7 x+ O/ q

! J* i' _7 i# i: K  ~5 i  t( T, h8 _: }7 A: B1 H3 L: X5 K

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
' S! w1 |5 @- M: ]# Q# z) H* H
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
' P% H# u- }+ c' k0 I5 Y! X+ {' ]Почему мы используем ключевое слово this для ссылки на п ...
9 {" k: X2 _6 H" [& ^1 w
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.2 A, b3 ^. T! [. a
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
- q, D1 w0 c0 Q0 T4 b5 y6 m) _% p) }
Вот пример:  ^; x/ ~: s4 ^+ I( ~  s
  1. public class Player {% U. l4 ^! X; Z: U
  2.     private String name;5 c' B; ?. Y& W- m, p& p. l
  3. : S) y# i2 j* v& T
  4.     // Конструктор
    " \/ J6 ]+ }" e7 b2 w0 H9 o
  5.     public Player(String name) {! x! `% E$ I4 _
  6.         this.name = name; // Используем this для указания на поле класса
    1 Y$ A1 _& S. Z" G& A
  7.     }5 J* n2 h2 }, g  w* W! n

  8. 1 T5 @4 z- s3 B0 N4 |+ i
  9.     // Геттер для имени$ ?# _1 @3 i/ G1 _  U" e" k
  10.     public String getName() {
    7 [; d( X2 Q# B7 r6 U
  11.         return this.name; // Используем this для обращения к полю класса! C- O9 L  c* b
  12.     }8 D' L+ R- M2 q, A; \
  13. }
    8 ^' d  L) a# K
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
- x* C5 g, ]' F  T. y$ t7 \( g/ L. Q8 v) h% w& ^) |
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    * |$ @7 G  ~; w: q5 B. J+ u

: }& `. G) e7 U5 v0 v# z7 |) s9 r3 PПример передачи this:
5 |( k# W1 O1 ?0 a
  1. public class Game {+ k9 _  t# N. J' J0 r& F8 g
  2.     public void start(Player player) {4 l+ Y- G, a% Z, p
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    8 `( a9 o0 c" Z+ l& Z+ s2 h
  4.     }+ F# j, M6 n0 c* R7 f
  5. }
    3 _3 p. ]7 d  z# N1 {

  6. , @& M4 Q% I3 K$ x; P" f; U
  7. public class Player {
    $ O$ H% K! |9 R( s) u
  8.     private String name;" y6 v' T& y7 s. X! ~
  9. 0 A3 `  L% {+ ?! Y( X  x% S  ~
  10.     public Player(String name) {
    6 ~& ~2 j! z! @* v+ ~# a
  11.         this.name = name;
    0 ?7 L- m9 r# N6 v; @
  12.     }
    ( J& S- r2 d' ?5 z7 n3 I' N

  13. 6 |/ K7 l# S/ X. @5 {1 c
  14.     public void joinGame(Game game) {4 r0 T# z- D/ n, R
  15.         game.start(this); // Передаем текущий объект Player, p5 n4 U1 n% O  @- f5 ?7 O  z
  16.     }( e  D9 \0 j6 |- t3 M: D
  17. }# ~9 |+ f7 a; q% d( b  u/ B
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.. y4 ^" W' ^! ?8 @! M


2 b" E/ ^$ ^5 a6 \& s2 J5 U$ h& D3 I# iПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
5 S. |' a+ w) {2 O! K0 s$ ~
" U8 }" B) b7 n3 @" n/ A6 \  ^# m7 O
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
- G* {2 O  p7 bКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
0 P, U$ l' w2 p5 x4 K& x5 r- t% m
Mike123 опубликовал в 2024-10-17 20:05/ n# j3 s2 m  U* n' O% h8 p5 e
Добрый день!
  A# ?9 \# I1 v6 i0 v* bКак создаются и вызываются методы в Java? Мо ...
1 Y. O% Z  ?9 y
Привет, Mike 123! ?
; j' H+ W  [8 ^! B2 M& U5 cОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.: C1 m. K* u$ c2 W1 F! j
" K; L2 j' m! c% D; q1 O2 q; l
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
" ^% w1 L! ^* @7 m' e
7 A- {" Z2 n" N' n' J# ~! `2 X$ s7 a0 r5 D& p& z
Как создаются методы в Java?
0 W6 m6 l! `( a3 G6 @0 T8 E* b  j$ ?( O2 y, e4 N. J
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
" d2 ~$ X. M6 n8 q! F1 G. C( a! u/ F+ \4 B: ]1 P; G; d, l  r
  1. public returnType methodName(parameters) {3 S: K5 L# N) q* D2 f* K
  2.     // код метода
    4 E( B( P; m  v6 J' H4 ~
  3.     return value;7 d. f( y/ |+ E8 H7 m. n
  4. }( |5 k. D# W2 @% d% s0 v" s
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    8 o8 G" P6 M1 ]: x" S
- v$ Z3 K) j% t4 L, h: n
Теперь перейдём к примеру.
7 B. C& N0 k, ?. {  G2 a3 m! z9 b
9 c0 `# G& D# h6 \: b' P! G7 m3 gПример на основе L2J_Mobius с переводомКласс Player.java — создание метода. D, t8 b% D9 Q6 E: @5 P
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    7 ~' ~2 O4 X: P: o9 O( z. n
  2.     // Вызов метода атаки NPC2 T" j' z3 i) ?
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    + f; Q5 s$ ~) n' \  d  l/ H! |  D
  4. }
    * M% H; A! V/ u& V
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
* C' B# |% O3 V2 `/ N1 U2 k/ }/ y  W- K% Q+ c# w  R$ k' `

* Q% ?5 `' [# XКласс Npc.java — вызов метода$ p, ?, @5 r9 A& G

) a, B  B9 E3 Y! n
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)9 `2 k6 Y2 Q0 l  J9 Z/ a) S
  2.     // Логика получения урона NPC1 w1 r3 I7 j; f1 o0 O% s
  3.     this.health -= damage;  // это.здоровье -= урон;
    . F# u$ G9 K3 a  I7 m
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    ! y) y7 ^5 ?% R! O$ O# r- ^! j! t
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    3 F/ |7 s6 v: ]; T' W7 j. D
  6.    
    4 \( h% b. u0 b$ k& j$ v+ R
  7.     // Проверка на смерть NPC
    3 w1 G; ?. x( g# [4 k
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)* }% B/ z' Y# {" G( i5 @' l0 W
  9.         this.die();  // это.умереть();
    - F# n5 G4 \, H5 Y4 G
  10.     }7 T6 S! C  Q; g0 M
  11. }
    0 x& V4 ^* G$ B6 M; ?
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).5 W; h4 I" x6 W
Пример взаимодействия (с переводом)
+ u: @  T2 w" W
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");( O: q: L9 A, y2 W' h
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");; ^! z) Z7 _! F) E+ I& v

  3. & W/ V, H6 @7 C  p1 X2 L8 R) i$ d: \
  4. // Игрок атакует гоблина
    & p2 U3 y* z- b4 d1 V
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    ; N8 i5 J& a; k
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
* `& s7 Y! A7 X" ^& F. ]8 q7 Y6 J7 _3 J; q7 O1 G6 k+ Q
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
3 K5 b( l. p. u1 @У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
' E. h, m: W) o) ?
* J. v7 O4 Q! `
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30  _- f5 Z& U  |9 h. s
Привет, Астралия! Огромное спасибо за твои разъяснения ...
9 A/ z2 V6 i6 x+ P/ d- _
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
  E1 n9 u' P1 `; j# e% S1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример) w5 f0 O( H. q, {  x* C8 T
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    $ ]: Z4 N& q& w" y; m$ _

% d/ `7 Z8 P  O2 r+ h" z
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    . l! Z- U8 R$ }/ R3 i
  2.     // Логика взаимодействия игрока с NPC( N5 k! ?1 y& w& k" V. k' K
  3. }
    $ G9 ?5 u1 F9 w; \& o! o
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:' h: \3 b9 x2 D# Q

& ^: I8 M8 _; m5 D9 s5 w' P0 _  o/ q
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    ( f+ ]/ `! N9 c
  2.     // Логика перемещения NPC- J: r+ P/ C( _2 t
  3. }$ o# Y9 b4 a+ L- r* j
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:- L& Y9 a8 e0 c2 L+ b$ ?( Q0 O
1 Y9 ^# _- w9 z1 G- x& b
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример, b# ~8 h, q: |2 J7 W
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)& \9 z9 r- G9 D7 h6 ^
  2.     this.health -= damage;  // NPC теряет здоровье# g7 F8 v/ f' ?; A0 x- T% M
  3.     ( Y. r- H: E3 D2 H6 }: k; |% K8 q' e& d
  4.     if (this.health <= 0) {& i, j1 C: I* g$ k; O4 E$ z$ `
  5.         die();  // Если здоровье упало до 0, NPC умирает
    7 k# K5 t) C! \# \
  6.     }
    ( m4 G8 o. K2 q4 D  y+ A. h8 Y
  7. }
    ! k8 W0 ]; D: c) Y6 P% _
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример8 i  ~' p4 T2 U/ x& Z

# w. k9 U. \" V. n
  1. public void die() {  // public void умереть()
    " e5 E# e! |  S3 c5 q$ C  K6 P  m0 v
  2.     // Логика смерти NPC
    ! |, n* v/ M- e+ @% _+ ^0 a  K
  3. }% T) N* s4 A& V2 W6 p/ N
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:& v6 u; y; c1 }5 K! F

& R( D1 M( t3 i( I/ H4 i* O) I; K  L4 O4 x
  1. public boolean isDead() {  // public boolean мертв()# b- M+ h+ f" c: I: m! e
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0/ R& l6 [4 @* d$ e
  3. }
    1 p( F0 B! Y" a
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    " D+ P$ \( N, }, f

+ h5 V2 {+ c+ X. G
  1. public void heal(int amount) {  // public void вылечить(int количество): J# K$ p: W9 E  ~
  2.     this.health += amount;  // Увеличиваем здоровье
    - I& ^  X- t0 ^. w% d. R6 P
  3.    
    7 ~; s  E% {2 W$ f3 A1 \  v
  4.     if (this.health > this.maxHealth) {
    5 M$ @4 O+ J5 x& ~* L
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    . W$ j* |2 v* d* z/ P; R3 I
  6.     }" I$ v2 `/ X" h! F% b) h. W
  7. }
    ) A) R9 F1 X) h$ y( |
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    , Y5 ^  T3 \, K, d; [. P+ O

. B2 @; H4 U0 h' r
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    / v: |5 E3 u) o: [8 D$ o6 P
  2.     // Логика применения скилла NPC) A% R- `; }* h  ]. |- J
  3. }( N4 r: W$ b- L+ \( a  ]
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:' V* u% P( I+ c) L
- [( ?1 o, p9 s

  1. ' {  {. s, Q! o) a
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)& @# [% m9 `( Y1 n6 b4 R: n
  3.     // Логика взаимодействия с NPC+ L* v6 ]9 F4 I/ H
  4. }
    : E, d' k& q8 K& A6 e) O8 C
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:$ o% q5 q  x( ]/ S1 ^8 K

* T+ C2 T+ k, v3 t- K/ \( t
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    % @. b; l+ S) q& _; O  |& h  S4 n( }
  2.     // Логика открытия окна диалога! }$ J4 ]" C9 J" [  ]
  3. }9 u+ G0 k( v4 Y
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.4 f5 F( W3 d6 _+ }3 p; h% F
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
  k9 e0 G7 A5 o1 t9 p- U  }  Y5 K) {7 m3 {' H  `) O
( z. g2 l! P: }1 q# b1 k
* O, Q) e$ [  z
* F) r; ?6 V+ J! ~
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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