Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 : @2 A3 J% v! @+ C! t/ u( a$ L
' p% I1 Q4 n7 S; \) O
; r6 q4 a4 x+ s  e
Шаг 1: Введение в классы и методы на примере L2j_Mobius
- N& z- x% |" t6 I' X: _" ]5 sС статьёй можно ознакомится в разделе Обучение > Читать
1 @- {5 [7 k' {1 K6 N: e
5 S- F* F% e/ H1 E6 X) TДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.1 U) {6 }2 T9 v9 L

! @& I1 K8 z" ]( A( x! ]' k' HОбсуждаем:
( |, z- R5 \+ p8 Q! C6 }
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    ! F/ v0 }  n1 g! {/ i; A
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
- ~9 k7 G9 a' P9 Y# B$ c$ J% {* C1 z7 E+ G* V5 p


) c  T) G1 x- l, zИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!+ }3 A# M$ C9 g* a: A
5 C! C3 l. C. c9 l- K( {
' V' x$ q: A) G- n, q1 v0 D

- ?) f; E9 E+ s" q, q
1 a$ b, d# w% M' R% l) S. _: F% K- g7 G# F; k# o

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
/ ?7 B4 D8 }- g  o( A) r
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
7 J* n1 G: X: C+ R% w6 [! U! @2 ^& eПочему мы используем ключевое слово this для ссылки на п ...
4 @, v' |4 {$ v9 }8 U6 c  n
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
6 d' m, j( m7 X* j, IПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
& W6 }/ S  T- `9 y4 t+ Y* V2 y3 H+ G( i
Вот пример:
* J* y# Q$ ?$ T; f! W
  1. public class Player {
    4 G1 ]/ s$ ~* x* v+ T
  2.     private String name;) W: ~8 |. Y. W# h4 T( d

  3. ; X' E1 _7 b0 x! O  {6 E9 s
  4.     // Конструктор6 @3 O  u& n& a) k" b; c0 H
  5.     public Player(String name) {. Z- Z* t" W- O. s1 d
  6.         this.name = name; // Используем this для указания на поле класса' @$ s8 v- X& O" O2 p- T  D
  7.     }" d* Y  x3 t# P( }4 h% O
  8. ) _: F+ s  c! I  D+ Q( x- }5 C
  9.     // Геттер для имени
    , L  ^( l3 D# @; n; F4 i* `: M
  10.     public String getName() {
    & A; e/ p# U2 I4 [
  11.         return this.name; // Используем this для обращения к полю класса
    / K: @2 M. w) ]" }
  12.     }
    6 N8 y: e: d- l: I$ f/ P  D* i
  13. }
    # ^5 @8 c! S' e, D: W- ^4 f
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.% C6 l9 \) X$ w5 v
  E& q* W) B) h
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    6 N; s! M/ ?4 p7 [4 \) Y# g
- Y+ \. r$ ]% ?7 B' K+ B
Пример передачи this:" n7 h* v8 u: i# b# g
  1. public class Game {7 b6 w& _* G9 q7 I( Q- T& R% e
  2.     public void start(Player player) {
    / E9 g% ?! p- D
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    + J) p: ]7 `- @' |2 i
  4.     }# S* X7 b) R& p: c8 U$ |) }, Q
  5. }
    ' K! ^' |* E1 r/ `* n

  6. 4 s( E# A% _1 M8 C
  7. public class Player {
    * ]7 G- ^8 L) r$ T) ^) \0 k7 a
  8.     private String name;
    . M  j& L, l. t8 s( A7 v, \
  9. 1 k: S  \& e3 P5 Y
  10.     public Player(String name) {+ {0 u; ?# R0 |' N0 d5 j
  11.         this.name = name;4 _$ f# Y& L0 a1 r) \% o0 Y
  12.     }
    . ]- g+ ~7 r5 {7 D
  13. 3 C7 e( W& w2 d& j0 H3 u# T  y
  14.     public void joinGame(Game game) {
    6 \  e% r1 R3 X$ R) k
  15.         game.start(this); // Передаем текущий объект Player
    . d; p) p2 E# \; P! j
  16.     }3 ~. @/ E& H/ _
  17. }& _$ i9 T; c4 B5 M& W
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
" ^8 ^/ U7 L" W! M! G
* r/ [9 G9 r/ ^/ y6 o5 C- _) R
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?: |6 d7 L1 R- g! e) \" L
  W9 U7 t8 O0 A1 e& }+ {
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
5 T3 `& R4 L0 ^0 KКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 1 G  h9 U# X" w) l. f/ \
Mike123 опубликовал в 2024-10-17 20:055 v3 `7 E) d. f0 C
Добрый день! / V( c. d; M! f: B; T. N
Как создаются и вызываются методы в Java? Мо ...
( v+ E, y6 |: w4 t" I2 ~8 `- n
Привет, Mike 123! ?
2 n+ |5 y$ D, `$ X7 ?" f+ oОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
# C8 ?# [- n3 ]- l0 g5 H9 N% f3 L5 G1 k' r$ I! T; X, ]# c
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией./ i# @- V: T7 {8 r( S8 O. p

8 ^4 U" F0 G" F: ~% n; r- V
/ g8 a0 g4 h: l0 h( ]& KКак создаются методы в Java?
: |, p. U# h; e0 s- V3 m7 O; g& c% B" [+ j' j  `8 w7 Z; o
Методы в Java создаются внутри классов. Вот базовый шаблон метода:1 y* _1 I9 o3 O+ R
* v$ ^2 Y9 s' d8 J. `
  1. public returnType methodName(parameters) {
    8 c: U! a; p' A  N8 r) o3 c
  2.     // код метода, O# X) C/ e. l; |. A5 p  `# i0 @# B
  3.     return value;/ C, A0 x2 i. R2 C6 L$ P
  4. }; a8 p' {& M  D( `9 Z
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод)." T/ Y- d8 c) ^' \& Z

; ~% T4 C  ?% I5 e, v. q, EТеперь перейдём к примеру./ n; a! y3 m% {% y, S" X/ u
' Y3 s7 |9 u) q( H1 \) k( T9 i( t0 T
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
% b. z9 w# Z/ @* x* {9 U
  1. public void attack(Npc target) {  // public void атака(Npc цель)& l% k5 ^4 P  d5 Y  J
  2.     // Вызов метода атаки NPC! [' ^4 c1 Z& b% g$ `7 C
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());+ }9 D4 _/ i" k% F; D
  4. }5 }% |( S+ P0 c; N9 C
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).. a7 _# }2 P" c8 c6 h7 e

