artace.ru - творческий сектор

Название: Шаг 1: Введение в классы и методы на примере L2j_Mobius [Версия для печати]

Автор: Astraliya    Время: 2024-10-16 21:14
Название: Шаг 1: Введение в классы и методы на примере L2j_Mobius
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 1 D/ b. F% K$ L) x! z7 [

3 C/ G5 I; M. Q; r% b! ]2 n8 x4 E; }" X
Шаг 1: Введение в классы и методы на примере L2j_Mobius; a+ O( G3 s$ ^2 x
С статьёй можно ознакомится в разделе Обучение > Читать8 w& j! ^( p3 g' v8 y0 A6 n2 \
+ O+ |* w" a* W+ M/ b; a
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
; S4 K( B" V+ T1 L, @$ @. _$ U0 m$ k& x/ r  `- Z4 G2 M# z" W
Обсуждаем:
% a+ h' i4 |  P$ Y9 N! [Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!- @. p) {* F6 G( Q9 K* x$ Y3 @

3 `% F  t3 o. {) w2 w
, c, e, u, {/ Z+ S& t8 s
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! 😄 Но мы вместе разберемся!: O& P1 Q6 W  o4 b4 a5 @# t

8 Q! K7 o& }7 c* B, R" i" N" y' n5 g( g2 K. F

) R8 m* @$ _( M6 [% Q9 c
: P/ ~! H  E& i# X/ r. b3 S4 A9 q/ m/ w* ?

Автор: Mike123    Время: 2024-10-17 01:17
Почему мы используем ключевое слово this для ссылки на поля класса?9 K. t# Z# z% q% p

Автор: Astraliya    Время: 2024-10-17 01:29
Mike123 опубликовал в 2024-10-17 01:17
9 w7 M2 ^9 [# X; DПочему мы используем ключевое слово this для ссылки на п ...
" X/ |5 _( t8 f
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
5 Z- ~( {6 p9 Q  @5 y; H; rПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
  R* m* Q1 o9 L9 S- v5 o
; l. C' V8 |% q4 o  P' c0 k% xВот пример:
8 J# E1 R! I# _3 A7 [: x: G# K
  1. public class Player {
    $ q) I  @/ R0 `6 E; D, m
  2.     private String name;" I2 A. V" g4 F
  3. 0 p" k6 o) {5 |
  4.     // Конструктор
      c. T: c% i: j/ N* y( [
  5.     public Player(String name) {
    ( O6 B  X  e9 Z& {5 W
  6.         this.name = name; // Используем this для указания на поле класса
    & {% t' B3 Q- @6 m  {
  7.     }& v1 C" ^% h! ?7 C

  8. ; U7 B2 F' j/ Y1 f1 _
  9.     // Геттер для имени
    0 w' t1 s6 Q" _2 [
  10.     public String getName() {( g3 U  E% n6 v& Y
  11.         return this.name; // Используем this для обращения к полю класса9 ]& [8 A3 o* w6 ^. e; Z
  12.     }
    " w0 S4 i; C3 w$ K- ^1 X% {1 o! \
  13. }
    / q9 u7 a. X6 g. u
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.1 g2 \  n9 k& Q' V& h9 d

0 Y4 L% _! A1 j8 B6 }Когда необходимо использовать this:
5 \; g3 C. H4 \5 w* f7 H/ hПример передачи this:
# o, R! v+ f4 q
  1. public class Game {
    5 H4 F5 e% r9 X4 N. f' T
  2.     public void start(Player player) {# Z5 U! v0 b6 C4 N( n( k
  3.         System.out.println("Игра началась с игроком: " + player.getName());% I" T4 ]. U3 U' n- m
  4.     }
    3 y9 |. A+ }1 q- K6 U' B
  5. }
    1 e6 l- l/ x, U% b
  6. + {$ b3 P) n5 a& E- `
  7. public class Player {: f1 e: U: R0 \" C) w
  8.     private String name;
    4 }2 T8 d4 S9 n
  9. * A4 {' L6 H' y9 h2 H; K
  10.     public Player(String name) {
    ) C4 e2 s9 s* W* R+ X% M. [
  11.         this.name = name;
    & u( i5 A  W7 N% G4 D8 o
  12.     }
    ' q" x1 u+ _, S4 U. R% c8 @8 b
  13.   Q' ^- X/ S8 d( [
  14.     public void joinGame(Game game) {
    # b+ a3 z" p% N) D- O2 {# m% |  i2 j4 ~
  15.         game.start(this); // Передаем текущий объект Player4 P2 T" H$ _5 ]2 V1 w  P" j+ L
  16.     }; r9 z# y$ ?7 k
  17. }. ~# U: u4 X$ z4 V, S  ?! k
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.3 t1 S  C) E, e, \( k8 D

) t8 K3 M( f# H+ _+ ?! r
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! 😄$ D3 z, [5 k# O
( O5 |& Z) B3 p, |- |; S0 g  ]- I

Автор: Mike123    Время: 2024-10-17 20:05
Добрый день! 2 `% D1 c1 s0 G! R
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
Автор: Astraliya    Время: 2024-10-17 20:23
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
" D- f& W) J7 I. j
Mike123 опубликовал в 2024-10-17 20:05  W2 T7 F9 J. S5 _* S: I
Добрый день!
0 s" [, ]. t; X1 p7 K3 q& wКак создаются и вызываются методы в Java? Мо ...

7 h* A& k4 o7 N3 N/ v) K1 b9 H0 oПривет, Mike 123! 👋
# \$ y0 @& Y. a7 VОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.' K" j  _8 C9 a" h3 Z3 i

; w/ F: s" b+ C( Q% `3 l3 lДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
) j/ v4 A+ p8 Q$ e/ k' D/ \8 i0 A" y% f7 n# s

8 C1 \9 g5 c$ w3 d( iКак создаются методы в Java?0 n5 z- i% l6 v( e$ e8 D4 k1 D
6 |5 V* T6 }) _6 x- K
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
8 o* p% V8 k) r, `& ]4 y9 i' }
$ v7 s( f! n: X/ {4 X5 y# {. B
  1. public returnType methodName(parameters) {
    - N( X( N0 }  f/ R$ b
  2.     // код метода( @. ~3 G* R/ |0 D- L0 v) o
  3.     return value;4 X3 O. h- _' F& c8 N
  4. }
    ' G# \* `' x/ P) h& n) \' }
Скопировать код

2 \8 ^& K$ i# \5 NТеперь перейдём к примеру.
& n0 r; Z4 K  f7 E$ Z2 m. w$ C8 s& Y$ F, X8 y1 O) H) {
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
$ x6 [6 C% N4 \: F0 t; R) }
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    6 S2 ^# B) x- i( _6 a/ d
  2.     // Вызов метода атаки NPC4 v4 o6 w! h& h' f
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());1 W; ^1 a! n3 ]
  4. }
    + h( ?% x1 y* J; M
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).$ ^( p$ X3 y3 f2 a7 Q! n
0 c, `4 A4 w. v$ |6 C9 W

# k! E% \; W, L1 y. v7 ~0 oКласс Npc.java — вызов метода
6 ?: W2 m- d" ]5 j9 i; g9 O* d3 c& a& v7 V
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)3 ]# Y+ @) r+ i
  2.     // Логика получения урона NPC- |5 W/ v# l" _6 B4 V0 X
  3.     this.health -= damage;  // это.здоровье -= урон;
    # t; X  B: s' |. K. q& W
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    4 `: E6 y4 V0 k6 a+ ?/ c1 b
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    & S' P" h' g3 T9 l4 `
  6.     * J) o( {/ r. q6 F9 x9 |
  7.     // Проверка на смерть NPC
    / X4 W9 w1 H0 P6 U  ~
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)! J9 G2 a$ ^+ t; ]' h" R* R, r
  9.         this.die();  // это.умереть();
    ) f+ o) P) h) ~* B
  10.     }& G5 T- Y/ Q+ ^+ u0 K
  11. }) ~" E  O# C! G- O  l
Скопировать код
Пример взаимодействия (с переводом)
! ]' j( x& [* J5 K- V9 q  d. h1 r% ?
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");2 G3 p4 U2 E* {2 ]4 M0 `' \
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");/ j9 C1 _3 y' u3 g6 [" Y8 I
  3. # u, g9 u- ?* x/ L4 a
  4. // Игрок атакует гоблина% L" Z, B* e8 F2 g
  5. player.attack(goblin);  // игрок.атаковать(гоблин);" @4 i; F( H7 `" j
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
; P" H% A: S# w5 h
; ?. X4 g$ n: \* ?% t( \: C  N
Автор: Mike123    Время: 2024-10-17 20:30
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
" R: U7 C5 j1 g  s' A% H& ]$ EУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!5 C% R4 l! K6 e
9 l: Y) @: s, \: e( N7 y8 e" ~3 h

Автор: Astraliya    Время: 2024-10-17 20:57
Mike123 опубликовал в 2024-10-17 20:30
8 e8 x+ H- k" I0 S' fПривет, Астралия! Огромное спасибо за твои разъяснения ...
* V4 D0 M4 y( k0 x
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.( f7 j+ g6 h, u4 Q4 H8 S) t
1. getName() и getId()
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
; j7 A3 L+ r& j6 {
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    # _9 F* I) V: k/ S: {# J
  2.     // Логика взаимодействия игрока с NPC
    . e2 @  k. _3 n- b; j  _
  3. }
    " _! G7 T5 p' l  A0 M
Скопировать код
3. moveToLocation(int x, int y, int z)) l* L' F1 A' J2 B# J
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)" `9 M+ o$ k0 j, D! y
  2.     // Логика перемещения NPC
    1 m3 |9 D5 X( ^+ r; C: Q
  3. }
    * j+ E3 |: j% X; H
Скопировать код
4. attackCharacter(Creature target)( G. y9 \& z+ M! _1 |% u
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    ; ]: U4 p6 n4 ?2 [
  2.     this.health -= damage;  // NPC теряет здоровье
    7 ]! E0 l3 F+ G
  3.     2 c& G3 U( c8 B  v, Q3 O$ j8 b1 U
  4.     if (this.health <= 0) {
    ; E0 b" c; f1 @6 e) Y
  5.         die();  // Если здоровье упало до 0, NPC умирает. {, O  \- J9 d2 T& y' H+ N
  6.     }, L. L8 I% B8 u: N* ^! n) H# a" V
  7. }
    - m; j2 T  o3 l3 B
Скопировать код
6. die()
9 x. N+ Y' v  A- C1 ~: O/ w% y& O
  1. public void die() {  // public void умереть()
    8 x2 O- G+ Y1 R3 E6 c) f. D
  2.     // Логика смерти NPC8 ~4 D- l! f# b! D1 |
  3. }' O' J* @# [8 b4 N0 p& x
