Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 " Y+ i/ A* M% `7 ~4 R

  h" e8 Y! M+ K" U/ p, ]6 j
; ?5 P+ Y( X7 l( a5 ~: j/ qШаг 1: Введение в классы и методы на примере L2j_Mobius' [3 U. r! M* V+ O: H, F$ j. ]
С статьёй можно ознакомится в разделе Обучение > Читать
; v. p5 M- K/ v$ g. r" ?% L9 x' z/ V% v2 m5 D
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
3 S2 g. q+ D1 g! r3 m  @+ @8 e  x9 F; s+ J' P9 y
Обсуждаем:
/ @0 g4 \* _  q  F- K) l) A
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.  y, K; z. J  S2 z
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
! @* O% }1 C$ q' D1 K7 b6 y& P, P; t- N" a: E( g+ _

  }; u, Q$ f% M
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
% o( z# J+ G* D$ }+ I# B
1 V6 |6 b) \! i0 D
7 u/ y+ D: o8 _* B  }- p2 z4 E! P" _  G( Y5 w$ `4 O, {

2 D1 ]. w: ?9 l$ V8 u2 N! W+ @0 M  N5 j" \

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
9 p6 o& b  h6 K; N
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17" x  Y* S  g' i3 `0 d2 v3 A, J6 {
Почему мы используем ключевое слово this для ссылки на п ...