& c2 P1 z* `  q0 u, H1 d. y' t; w. B3 r5 z5 ]* E& [: _
Класс Npc.java — вызов метода$ }  f: n3 I& ^$ ?% A2 ~; A
1 o4 P' a3 n3 u+ h
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)+ [$ f6 |; @* ?7 j
  2.     // Логика получения урона NPC. @0 u, Q1 R2 N% b& Z4 _6 X
  3.     this.health -= damage;  // это.здоровье -= урон;
    2 |, z; H0 [, i7 X' r3 H
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    ) W! i: D' U; F( v: [
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    * U  |/ F/ o; b3 o- v, h1 V
  6.     4 ]3 F+ C  P6 M
  7.     // Проверка на смерть NPC
    ! N' e8 z3 j' g+ ?& v- q" C
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)1 h: l5 J& c7 n
  9.         this.die();  // это.умереть();
    ' L2 C8 U2 s8 o
  10.     }
    2 @# d8 M9 {! i0 f1 z3 p5 s4 T
  11. }5 Z& O. L( [; ]0 N# }( d
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).- I: E: E" j' x9 P
Пример взаимодействия (с переводом)7 E( g! Q8 X4 e$ ?3 g
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");6 c  u' g( v+ z  Y) w
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    # t5 b7 A, w6 L# l* x* C
  3. 1 g1 O: @6 u) R1 m: c. g
  4. // Игрок атакует гоблина
    ! `  q5 c/ ^% Y& M# r
  5. player.attack(goblin);  // игрок.атаковать(гоблин);% Y+ }# w& W) {, o, D4 C' h7 Q
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
  i. ^, Y- C( w+ Z2 c- h
# p) R7 j: y$ _9 B0 F& W
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.. x0 u3 a! ?4 I; \
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
: x/ {* H3 t" A) S$ p: R3 o6 L& r4 J1 o
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
% A- g4 O) v! Q& r& wПривет, Астралия! Огромное спасибо за твои разъяснения ...

2 Q  N6 c" |4 j$ c& a+ H4 WОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.6 i; m  F0 t! `1 I1 f8 _: w
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример) s9 y; o+ r+ `) C
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    + y: F$ z5 f# F0 C& [  m$ A8 t. |
% r( I8 K# H4 U: [4 l# Z
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    3 ?; Y4 W) H  |$ u) _$ x
  2.     // Логика взаимодействия игрока с NPC
    - D0 I+ B8 p- z. S
  3. }
    * p2 O$ F( ^/ p  C) `
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:$ ~" C. e& o4 X$ I1 v) F0 }
; f2 `$ F- {( ^
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)# W5 }$ z' j1 Z/ l  F5 {! V
  2.     // Логика перемещения NPC
    6 m  N: [3 c  b+ R
  3. }; d. O& v- [/ H: K3 s: z6 X6 \
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    $ ?8 E6 ~* s. d$ q. Y* O
! I' t0 K) o5 z4 Q" l& i% J
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример2 @. b5 c4 b* K0 U
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    ( O9 @1 e5 n; d4 V8 G, c
  2.     this.health -= damage;  // NPC теряет здоровье2 s0 H2 y3 x1 I6 H4 e3 }
  3.    
    ; L+ S0 A$ `, A& ?9 Z: Y+ C* C
  4.     if (this.health <= 0) {3 p: ^& _( O1 t4 V9 W* w4 {
  5.         die();  // Если здоровье упало до 0, NPC умирает; a# }! d7 Z0 {) e
  6.     }
    ) j7 [9 u7 L* u/ Z: s7 m  E7 B7 E6 Z
  7. }3 g$ `% k$ ]3 a3 E1 y: ]
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    : R" @8 ~2 s  m5 v* r6 V

$ g/ _7 [4 g- i5 T
  1. public void die() {  // public void умереть()
    ) o5 P0 ^' i5 T1 ?( v4 y6 n1 Q' J# t
  2.     // Логика смерти NPC
      v* G) \1 P4 g' E$ Q5 ]) B7 f
  3. }
    2 {6 W' @$ t' R( |
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:/ r: i& _/ X9 b# L9 E( e% m

0 h: N# O) e/ H, m" P+ Y: S+ s+ e8 H& d+ e) w6 n1 x
  1. public boolean isDead() {  // public boolean мертв()9 d1 o- y  }! `1 x
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    , o+ J- |/ x9 O
  3. }
      M% o" M* \4 T# Z& g
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    - f4 K7 [# X; L

% h7 o0 V5 ^. C0 b& ?& R1 f- L
  1. public void heal(int amount) {  // public void вылечить(int количество)' ?- \# ^  w0 F" s- z7 d# p  o
  2.     this.health += amount;  // Увеличиваем здоровье: S6 ^" ]6 Q  ?
  3.     / V! u( N3 ~, ^% ]
  4.     if (this.health > this.maxHealth) {
    + X- P4 Z. z$ X
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального8 ~  W6 X; K0 f8 ]; K( X
  6.     }- M: c! K7 p% K: O- s' {2 L: Y
  7. }
    7 V  s4 G' V+ T' m* g8 C: x
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    / C3 o5 _7 Y8 t
/ T; P) v. F. U: `  b* s
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)1 h' x" M9 g- a" l
  2.     // Логика применения скилла NPC. A0 e3 p" w+ U
  3. }
    ( l& ^3 u' @% P" F1 ~0 L
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
      f4 ?$ Y6 N8 b8 C* b. C7 g
" z/ y: G1 V" M' U5 q

  1. + C' m* r7 W: X8 Q* G$ {3 I  ~* B
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    . R2 t- ?/ V/ p( |+ B9 d
  3.     // Логика взаимодействия с NPC
    . `( m& `* t! ~# V, q
  4. }
    " j, w9 }% n( l, X1 Q2 x: R; ~8 \
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:& d6 e7 V: ?& d6 @2 N" s
. [8 H' f4 P" m' {& ^; d8 }8 b# V5 |
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    1 W$ R, C$ Q7 c
  2.     // Логика открытия окна диалога$ b3 d1 J- e" ^% y
  3. }
    ( y. F1 z6 [! ^$ G
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
9 m2 E. Y( u+ L6 TЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
1 b8 u! k2 G' J4 |2 o6 Y4 k3 }6 `* P. x5 u! {, U
3 x: K& E  @# L% z, s6 `6 ^3 ~! A( h
" ?! K. l7 ~# u9 b
9 V' S; T4 l' u+ {7 e- G8 H
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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