Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
$ D1 U2 a) P3 X6 {. z7 T# \5 H
# h2 p6 N4 X+ A4 a
3 z' x" z8 g8 qШаг 1: Введение в классы и методы на примере L2j_Mobius
* T$ k; w2 l- p0 G( [" J/ I2 ~С статьёй можно ознакомится в разделе Обучение > Читать
1 u2 o" \6 g$ `0 S8 N7 m; o% J3 y6 v/ ^
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.) y& i+ J- P- H% u& J7 {1 p) ?
/ C6 P9 e$ K% E6 S+ C- v! K& e
Обсуждаем:
7 f; B9 d  D" a7 ~+ r' I
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.9 u- \/ \% {& g# Z
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!: x" {& S" K+ @

% Y6 P8 L1 P0 ]& @! t

! {0 m, ^0 P, @% ~$ EИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!/ o8 ?( U/ k( @' E$ x2 P+ f6 U

' B, P, _% P# S9 f+ K/ Z, |+ B
2 G  p8 i1 b# R( b8 a( P  {) t# n1 P1 k7 P% {, T7 g5 J
5 m6 U7 c& X0 ^$ R* w

. b. P  J' L+ e; c% M! S( J, z

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
( E2 O2 q7 y* Z
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:177 x- g1 Z" v# Z, R7 q) s
Почему мы используем ключевое слово this для ссылки на п ...

( e3 P# O7 Q9 R3 H0 u) t8 i. EКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
* w, |, W( `3 N6 v6 XПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
2 Y; R1 M" E( o  b( E# I! X6 j" n% s( L# X- M0 y
Вот пример:, T2 v1 A# p# S. O
  1. public class Player {
    , r0 L' n2 }  S1 S
  2.     private String name;* Y; [5 y4 i. v0 M

  3. 5 F& J/ X- a4 }
  4.     // Конструктор
    . W8 e3 u, _) F, {
  5.     public Player(String name) {
    0 o  u  N; e5 {9 y1 l0 e4 E
  6.         this.name = name; // Используем this для указания на поле класса% U" D9 M1 a: y4 y( S! s# Z
  7.     }/ r9 q: Q6 y9 E: v! o: q. h2 \4 |3 z

  8.   G: B. U* j- G: ~- e* P  F
  9.     // Геттер для имени; \4 M, G  y$ u* f; z- u4 I
  10.     public String getName() {
    & F  H+ ?0 K' e: p7 i) L
  11.         return this.name; // Используем this для обращения к полю класса
      K- P( i/ |7 q! m+ P  K
  12.     }
    , f" c6 d5 n2 V. J' M
  13. }: n; N" n8 ?9 ?9 ^( |$ x: g+ S
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
) w8 ^8 z0 Z! d- c! Y0 k8 e/ Q; }' `4 U6 j. D4 a. x% Y
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.7 }7 {, K9 J- O+ s2 |
' d4 u6 p9 x* `  N0 F) X9 Z- |
Пример передачи this:
, s- o) [3 z  q! ]; Y; f; f% v
  1. public class Game {
    7 _" G, B" Z2 l" O/ t8 q
  2.     public void start(Player player) {+ m6 B. Y2 F! D& e0 {$ X  X+ }
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    1 w9 D& N) K5 m: X& l0 w3 Q
  4.     }
    $ P- U$ ?' Z5 F! ?: G( p7 c, I. B
  5. }
    3 H! I" f" X0 f5 Y- j9 u, G! b

  6. " t! }% I+ D9 N4 j8 u+ {
  7. public class Player {
    6 k: D5 b. [# i6 A# f4 ~
  8.     private String name;% S& d; [  w. H

  9. 3 |! ~8 m$ o8 o: E4 u
  10.     public Player(String name) {
    2 _5 N; d$ J; F9 z9 o" n
  11.         this.name = name;" ^( M: o2 M" S3 N. L2 V
  12.     }  K/ l% ]8 f3 ?* \, S& L/ B
  13.   w0 }* \! Z9 d8 w
  14.     public void joinGame(Game game) {
    : @) T* p! H8 O+ w' I) ~0 s  b/ o
  15.         game.start(this); // Передаем текущий объект Player
    # x8 s! l4 Q% M
  16.     }# v5 b+ z+ x5 w; n( z: e
  17. }0 {6 l( U$ t8 L( p% f  ]4 B
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.8 q) u. ?+ Q+ e1 {- E


. B! l0 m9 s3 e5 NПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
6 {* m; W& p& x' {1 o# {2 w  b. y9 Q$ G0 K
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
3 B6 W& ^# D& D9 ?# T1 r- aКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
1 ?5 ~2 C5 n. `8 n
Mike123 опубликовал в 2024-10-17 20:05, d, F7 I2 K& B. X  r6 _. W
Добрый день! : Y! s. c2 a6 r* P4 ]- ]
Как создаются и вызываются методы в Java? Мо ...

$ y9 w' M4 y2 A/ M- O2 J# k+ A+ V0 LПривет, Mike 123! ?# H& B6 y3 N8 b
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
3 |3 b7 x* d0 r- A1 ]( S9 l8 q! Z- g, E; O0 x* h
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
' o, n$ ?# G# ?1 E
2 c+ n! C7 N" n6 c0 T2 H0 F/ d# c" M) o4 o: R, J" w- j+ g( P# R1 o
Как создаются методы в Java?
) @9 C5 E3 q  M- n5 E! Q0 ?/ ^3 u3 e" C' A$ j- d5 B$ m/ i( P) a
Методы в Java создаются внутри классов. Вот базовый шаблон метода:# C% b6 s5 k: O0 f

3 X9 V% O0 M7 b' U+ O% t- n
  1. public returnType methodName(parameters) {$ ~* w7 r' L% t# o  j* x
  2.     // код метода% J5 |* I' O7 J0 y2 P
  3.     return value;; ^" E" ]# I& ?8 Z1 Q# G
  4. }& Y) o5 o* L. r& W
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    . N. r3 }7 P) F8 y
( N. Z' H7 E  e9 j  M" P* y% H
Теперь перейдём к примеру.
! A- }  ~% `* q6 f
' k* F: E( L" @7 e" iПример на основе L2J_Mobius с переводомКласс Player.java — создание метода$ A8 Z, f! B2 j4 v
  1. public void attack(Npc target) {  // public void атака(Npc цель)9 R" E4 S  M5 U& S. ^! |+ g
  2.     // Вызов метода атаки NPC
    2 H# x* X" `) O1 g, T, X; C  ^
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    $ h" n4 P% {* {- z7 Z$ J
  4. }
    7 V% e( w& c; o4 b9 \
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
  b1 A& U9 J' O1 g  W' q" U
' j. {+ M: ]1 _  V! \8 }
) W( V$ O+ ^1 t, E/ j8 q) `2 _Класс Npc.java — вызов метода
3 J& g" t; x* v5 Q6 b5 f
% q& }. k, |4 A6 I/ e
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    2 n: b5 e; O5 _1 \( h
  2.     // Логика получения урона NPC/ U4 m! C8 E: r1 L4 y
  3.     this.health -= damage;  // это.здоровье -= урон;
    ' q, h4 i0 ^5 n+ r/ G& p7 [& K% C
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  ! n8 F2 M& `. C6 F. y: Y
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());  B" m+ E) u7 t2 [
  6.     9 W6 w! W- }! \/ M5 b* r
  7.     // Проверка на смерть NPC! h4 o; @+ |- r1 I
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0), D/ A/ C" N$ S2 P0 t# m
  9.         this.die();  // это.умереть();) P3 _# L( k; w  r, z1 Z
  10.     }2 I& k! I7 j: Q- N
  11. }5 w- ^2 F6 x$ j3 e( U
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).5 D+ n  s* T: h9 d$ q
Пример взаимодействия (с переводом)
; f% f% T4 y( e) m4 l
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");7 q8 U% H& k( Y" R9 N
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");0 I7 y. [# a; u* X
  3. 4 D' O# L8 I/ j8 b6 h
  4. // Игрок атакует гоблина
    5 `0 i( R5 A% u! ?4 d
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    7 O! B3 M& D7 B
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 4 o" q0 _6 n) u; u' ~" |# M% k

, u# w& {* B/ V( S9 W
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
1 B, f$ m4 n( T9 S$ h1 k% K* HУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
+ Q" J+ O4 W$ Y2 R
% Y( s6 v0 Y) n5 R$ Z
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:306 F2 Y  s( {. N' V0 Y5 S
Привет, Астралия! Огромное спасибо за твои разъяснения ...
( j3 \3 k1 m7 G7 e( z( v5 q
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
5 P0 R# r, k1 y4 p) s1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    # ?; V8 c- N- m( v, a- I
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:3 t2 [# W3 E) T7 M( _2 J

1 p1 E% ?, ~7 i- {* i: L: G4 @1 s
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)2 S8 {0 j/ F( \3 Q
  2.     // Логика взаимодействия игрока с NPC
    ( O  U" F7 o, P0 z
  3. }
    + t% \6 d1 [' _7 V4 R
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    ) X) p  N+ q7 {- N/ u% F
8 O# Z; j- J" \+ r  t. L
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)1 f$ @+ w8 `3 S6 ]' Y; K
  2.     // Логика перемещения NPC2 x3 F8 o9 n; G4 @) H
  3. }
    : O; s5 u. T$ |  g7 b" e& g
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:$ m. h; i4 C7 @" j( F; Q# l

  j0 o5 i" j! J
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    : \# E! b8 g5 F  v/ w; X, F
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    : @! R& e7 Z& A' p* {! v
  2.     this.health -= damage;  // NPC теряет здоровье
    % E. t: \% K: Q, M" d$ N! F* W8 l
  3.    
    2 O4 z1 R+ g: R' X) R5 V6 ^
  4.     if (this.health <= 0) {
    & D0 C( {3 i, g# q
  5.         die();  // Если здоровье упало до 0, NPC умирает
    1 g( H2 @$ @7 b9 V: ~* O
  6.     }
    ) e# l5 `. W; g6 F) S
  7. }
    6 b0 J8 Z" d8 j% N
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример1 n( m# u" c4 J; C7 T# J
6 Q8 h9 B4 F8 u7 ^" X: o& e
  1. public void die() {  // public void умереть()" K/ M' D6 n' c: _
  2.     // Логика смерти NPC
    ' r. ]# [. m# }5 o
  3. }8 r/ o5 c; q) T8 ?% b' R
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    9 R7 U/ z" @) C8 S# R8 O
! W, q' g4 d1 R9 W" I( P5 l+ k
! z% l+ l- j0 l) s8 {6 `/ {1 p1 X
  1. public boolean isDead() {  // public boolean мертв()# K$ y' ~" R' l) D) U
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 00 \* L6 K$ K7 B( S# H
  3. }( `& d1 t1 y2 z; a
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    6 Y& `3 S7 ^1 P0 f# Z1 L
! r  x: Y/ h$ T" q2 f
  1. public void heal(int amount) {  // public void вылечить(int количество)5 u8 q6 `. f, p6 ]4 \3 j
  2.     this.health += amount;  // Увеличиваем здоровье
    ' ]/ o% p6 A9 \" K
  3.    
    : p- E. d& ^# O$ D4 R' p
  4.     if (this.health > this.maxHealth) {
    + x  P- m. {, J
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального2 l% A! y' a* y, f
  6.     }
    ; y3 g# b; t4 S
  7. }
      D" h9 p3 Y  m. t6 y
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:0 B" {. p/ t: Y: f8 ?) t) S
& @3 S3 f( s1 C0 `) ]& t: \
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)) k# x% ^2 H0 J4 F
  2.     // Логика применения скилла NPC
    ; N$ M3 X1 T# Q6 q% Y. n* _
  3. }/ v  z, \" I+ L2 T
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:; t6 M$ e6 i7 S2 {5 @8 d

) B6 s7 ]; z, U+ ~1 X

  1. / [) _. A: Z& O2 r6 P# i# l2 Z
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    : V$ x* A9 \; i% U. v
  3.     // Логика взаимодействия с NPC: R/ |$ K5 O3 i) N5 I
  4. }3 t3 i; C/ C& I
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:. v  ~$ f, R9 d
! L; {, ?  `8 X! ?1 A. o, {
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    8 f4 I' V- g" W, P! u- S: y3 k+ |! V
  2.     // Логика открытия окна диалога- O) {3 j' k( s# o" P1 V
  3. }
    * ~$ H; I0 L- W$ R! J4 m. n- A' e
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.2 e0 v, G# u0 P
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!; i! Q& n5 k0 ^4 D

- [' [4 r: y/ r/ @2 ]- M: q; u2 ~
! P! a! b- p+ k1 P8 G: b' K  H5 T6 p  H4 r

9 m% a. J% D" y# H
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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