Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
0 p. N. ^  a* C( F+ T
; a0 t' J1 r" U
: z$ [1 m& ^+ zШаг 1: Введение в классы и методы на примере L2j_Mobius% U: V5 j( v0 x  I+ f
С статьёй можно ознакомится в разделе Обучение > Читать
. c  o6 P8 ?2 z6 n. {# K0 K6 U+ g3 O( l# ~, T' S: C& G
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.& x" X, r* u/ w7 j

5 J# m4 x- m# @3 xОбсуждаем:
& z8 k$ ^- J, ?
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    $ |9 S! |. O. Z+ f" o: S
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!& s! h6 h6 `! B) D5 L/ o+ [$ @+ }

$ i! J* O  }+ c3 c0 T- M( H+ P" y) ~
3 i) H, J4 \+ X/ b! ]
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
2 {) c: H1 k% A+ k( f
( W1 j+ H* [6 D/ G/ S# a# o+ N3 [1 C% }* P5 m4 y/ G' D
/ n9 F, N5 C; T$ r" n) k

! u$ S9 e% M4 \8 T/ l, d# Z% m3 A7 g" O, H4 w

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?; O9 s. S7 ~, c+ X3 D! |
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17% a* M) z# T  v6 B9 \( g4 O0 h( s
Почему мы используем ключевое слово this для ссылки на п ...

2 s5 }. p0 _7 C7 _! vКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.+ x9 d2 X0 T+ P# ^
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
, P  V) L5 Z' O" Q+ Z4 d4 a+ F9 k! R5 @' o& M" j
Вот пример:. k5 e! K" q' K, ?) r5 y3 s& G
  1. public class Player {2 E, L/ Z8 s6 F1 G; H
  2.     private String name;
    - K" d' M1 t) N0 z5 G9 p4 j/ ]

  3. & ~4 y( Y% D/ q7 Z' R5 _
  4.     // Конструктор
    3 U- I: w: [- z3 R( n4 Y2 {
  5.     public Player(String name) {
    8 W) S& P; P* v: u3 ^% K9 S
  6.         this.name = name; // Используем this для указания на поле класса! E0 x6 X5 e9 U/ t
  7.     }
    0 H, x8 I- m% _

  8. / h# J0 E: S% Q6 t+ B( A7 ~7 ?4 m' A
  9.     // Геттер для имени
    & h/ ]3 J  W" [* P$ e2 q, a/ y
  10.     public String getName() {- z0 Z5 L7 r7 A6 b
  11.         return this.name; // Используем this для обращения к полю класса
    # n9 i& v+ t* ?( P
  12.     }! N4 v' y, u5 E& }- L" D/ |8 t& n
  13. }
    6 m" ~; `: O, k5 T
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.- Z- x4 I8 R# |4 n9 {

' F+ V/ f; M- q4 V, Q9 \# K; vКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    , Q  w- Z. m% t: R% `8 M3 z3 _0 Z
% n" b8 p2 s/ A! Z0 Y" d0 C
Пример передачи this:+ U  f, o  Q' m3 d5 Y/ r  P( ^1 ]9 u  e
  1. public class Game {6 Y# A' s  c! g
  2.     public void start(Player player) {
    6 T0 G- v: w" L) q
  3.         System.out.println("Игра началась с игроком: " + player.getName());6 l- v( M6 J0 i5 l7 c4 e1 v
  4.     }7 `9 H. g# a4 ~
  5. }
    , W* Z8 N" p8 `4 d
  6. / z6 i% x9 t6 A. ~! z
  7. public class Player {( K5 j% b4 p' M. c/ {
  8.     private String name;
    + D& e* n3 J# T3 O
  9. 1 V) w# H+ |8 v5 B. R
  10.     public Player(String name) {: ]  M/ x6 l# O$ M' K
  11.         this.name = name;
    * C1 K) A6 G- E" [# p' Y( x. }
  12.     }; O3 d$ s" Q5 d4 i# k! b, v0 ~
  13. ( v, {9 s$ M! ^7 ?  v6 W. Z* C
  14.     public void joinGame(Game game) {: h! g& E5 Z# k8 G: d# q( V, f( T
  15.         game.start(this); // Передаем текущий объект Player
    * Q1 l. Y4 R7 u8 I# f- x3 F7 I
  16.     }! b- r3 L2 l2 Q5 ~. G6 K% f
  17. }
    / c  {1 T; D# Y; q
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
; u' F2 V+ B/ E% B! L" x8 d

$ C  ?: X6 K9 [* H) F! N1 S2 hПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
3 E- N. U, w( G8 m: m- d: m5 k( l% X: ], _+ I
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! 6 m9 R' Y# w7 Q/ x: ^: t
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 1 W  [, B$ ?% \9 y* h  d) F( L, U
Mike123 опубликовал в 2024-10-17 20:057 A- x+ P0 n9 m8 M1 a( b
Добрый день!
& M  N  K( I! I' V! u- j6 `8 ~4 m& hКак создаются и вызываются методы в Java? Мо ...

1 W! I6 ?1 ]! s7 L! E$ b# TПривет, Mike 123! ?3 b  |0 F' q$ k* P8 N) B# h5 Y/ c4 [
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
4 ~* P! Q2 F0 Y. q' y" e6 J0 @1 \8 \& {) w
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
  W& q, ^- G" S
' z2 _5 l5 |' U& D5 ]- U* _8 v
+ H2 Z  d! U/ c% ?' h5 K% PКак создаются методы в Java?
6 q+ r4 J. P, y0 C. k% p% {+ @% ?. v# z
Методы в Java создаются внутри классов. Вот базовый шаблон метода:, ?: l$ P9 R- m! I: p3 V
& b5 H- d6 W/ H( H9 t4 x( X0 O2 a
  1. public returnType methodName(parameters) {
      Z3 ?7 r- e% W# e+ j( a# W. l9 O* {
  2.     // код метода% O0 ^) h  x: X) u7 J( _
  3.     return value;
      `$ ~4 ]9 T  F& k
  4. }
    ! S, b; Y! L2 T
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).* Y, q! D' L( x  B

3 @- w+ R$ a# K) G9 gТеперь перейдём к примеру.+ i1 }7 L3 H; A: l5 p

3 k: a( n. R2 f* h3 ^Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
# @6 ]4 J! E+ a0 j
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    3 E$ U' m- M8 v4 l2 G) ^* D
  2.     // Вызов метода атаки NPC. v( t9 K# g! F7 r
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());. ?0 Y, w, [" E: a7 G4 {
  4. }8 z4 }4 B2 ~; _1 p
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).+ k+ Q8 _! [: l- N# u! L
) Q3 _# n" W$ D* n1 e

# J# F  A& ]0 A% BКласс Npc.java — вызов метода: D  s! o) k( H) d* M$ B6 f
$ O* Y, E/ h' |7 A% y* T
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)3 E" u# U  I+ D/ u. m4 \. O0 Y
  2.     // Логика получения урона NPC  j5 B2 X2 G6 U2 ~% U5 g* g
  3.     this.health -= damage;  // это.здоровье -= урон;$ k0 W) i1 N, ~/ r
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    # m, m" j5 j! b, u! }7 W2 ^4 U
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    8 ]; x1 f1 n# q  E( {) w
  6.     ! }& _  V3 l7 R1 z7 M& s# |+ E1 u/ ~! R6 P
  7.     // Проверка на смерть NPC6 W# b) c" J$ _) z) e
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    7 c5 c% r% z4 y+ b( n1 P7 h
  9.         this.die();  // это.умереть();4 |5 @' O' c7 V, M. Y% q8 o) S
  10.     }1 e0 {- V" ~$ y" E7 v5 z- ?  B
  11. }
    : \' Y1 d" q$ t0 @0 Q
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    % c3 \( ~# Q6 f1 U3 k% ]2 N
Пример взаимодействия (с переводом)
  X: p- u2 T8 u9 b
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    5 G! y* S- w; u" L) `
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");) M! H5 S6 X, A. K% G3 O( `9 b5 ^0 w% ^

  3. * k0 W4 }* J* _9 q; ]* A9 F
  4. // Игрок атакует гоблина, W* i! Y7 t0 S4 ?! X
  5. player.attack(goblin);  // игрок.атаковать(гоблин);4 L5 h0 K7 B. C
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
. U, [( W4 M- g1 x# x
4 R( i! \. m( o7 t# h& V2 n
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
/ {) A: {( B' T6 R- mУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!' _2 h) D5 ^5 s9 u, p+ t& Q3 v

+ M& T; |6 H' H1 }
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30, r8 W" ^# a3 B) R. ]3 N* e
Привет, Астралия! Огромное спасибо за твои разъяснения ...
0 w; _6 r  q1 O4 n# d/ L
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
- y1 h3 |4 ]% R+ V1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    % ^. z+ E. W# o7 _1 C& `
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:! z/ U: N7 D8 _, A: ?; b

( }1 t4 |5 @! q$ ^1 u2 ~' @8 |
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    ( b+ E' j# ]" [, A
  2.     // Логика взаимодействия игрока с NPC6 T& p9 ]: _9 n, |
  3. }
    # f6 W# y4 B. e0 z* C) ^0 [4 L3 C
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    0 t- c1 p0 j$ R' k2 W
2 \4 E( {* R/ f
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)0 r0 `8 i1 w$ I$ {
  2.     // Логика перемещения NPC2 G4 v* l* p1 d) u5 L% ]6 k) r
  3. }
    : M" k: B8 h6 ]% d( W
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    # N' ]8 M. ^- J6 U. N% B* _9 z1 {

& c+ J$ G7 }' f+ ~' y
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    . H% ~& x  t' _3 t6 l" U# u
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    6 @4 O2 t. H/ c. G' s+ _
  2.     this.health -= damage;  // NPC теряет здоровье- R# O+ T* M6 k* I
  3.     1 Z2 f9 p2 l, M. J
  4.     if (this.health <= 0) {
    $ F2 G, y- |6 A3 {% K! \- [
  5.         die();  // Если здоровье упало до 0, NPC умирает
    ! b: i8 A2 }3 U& u+ z, T
  6.     }
    ( j7 ~; S2 l/ N% ?0 P2 r
  7. }0 t" w0 |7 S+ P
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    ! n! R3 A/ c( A6 i& ?- f9 D

' W" Y" J$ c! Y! k) ^
  1. public void die() {  // public void умереть()# f+ i6 a4 d, m; ]/ k
  2.     // Логика смерти NPC
    * \4 J  G5 ~. Z6 U9 ~0 |1 B3 L
  3. }& v7 i1 f! q; |! O
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    : q% s& {. ]  p* E. `: {
; F. _4 G& B  ^) M3 ]

, `, J& c0 z" G( S
  1. public boolean isDead() {  // public boolean мертв()6 F/ `* a$ G8 a. f& y; O
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    5 i4 s, a2 s6 ~: H. v* Y  J7 Z
  3. }
    / `& @+ F# J! D, U0 F
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    . Z# Y. F1 X/ i* _

7 w3 d/ x7 c, D
  1. public void heal(int amount) {  // public void вылечить(int количество)) d* F6 w$ k, u& g$ m0 d
  2.     this.health += amount;  // Увеличиваем здоровье8 H8 x! W' `# @( P
  3.    
    - e& |' z7 r: u8 f7 @% m& [8 V5 i
  4.     if (this.health > this.maxHealth) {* f& }% r* N; c
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального1 W# Z. b* Q; {( l+ @6 {2 _
  6.     }
    2 m- F4 E! \7 U' t$ O" v8 t( |/ s  Z2 X
  7. }
    9 N$ \* S* f- X" I) M" W
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    3 e! `$ G: _# ^
+ w7 H6 k' P2 o# V9 `
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    : @2 Z+ d) z9 H% h' ?  O% k
  2.     // Логика применения скилла NPC
    / R/ ^* p2 S% G+ t& V. W
  3. }
    " U4 w* X- y0 F4 h% q3 e/ w3 m8 q6 w
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    0 o& ^# U& g0 @, V+ b9 J$ l1 b
# d  a, P- T4 ]! l. H) o2 ?

  1. 9 s4 f* l; x! |
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)! I5 s4 C7 C" c8 s6 R, E
  3.     // Логика взаимодействия с NPC' X/ x8 u) |5 [3 P9 r  X; u9 j
  4. }7 M; w/ ]$ L3 L6 P, E% j! L/ n
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:+ V" Q6 @; j) p: M( K  q

5 o' o% `- @/ j3 w( U
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    1 \! q: q& F; C; X6 i
  2.     // Логика открытия окна диалога
    - a* T2 _: ?5 X/ P
  3. }, b- _8 g, m$ I6 w1 ?  b
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
/ T8 G, Z$ f. p& b0 z8 H. zЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!$ f9 _$ k  J6 Q# J5 U+ x3 t

' m4 @& Z3 B) O8 ~
+ n! D  e$ y( L8 e: Y$ Z
  t2 e' g% w5 V# c, {. o4 u8 j: b$ ]$ _
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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