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

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

Автор: Astraliya    Время: 2024-10-16 21:14
Название: Шаг 1: Введение в классы и методы на примере L2j_Mobius
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 7 k/ h. M5 ]- F: O1 L4 o
5 j: c* a/ U" d4 ?
( H$ Q0 h0 q  k) y2 D6 s$ l& d& y' K
Шаг 1: Введение в классы и методы на примере L2j_Mobius
" n( x# d! r" m% e; R+ cС статьёй можно ознакомится в разделе Обучение > Читать4 e; z) l5 H! y- h) W
  D& j- O" a; k: u
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.9 I- {& L5 r0 i$ L  L

/ D4 A% e- |" e4 i- K5 }. VОбсуждаем:
; Q! M! Z( [% PНе стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
! h* v8 S. d( y& t2 u3 y
) y$ J6 ^9 b8 S' N' Z
+ u6 y0 i3 i0 B: s7 r! I) D  |+ _+ M
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! 😄 Но мы вместе разберемся!
0 ]% A! U1 t" E5 \. f6 |
( ~" ^2 F' n4 z) ?" D
4 O( _7 `2 t% r1 N. C
6 ]+ K$ e5 @! Q/ D# q) o! b: E
6 S- o4 ^% j0 \3 |
6 @! f1 o( F  R; o8 m0 Q
Автор: Mike123    Время: 2024-10-17 01:17
Почему мы используем ключевое слово this для ссылки на поля класса?
& I8 E% x4 U1 s
Автор: Astraliya    Время: 2024-10-17 01:29
Mike123 опубликовал в 2024-10-17 01:17
7 Z# h4 m1 f4 v# G  oПочему мы используем ключевое слово this для ссылки на п ...
$ k0 X2 R5 \. e' \' {: q
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
: z6 M5 `# F( H. E$ B7 \+ U6 {( A3 cПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
& O' C6 X1 Y7 ?
9 h0 T' Z! e- M% ?5 b! @! WВот пример:- h) ]/ i: P) q% R: S1 d% I
  1. public class Player {. C% Q2 d5 N5 L
  2.     private String name;( |+ }8 I! ^+ R
  3. 6 _+ _/ d  G! W
  4.     // Конструктор) G" H( O& K! h  i) U; z$ X! I$ c
  5.     public Player(String name) {6 L8 f, e' q+ J# g
  6.         this.name = name; // Используем this для указания на поле класса
    ( {5 m  F( [$ D
  7.     }# G0 Q  [- D$ ~1 a+ @- N9 h( b
  8. - a; n0 i, e0 E' ~$ d2 e5 T
  9.     // Геттер для имени. Z3 F* ?& V- k( B
  10.     public String getName() {. H$ x6 t0 R) O% G1 m
  11.         return this.name; // Используем this для обращения к полю класса8 _- J1 a6 T2 d1 c( r
  12.     }
    * b9 x" K  p+ F
  13. }1 L6 n  `6 {2 L2 V
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.( G6 Z; l2 {+ u7 v6 x
# x  }; N6 z" ?, n: u  p# @2 |, v, ~
Когда необходимо использовать this:8 o. K6 U$ L& ?0 b2 o* M
Пример передачи this:( u1 s" A2 B7 h) x4 k
  1. public class Game {# D6 F  _! {- z9 r
  2.     public void start(Player player) {7 \0 o: l8 K4 o0 t4 T
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    + v. W% M' G; Z: s9 [
  4.     }
    7 c( a: s" a+ h6 p/ l; z9 y8 ^. m/ Q
  5. }
    7 a! s: t, t5 f  v/ t
  6. 7 a) ^# ?2 C  V: A( J( B  u; A$ Z' R
  7. public class Player {
    0 h2 v$ ^& ]- _$ @& m) j
  8.     private String name;
    : e7 `6 d  R+ s, _

  9. ( {$ M+ _& K. ^% T( C
  10.     public Player(String name) {7 ~& q! X, A/ _" L8 p) X
  11.         this.name = name;
    * ~" A0 Y5 y$ I+ K9 G: e
  12.     }. O+ y. m9 O2 D) F7 c+ @' {5 m5 g% S
  13. # _2 Q/ W! ?2 m! S9 ]
  14.     public void joinGame(Game game) {3 f; P/ x" d/ Z& p( j+ p; U8 o
  15.         game.start(this); // Передаем текущий объект Player$ U$ E" ?% s7 {: F* L( W/ w- F
  16.     }) f) X6 ^2 J/ G; |! F$ F
  17. }% j' e8 }% [8 {" V% o. d
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.5 o, D2 X1 N% s  ~* ]

( r0 F8 p8 X( r7 o# F9 Z
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! 😄
' S2 i. ?$ n& B! b8 P
0 t: E/ K; w! G- U, T4 J, C
Автор: Mike123    Время: 2024-10-17 20:05
Добрый день!
3 ]) O# [' W# {Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
Автор: Astraliya    Время: 2024-10-17 20:23
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24   E! i+ E# X$ h+ Z5 E9 \. a0 P: v5 c
Mike123 опубликовал в 2024-10-17 20:05
9 w! q% F) H+ L2 B5 X" Y" T8 WДобрый день! 0 `  G/ }! Z4 h
Как создаются и вызываются методы в Java? Мо ...
3 ]1 D% B4 f: \6 J# K% o: Q
Привет, Mike 123! 👋
& m( S" E* ^; K6 y# N) v$ {! ~Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
  L# p- ]( S  d. [5 s4 ^3 l0 _# m0 ?
# B. P% c/ h4 Q5 Q+ WДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
) w- S5 \/ l$ |$ E
7 l% x* N" b1 \: f* ]4 N
: t- f5 H" d7 @! C$ @7 O! l0 [Как создаются методы в Java?
$ b7 G& z3 a7 @- w: Z5 b0 R6 ^% y; o4 r* n: ?: y
Методы в Java создаются внутри классов. Вот базовый шаблон метода:: s) c# E1 ^, _# j5 z
7 T; b% O; H. l( C8 J
  1. public returnType methodName(parameters) {
    8 ^% f7 V; J& }- b
  2.     // код метода
    0 M4 C1 ?% x6 V6 J- e( c( O
  3.     return value;% S) x9 N9 o7 E" b  S( G
  4. }
    ! r" c& n5 w' v5 |3 x3 X0 k5 `$ }* m
Скопировать код
  M  v+ q; |, d" Q; ^/ r0 a5 |- p) e6 X
Теперь перейдём к примеру.% t) s3 ?# g; V" m1 M
3 ~- k2 r$ @7 `7 O
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
/ R9 i7 U0 g8 Y8 A, I
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    9 n4 M& u7 y. u' X6 G' ]
  2.     // Вызов метода атаки NPC( g# [- l9 d' u2 _
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());  ~; @3 C% j( w
  4. }
    % A+ \* c6 h. @9 Z5 Q
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
+ q" ~+ c, ~4 I! C& W9 t  z$ I5 b- y' s
) d4 w, y. @( |  d( p& {4 S. Y5 x/ I0 {
Класс Npc.java — вызов метода5 b6 ]& D, ?: J+ U5 r9 \

9 w. Z% k9 t4 Q* n$ E7 G$ a
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    7 P8 ~) @: E  E& z* L$ E) w
  2.     // Логика получения урона NPC
    ) x  n" `7 Q7 p
  3.     this.health -= damage;  // это.здоровье -= урон;
    6 ^/ n% D: U5 j7 o/ h, U
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  ( ]" b; O; K2 V- E
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());+ h- p5 n6 Y) n2 X& e% E+ y) N  R
  6.    
    2 |5 ~1 b# E2 W' {1 `, ^' x
  7.     // Проверка на смерть NPC
    1 J# y: X7 T, F6 {
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    ' H" T# ], O; E4 Q3 Z" R3 l4 L" o
  9.         this.die();  // это.умереть();7 E3 W+ h: X; f0 |1 z$ b
  10.     }" m8 E/ g/ S: Q
  11. }2 g0 b8 w+ I2 I8 w, z
