Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
/ [0 `+ H- z3 e7 T; v% Y$ K
0 j, M4 ~/ f% w! W( u" d: p" q
Шаг 1: Введение в классы и методы на примере L2j_Mobius
; P  B7 {9 R# o. V# YС статьёй можно ознакомится в разделе Обучение > Читать
" e, \5 N7 m% @6 ~1 v8 w# V+ o
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.: t1 a) R8 j% S- W/ E8 O
: p" V" T( U5 f# f- [
Обсуждаем:5 _, A; C5 j! s1 w5 W
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.! A  C6 M$ [4 G
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
" T- j: I, k: }2 l2 l7 R  S! Z) L1 ~' S0 i


) ~* ?/ K2 }; g% _" ]' _: ?2 j0 jИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! 😄 Но мы вместе разберемся!
% E5 S$ O0 L. a" r1 k) t! u6 t% E: T7 E' s/ Y$ b, o, a4 o
7 H# d7 \, |- G, E: {2 W3 }/ Q# J

: ~( S$ _  O! p2 V1 t) r" h% ?! {& Z  A  v# p% Q$ d; q# r2 _- r/ @
! B& W9 k& }" T

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
4 V- t. h; S& f- V  P- E
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:172 B5 S' w! S4 j& h- Y- v9 }
Почему мы используем ключевое слово this для ссылки на п ...

4 D! f( I( t( N1 g2 f0 {Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
) C4 S$ L! \8 h3 ?Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.* Y+ ]) v, l: U
+ U3 v2 s: e6 r/ Q
Вот пример:4 R& ^% [+ R: b' `$ G
  1. public class Player {8 W0 c5 E! k1 |* R; W
  2.     private String name;
    % W/ `7 Z; }/ H& E! \  _: w

  3. 6 a3 M3 C5 K- c& B  P/ z1 s
  4.     // Конструктор. R; f) a* I; R! N# ~
  5.     public Player(String name) {# q# n( F' ]; V1 ^7 F2 i4 q
  6.         this.name = name; // Используем this для указания на поле класса$ b( _3 L4 T! l$ T; q
  7.     }( r, m# M/ R+ b4 V2 e1 e! ?# J! r
  8. * S. u1 E* {/ b
  9.     // Геттер для имени
    ; D. N3 g" r1 A( y
  10.     public String getName() {" P: G! ]* ^. I* @+ s( \
  11.         return this.name; // Используем this для обращения к полю класса
    7 V; ^7 ]2 j# O, H7 ~
  12.     }  j3 x: a( \  \
  13. }
    4 o% _8 v) H6 L, T
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.5 u$ r3 d5 P1 \

/ J  g% q5 g& P5 k  z0 qКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.7 G+ a& U! g. Q( X  T  e& {! Y, d

' v6 W4 d, D$ V3 `; a# _2 {9 iПример передачи this:
# H# R( i+ l3 M+ G% T
  1. public class Game {
    " y0 u  b7 C4 s$ Z$ P
  2.     public void start(Player player) {
    / N; ]0 E; q3 E2 B$ y
  3.         System.out.println("Игра началась с игроком: " + player.getName());: i) w9 o# F& G6 G/ }
  4.     }0 q* [. T6 K/ [- W, w
  5. }. Y$ T6 m. O1 i1 o6 c! R5 N) u. t

  6. 0 N% T( W# ?' g% G( l7 q9 [+ f
  7. public class Player {/ I7 O& w; G/ m  C5 W
  8.     private String name;8 n+ h6 ?0 Z% ~- H0 G- P

  9. ! ~8 O; ~3 u4 N$ O$ }9 c
  10.     public Player(String name) {
    1 M: Y& J: C  J. f- v
  11.         this.name = name;2 c* E# F1 E! P
  12.     }7 B7 [5 Z+ N) O6 w3 e! _! t
  13. + e: K5 Z! @( F& m7 X$ Y8 }
  14.     public void joinGame(Game game) {
    ' I4 X6 [+ Z: M/ ^; I; t( t' J
  15.         game.start(this); // Передаем текущий объект Player
    ( r' F' Z" t+ R- Q6 b& B
  16.     }1 S; m! g4 S7 t- D8 O# b
  17. }  ?( P0 `$ g/ |9 V5 b
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
" x3 A1 i! m% K' {3 F. S6 q
% D2 v3 M7 u9 Q2 K8 h4 X
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! 😄
( X. p3 h( \: v* ~
! c) P! @+ ~' F$ Z( r$ l
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
) p4 C# ^3 ]5 ?Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
! M7 T9 X! y( J
Mike123 опубликовал в 2024-10-17 20:05# |# Q; w! H2 A; p7 H# z# j4 Z
Добрый день! " Q$ @4 ^; k) T9 l# p( J  ?
Как создаются и вызываются методы в Java? Мо ...
; I/ ~7 Y" u/ B
Привет, Mike 123! 👋. D- S% |" O  k8 {. J' H2 H
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
! ]4 `7 j: |7 y) q2 }
* [' q$ R  \8 O7 Z9 T/ }1 Z, Q& aДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
- i2 D6 X! n: g. K# h
, r9 D7 j7 D' p$ S: i
$ z) C8 b8 V/ B8 }Как создаются методы в Java?
6 |5 M$ z& N' x& U5 v9 ^  ~: P7 q2 D7 F+ n& \% @) N; Y1 k# G, G1 [, S
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
4 ]/ d% i1 [5 D5 d" N; e; i; V7 \- E5 E. o. k( i2 i  |5 ]7 H
  1. public returnType methodName(parameters) {
    % f. m! ^9 k) e5 s) o
  2.     // код метода
    " P3 R, F: \$ R/ H
  3.     return value;
    $ o, o  W1 _2 b9 Z7 H. V- s: ^
  4. }0 j9 h' v& e9 v1 L' Z& i. w
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).( V  K0 V2 o( J; h: ^  {! b' O+ s

8 l; v) A, h% VТеперь перейдём к примеру.
1 }/ G  X, p% D
1 Y3 p' Q2 I4 I9 Y% @Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода/ u" e0 U5 Z1 B# A3 Z
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    , L7 n3 m8 ^* {& W2 r
  2.     // Вызов метода атаки NPC
    . [0 k9 G& e' n* n! y/ J
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    , {3 |9 g% `1 }5 `. H9 C4 r" F( ?
  4. }, n- e5 V& _" _: e1 X
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
: Q8 A) f" A+ x9 X! g& _- k4 \8 G* x( B  U! M6 U

* L+ M( H0 ?; W' qКласс Npc.java — вызов метода* Q( O: l8 T9 a7 _3 f

7 }7 W2 H5 w9 e" c5 |
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    ! z; @9 h: L2 f2 d+ ^. ]
  2.     // Логика получения урона NPC5 Q- g, ?6 ]& f2 d9 r* n1 B
  3.     this.health -= damage;  // это.здоровье -= урон;: D$ p8 E- u% ~3 P. G0 _# d$ T( P# B
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());    z! U  l/ p6 y: o; U( c# j. T
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
      w0 x7 F9 N# Z# p6 h5 |
  6.     0 Q( b. d+ k) B- m; c' a
  7.     // Проверка на смерть NPC3 N9 j9 p* J( O" v
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)0 l- g. d8 z  i% S) [
  9.         this.die();  // это.умереть();
    6 Z) h& Z& K+ ], x1 Z
  10.     }
    7 O2 U  U8 b! {+ W
  11. }
    9 V# L2 s! [/ S( ~& V  ]
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    9 ]5 g8 \( B1 ~3 J3 q
Пример взаимодействия (с переводом)( [" J1 n; p0 d5 b
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");; f7 E& G8 S! P6 q) O3 [3 F5 a1 ]
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");, J' j" _3 N# U2 K( S8 \2 }' ^

  3. * J, N2 q# F1 o
  4. // Игрок атакует гоблина
    # b1 `$ u, g& `# d. _! Z; m: U( s
  5. player.attack(goblin);  // игрок.атаковать(гоблин);' H! ~. o, T, V' ^
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
+ i" }2 {, x5 K1 E2 |' h1 X
/ Q, f+ X: y/ D
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
3 P, R: e: }& o) U: t8 ]. p6 DУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!3 J8 N' S( O' b4 _8 m

