Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
( F9 X3 m; P7 M$ g) N; H" @3 G+ ]
% h# ?2 v# P; X. H4 y; R. ?* i4 x) H6 W2 @! R; m
Шаг 1: Введение в классы и методы на примере L2j_Mobius
+ i; B; K! j$ U( EС статьёй можно ознакомится в разделе Обучение > Читать$ f4 {, Q: x" z, Q. U
8 Z9 R3 b7 A! Z, I: @
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
9 q! s% }5 q: Z: N4 p/ E- J" W( n  b* h/ d" ]) D2 k+ `
Обсуждаем:# b7 {  s+ \4 b
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.( `( }- N6 V' x
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
! G5 ]! {0 Z* I6 W5 @- I- ]
% i  V! N- N, x
1 c" S+ ]$ [& i  o% O
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
1 M& a& |; N1 ~. `+ ]; I1 h5 N
/ j# _4 [2 M" [( ~! P0 b+ y" [" T9 a; M$ i. r, z6 \; s* i

3 b* J! g6 ]3 {
# A* Q9 f* R; S4 t- j2 u7 G1 Q6 _
7 ~, M& w5 L5 y, z7 E" n

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
& B+ t/ t! s3 n* Q  ~# ?& ~: n. p
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
# t  R% A$ @# E& ~+ [9 WПочему мы используем ключевое слово this для ссылки на п ...
) C  C3 C$ V  ?9 j; v7 g; ~5 G
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
3 M/ H# R0 u, X' Z4 E1 T. OПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
, g0 w. g# D& A( d6 G# A+ m8 A
Вот пример:
% v3 d  |7 q0 a# ^
  1. public class Player {# r5 e) J1 p- c3 f
  2.     private String name;
    & A/ K" c) y- z6 u, I
  3. , C& A3 c& o6 g( G) i1 A+ f5 i5 {
  4.     // Конструктор- T; W7 P6 A; T( Z
  5.     public Player(String name) {4 e3 H, w- x; {  O3 T+ M
  6.         this.name = name; // Используем this для указания на поле класса8 G; L$ W& y$ e  S
  7.     }
    / x. ?; a4 S( p: t4 G

  8. 1 ]' i: M! m; A3 U+ a( R' D
  9.     // Геттер для имени- G/ F: [, l+ Z
  10.     public String getName() {
    / w  j6 V; N5 p! [! K& F4 P) e4 N
  11.         return this.name; // Используем this для обращения к полю класса
    0 u' E! q: s1 K/ n
  12.     }% N2 T% r  f/ U2 T
  13. }( `( }8 r$ b3 `; r" O
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.+ }4 {9 n# e; j; n# ?9 M

$ }% _) W1 Q+ K: a2 eКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    , z& E3 M0 z8 c# S7 Y4 ~

& O% Z( v3 U* W- ]% UПример передачи this:- y- K! x5 q  o( \
  1. public class Game {
    5 D2 q6 o9 a/ E) R5 M. J4 K
  2.     public void start(Player player) {
    : s4 Z8 I& a$ w8 x5 T
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    4 o6 Y4 a" }$ i7 M6 L1 L
  4.     }
    7 w9 G5 G0 h& H; X7 e" H4 {: Q1 l
  5. }
    / S1 @& O; g: h& u- V

  6. 6 G% P- ~5 u  |
  7. public class Player {
    9 t8 U, p2 H, `
  8.     private String name;& Z  X! K% V6 v+ J) a6 n" [: f
  9. + m6 L! W/ h9 ?3 G! W# `# o
  10.     public Player(String name) {) z# a' d( h" ^& B* k7 P- s: u. m
  11.         this.name = name;
    ! o6 `) Z, A1 T! b$ V- R
  12.     }
    5 @, _" Z% B8 v& c: c, C$ G
  13. 1 n) x- B) B: `) W
  14.     public void joinGame(Game game) {
    " \0 ]8 m" `1 B) p7 U
  15.         game.start(this); // Передаем текущий объект Player
    9 ~/ b% F6 y7 ~# j; K$ e& S. i
  16.     }
    2 H9 H) n3 c/ o' E: r
  17. }
    4 v" m# T: @2 N! ?# I% @
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.* x5 z; P, K% C' @


* q" i5 A) F) u; s: [3 A( }/ |Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
3 B( D. C! ?* e# E6 ^' z; L6 e. u* k
5 B( G2 g& x& Z! E
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! 6 u7 I. ^5 h' B! \
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
4 F0 }+ K/ |/ I+ H2 g0 t
Mike123 опубликовал в 2024-10-17 20:05! H7 w* O" S' T+ F
Добрый день! 1 u1 g5 U* P9 _8 T( J
Как создаются и вызываются методы в Java? Мо ...

- J. j! R5 {3 f! Y9 wПривет, Mike 123! ?2 ~+ i& C& ~3 n
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.5 q: Q+ h! t! m

9 W' R% @' h$ A/ @# [4 p% F: O: HДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
  ^: ~5 ^8 C& x3 R
) N5 h8 w2 `4 j' M/ W! ^0 X- _, S4 |/ l' r2 G  r8 y
Как создаются методы в Java?. B% B& w, G# M* {2 q/ u# |3 `
2 G$ f2 Q) l8 T$ ]4 A# L' I
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
# F7 f  N) b3 q8 \$ s1 ~7 O) V7 w( K7 x- @5 }% P7 \! s
  1. public returnType methodName(parameters) {8 V: P$ T# H! m9 Q
  2.     // код метода
    0 A! D" ?- T8 D' f% Y$ [
  3.     return value;- x1 b( K, _0 b9 u
  4. }
    5 z* O* h0 W; a1 D) I9 a% k! U
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).1 R6 P7 ?; s% a" x  z! @