Скопировать код
Пример взаимодействия (с переводом)2 N  H* r4 i& e. |5 h2 y/ X
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");7 R6 p4 |6 V/ L/ h; l& ^
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    + x) d7 s, y: v% O  v, p

  3. ( S+ k( L- o9 B5 I
  4. // Игрок атакует гоблина+ `6 m' L$ m: l
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    ! ^2 u/ P" ?8 G
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
1 Y8 }4 y% g" x# A, X9 c0 v
+ N1 }- x9 C) X8 D& r" E
Автор: Mike123    Время: 2024-10-17 20:30
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.. j* b! P, v6 B' a2 I* x
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
3 M! m: _2 T( @5 H/ q/ p4 F! P7 G/ ~) L( t$ j1 m" Q$ K- N

Автор: Astraliya    Время: 2024-10-17 20:57
Mike123 опубликовал в 2024-10-17 20:30
4 M. {6 ^  e( j% t9 PПривет, Астралия! Огромное спасибо за твои разъяснения ...
$ |9 v/ h% i: f+ I- j
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.9 s1 U/ @9 F2 X1 ?, \
1. getName() и getId()
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
7 t5 l2 D6 y" S& k  ^: i( M7 H
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    ( K! ~. B$ Y2 f1 D$ ^; {! |
  2.     // Логика взаимодействия игрока с NPC
    4 y$ r8 X$ Y1 Z8 S
  3. }. k8 f4 ^; x" p
Скопировать код
3. moveToLocation(int x, int y, int z)+ b% P0 G+ o0 T* ^" u- [  l$ F
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    ) m; E  _2 R0 b: D7 q
  2.     // Логика перемещения NPC5 L! d9 o+ {1 F/ H; i( |. U/ b, _( `+ k
  3. }2 ]4 g/ q; s6 G; \/ L
Скопировать код
4. attackCharacter(Creature target)& I8 K% J3 x- o4 b. H- p
  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 урон, Существо атакующий)
    ( o) _) o# o; B* f# h! k! S
  2.     this.health -= damage;  // NPC теряет здоровье# H2 H( v2 S. K" J( _
  3.    
    1 u1 ^$ H7 P- G5 u& |; ~9 i9 Z
  4.     if (this.health <= 0) {
    4 u& g3 u5 |" ]8 V: X
  5.         die();  // Если здоровье упало до 0, NPC умирает/ w. w, V3 u( M4 P7 ^. T
  6.     }0 \6 u5 N! z- W8 v
  7. }$ _) w+ h0 s' J
