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

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

Автор: Astraliya    Время: 2024-10-16 21:14
Название: Шаг 1: Введение в классы и методы на примере L2j_Mobius
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 , b. h6 T8 P+ g8 `) O. ^
9 ?  L& E0 S) m& s4 y

* Y6 e$ E: ?0 I$ ]- M$ r$ V5 _( eШаг 1: Введение в классы и методы на примере L2j_Mobius9 F! A( }3 l: H3 I# X
С статьёй можно ознакомится в разделе Обучение > Читать) L* c$ Y. I# C0 \
3 g5 N& ?1 ?. Q8 t% R
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
3 ~1 ?- v" Z) O0 e% y8 s- d+ Z: B& E2 a' R) x( R
Обсуждаем:
/ d1 K2 \& X3 M2 y$ }Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!8 u/ @1 v" Z$ }# s4 x' I
- V1 T& [1 T  i( W3 Y8 j- U

6 J( Z) Y, r+ L- q# @
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
& A5 p# d! b5 a! a, Y, X4 @# w8 A1 L! _5 P6 e" j
# |2 z& b& _6 g, w
( |$ L5 z5 x2 I8 m
2 ~3 k/ p; Z1 S; d6 o0 X: G4 ~

) I' S! b% o3 L7 |& _4 a- Q
Автор: Mike123    Время: 2024-10-17 01:17
Почему мы используем ключевое слово this для ссылки на поля класса?
+ b# A& E' J  y1 A% t3 o% l& B% }
Автор: Astraliya    Время: 2024-10-17 01:29
Mike123 опубликовал в 2024-10-17 01:17" S2 Z# A* l) }3 H
Почему мы используем ключевое слово this для ссылки на п ...
' j4 o- e% b9 s/ B& A/ U
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
8 p! S6 G) c( I) G, X3 z6 {Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.! s1 {- `  ]& J: C