$ G. d6 z  c( CКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.8 o; Z& o- R( e: G2 ~
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
$ U" C3 q7 d  b+ m9 q2 {7 S) V+ e8 m" v5 t% l9 h0 N
Вот пример:
0 o1 f, R2 R+ }: |; d
  1. public class Player {+ O* S3 c: j: ]/ y
  2.     private String name;7 @* X1 D7 ^8 ?- c
  3. 5 a9 S0 n' I6 D( u
  4.     // Конструктор
    - k# }8 h2 }0 v$ O/ [/ s
  5.     public Player(String name) {
    & W! S$ U+ ]1 L/ |* X( d. L: `
  6.         this.name = name; // Используем this для указания на поле класса5 k. e7 x7 Y7 t" R% s$ e& ~; K
  7.     }0 |0 q) h$ r7 \( X
  8. - Y( ~7 n' P* g& s( h
  9.     // Геттер для имени
    5 P( G$ |5 n1 Z3 o5 G. g
  10.     public String getName() {
    & t  w2 H/ o5 I5 }( w, I& `8 U
  11.         return this.name; // Используем this для обращения к полю класса
    ; y+ x$ e( m! H; h
  12.     }8 \$ w' x5 b. J  f( A
  13. }( E# V4 P+ X* q: K7 E( l8 H
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.( L3 u7 }; `4 F# ?+ H0 {3 C* p
! |% S( I- L! S8 ^! Q
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    6 G' p: f( U1 M% S7 l
4 v: b" W0 B" \( v
Пример передачи this:
( X- b6 R; C' ]  i1 H, O7 G* \
  1. public class Game {0 i) h3 @1 {3 f" @; T
  2.     public void start(Player player) {
    / s: d1 G/ n+ ~  g
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    3 H3 i$ W2 d, o/ ]8 [
  4.     }
    & @* ~% U0 c  c& B/ f
  5. }
    7 w) x$ O# w4 s2 N
  6. & o" n# _9 P/ G$ R3 x: z& }7 I
  7. public class Player {% R1 @' j* o5 U
  8.     private String name;2 z% k1 V* n+ [% l2 j# w

  9. $ L6 Y& C) t6 h/ o/ H
  10.     public Player(String name) {1 p; {& f& C5 |* J1 ~6 R
  11.         this.name = name;
    / |" ^5 D$ S# `
  12.     }
    3 a9 k! Z; g4 Y
  13.   D' M( X+ [( \9 _* L4 [
  14.     public void joinGame(Game game) {
    * {4 p4 f6 j( }$ s* R
  15.         game.start(this); // Передаем текущий объект Player+ k7 ?8 T  w! k. u
  16.     }# H) {1 k5 ~4 ^# T1 S
  17. }2 U0 y, N: W" e  x. Z$ m" c9 r# z6 l
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
/ Q, S( _) P2 j# x

$ g( V% ]8 A& u1 @. }  \, XПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
' c# d/ I  n& w* r
( U7 p* m( A$ _+ M; ?
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! ) e' `( R% d1 ]' b$ _5 j+ R1 c
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 3 A9 [# w# R& ^+ c; l
Mike123 опубликовал в 2024-10-17 20:05
3 |- Q4 C  \5 F1 n- g8 pДобрый день! 2 ^% T  V* S( n6 n$ t8 `
Как создаются и вызываются методы в Java? Мо ...
  h4 T" c- a' q' C" L8 C# {
Привет, Mike 123! ?. ]; ], z* T! l! [1 H
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.$ \' ^" Z+ \& e% }

+ r; Z# K" P, d' j, r' R; P7 z- vДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
6 q0 j: ?; ]+ ^9 f8 g% s( J% L, f: y' c; S# s
3 U9 K- b( I( i) T, E: L
Как создаются методы в Java?
5 G# t" g, M' o: O) g+ j& O# V
* M$ i- Q6 x0 y& ~9 H3 M) }9 \Методы в Java создаются внутри классов. Вот базовый шаблон метода:3 p4 }: Y2 _; o5 _+ T; Q1 L6 Y$ `
& _* q: C* H- A$ \/ j; Q+ l
  1. public returnType methodName(parameters) {
    * k4 l; b  O( o; J
  2.     // код метода$ |2 o2 ^2 m8 q3 m; {3 ^( G6 E) B# B
  3.     return value;$ U3 u1 S6 e$ C. b! E
  4. }# l8 G! W% ]5 ?
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    " C( ~& a  |5 O) Q! w+ t

) \; r0 F8 |' s$ c! C& o: ~" Z3 tТеперь перейдём к примеру.# y9 Q" G' A! i

$ r/ o* }/ T$ D' C+ d+ r2 sПример на основе L2J_Mobius с переводомКласс Player.java — создание метода
4 S  a+ D# t/ x2 @6 }
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    ( ]& V! N& J$ {2 C- V" [' G
  2.     // Вызов метода атаки NPC
    - G; j+ @# ]5 v; p& }; ]( b& A
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());. k3 X5 `: n# l  D
  4. }, h5 k# s2 B, v
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).; W9 A# [& ]+ P  X; x# y

7 ?3 K$ ?1 u" _$ t# C0 q/ r
! J, M  l1 m6 V% ]+ @$ T$ BКласс Npc.java — вызов метода
9 G: E% D" h1 ^  K$ Z" O$ H6 i/ T6 _+ _5 s
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
      @. I9 t' G9 @0 h# x
  2.     // Логика получения урона NPC8 h7 J$ @1 V# R' M  U/ Z$ P
  3.     this.health -= damage;  // это.здоровье -= урон;, Q- f- a) _& b: E6 u" s
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
      y8 ?  V9 f- @( [/ f, {
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    7 F8 ~! n0 o1 v* p& L5 ~
  6.    
    $ D; u* L5 }" t& Q/ R3 ?
  7.     // Проверка на смерть NPC. s% I5 [" |: c' L6 A9 k! X
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)4 k! ~: [& ^8 r3 d* G) ?& m- h
  9.         this.die();  // это.умереть();
    8 \- W2 y$ f9 i) D$ y
  10.     }
    $ a. L( p' A0 i) }4 M
  11. }
    & a: i, S0 ?( P, N) n! L& [0 u
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    # x; r6 n- m' f* P1 }- z
Пример взаимодействия (с переводом)
! O& a) E% ~5 Y' d) ]& w
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    # o9 J. z% b5 I3 M) ?, ~/ C" Y
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    $ o5 n# p' j1 o
  3. 6 q4 N1 z" Y2 B
  4. // Игрок атакует гоблина5 E* R. J, w$ I# b; z- O
  5. player.attack(goblin);  // игрок.атаковать(гоблин);: a8 w9 z: N2 M; }4 ?1 Y
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
  _- C1 P0 {7 H2 q1 z7 X4 E
" u* ^( L# x7 n) H: K+ w4 g
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.% P: D) g1 Z5 U9 U5 C+ N
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
0 A' H  I9 P; r
% u5 W2 Z& Z3 j# T) C% f" \( @
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30! L' I- M, a2 q5 [
Привет, Астралия! Огромное спасибо за твои разъяснения ...
  [/ n7 J* o4 b7 }8 d
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.8 Y- {- x' ]. I: \; i
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    1 W$ S  D  e7 D; }4 v; I# @
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:9 M4 o9 U/ p5 g- c/ t5 g- z

; r" Y3 v" g: ?
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)4 r: W0 @2 g- C
  2.     // Логика взаимодействия игрока с NPC7 e: r/ y( K; f( F6 o% y
  3. }& x* r6 M2 U8 ]% I. z* y
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    1 k/ n5 |. Z7 o9 @
; ~$ g9 b# X& x& c$ j. g
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    " P7 b; k# B% l1 b
  2.     // Логика перемещения NPC3 |  W  i3 `2 ?4 H: w
  3. }
    ' O. Q5 ~5 m- ^* N
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:; F9 b  C1 t; w5 H0 E* N
) M" U$ l! k  l& Q8 J3 h6 E
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример) X$ Y# q5 @/ n) F  E
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    5 U1 H& D: @" D, K# Z& F! v: I, c
  2.     this.health -= damage;  // NPC теряет здоровье, L) J* g9 P5 k2 v: m7 `
  3.     ( s, @) \" f. Q* j: f1 s
  4.     if (this.health <= 0) {0 T8 M6 J+ n' C4 T
  5.         die();  // Если здоровье упало до 0, NPC умирает) l, t0 ?, \# |1 f  n5 z! {& @/ ?
  6.     }
    6 X2 c0 o6 c" ~: `7 m4 _9 N! ^1 ~
  7. }# q" N2 @' P& W& _5 R
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    . ]! p* u- z9 B
* Q! ]9 f3 [: g, V
  1. public void die() {  // public void умереть()
    ! v% c, L, Z# i' J$ L: s
  2.     // Логика смерти NPC  [$ B7 L' Q; Y: D4 t0 `+ R
  3. }. o# [8 \- A, N
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:+ i( X* N' ^) s4 B

! Y. ?5 N# r0 s$ r& i0 C! f
1 W# e# U7 F3 }" v' L0 d) |: G
  1. public boolean isDead() {  // public boolean мертв()* d5 r0 {) @4 b& |: {7 n! F- z
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    ; x: j' j4 f7 L3 [- T
  3. }2 f4 m8 s' a  ]! R$ }' c
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    3 f+ `6 f# n- x

6 H1 U8 `: w' F1 T
  1. public void heal(int amount) {  // public void вылечить(int количество). D4 h' v% t7 Y7 n# @+ F
  2.     this.health += amount;  // Увеличиваем здоровье" q& D: ~# @* u! H( {" D
  3.    
    # ^, G, [" Z# v$ l: |
  4.     if (this.health > this.maxHealth) {$ l$ G4 x- n) q5 u4 L
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    ( u) `- v; {0 _' ^7 L
  6.     }8 ^1 }% r; ~' z  \: R9 o% j; }
  7. }0 v3 E3 q1 P5 E$ D* J2 n
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    & f# l! V+ z6 x5 v: R7 e, A% D
/ A! e/ q$ e, ?* U1 O+ K/ ?
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    ; U1 ^( j, a# c6 I( U1 a5 `; u0 R# N
  2.     // Логика применения скилла NPC
    2 {. E: w# p, Y5 l2 {. r: l
  3. }
    : y+ E$ O; o5 x, M9 `  R
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    8 N6 u( t& m! R: R+ }, U2 a
+ _5 a( `2 R5 f. \* |$ |9 b3 P
  1. ! o& g9 l! t: l7 J! b
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок). D" S% R$ \( ~) Y' j/ F: y
  3.     // Логика взаимодействия с NPC' O8 z6 |% X' A2 t  f2 H
  4. }4 x+ u8 X, `7 p/ f3 L, o) S
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    " U$ P' y3 v* m* Q, _$ ?: q& k

+ V* }9 u4 ?' N
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)7 H/ r% C. r6 e% ]4 x2 }. y* v6 z
  2.     // Логика открытия окна диалога
    # L; U1 e$ C9 W" U
  3. }
    2 o* p; h2 U4 s- |- ~0 Z
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
. F6 J+ L; {/ g% U7 [8 |# M. V; mЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
2 }, M' l5 O2 s) }! Y& y/ _
, Z$ e" e: T! h; G2 K. u+ B9 f4 `" q( U5 p" O2 w
: _# g2 l5 i' _/ M
5 o$ x7 Z! y3 }- e# {* y4 j# Y
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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