Скопировать код
6. die()
6 z# U# }- X. g" u
  1. public void die() {  // public void умереть()
    ! O& t) R; F0 C) ^; q2 w, ?
  2.     // Логика смерти NPC% R$ _0 d* [% ], J- G3 D
  3. }$ A. g" A" ^" R+ j1 B. C( h, }! f
Скопировать код
7. isDead()/ D" V- p! {5 ]
; H5 V$ Y# @) `+ n
  1. public boolean isDead() {  // public boolean мертв()
    , Z9 R! T# G9 G: C0 R3 O6 N
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    * e* J& P. W2 k% u4 Q
  3. }: v- s$ P5 X. s$ l4 {% n  ~; S
Скопировать код
8. heal(int amount)2 O8 X& n6 D8 V/ B4 q
  1. public void heal(int amount) {  // public void вылечить(int количество)' w! N  ?3 k9 `7 r7 T& d6 M0 p
  2.     this.health += amount;  // Увеличиваем здоровье
    ) `. r, q5 A6 y' l! k
  3.     ! ]" L4 t/ V& D1 ^( O9 }
  4.     if (this.health > this.maxHealth) {
    ( \; \0 J+ K2 e# T; K
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального: ^/ P, q. ]7 b, {4 q
  6.     }# A  @+ w7 k) P& t/ k7 l) W
  7. }
    ; c: q7 d1 [7 _( |, K! z
Скопировать код
9. doCast(Skill skill)
% A# C! H/ ^% [& w: O
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    * M- ]7 g+ C3 K, w3 ^4 _7 m0 `! i
  2.     // Логика применения скилла NPC
    5 c. w( t$ _' v3 f
  3. }
    0 d2 ?$ d" p. W
Скопировать код
10. onInteract(Player player)' D4 q. ~- w1 C

  1. % [, l5 l4 H+ I2 L0 t+ a
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)7 {0 l7 R/ \$ z2 o4 N+ B5 l# I
  3.     // Логика взаимодействия с NPC" D' X1 c/ |0 q; B; V) e4 i% v  A
  4. }
    ' Y6 I1 D' {0 `- j& i% ]7 k
Скопировать код
11. showChatWindow(Player player)
3 E. W2 V* K* e* M4 E7 u
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    ) o, E/ P: [9 J7 b) _& A0 ~
  2.     // Логика открытия окна диалога6 f- c7 @! N' ]: z  s9 M
  3. }
    1 c+ Z% |7 J2 i4 A  }3 t
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.# K8 m& S3 {9 x# J
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!5 d/ T7 k9 M. E* `: a; a- ]/ N
8 c( u  R) N( a, o; D* T
9 e3 |/ c/ o% N+ Q1 p
% h6 g" o! X! v
0 p' }# m8 R# s; s. m. Y





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