Скопировать код
7. isDead()
3 M9 A1 |. s( _' G1 s# F8 M3 Y0 H( o5 ]# u1 ~
  1. public boolean isDead() {  // public boolean мертв()
    # z* a# S; w9 i" E2 |! z8 V
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0# R; ^6 g4 f/ N
  3. }
    8 }8 L# W+ Y0 ]0 D
Скопировать код
8. heal(int amount)8 k+ y+ Z% e1 u5 c( w: I
  1. public void heal(int amount) {  // public void вылечить(int количество)$ ?; `& M! s3 t9 h6 ~; w  H; U+ q
  2.     this.health += amount;  // Увеличиваем здоровье# w. e0 t: W+ W7 X, W, U. g% N$ Y
  3.     : v; s: \$ a6 L; ^1 X4 a, C/ F
  4.     if (this.health > this.maxHealth) {9 s5 v1 l! J" k! ]: i0 w
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    9 ]6 \1 Y# r. O! T
  6.     }
    . k9 V# B$ E0 O# _( y
  7. }
    3 J* z9 F3 \3 i, ?5 f
Скопировать код
9. doCast(Skill skill)8 E+ D8 ?" h3 e6 X) v* v2 _( J& k; n
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    & `0 u5 C, X  P2 j& S+ z- ]
  2.     // Логика применения скилла NPC3 c- L2 X' j& v7 s
  3. }
    5 \* n. U# S" n9 v
Скопировать код
10. onInteract(Player player)8 \. ]3 G$ U; m- E+ {: u( R
  1. 5 P) Q% D" K- V1 s$ ^0 @, J
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)1 j* T" y6 \" z' \# P
  3.     // Логика взаимодействия с NPC* P6 D& Z- }$ M* k+ f
  4. }
    0 U  ^- {  a0 O" H# w" ~/ G
Скопировать код
11. showChatWindow(Player player)
# \6 a  ^( i& o& V9 E
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    5 ^0 d  V& t+ |" M  [) q
  2.     // Логика открытия окна диалога
    * G% g1 l' u: ?" |  \
  3. }- O: E" q% J6 G* g
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
1 G9 r/ J0 N4 n' o/ X4 Y/ q5 O# AЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
; ]1 v$ W! N# B  T" B7 y& p
2 C7 t+ q+ b: ~
# ~; U3 G2 z3 s; Y  M4 H8 B5 Q& j9 [6 p
% G1 ~) `. Y* w+ ]





Добро пожаловать artace.ru - творческий сектор (https://artace.ru/) Powered by Discuz! X3.5