/ U/ F0 E# a, Q2 _
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
% ?; U$ I+ e" {4 IПривет, Астралия! Огромное спасибо за твои разъяснения ...
1 W: y" H6 ~1 e/ J
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
. n9 e* t6 E( q( c6 ?4 U9 L1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    5 P0 C* E9 [1 k- _" v6 h1 i
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:3 O5 Z4 l- S) k3 r1 b' B/ e
6 Y3 q+ B9 W% q# ~7 f
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    , {0 o& s7 J* h) g- k+ D+ a8 Y. _4 Q
  2.     // Логика взаимодействия игрока с NPC
    1 ]" r5 e8 y+ l8 P% n
  3. }
    8 @: k8 v" A6 D4 e
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    * m! m& ?) W3 a+ Y

) D1 l' a; Y  `1 c1 l2 b/ i" C
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)* m7 w' G0 {. l6 s  U. Q0 T. |
  2.     // Логика перемещения NPC
    , |3 w2 o' j& L! |9 z1 ^8 U0 n
  3. }/ d3 q$ ^- o) |+ ?
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:# y% R9 {0 g$ I( t1 N1 z# E

1 w9 F1 S4 S! X$ q" {8 C
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример1 Q% C* t5 k5 b' K$ Q
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
      u  [2 t' w  @  |$ Z( b: ?9 H9 C% w6 @# Q
  2.     this.health -= damage;  // NPC теряет здоровье& E+ q2 H: x# b$ ~
  3.    
    1 @" U- W" D: A; C' ^
  4.     if (this.health <= 0) {
      N' h& P" f0 F: Y! l* N
  5.         die();  // Если здоровье упало до 0, NPC умирает5 D$ {7 Y. k! ]) `1 Z
  6.     }
    % v3 x! t; `' o' ^
  7. }8 l# A( n  B: m( u& }: l8 M& f8 ?
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример( v0 i. l- J$ D* [( X
- z- o9 o) _; c- v1 a, ?) k& ~
  1. public void die() {  // public void умереть()% q/ r' @& I1 L- N$ v  V! F
  2.     // Логика смерти NPC, [7 \; F. }+ q* U+ v3 R
  3. }
    % B4 _- {4 s1 z  |" r
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    ' Y# Q  x1 C+ Y8 Q; L' g

) Q9 w0 X/ l) H, D5 L: a8 g* Q3 y# R7 k9 \+ z
  1. public boolean isDead() {  // public boolean мертв(). l. l1 O9 h- k2 u7 e, h
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    # ]5 ]6 H" V. t
  3. }: l1 W% y! Q$ p+ G: l
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример, X; z' o. n" s9 Z1 d
" l& a0 ?+ O+ x5 _8 v. ?. E
  1. public void heal(int amount) {  // public void вылечить(int количество)4 k$ G$ w2 Q/ O+ s6 o( b7 m
  2.     this.health += amount;  // Увеличиваем здоровье# M. [7 G: \) m: c
  3.    
    ( \% _4 Y0 v/ T, y
  4.     if (this.health > this.maxHealth) {
    ; |8 d/ B: b6 h( M6 h: i
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    1 i! W$ q, P9 t$ T- x
  6.     }7 X: i* G. C! f: R, ^
  7. }
    . y5 |; l5 o; [) g
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:7 R+ B. V* y4 k$ U7 G

% \5 J. Y/ R. H: r) e0 |
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)0 T6 q6 W- z: z4 h4 ~4 n+ k
  2.     // Логика применения скилла NPC2 I, p7 H! z" z( ^# Y2 \: P
  3. }* D. Y% m% l$ j: g
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:; H* E' }+ m, J6 s! d! ~% f
& C3 j- N) k. h1 t" h" `/ X/ u

  1. 1 Y2 y( v4 G9 R. D5 g7 i5 W( m7 g( v5 G
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    0 O  ]9 ^: U3 l7 Q' Y' d
  3.     // Логика взаимодействия с NPC. p; V* v+ G; i& k
  4. }
    " s% J3 F) v4 f, D4 N6 [) r% e( a
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:; |/ r1 N7 V# \& e/ P# ?9 g

4 v& G! |2 `. R0 n( N  N
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок). V% S& v/ H8 H/ S
  2.     // Логика открытия окна диалога1 C) l5 ]" J3 H* x! c
  3. }
    3 U- M& U3 K3 a
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
( z: I' _, M" ~Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
# t# `) ?, G9 I6 o/ c0 I, L9 i& \% `  J; v

. o$ c  t# ~- T- ~6 X% S( x- C- a* N: `

0 D# M/ k& o% }7 O0 w
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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