Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
& M/ B2 w' C- o" t7 E" B
: L' h& j' z+ K1 }: _7 e& n
& T( Q$ h! b7 j6 m% j/ @8 tШаг 1: Введение в классы и методы на примере L2j_Mobius0 i2 ~7 `: O1 X
С статьёй можно ознакомится в разделе Обучение > Читать, `/ D- o9 k* l; z% R$ C
7 I* z* U* G/ w
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.! D. Q0 Y. G! }* a8 W. T
1 w/ \2 B) a/ [$ {! @' g; k( G
Обсуждаем:' V6 x, ~8 M" u3 w% ?
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    ! o" d5 ]! O9 t' @' E$ R1 `
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!. C& w/ C+ n6 k( F
2 y9 u# c& e# d/ d, F; N


( q4 M$ m3 o( v: Y# yИ помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!9 m" X% J( H" b, O: \! K6 \

* T& E1 @( Z# M0 X
+ O3 J' {+ g0 p/ Q8 e0 x  z) N  O+ g& d  f9 p8 G$ G" |+ J( @; b

* W8 w1 k8 o+ K2 d
- P- ~$ x" l+ I; q

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?7 |$ o1 J8 g4 {1 X$ d$ q
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
7 F+ e7 D' r% Q$ C) [Почему мы используем ключевое слово this для ссылки на п ...

3 Z" R: K7 r+ H! J9 W1 d0 xКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.  B6 N' ~! }/ \8 ?/ K4 f! Y" c
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
+ @+ s, f6 m4 z* K( c; e9 Z3 e% J- b; q' \
Вот пример:6 J1 o& e6 p# x  I  t
  1. public class Player {
    / Y7 i7 v! N- w: W
  2.     private String name;' e  V* A- e% n+ Y& ?( e; I) k5 C
  3. # H9 c. N1 f# z3 [
  4.     // Конструктор
    2 w  ]% T; I6 H! j" U) W
  5.     public Player(String name) {
    ! X& B9 B% d8 T9 f/ B9 P
  6.         this.name = name; // Используем this для указания на поле класса2 s$ F/ C& r+ g* e1 r+ y
  7.     }
    . J8 [* p; v# i
  8. , u5 s; T# |! Y9 Z1 T: }
  9.     // Геттер для имени
    ' D3 L9 `, d) \+ T/ f/ v2 B
  10.     public String getName() {
    5 g& S5 ?  w' q4 y$ f2 U
  11.         return this.name; // Используем this для обращения к полю класса
    : N  C, w& O. m: K# i# E
  12.     }) ?! r( x5 f" E* n- x
  13. }
    4 L3 Z" C7 s, E5 [, }
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.7 t4 {. ]8 I; w2 S2 K0 Y
; v' n# q- Z! y/ U& B
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.0 w  l" p5 I. v% R- Z0 M5 ]

" [/ I, l2 X: X2 o! jПример передачи this:
0 D) i0 O4 ]2 S1 k( g8 ~
  1. public class Game {
    , q6 x( p/ N8 }  R. y5 ^
  2.     public void start(Player player) {
    2 ^) O$ @" U4 B# b
  3.         System.out.println("Игра началась с игроком: " + player.getName());* i) C% g2 B" p
  4.     }. K2 t+ R4 A( g# I6 U: }  p* V
  5. }. V# D  o/ m  {& r% I6 Z
  6. 1 J4 ?. R( X: K% u/ v+ Q
  7. public class Player {
    ! d+ z: i" i, e0 I
  8.     private String name;
    - ?  Y8 k# T- H
  9. # M, |! F1 P  s) C# j) t5 u
  10.     public Player(String name) {
    : C; p8 o' ]3 v2 p) g) W
  11.         this.name = name;& d3 c( s: h( z$ X% T
  12.     }
    : r+ ^, q  \% d( f

  13.   o! Q3 i# m, h( ?
  14.     public void joinGame(Game game) {
    / \0 M1 ]7 o6 |
  15.         game.start(this); // Передаем текущий объект Player
    % a: [6 H% X" g- P* w3 T
  16.     }. T0 Q2 w2 l+ P# f" G/ F; W) [
  17. }7 ~: q  }0 ?$ L' m2 r
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
+ X. G7 B8 ], J

7 {3 v: l4 ?/ HПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
2 v$ j. I& [; D  T. d2 Q: g9 F
. z- t8 a# h1 s, l* t; B1 P
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! 0 I/ N* E$ ]% U* z- d) u" [' M
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
: ?- F6 a7 l& b
Mike123 опубликовал в 2024-10-17 20:05
, d+ B; z* K% K9 j8 vДобрый день! 8 v3 n( U, D, |! c8 t
Как создаются и вызываются методы в Java? Мо ...
4 t# w" J+ l( `9 |: C
Привет, Mike 123! ?. @, }. A5 Z% _. Z* N# V2 [
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.$ ~& \3 t" x4 y' V" s- t
' t& f  S3 [# Z8 j# |
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.' o3 ~: T. [7 m' }
' ]' W% m0 ?1 K- d/ w! f/ Q; T# Z

. v% B6 A& H- ?: Q( Z, ]Как создаются методы в Java?+ X/ y0 h: x4 g5 u
- Y: t9 `( q1 R) f
Методы в Java создаются внутри классов. Вот базовый шаблон метода:
- d- Y; h8 J" R
! w! [3 O- S4 z/ v, J0 z
  1. public returnType methodName(parameters) {
    2 w: t, w& T! d3 M& g* V
  2.     // код метода, r& \; }6 }" s4 E: n7 n
  3.     return value;
    3 p  {- s$ p& @5 o9 N$ q9 I& v
  4. }% t0 o* U, K' n2 S
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).: f  B$ z" S9 z. W  k

" G/ U% {9 c5 J( J. H8 hТеперь перейдём к примеру.
) k# J" T( {0 V# f; T" }" O6 \! E3 w/ U$ I8 V% A( @8 c  w8 u
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода- m5 i1 {$ ]  Q& w
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    ! w' Z$ N; c. v/ j% A2 U$ Y, h
  2.     // Вызов метода атаки NPC: T# Z& ]8 b0 p% M" @
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());/ y. ~! t; C% x3 ^! {  O
  4. }0 W" n2 o; u. M6 \& i9 v0 n
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон())., e$ l5 o# w6 E9 y6 M
4 n2 \0 _' }8 m6 Y2 c& F* b. m6 z6 ^

* T% ]( P- p% QКласс Npc.java — вызов метода
  t* {/ G& r" Q2 F
# J' f/ ^, r) p/ Y4 `
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)# W( p3 J& W3 L0 N4 r0 _
  2.     // Логика получения урона NPC
    5 w9 U3 q& o! L3 B. T
  3.     this.health -= damage;  // это.здоровье -= урон;
    , x! s2 a9 ]) q2 Y
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    3 a0 w6 u& v0 u1 t- Q; h
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());2 Z4 e, A/ M* ?1 H' j
  6.    
    , n! U- a5 c$ e% a3 p3 v
  7.     // Проверка на смерть NPC
    * h; }0 G7 x6 Y& Q0 z3 F
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)* @2 q+ {' n7 E: d
  9.         this.die();  // это.умереть();
    5 D3 S- {6 G+ U0 O3 m& Y
  10.     }
    * H# a/ }" ~) d6 O8 p* j
  11. }
    . \2 V) T' P6 e+ N9 J' L7 x- T
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть)./ i; P& b: w% D# f) l
Пример взаимодействия (с переводом)1 D3 r/ B6 [' i9 B! x7 z3 G
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");! h" Y& q/ m2 N5 q0 v* w
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    ; j  v0 G1 l$ X9 h
  3. & G; B6 m( A3 D7 U0 {
  4. // Игрок атакует гоблина- V, U! e# L/ w
  5. player.attack(goblin);  // игрок.атаковать(гоблин);/ v# ~2 ^, H& J
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. * v: H7 e" y/ @7 e( V7 ]- A

2 R7 p0 z7 w; Z# S  I) d
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.; i+ A1 v7 x* _* w" Y
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
' M1 D3 Q% d& j# F# H! ?5 j/ G" H# Y) C( Q) R
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
- T/ n0 \; U7 r! V4 F2 l! [: TПривет, Астралия! Огромное спасибо за твои разъяснения ...
# Q& g  V( a0 q, K* i$ l
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
9 j5 C. D  n+ B& A1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример  G/ }' J; i7 l. x
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:  H2 |6 o' O6 v+ R4 N$ U. x
/ o0 }: _7 _9 n
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)( i9 ^5 y8 f/ V$ y2 v# }1 O$ U  X
  2.     // Логика взаимодействия игрока с NPC
    9 l- P  |5 U0 ^
  3. }1 W) J" T2 `, L; I: Z2 @4 w0 H
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    , P' M* U) o( M! r/ q8 }2 v# p' Q
" f0 S* [8 Y. K1 z' d8 z. k
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    - g! y, B0 M) Q: |2 ?& H
  2.     // Логика перемещения NPC
    # J* @; c. g9 t
  3. }' {5 P: P2 Y( q
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    % ]- x: K9 l- t9 \5 V& g
# ?( w. R- e$ a! @' U0 A: J7 R
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    . W) g' x, v* C+ X
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)2 w% \% {  |% I+ L# [1 m, A, |* b
  2.     this.health -= damage;  // NPC теряет здоровье
    $ f4 ~5 s- D. I  @( P! l
  3.     ! {2 R5 b, A- n- {' ^' w( L
  4.     if (this.health <= 0) {
    $ z0 _" o: y# `+ Z3 A
  5.         die();  // Если здоровье упало до 0, NPC умирает6 B8 J( i8 @2 ?* `  c
  6.     }5 u' Y1 p# f/ s/ R; h7 W( N" b
  7. }
    4 v9 z$ u: o1 U/ s6 G9 {
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример* l% @7 s! \" b
8 t. v3 H) t# `2 g2 O
  1. public void die() {  // public void умереть()
    , R' r) v* U- T/ L  Q2 H
  2.     // Логика смерти NPC8 @' @/ k, `9 Z6 t: T" \: W
  3. }
    5 K. |4 e7 M0 \% ~2 s
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:: V& [5 J  S5 D8 y" g

% h2 u; b4 ?# F4 @" C9 T- n; G" }+ o$ A% B2 p& n1 a8 Q
  1. public boolean isDead() {  // public boolean мертв()9 \- e2 H" U! _! y/ D. m7 g' O
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    , C, p! D6 B" d. _2 F9 C$ T9 n4 @
  3. }
    . V4 J+ ?& M  U6 S# s
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример" @: p; N# ^! P( R( O
2 k( I0 G  Y; R6 y- d+ `, N
  1. public void heal(int amount) {  // public void вылечить(int количество); D9 t! i" `' X9 c$ J  y3 p
  2.     this.health += amount;  // Увеличиваем здоровье% g9 Y3 I2 [2 \3 m6 T, V( B! `/ T
  3.     - ?8 i: w8 J& j4 S. p
  4.     if (this.health > this.maxHealth) {, l# @3 ]: D- r& |
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального  d7 f( r: F5 I1 n. U8 u' J4 @
  6.     }
    & `( r: s. `/ C( z. ^0 P
  7. }. p3 Y/ M. N$ \+ b# A0 m" o, M2 G# b
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    4 A! e7 O0 M: M, H7 ^  W! u7 P
* g4 v  n  Z6 Q; f4 H# J5 g
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    + K6 B/ S- M9 Y; V* r8 P. ^
  2.     // Логика применения скилла NPC# m: s& [+ x) x. ]- K. z
  3. }% u3 {' n9 k- \: l
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    , N9 ^( a( z7 G. t5 l# D/ V: T

8 }' _6 u& b/ F8 H
  1. : h0 S1 e. f! f
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    " G5 m3 |% ?8 H+ o
  3.     // Логика взаимодействия с NPC( z; U; C% [: W2 |) v2 P! A
  4. }
    * r5 f- o" l' v, L8 B7 n0 j1 l7 W
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    $ j: M/ U; n5 U
* A) x1 Z& I8 T0 l8 E) }0 y9 Z6 O
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок); Q% F. N+ Q6 B6 D4 Z3 s; b
  2.     // Логика открытия окна диалога
    7 H4 H* N( ]3 m
  3. }
    ' E; C9 B$ E, D3 n6 j! E
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.( v( ], m- ~8 h
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!  j9 h1 Z" ?& x9 r
  A: @0 j1 R5 b# X2 t, k5 T8 q' S

$ `. J  R& W& v  Z7 v! v9 ]" N2 g( P% r+ L
6 @; N% F& u1 C: M4 M4 ]  H
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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