9 @* f2 P& w2 e: H3 \, O1 D2 qВот пример:
, l# l) M2 k0 ]& }" |$ f( u1 |# B
  1. public class Player {
    # R  X* W- @/ w7 T& v% Y. {7 s
  2.     private String name;7 N' L0 `' k& D
  3. # b) R7 _0 w2 A  ~6 u+ z/ c3 H% J
  4.     // Конструктор" h& {! C" D. ~9 r' k% L3 {1 K
  5.     public Player(String name) {
    ! r# r  K% m4 A4 h5 d5 A( I
  6.         this.name = name; // Используем this для указания на поле класса2 M/ c! ^, G% \  k. _
  7.     }% o. K: o  P7 x5 {( S2 n( i% R4 y5 U

  8. $ p6 p; v0 Z9 @6 k
  9.     // Геттер для имени* ~9 \; J! Z+ L( D
  10.     public String getName() {& v6 i3 _3 ]! i& G2 }) [
  11.         return this.name; // Используем this для обращения к полю класса" k/ x# y2 `1 ^) q
  12.     }' ~; Z" V6 a: f0 S1 R$ ?9 E
  13. }2 u2 O% G- l6 q7 E7 j  G. F. a
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.% x/ T1 l3 i& t5 `: T8 X9 [
/ d, S* D- C3 K, G" D+ j8 `
Когда необходимо использовать this:
, z! K: T) E- ^Пример передачи this:
) A8 r6 W; e) A3 o! i
  1. public class Game {2 i2 R6 z/ ^" T; P. k+ c
  2.     public void start(Player player) {
    ! M1 @8 G9 y7 `% j7 ]+ n
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    ( F! I# V9 n& f; ?, H
  4.     }
      Y7 E0 n4 c" A2 ?; Y
  5. }  o" I2 E: t  e' r

  6. ' `% R0 M/ S7 g( ~) y: j* @
  7. public class Player {
    & e* u/ `, q* N6 z0 j
  8.     private String name;
    4 d' ]) @0 a2 f1 t- f; a2 d3 O
  9. # E9 d) Q0 s5 @* R
  10.     public Player(String name) {
    + O* W/ R9 W2 E  X7 W
  11.         this.name = name;! b- p* [, p; P
  12.     }: S' C. d4 n( d# l. v" V
  13. 2 K. q/ u% N/ j
  14.     public void joinGame(Game game) {: [, q5 K4 {$ ~# \5 g: K
  15.         game.start(this); // Передаем текущий объект Player
    8 E" V2 A' z  L/ B0 V" \
  16.     }& v5 Y+ o8 r0 j, A( {
  17. }
    ( P, ]- K/ G; R$ C4 p
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
0 l# }% g% N$ t, C

8 X% }* A' C. i1 u. sПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?/ r4 y! C- n& c, R" b. k7 [% R
# R0 d3 A% K. V  K) M: U* Q

Автор: Mike123    Время: 2024-10-17 20:05
Добрый день! : p0 U, v1 L+ n4 o
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
Автор: Astraliya    Время: 2024-10-17 20:23
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
- d! I" \" J) T
Mike123 опубликовал в 2024-10-17 20:05& G; r' G2 n7 h& M$ B* G* v7 b
Добрый день!
5 `3 Z: h2 ^; \  P6 U- nКак создаются и вызываются методы в Java? Мо ...

7 o0 d" e( Q9 MПривет, Mike 123! ?/ c( M- t( E6 e8 r; c) Z) B
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.' T1 n* n/ X7 i$ {' z
6 t. r3 ~7 Y# t4 m* j3 I
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
: g# Y- V0 e* y
6 j# V* f7 y* b, l0 B6 N- Q8 j6 w( {- \! ], m& Q: ]
Как создаются методы в Java?; R  O- k2 K5 C  T, N  p$ q) Q

! G. P6 N+ ?( U* }7 fМетоды в Java создаются внутри классов. Вот базовый шаблон метода:0 g2 J+ P' ?) y4 w" ^0 J- y, T
$ M' ?" s: o: s; M, {5 w" b, s) ^2 S& V
  1. public returnType methodName(parameters) {
    , |" ?6 @& w6 F8 O2 D0 \, Z
  2.     // код метода# W/ ^6 b, x: O2 R7 m
  3.     return value;! `1 j! o6 q4 P5 {/ B  v4 S
  4. }; L5 y5 R7 M1 A% t1 D/ F. N2 R
Скопировать код

( y3 q! H( Z. T# d, hТеперь перейдём к примеру.5 C' M2 n, d" ^
* Y% j) R7 _. W1 [8 B  t  R! p
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода' R; C; G$ O0 _3 H$ a  x% M
  1. public void attack(Npc target) {  // public void атака(Npc цель)$ s( A' v  J6 I% s! {
  2.     // Вызов метода атаки NPC. Y% \9 r) z; ]( \0 M  z2 H0 s; S
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    , {' K% l! Y9 n" l+ f8 Z
  4. }# V+ j9 ~' [6 |4 _6 P& o
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).2 Q0 E6 ^. W$ T: A* I% c4 B1 {

, L' G5 s- p6 \+ z3 n- C/ E) ?+ b, C9 q( s4 N2 c2 |2 R
Класс Npc.java — вызов метода- m7 D# B4 X* A$ Q5 l4 }
! m' D8 i2 S7 ?; f
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    / ?: D5 J% S, B- m7 t
  2.     // Логика получения урона NPC# C) h# d3 x5 b; ~9 ]2 R  H
  3.     this.health -= damage;  // это.здоровье -= урон;
    * J+ p8 x# Z8 c' k$ n: G
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    9 j3 r; @& T& c, [
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());" P4 q6 k+ h+ L) m/ ?
  6.    
    " x; m2 m; I" A7 T( N
  7.     // Проверка на смерть NPC
    5 F  ]0 {9 j: o$ f
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)/ H; e. C3 y& t  `% \: e; |
  9.         this.die();  // это.умереть();
    " w) g: M8 A& E9 V$ v2 V/ ]
  10.     }
    . @/ K* ~! }; c% g" ~' M8 c
  11. }
    ) z& }6 X" v: }$ M( A
Скопировать код
Пример взаимодействия (с переводом)
) H9 I) r3 D8 p2 w) i6 a
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    $ _9 s4 H% P3 F
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    7 n9 l4 K: W0 ~2 k

  3. # a4 J; F7 ^* x$ ?# k' {+ J8 y3 j
  4. // Игрок атакует гоблина5 I' k5 @% M. `, y
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    , K1 S9 l% c0 I) c
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
, J- q6 U3 I9 d, V0 u, G
' x$ s/ A9 J2 f7 G2 g
Автор: Mike123    Время: 2024-10-17 20:30
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
6 p+ Z- N& H7 z! e* ]( wУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
8 j) s4 {$ _: j" g% n) H/ f& V% \6 G4 C

Автор: Astraliya    Время: 2024-10-17 20:57
Mike123 опубликовал в 2024-10-17 20:30
" q9 ]% M+ g  d4 h) M/ \! ^% k. O6 C# kПривет, Астралия! Огромное спасибо за твои разъяснения ...

% Q) a+ U: s# u' L+ ^: {2 MОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
8 U5 l; i1 P: V' w1. getName() и getId()
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
6 N* ~9 l/ E' W$ O( Y: u
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    1 j5 l7 u! x# b# @
  2.     // Логика взаимодействия игрока с NPC
    ) T) i+ _1 K6 w, j0 u1 N; A
  3. }
    ( ]! T( w. U5 |) g