6 B# z/ ]% R3 g6 ^Теперь перейдём к примеру.' `# u8 X/ G- a# s- ?2 Z6 M6 i/ r

- K7 y7 X# S; b: K/ U: ]( s; kПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
) a- S) m( }0 b% F4 V# \
  1. public void attack(Npc target) {  // public void атака(Npc цель)
      R. d  H- |  C+ D' _- \
  2.     // Вызов метода атаки NPC9 Y! m/ [/ E* z# B
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    . e# U9 L- Z  P3 n. o( b; z- ?$ K
  4. }
    2 p' V1 `* d3 m2 a) i2 z( }: [
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).; V7 }2 L4 a" X1 m

% h+ t4 W  P' B0 Q7 S% X( [/ a% b9 E9 b7 n7 ]7 u5 T& c$ U
Класс Npc.java — вызов метода5 `' A% ~$ e5 a$ ^) w

( E# H! p" {; {
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)& _" P4 _3 f! j. i6 ~
  2.     // Логика получения урона NPC
    - V( v$ ?, N6 _# [4 a( V
  3.     this.health -= damage;  // это.здоровье -= урон;2 I6 r- j! W  H6 g: w
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    8 g( n1 E' ^( U9 p* j6 O
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    6 t/ ~/ L9 p$ r# i1 l; @% E: e2 \& {
  6.    
    - u# s- J. T. I% n1 N6 l9 K# W
  7.     // Проверка на смерть NPC
    " P  n% t& S$ R' \) A- E! z
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    ! ^" `: Y# I% n( J0 d/ \
  9.         this.die();  // это.умереть();
    2 L2 k, X- K' G' n4 i8 ~
  10.     }
    * x2 r9 z4 w! n9 [+ d5 l
  11. }1 P' h8 [. T: @1 M# e
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть)." W1 P' d2 t# F) m( K7 @( S" x
Пример взаимодействия (с переводом)
+ s9 o6 ~, c+ l2 }
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    5 ?  }6 _9 K) B1 t
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    # j: t; b1 U0 h  ?* k/ B

  3. 1 {% `( S* T2 v' h# c' }% [
  4. // Игрок атакует гоблина
    ' R+ X1 _  l: u3 A9 N
  5. player.attack(goblin);  // игрок.атаковать(гоблин);4 _) z( D8 s2 p( ?8 J
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
& Y/ m! ]/ {6 R1 ?( u6 k# b" T9 \: A7 i8 m
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
$ I7 ]' Z6 z3 {3 T7 UУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!( g) i5 d/ F5 Q! d" c

1 ^, V& s  h7 x2 N
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
( i0 `+ M# ~( u1 k7 kПривет, Астралия! Огромное спасибо за твои разъяснения ...

5 C& y: ?- @! P) T& E) G. q2 oОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
& z  d( V: ?8 Z: `1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример9 A; m- o1 t, j0 M3 O, S
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:  i" I, \5 ^; H- i
# Q. A$ s) T& Y6 I
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    % m* N8 u( A* K, J/ K
  2.     // Логика взаимодействия игрока с NPC
    3 j  _2 ?9 j1 f8 _6 A
  3. }
    8 j$ ?5 `. ?% I( P
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:) Q% `4 |1 _/ i+ L4 y9 |

! K2 x+ a+ a, j/ G) j$ U
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)8 N) \. \  j7 |- C, V) o
  2.     // Логика перемещения NPC
    $ C. n' X+ Q3 I+ z& f1 M
  3. }
    3 y: u7 T) R: `# q
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    + W) {/ r. K  h8 n
/ a3 e* k+ H* U2 R& a4 `6 I
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    2 c( @! q( O/ X# q5 ~) V
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    9 \9 h  L2 L* G% z5 h
  2.     this.health -= damage;  // NPC теряет здоровье
    5 }8 v2 o8 {2 Q) r
  3.     ; U+ z6 j6 g6 M  l2 E
  4.     if (this.health <= 0) {
    . h+ S# C; A& w0 p
  5.         die();  // Если здоровье упало до 0, NPC умирает" v3 H8 [* t5 _, h3 x
  6.     }
    . Q3 M) `+ B1 \! c
  7. }; \" S2 v0 J' ?  \% M: [1 f$ R
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    % P9 D; b& t% `
* T! Z3 `0 E5 {- w" o! L
  1. public void die() {  // public void умереть()
    ! F8 H4 d2 K3 y* k+ h
  2.     // Логика смерти NPC; _0 ]6 J* E) \$ u/ a/ {
  3. }$ v! l$ q& j2 [- ?
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:5 W( j; y4 P4 G; S$ [
1 e8 S8 q9 U1 @) C" W" O/ n

/ y8 T1 B! m8 C' |$ X) A/ |7 Y
  1. public boolean isDead() {  // public boolean мертв()0 X2 Y, U7 V8 z& U* v3 @' N+ a
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 01 b- g  T- C8 ?; ?
  3. }
    $ [  d7 G3 A' M4 |2 X& K7 y; I+ c0 W
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    ! y6 W! P4 F+ t( C  h) o
' `' U" [1 w8 W; }- z3 t5 g. F
  1. public void heal(int amount) {  // public void вылечить(int количество)
    / B/ e, M$ {, Z+ ^( g' j* A
  2.     this.health += amount;  // Увеличиваем здоровье# W0 B4 D5 @, D; u, ]* Y3 g
  3.    
    ! d! d) ~4 y0 ^* H. q; v+ W4 a
  4.     if (this.health > this.maxHealth) {
    + {9 q. o; X+ q- Y6 J! B9 W
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    + Z4 d/ k7 w$ }
  6.     }
    0 _9 d, Y# O/ H* y' y: d
  7. }% F' v4 t# v7 J0 p$ k
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    2 k  m) X- ^/ o
, L1 A! W; }' |5 p- p1 n6 N: G
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    + q3 L% o; }( W" H
  2.     // Логика применения скилла NPC
      U, j% Y/ A/ z5 m7 h9 X) U; m
  3. }
    8 g4 [9 T1 J/ j. j: y. x  |/ L
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    - Y- B% g- |; d9 E& a! T! j

+ R( K) ?: o  e6 s# w  C8 a. ]2 h
  1. 4 _) R8 T9 r" M. f7 d
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)8 z8 ~* I( s$ Z+ b. Q+ W& c2 Q9 \+ C
  3.     // Логика взаимодействия с NPC3 X4 d/ r2 R+ _; @' c7 N5 I
  4. }
    ( z6 Z# v/ \+ @7 ?. t% T+ O
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
      f( S- E( y& K6 w& z) J/ B/ W
' u. s% @3 \7 |- X
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)* x( F! {, y2 X' G
  2.     // Логика открытия окна диалога
    & V% j$ c; }- Q4 @" F
  3. }( R) j$ L# v2 e: G& b) ]
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
  u) e7 a0 J+ v) a: UЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
  I8 c0 \0 O) h( U% N" t- H2 Z
% N  p* ]: @" P# D/ v$ y1 c4 x
* b5 x* g3 F& o! T! l4 u" e! _( p) z( e( V" E
/ S# f) n; v5 ~7 c! j8 M
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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