Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 ! k+ G( \, u, A$ Q) O
6 G7 s& Y7 V8 L9 C
4 ?4 @4 \' h; x- E" s, [9 B4 {
Шаг 1: Введение в классы и методы на примере L2j_Mobius. M5 N! f/ h- E) r0 \+ V
С статьёй можно ознакомится в разделе Обучение > Читать
+ V' a) `. x5 P' Y* X  k
8 m5 N7 w, t, N( o. |0 Z0 I5 TДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
/ u+ ]! n5 o+ X' d* W6 z
1 T  }% v' U8 z( f3 ~+ V& Y3 wОбсуждаем:
4 y% ^1 W7 [5 p4 V
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    6 f" D# _+ V8 \& b
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
9 e/ n. Z7 A0 V+ [0 i
% C. J! Y% |6 I) p5 N/ `

4 @! S; A+ o& f# g0 V' DИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
/ @9 M( r3 |. d
8 o! Q8 D' ?1 G+ [4 D+ |/ L- ~/ X$ w3 O4 S- b1 S; y# n) N

& i1 d' B8 v& y- x- b5 k+ I& o9 t  Z5 D" w6 p9 r- ~# Y
% x, ~. U7 ^# z5 y9 b0 J! _7 v/ f% R

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?& _* n" ~! r# o, x5 {
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:176 V+ [3 B! K: ?
Почему мы используем ключевое слово this для ссылки на п ...

: M: J0 \6 F# U  \7 CКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
! w2 u9 j. ]/ X  U* D2 l* ]2 JПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
6 A' \' P% D& _4 C' @& ^
8 @& m% J. _0 {' L5 z! TВот пример:
/ p  F$ k0 d! b8 E$ r' W% p( V
  1. public class Player {
    4 b0 Z) L0 x- ]4 N
  2.     private String name;
    - U8 ?# T8 Z: {' L+ F
  3. ' h1 u) v8 u( O# M) G, O$ Y8 {
  4.     // Конструктор
    ( K$ z' i$ L! g( f
  5.     public Player(String name) {
    5 @  J3 F# ~  x3 c: x, s
  6.         this.name = name; // Используем this для указания на поле класса" f* Y( U8 w5 M& C& p% `
  7.     }
    6 ~! h0 a( n" g3 Q

  8. 2 U  @" F2 U) z5 e5 G& h' A
  9.     // Геттер для имени$ n( n5 P: ]/ Y- s  s" ?4 J
  10.     public String getName() {
    2 a  V( V+ L% [7 `/ H5 O. V* J
  11.         return this.name; // Используем this для обращения к полю класса
    % P/ k& o. b6 w$ F) ~5 b8 d
  12.     }' P7 e! e/ b; V" k- j# R
  13. }$ s* P/ i# @& ^/ J4 m
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name./ w' ^: D( w  J3 t2 m7 Z
  X( N3 X* j+ X" A
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    4 k1 J: I+ X, H5 Y- |! F
, |5 A2 v6 K) T+ s. \; A0 x( C$ T% T3 R
Пример передачи this:; V$ J6 s1 M4 Y1 ]8 ~
  1. public class Game {
    7 h% @  S2 I# Y
  2.     public void start(Player player) {. }* G7 F6 ^% f: n. S& Q8 A
  3.         System.out.println("Игра началась с игроком: " + player.getName());4 @2 ~0 p% f+ U( n
  4.     }
    6 j! m- M/ w% s# d( a8 x1 `. G- k* E  X
  5. }  Y7 X" D- Z, w# f) G# t8 V
  6. ; M; W+ B5 @' n5 D
  7. public class Player {& Z/ O  [) j! Q+ [/ a' Y0 ?
  8.     private String name;8 m6 e) r; L: b5 R& [+ s
  9. 8 ^6 y9 y6 a# r! s; j3 o0 D1 d
  10.     public Player(String name) {
    9 p. D8 G: z6 m8 f. @$ e
  11.         this.name = name;
    0 C+ H9 R. @5 W! U0 |
  12.     }
    ' {) q7 A5 g4 T- b9 B2 E1 K8 `. s
  13. 8 H3 _2 J$ t' g' @# T
  14.     public void joinGame(Game game) {9 [- ]/ I* s/ W/ R! |
  15.         game.start(this); // Передаем текущий объект Player' _0 A- `9 s3 M( D% u1 u
  16.     }
    # s( j4 L) X4 ^& Q
  17. }' W0 y3 T* f$ g: k2 k' W  V
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
8 \: M" e7 a; f

" U) B: ]$ I0 @3 H+ l9 hПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?& ^/ S* K3 X7 V. e; f
# m# g4 I2 k+ H# `; B  |
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
) c/ X# E% [6 M& ^  ]# [Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
% e7 x: N) o+ x$ c( d7 Y  O
Mike123 опубликовал в 2024-10-17 20:053 w8 J+ N2 B( S6 S2 g# g% V, e, w
Добрый день! $ i5 }, M: m. s1 u  o
Как создаются и вызываются методы в Java? Мо ...

: x' ?& X2 s. \6 rПривет, Mike 123! ?0 c0 X, [0 h3 N& U0 g) {% v% u2 G. ?
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.% x  A, V5 N- B: A  U

% @$ d7 Q) `6 o0 T$ lДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
" K4 H/ J/ {  j  i  G. S, r# k
# [/ o( c" M' k) L, s& v& L7 f
! N0 X9 \6 T1 b8 ]1 ^, N1 NКак создаются методы в Java?) |. D: j" E6 H7 N+ l: R# E

2 Q8 ]2 @4 e  o' z' B/ ~5 G$ `3 N" B! ^Методы в Java создаются внутри классов. Вот базовый шаблон метода:
2 t' p4 |6 D9 u2 T) W5 {
% ]: `  v9 O& D) H( T2 L0 Y
  1. public returnType methodName(parameters) {  x) J% k4 t# L. C/ n2 _
  2.     // код метода  e' p) ~& g4 z+ O1 T1 a8 U
  3.     return value;8 z5 u( h5 |2 d. e) i
  4. }! v( L4 ?$ P8 z% z
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).  U6 G. M+ l! {4 W- p: @; _% D
* o- u9 R% w0 U3 d9 s9 Q
Теперь перейдём к примеру.
) Q# x4 b. z; S/ @4 |
9 S/ w) B" z1 |* r0 a. EПример на основе L2J_Mobius с переводомКласс Player.java — создание метода" L% V0 h7 n0 D# S* ^0 w  m
  1. public void attack(Npc target) {  // public void атака(Npc цель)4 z+ y+ x, Y: O' _& m
  2.     // Вызов метода атаки NPC# C/ F  X$ M* V5 {0 _2 s3 g& ~
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    " K! x7 t0 s; _8 v6 [8 P* ~
  4. }3 H0 b+ p2 G* D1 k2 x
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
$ m6 d! {' Z0 a% F- L$ Q
" U2 r6 z1 c4 |; l+ E4 n
1 L! s2 i9 n( ?( T: fКласс Npc.java — вызов метода
& t' U, m0 o4 I- W" h3 A) F# B% Q2 ]
" @& F! I0 P9 L' V  U/ h0 R- x
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон); _! W0 w: P* ^, q; w9 }
  2.     // Логика получения урона NPC
    . p0 a7 T" ]- j. r9 `
  3.     this.health -= damage;  // это.здоровье -= урон;  H& m* G$ ~% C; T6 n* O
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  ) b# t( a0 E- c
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    % h1 v3 ]$ e8 d9 U
  6.     2 v; a( [) Z, h% O$ A
  7.     // Проверка на смерть NPC- e3 Z0 ]1 Y3 T3 U  P& l
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    9 O) |! K6 e* u3 t
  9.         this.die();  // это.умереть();
    , [2 X3 ^2 J( g, u% H+ y
  10.     }" s0 [; Y% X/ r& \) a2 O
  11. }
    " f5 r2 a0 L0 y
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    + J( A, \  `+ Y% u
Пример взаимодействия (с переводом): r5 m) j. N! y0 u2 R- N
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    9 A, C" F" D4 H6 _
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    ' @7 N/ ?: A/ b8 M- i( O8 |% i

  3. & T- J* G% K$ M0 A4 b" B& ]+ @+ U$ v
  4. // Игрок атакует гоблина
    3 ]1 C* }, F6 d7 w
  5. player.attack(goblin);  // игрок.атаковать(гоблин);2 n' z2 D& `( s, K# Y+ d+ y
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
, [" U! |5 I: k7 |0 H  z+ a; Y3 {2 p) p# p1 i+ `; p
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
' ?: c0 m8 T% ]% IУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
: e" y- g2 i: ^* A( L- {' e# w9 W  q" }' r# |. n; e- C1 H. I
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30  q; z3 _4 j7 F0 q( x: g
Привет, Астралия! Огромное спасибо за твои разъяснения ...
8 f  C4 R+ F" V! H8 _8 d5 `
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
) Q" R' I( Y# }. v2 r. r  l1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример8 Q. }' o& j# Y! `
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:+ x9 i/ ?/ a9 N$ h( Z
) @! j$ j; v4 W3 P! R
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок); P3 a3 {6 ]8 l; q
  2.     // Логика взаимодействия игрока с NPC* g! k' Q/ g8 U' i- I
  3. }
    5 _- p* B2 s( |  e1 s2 v& c/ Q
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:! N' z6 J( ^3 T, G6 V5 f/ O
( u, u  Y! g% ^# L; K  A
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)/ X) F  d& H2 i% N3 `
  2.     // Логика перемещения NPC
    . d/ r( }; S) u* o2 g6 _3 J
  3. }0 r  C9 f" d0 D8 ]3 p
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:9 s! O4 F. [! q

3 v' Z( e" v* L. r
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    ; Z5 z5 D+ O. Q# }
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий); w7 @& N2 q# |/ ]- m9 z1 @5 `! M! Z: y
  2.     this.health -= damage;  // NPC теряет здоровье
    ) P9 v8 R) y. A4 s+ z
  3.     % F0 U# m  B( Z# W. X, H
  4.     if (this.health <= 0) {
    . o) E7 ]3 g. b& w! s, P
  5.         die();  // Если здоровье упало до 0, NPC умирает: w) ]/ T; i) f+ R. l" D: H
  6.     }! @3 _3 s8 h) `
  7. }$ ~+ v- L. o7 R" X1 [+ O
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    , a* P' S+ n0 k! M
3 Q$ Y' B/ m8 s: H* p7 Z" ^( V1 G
  1. public void die() {  // public void умереть()
    # d  }+ f; e# o
  2.     // Логика смерти NPC  J' Y+ E. y. H  a" R7 f8 Q
  3. }0 ~. ]! Z' t' z! A: z3 G3 x* I
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    8 w- C2 ^& W8 ~! ?( q
$ _# f, W  P2 u5 T/ o
- {  c( @0 g) k8 ?
  1. public boolean isDead() {  // public boolean мертв()' o( G0 p+ O+ t+ ?
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 02 V' K% G& \. M& Q) l& K9 e
  3. }
    # i# Z! f* ]# m- |  H
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример/ h7 h/ c) a  b0 @
+ q6 _" N8 D* o  e7 z
  1. public void heal(int amount) {  // public void вылечить(int количество)
    2 s/ ~1 B$ u3 ^/ a" w5 r
  2.     this.health += amount;  // Увеличиваем здоровье2 m) `' f2 F; T$ J
  3.    
    , k5 V1 I! K3 ^2 e" {+ t* q
  4.     if (this.health > this.maxHealth) {
    ; R3 q  d  F$ Y1 ~
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального; j4 w7 C$ d/ I- a; A
  6.     }
    5 P; |" E. J* c+ ~
  7. }
    9 d; ~" |* V1 W8 {
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:* F6 ^) e& m5 Y, K4 m/ |# L$ A
- j: I( a- L* c* T
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    ! x1 q( {, U& s% O! s$ n
  2.     // Логика применения скилла NPC
    9 \# S- K' P* n) J* Z! t" n
  3. }+ P; E! p9 e. P& B+ L. \
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    ' T$ B1 \/ o( u, P3 T- |; g) X+ [' ^3 x
& a/ l' v; I$ [; x8 k: |
  1. " p4 ?. u4 s5 ^/ B. V% s
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    ) f4 c3 g: b1 ?' p/ H6 E
  3.     // Логика взаимодействия с NPC
    9 k5 f( f6 _0 k
  4. }
    4 x& i  _" Y' A9 v2 l9 ^  e4 }
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:  Y" X4 }( C& M5 I" Q2 t( h* `
0 G; F% |- I1 C1 A; X0 D7 N  E  y! x
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    . u8 q4 J0 t: u- }! `; a, A) c
  2.     // Логика открытия окна диалога
    6 T4 R* Y) y3 T) c
  3. }* _* j+ i( l5 F5 Z& S) n% h4 J
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.- |, W; q+ c( H9 c2 B1 U: `
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
. b9 K; i7 ?% e6 m: B& c( @' D! s' @, i% f  v1 y& ^0 S

4 I6 N' W0 N4 `2 K3 S* i5 \. S8 u. h5 q) D; Q+ r4 r
7 ]+ E2 L5 ?: |4 d8 c
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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