Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 / ]9 c; |0 _& J1 S
( _$ a& |$ _  B' Y2 n% Z' Z

& s+ _" G2 W% w+ p% XШаг 1: Введение в классы и методы на примере L2j_Mobius2 F4 i) ^( ]# F( O( c4 s
С статьёй можно ознакомится в разделе Обучение > Читать) r2 f) y# |. A& O# n- ^

, h- k+ p. q& [4 ^9 Q+ `( S# MДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
) w+ r. K. y- O8 n- H5 C, I: c! m! E  ^0 b- o1 D2 R* z0 f/ w
Обсуждаем:0 W! v) l% O. \9 [3 b. F. R6 r
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.' {% V5 I5 c% R! ~3 p0 ~
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
  J* x* O8 M0 U# t0 x, G8 u& m% b  X4 M

& t2 y$ O, }0 t
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!0 L7 ]/ V! `4 q' M1 C

, I+ Y" K& c+ [2 _
& ?  J8 N$ n) j% l0 Z: l& \9 X
8 |/ \( q2 g) c9 C' E/ s- l0 M
2 l! T8 |" q% @! c6 O+ ~
: a8 Z- Y2 D* ~: @$ g2 u( M

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
0 I$ P- I, S5 w; G' ~6 J3 m
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17( D9 p) T" f- c5 r
Почему мы используем ключевое слово this для ссылки на п ...
1 B: ?; p7 `3 y$ C! Z5 C, V
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.. O4 \5 r4 X1 Q2 G5 x- q+ j9 i/ i
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса." [2 `$ {$ N* }9 h

/ M3 b5 d+ K- s* X4 `4 GВот пример:
4 M4 E' T) A6 J, J7 c. x3 ?
  1. public class Player {
    : U+ X% U, s* f& d
  2.     private String name;  G3 x- M) C7 U* z) _

  3. - I9 j( J  m/ l7 _+ S7 L
  4.     // Конструктор' x6 o9 ^. n( Z& ?# A5 k4 p# h
  5.     public Player(String name) {
    # }3 v4 @! U* j) k6 W; J) V! H
  6.         this.name = name; // Используем this для указания на поле класса4 @0 ~' ~2 w4 Q5 @
  7.     }" O* z+ c; j8 V% p8 K: S8 e6 h

  8. , z" f+ V8 f: G, e: n8 T
  9.     // Геттер для имени6 z5 M8 ], y: u9 ~8 I# y
  10.     public String getName() {
    7 z2 B0 a) D, A
  11.         return this.name; // Используем this для обращения к полю класса
    : d, ^/ h, j9 G3 ?- [7 n
  12.     }
    / c7 A" R; a+ h5 S! V( p
  13. }) @$ i. g- e( U0 H+ c  S3 b
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
( h/ O8 Q, r4 N/ t8 w2 i% @' R0 j8 P6 Z: L
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    ! u( B9 _4 S4 E" \, ?
$ q$ I1 |* {0 H8 R4 ^
Пример передачи this:, A( M+ ^4 [3 c0 g2 f
  1. public class Game {; j! T' |1 G- f
  2.     public void start(Player player) {
    2 `7 x2 Y3 I8 j
  3.         System.out.println("Игра началась с игроком: " + player.getName());* D) `1 L7 z, V4 P1 z
  4.     }0 @  {! Z: y' _4 t, y' r# Z( X: r
  5. }
    9 S: T8 i% u* M7 [, E  S9 M( S
  6. ; m. V+ [0 M5 K. [1 o! k: q  {
  7. public class Player {  p3 T9 ^8 m1 N3 F+ s. a1 k
  8.     private String name;
    : s3 r6 V9 E8 E% H% T
  9. . v0 J) |! C; {( S
  10.     public Player(String name) {
    $ G& c# k' u$ u; Z1 ?- h5 I* j  E
  11.         this.name = name;8 |8 b0 J3 ?) W4 V
  12.     }
    # {, j6 m# V, i" ]- e4 T2 Q

  13.   b) p- a8 B+ e3 L1 {# y
  14.     public void joinGame(Game game) {
    + \/ e+ p2 o% |* ^2 H$ ~5 B
  15.         game.start(this); // Передаем текущий объект Player& K# w- `, [( Y. m$ ]  G; z
  16.     }' Z: ^7 v3 B( O6 ~* O2 ~* Q. W+ T
  17. }
    5 z+ {6 ^5 ]6 ^: a% A
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java., x" |: z, b* P+ A( j


