Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
* p+ t4 g  s5 Y! Y" |2 h3 @
0 j6 s, `3 Y/ Q# T% i6 U2 l5 D2 a4 V* m
Шаг 1: Введение в классы и методы на примере L2j_Mobius
$ @/ _4 M' ?. \+ V* n& ^! D' cС статьёй можно ознакомится в разделе Обучение > Читать
& i* [& V7 k5 ?3 T/ I$ ?' o' ^% b0 |1 s4 q9 k
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
& m. Y, j" z" x5 r( y, S
. d' q) E- \( y7 J* ~3 }Обсуждаем:
1 n* H9 r% X3 a7 x% y( K
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.' W8 Q: l8 Y( R; L& O! J
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
, u9 n2 w4 [- j$ x' u5 [  ?! g: A1 v) n3 j

% A& m1 C9 H, K# W0 W  I( |- j4 R
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!" w( s+ H1 a4 Y8 c' h2 A
% t/ f' \4 A  S( [& p$ W8 L5 z

* j! l6 D2 D' e- S" h& w2 \: W$ C: u2 _4 T1 o& j% D- H
; r2 o# O9 W' N9 p
% F" `0 t$ i1 m' R* s! L

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?) j; z" G( Q1 [  C( g& t0 I
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17+ k! Y3 Q+ Q2 I# s3 I4 I
Почему мы используем ключевое слово this для ссылки на п ...
  ^, f$ W5 D6 ]: h/ F5 ^6 z9 s
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.- p2 K8 [4 M  [' Y/ W9 |
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.$ h3 z! d: H9 |: p7 z( y6 L
. m* g1 {4 }/ G. t% _
Вот пример:
" `8 n* }; B. H1 }( k
  1. public class Player {3 b7 G2 U. x$ o
  2.     private String name;1 s, g1 K6 V. U% E, {. T5 Z

  3. - c( G7 g$ }! u
  4.     // Конструктор0 M3 O: k5 V6 y* b. {* ~% a
  5.     public Player(String name) {) y8 M4 z- E6 M
  6.         this.name = name; // Используем this для указания на поле класса" u6 t4 m! o8 w0 e) ]
  7.     }8 A7 d6 R& F. K, S$ [

  8. 0 a# W' N8 `* A
  9.     // Геттер для имени) M. H: v5 x. ^
  10.     public String getName() {9 }* ?2 d; P1 m6 y# y
  11.         return this.name; // Используем this для обращения к полю класса+ O8 i) ^4 \8 a6 M
  12.     }5 v5 H3 Y& F2 H% V$ d  G
  13. }- |1 F( i* \  s0 R! a
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
  K# }% s% a& Z7 c! j$ E. X- O9 J2 x: ~( C% [
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.& e2 H# L+ J1 j7 s) l$ o3 Z" W6 K

/ h( g: f% q% G/ UПример передачи this:6 W" ?, g- \( Y5 j- m7 \  u; `
  1. public class Game {" v  w! W1 ]5 L/ b. g# `) f
  2.     public void start(Player player) {
    " o" a; ?8 q8 Q) q& k3 D
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    - f0 b  d6 b! s
  4.     }7 F1 T! s8 ], n1 r$ v- [
  5. }) t! N/ x+ c8 I" X  @3 d4 U

  6. 3 x2 R4 Y) J3 b! ?* k" l% Z+ R* W! X/ d
  7. public class Player {9 d5 J5 e2 F& Z% N
  8.     private String name;
    . g( I, z' Z( e( B

  9. 0 x- _( t% u' {
  10.     public Player(String name) {+ o3 A  i" i1 A) p  ?/ o. |
  11.         this.name = name;
    # n5 ^1 s% @) K+ X$ D) x
  12.     }& \- l" y3 F7 z5 [/ K

  13. 1 q4 K  y5 m! E
  14.     public void joinGame(Game game) {9 Q  E' f+ y& D7 [
  15.         game.start(this); // Передаем текущий объект Player. `8 k+ r& c( x6 ^2 q( q
  16.     }& _! ~/ X' E# S1 j& I' u9 i1 k7 Y
  17. }
    4 j# k! e8 H4 H& b
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.$ _$ {- [( @/ T( s: D

2 P3 K3 K, z# d5 w. \8 z) k1 Y# X
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
) E2 N  ?2 L# V* w+ d" S) i" ^$ y$ g: h
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
9 A, b4 y/ Q' k7 `( |' q/ G' D, u: cКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
8 P' l( B( r5 l# H# s" F* l/ `
Mike123 опубликовал в 2024-10-17 20:05: M! I' j: W6 S4 ]4 \- B- u
Добрый день! ) b" R0 E6 {  E" t- H/ ?% l& K
Как создаются и вызываются методы в Java? Мо ...
5 o/ k$ L) I5 j, v+ g/ Z4 z
Привет, Mike 123! ?
4 y  P( Z2 H5 y% |Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
7 d* B: G  b5 @9 G: I
- M7 A( ?7 Q& {* |( kДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией./ v0 W( |6 C/ Q$ E

$ Y; z- }) o6 t" Y  k3 d1 _0 @$ N: a, X
Как создаются методы в Java?
5 Z# `/ D& R; D; u8 g8 \' X* X7 r
9 n4 V- ^! w5 }3 |  n1 _3 oМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
( Z4 S( U3 ~' R" }
% o' ?$ e  n7 a2 A9 y
  1. public returnType methodName(parameters) {* i- n$ [, W9 o2 ^" y2 y, N
  2.     // код метода
    % N* t4 ^. d( }4 }: y! r1 i+ S
  3.     return value;5 h5 e  s. {% R& }
  4. }: \% G* `0 K: X: h2 _! S
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).; f. D) h# J  G% k
# x! M7 G3 y' H6 x# g
Теперь перейдём к примеру.
1 L3 l( F% O3 m# `" k/ q, p" L0 j( `
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода, e% j4 I) L$ Y1 Z
  1. public void attack(Npc target) {  // public void атака(Npc цель)/ Z" E/ [: F9 I; H  L5 X
  2.     // Вызов метода атаки NPC1 _, Y. s/ {* L5 h; Q, F5 @
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    9 F0 l- _5 z! t( q& b0 i  `
  4. }
    - U& G1 |  E$ h4 I
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).5 F9 W+ g1 S3 k8 ]- l1 I* m
2 {, N8 n. ]. k$ ^

* H$ ]4 u! M0 N, Y  j! |Класс Npc.java — вызов метода
: \0 D4 f% b# e% X5 u$ B- c
( ^# q+ ?) {* G+ m8 K$ z9 K
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон): d$ c9 t5 m  z0 I
  2.     // Логика получения урона NPC
    3 X! g; A( V7 V
  3.     this.health -= damage;  // это.здоровье -= урон;$ }3 ^9 R2 C& [$ r( D* A
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    # t  A* d. o" ]2 n% a
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    9 C) N- Q: p$ _0 m
  6.    
    : b$ u0 F2 I  X2 k3 S
  7.     // Проверка на смерть NPC
    5 }- V, h. l  O2 Z# m9 w
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0); m- c) p( ?7 u+ ~3 U' q8 L
  9.         this.die();  // это.умереть();9 A1 L7 z' K- \  p$ |0 i$ K. s
  10.     }
    * k) m4 ^1 A$ v/ J( r/ d; t
  11. }& s' |* c" n! I! e; _
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    : Q# E# T2 c, E( @! @' m
Пример взаимодействия (с переводом), m- h0 w' o( d. z% _1 w
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");1 A. ]  X: ^6 W% d4 ^
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    1 s9 f7 ^. d7 I% z( Q- Z

  3. 8 z. [) p0 b+ v& Y6 [
  4. // Игрок атакует гоблина
    8 u! g) y6 B3 o% x" o2 q
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    1 C. B  f, `4 i7 d( W$ _
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 1 w, ~  G3 w2 e3 W# T! \

0 c, S9 s# K; o. S) [5 r
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
) f) _& p1 L' `3 k( a6 `8 K- OУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!* k( D8 U  ?6 Z* P5 N" S
( b  C2 G: B* q9 z0 F7 Q
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
" U. R/ L" P) A9 BПривет, Астралия! Огромное спасибо за твои разъяснения ...
1 V2 J# F( D! ?# X+ u: ~
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.) ]' V5 V* y* d0 X" P1 t1 h$ E7 t
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример( _. X- ?1 d7 z+ }( H
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:4 l3 F& |- l5 e
) z/ F# v4 h# d; y' N2 `! Y
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    & \! w5 j) L6 B" u, F
  2.     // Логика взаимодействия игрока с NPC
    # a+ a% O+ Y) q' R% }! `
  3. }& K& Z, B/ r( Q9 z3 e7 T
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:3 N6 @/ l1 n! @4 i9 ]# \1 v
( i  Y3 L: u# O' R1 m
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    % x5 O9 j5 M$ f! b
  2.     // Логика перемещения NPC, B- J0 Q8 W# z' b" Y% \9 u
  3. }6 y1 k4 H' G. Z/ ?1 Z& g, P
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:# H* ~2 X* b% q' w0 B/ J5 V
. w- Z% b) y! z! D5 R" T
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример  ]) Y1 g- z$ F* H' y) l8 j4 K
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    0 `, Q8 w  g( N5 Q1 M4 \( @
  2.     this.health -= damage;  // NPC теряет здоровье
    ( D" |7 x! H9 y* Z. l4 K
  3.    
    8 j6 \% l  G" ]* a  ?, B
  4.     if (this.health <= 0) {
    # r/ j6 v3 a* O5 U
  5.         die();  // Если здоровье упало до 0, NPC умирает
    # R+ b. F& H* B$ D5 j
  6.     }
    2 e6 {5 d  n- [% Q
  7. }
    6 X3 J) ~7 \$ D
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    1 f2 P1 w) e5 a# B& ]
4 f; D5 r9 t% V6 H1 D
  1. public void die() {  // public void умереть()2 i- C9 \3 Q6 o3 H+ j* K
  2.     // Логика смерти NPC
    $ W$ X, t3 d$ V7 [8 A/ W9 c
  3. }& i1 l" E& i/ N: w
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:" l6 H! i% [8 U1 d
+ `! m5 F* |4 R4 ]3 t) `
8 _8 d1 U' c2 h) a1 `( y
  1. public boolean isDead() {  // public boolean мертв()& T! [6 L# n! U2 K# i" g
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    1 e0 C4 R" V, R5 L
  3. }
    ! q+ ^! F! n; u2 V/ V4 T( C
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример* |+ M% y0 N7 A; z: u
- F" Q2 J8 Z% p1 C4 o  U
  1. public void heal(int amount) {  // public void вылечить(int количество)- N$ t! R. ~$ C/ ~0 F
  2.     this.health += amount;  // Увеличиваем здоровье+ `* ?8 d& F( f: [6 T+ F
  3.     6 {* H9 }; w, A2 E
  4.     if (this.health > this.maxHealth) {( r7 U  N! L. q: H
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального2 Z0 m: I7 x( u
  6.     }
    ' d4 p4 T7 w1 M
  7. }4 S0 j5 I$ E; R1 @- G0 M- T
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    0 M" X5 {/ r9 Z7 C4 e! ~4 J
' \* N+ g' F4 T; U5 H. p/ A
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    / S" J* k* ]% Q) m. c4 E9 L" ]. _9 [
  2.     // Логика применения скилла NPC- h4 u. H' A! ~( q9 f
  3. }
    : F1 U# Y. {- w5 V& n7 }+ L  h
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    ) `- X6 {9 a6 v8 }. e# @; E" E  w
9 l" _  C6 @1 H/ z. A3 S7 V
  1. % E6 _9 X( T4 F- B2 V
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)" \5 i9 v7 b) q
  3.     // Логика взаимодействия с NPC3 }" B. p# K# ^, h2 Z. F$ y
  4. }
    * X2 t; C; Q. F# m/ W
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:! w% V. o. s8 p4 ^# S( O

' `/ r* T1 h( S4 c
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    " A. V- a9 _5 ^7 ^. B
  2.     // Логика открытия окна диалога' p3 S1 o, y) d- A/ y! _2 z
  3. }
    ) G  Y1 [' c; f
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
5 a: N. C1 [" V) Y) q, XЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
" F* D. e2 k9 E4 m+ L
* b# Y4 R- `( I! {2 i$ \" R" w! L- H. O

8 B2 ]7 f$ v7 d( n" F$ _4 q
! T; H8 ~# O: i0 ]' }4 L. X% K
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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