Скопировать код
3. moveToLocation(int x, int y, int z)7 \' i$ Q& v3 F& C) T( F; }
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    * E% h6 I+ A. U' Z
  2.     // Логика перемещения NPC0 K; U8 h. e7 c' M+ ]
  3. }
    ! `' A; ~  ]$ N! T- i  o
Скопировать код
4. attackCharacter(Creature target)" ]% z4 Y8 L9 X( f- y$ m
  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 урон, Существо атакующий)
    6 C: s: v- N/ q/ q) Y# o9 L/ S' V
  2.     this.health -= damage;  // NPC теряет здоровье' s) X( k+ c$ s$ d) i4 _6 G8 s/ ^
  3.    
    6 l. p, P  n/ b( \; B
  4.     if (this.health <= 0) {3 D% t( B3 s" t& @' h4 Z/ d7 Z* J" ^$ q8 J
  5.         die();  // Если здоровье упало до 0, NPC умирает6 `1 }+ l/ c: Y( `) q' P
  6.     }
    / T: U0 x! I& i, ]
  7. }  d4 {( K, Z$ X0 o
Скопировать код
6. die()
3 j" R# g- k  x: o: H
  1. public void die() {  // public void умереть()
    / {* _0 l5 O- t9 z: R+ c, k
  2.     // Логика смерти NPC
    / V$ C5 ^6 U" e& Z9 r. n" I
  3. }
    0 @! u2 o2 n: k3 C7 t5 X$ B
Скопировать код
7. isDead()/ X6 P) k0 k5 i% f/ G* O' t5 L
# R: Q! p% J6 X
  1. public boolean isDead() {  // public boolean мертв(): q& u8 c$ h- O' R0 Q
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    4 {+ n$ U$ r, H# k" L* E3 u/ n
  3. }
    5 z, {* }3 @$ f7 k. S
Скопировать код
8. heal(int amount)' \. x$ u: Y0 ?) @. N
  1. public void heal(int amount) {  // public void вылечить(int количество)
    ) n! {9 h) c* q# G/ e
  2.     this.health += amount;  // Увеличиваем здоровье
    7 f7 f6 e) }3 H5 Y/ O% d3 k) A; |
  3.    
    - H+ D9 P. {2 v) n3 x$ [1 X
  4.     if (this.health > this.maxHealth) {
    3 [9 Q. p# X( k7 U
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    3 @  `; U& r( H# R% d" |$ c& ~
  6.     }
      H- v# {& ^% G0 g# Z
  7. }' w2 j2 a; s, F& }
Скопировать код
9. doCast(Skill skill)
4 K! L) y/ W7 b' N. Y
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    + L* u- {! p4 G" |6 d
  2.     // Логика применения скилла NPC
    8 V# n4 \$ b- a, T1 z
  3. }
    7 N3 d7 P9 O) M
Скопировать код
10. onInteract(Player player)
$ _1 u+ s  |7 P( \) `% @* u1 y

  1. 3 f7 V2 Z8 I9 g- [! `
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    : J! K+ j8 J2 i( _: @
  3.     // Логика взаимодействия с NPC  @2 t/ U- R3 j. h
  4. }& q3 O- q- |- S: p# h
Скопировать код
11. showChatWindow(Player player)- Q8 V7 F, Q0 \# M; m
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    & |: q0 H0 t3 o" }
  2.     // Логика открытия окна диалога  D+ {  D$ R# g' R1 S3 c- P  L+ x
  3. }9 ?/ Q- O: C# [: N0 p
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
, z& \4 m, }8 \9 dЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
0 w/ F, H5 h4 V9 O; S. W0 Q: s! h, ]0 x
) i: w" u' ?* e! A

+ Z2 Q' r) E" a. c' G8 N! K7 w! X2 p0 z2 |6 f  B# a# a





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