3 U6 X6 `6 Q6 v+ T$ C: LПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?% ^! t* S! j  }7 H! @
* d$ L2 R/ M! ^1 d2 B/ v
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
3 ~8 v+ ^3 P& Q0 V7 A- fКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
4 Z" g& V, K" b" g) ^' q8 `
Mike123 опубликовал в 2024-10-17 20:05
0 Y4 O# U3 w2 c) \Добрый день!
0 e* y* o/ B7 g5 C4 MКак создаются и вызываются методы в Java? Мо ...
  ?4 s0 E% Q; X) I# c
Привет, Mike 123! ?4 {3 p! B; r; P; s# x/ F# W; L
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.: X0 B: m9 q% J6 t+ l/ t; u

- e: T4 _+ \! ~2 mДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.6 M1 ?. w0 k' N
( |" q, O. X0 E, M& M2 |
' v- F2 A2 H7 O, {1 E
Как создаются методы в Java?+ n3 z8 P3 \) i7 U% p& i

' n# }+ H2 }) g2 U" }% KМетоды в Java создаются внутри классов. Вот базовый шаблон метода:+ _* T; K. h/ n7 d! l* _  H1 i
1 V9 X( P0 U+ o1 X* Z
  1. public returnType methodName(parameters) {9 \1 d2 q, U) f; }
  2.     // код метода( y* o- U+ z4 e/ }( j4 O
  3.     return value;9 A1 M; b' A7 V' J: w/ {
  4. }
    . A  N) _# E# B9 f  f4 y
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).& n7 `* x% G0 @. q. v) s
& T7 q3 f* i* B+ T
Теперь перейдём к примеру.6 `. H5 B+ v6 w% E/ x9 b$ q- E, ?5 G
/ T, Y, X: h- B8 |
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
& N: y+ o6 u& \
  1. public void attack(Npc target) {  // public void атака(Npc цель)# U% {" r  d1 }/ d/ L4 P8 D
  2.     // Вызов метода атаки NPC
    6 G0 b- n" o5 X. D( G
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    ; J9 ^" o9 @/ L8 Y' D
  4. }
    + Z& |  s3 N3 W0 f6 z
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
$ _6 ]7 J' J4 i' s- Y) m9 J& r7 Q; U9 P! ^. N

! s& U' i$ v: Z9 gКласс Npc.java — вызов метода
/ \* E! O2 B  U% U( N6 P$ F* H8 x7 c2 g( a- C: j& Y" g
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)' V' ^+ t" w$ V/ S
  2.     // Логика получения урона NPC
    ) q7 A; c7 }6 o
  3.     this.health -= damage;  // это.здоровье -= урон;3 [* A% }/ z. V; `% {
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    & G. T: Z( E8 O. l1 Y# k' {
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    ) C! i1 R- d' j2 N& }& @# l
  6.     0 W& ]) J% \3 e3 e1 [. J* D. {
  7.     // Проверка на смерть NPC
    / p; B% n0 M6 w# m8 ~
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    # i. O# o1 M3 e, @
  9.         this.die();  // это.умереть();
    % Y/ R: a9 r6 L- m
  10.     }3 H5 G! \' x, P5 w2 f& |& v8 j
  11. }1 g4 s1 Y( D+ v8 M: s$ C0 b
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    . E) a- B+ L5 [' K
Пример взаимодействия (с переводом)! ]! A* e1 v" c% V
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");# H# e1 Z: T( k' A5 V3 I1 Q% I
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    $ P0 a* R  O' \4 a

  3. ; A/ w4 _& F: j! m- d  m
  4. // Игрок атакует гоблина
      d# i7 ^0 y- O: B
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    2 W, o: g# B. H3 S
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. : y) d+ y8 x$ K6 J

6 X  ]2 |  @& J/ ^/ F! G
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
% P4 z. h! H" s/ i4 ?4 I' t) {У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!' a6 p2 V5 G  m( J9 w1 S! L
) m- [. j8 s& ?& l
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:308 l5 M: e& g' {% N7 S
Привет, Астралия! Огромное спасибо за твои разъяснения ...

/ J& L2 j% k6 V3 X. z5 `Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
0 }) d$ z; T$ m0 p5 i8 q- S1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример9 A, d# l5 X6 a3 r* X
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:1 M! `# F* r! Q( s0 I$ a3 e
$ C& ~6 x& C5 M' p' f  b  I* |$ p
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
      [! Z, C3 `) L( Q, ]: i
  2.     // Логика взаимодействия игрока с NPC
    / }: P7 k1 f. U+ \1 ^' N6 l
  3. }1 \! z" c+ O* j8 M( Z
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    8 [$ {# Y% l; D( c( [3 B* g! d$ s% q
. ?0 G$ X& k$ w+ w$ |# T9 _" G
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    . T6 U5 a3 ?  t' _& j. C) ^( ~# j
  2.     // Логика перемещения NPC
    0 [0 T6 N( _/ G7 q( P
  3. }
    5 K: e# {5 e- F
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
      c' m3 V7 H+ ^# N  t; h5 ^( [$ T

6 p5 O: m5 R6 k( u
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример6 J3 d) A, D' H, {: |" r
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    & u9 o3 N6 O- V- u% W
  2.     this.health -= damage;  // NPC теряет здоровье$ k% E# b" Q5 p7 u2 M* z4 t
  3.    
    - Z* Z+ P) `+ }. z1 r2 K
  4.     if (this.health <= 0) {
    1 o/ G/ a1 W9 O, N
  5.         die();  // Если здоровье упало до 0, NPC умирает
    2 e4 P6 E/ E* j) f6 H6 _# b  a
  6.     }
    * o: P+ g" \8 H( J( A
  7. }  \% S, \( p) \1 u) U
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    5 k% o) A  ~" N2 m6 C
0 H! [6 ~6 Y9 I0 B# {5 v
  1. public void die() {  // public void умереть()" L% N# B; j; D- U' `9 |
  2.     // Логика смерти NPC$ [$ \  Q& B+ M; i. w/ W
  3. }
    * c: l+ m, @& U6 p6 v
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    " T; ]0 I1 {" Z( C2 ~
  ~, s; F" Q8 |2 Q
& K+ k& y# `* u4 Z2 D
  1. public boolean isDead() {  // public boolean мертв()
    ) ^) k9 q& q6 C+ z- L; g# B: q
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    % _( L4 K0 f/ W5 A
  3. }
    0 V/ _! S! y$ X5 i# [* Q/ s
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример+ U( `4 L; s" h3 R$ l
- d4 }5 d6 e. J' R
  1. public void heal(int amount) {  // public void вылечить(int количество)
    5 ]. M* x: e1 s  j& g9 W
  2.     this.health += amount;  // Увеличиваем здоровье7 ^8 v/ v! |, T3 G+ E
  3.     ( {" G3 o" r/ R8 @2 }
  4.     if (this.health > this.maxHealth) {
    1 i+ U4 c3 ^, H. p2 K! o
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    " ^! l# C/ p* a8 r$ ~! t
  6.     }
    8 E) d* F5 I# B- q; o' a
  7. }
    ; C7 q& }% p1 r" c: R9 i
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:; S# a& G# q6 H- h4 w, d

4 `+ G3 D7 H) L2 I- K
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    8 [/ l3 R# z7 T# m6 e/ M! H& S
  2.     // Логика применения скилла NPC
    4 b4 ?/ q4 W0 C2 r, S
  3. }
    * j# f- ^( r4 z: m  K
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:2 O7 M. B' O, P* U# c  q' D
; ~5 F. r4 A6 y1 J2 x$ u

  1.   J! W+ ]# U+ f; _% q6 T
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)/ P6 M4 O, T4 g; l: H- S
  3.     // Логика взаимодействия с NPC( e, L; u. J, j, T( h& j
  4. }3 Q" [" T- H  Z5 w$ X5 \, e
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:0 W# r1 @6 o6 U) J+ \
$ [3 f4 t1 C2 }# ^' k8 X
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    3 j! x7 E( d2 u) l2 E+ Z6 I
  2.     // Логика открытия окна диалога/ H- F% a/ {! b9 M
  3. }
    0 Y, `+ m9 k. I! ~* V
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.& Y1 R& V) a, J, F" j
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!9 M" n# f3 t0 d

8 ]# f; W  U* p& a
1 \  W7 c& m  D( Q" \# z  \& g( c, c2 ]

. i* U) A; l$ q# E7 W' ]+ A7 O, z& U
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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