Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
* K! c1 I% I0 O( w/ c
3 i, z% [5 m( G; k$ ^1 |" n
3 S; J) I  c7 s& x; WШаг 1: Введение в классы и методы на примере L2j_Mobius
' m* b- _3 ~7 g9 r* j# kС статьёй можно ознакомится в разделе Обучение > Читать3 q6 l, ]* {. {9 t3 k. _
5 c, [# H$ b  t1 `( j3 Z. R" v
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
+ n7 l) h7 U$ ?% r: p) O/ ^7 \' c- o3 H% E: ]: V; E! |
Обсуждаем:
+ Z" R+ a+ r1 p* n" ^
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.: Q* z; k- `* U: s, e
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
( a: S! c. D# K- b7 n5 `7 F+ \6 c8 _5 G& y

* s8 E- W$ H2 ]% n9 o: [0 L
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! 😄 Но мы вместе разберемся!
6 N* N% e0 ]2 a7 W  K/ F* A# V3 z5 @) r4 z( l
9 G+ c# @. B: R2 @+ s$ _5 |
: k. `8 q1 s7 x, z4 z
" k  x" N3 p* m) ~1 Z

4 v5 [- W1 j8 e/ ~

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?9 H7 [+ B/ {% S8 O
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
; j8 z1 b8 ^2 ~* Y: t) D- UПочему мы используем ключевое слово this для ссылки на п ...
3 }3 C- [& J1 {6 D) i
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
3 L/ x) J' _8 j; N& y0 yПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
/ H6 k5 K0 F, \0 C
* E; k) u. X; a4 f6 T: CВот пример:
4 `: ]0 p0 {  f$ j$ \' ^& ~
  1. public class Player {
    2 D1 `4 A# \- q- @1 {9 u/ w  Z
  2.     private String name;; ^# X( \8 x4 L* n" m* h6 {
  3. " @2 }) ^. @1 H  v$ a% J/ k+ I6 F
  4.     // Конструктор
    8 e( P5 o* D, m
  5.     public Player(String name) {
    5 I! l% s4 A, {; c
  6.         this.name = name; // Используем this для указания на поле класса
    ; o0 _; s( w1 N7 U9 h
  7.     }4 _( W$ C# O. K5 y  e; [( h6 j
  8. 7 j" \: K% {) @5 W  k$ X( c
  9.     // Геттер для имени3 }' l6 ?; ^0 p" L3 U2 v' o! K
  10.     public String getName() {
    & c( l9 D8 ^! U: `, U
  11.         return this.name; // Используем this для обращения к полю класса! h3 O. ?8 W: @/ l
  12.     }( {- l. v5 z, f
  13. }
    0 K: N1 n. c8 f7 Z: I' i$ ?( M
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.# }+ A4 D) i4 ]$ Y4 D! F# o

1 [9 R! a( d& @; gКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    / i# y$ e6 o; H  a) |8 G  I, p, q: T

. ]7 d. F% {7 D7 Y: AПример передачи this:
: A* R1 M2 z* H0 Q+ a4 a
  1. public class Game {% V* e/ q( q- i; @( |
  2.     public void start(Player player) {- t9 M; a$ P! z! \  A' g& ]7 |
  3.         System.out.println("Игра началась с игроком: " + player.getName());3 M; ]/ E* e6 I' H1 ~
  4.     }  D8 K7 {1 u  i. N% i7 ?# a$ ^
  5. }( H# d& E) O# H2 u

  6. # n/ ]6 X0 ^- C1 z5 ^6 D* I
  7. public class Player {/ u. [; K2 F, {! d, t
  8.     private String name;
      q% n/ U4 L* T" {" {" G. c
  9. ! c/ U4 L- `7 j) S2 m! h: d/ s
  10.     public Player(String name) {- j7 ]- `  f# W6 ]6 a' i8 f3 B
  11.         this.name = name;9 D7 C' G$ H: B4 H: h. l' v. j
  12.     }
    / Y' l! G+ a' T) ?' e1 C

  13. + N. r4 c, E' k; U. f
  14.     public void joinGame(Game game) {
    ) w" x- W# G9 y- i1 z* e
  15.         game.start(this); // Передаем текущий объект Player% X  X9 L' a2 i; I4 d! z( N
  16.     }
    . \  z, {8 g  [; h; ?. R' v
  17. }
    4 I' C  f5 {" R# |. V& X- B
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.6 x- z2 [) Z0 S. {

6 g, ]% X( s% m& y1 ?* N- q
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! 😄: }  ^1 s8 v8 T1 k/ t" v
- \% X% \& v$ q5 F0 n" k
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! . U4 C( M$ {) m+ `
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 1 I8 M$ g+ m6 J
Mike123 опубликовал в 2024-10-17 20:05" R& Z. F: d& |( y
Добрый день! 0 \8 ]4 E8 W9 I
Как создаются и вызываются методы в Java? Мо ...
  I1 R: g) X( E/ p  G
Привет, Mike 123! 👋: y9 C. N/ @3 o* ]
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
' m# ?8 f( N; B6 v; C  @
" K5 o, P6 B& {* PДля лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
: k7 N7 _$ h& H% ^8 v/ n
  y7 q" K4 u; ]; A; s/ ?+ j: I3 Z: X# z
Как создаются методы в Java?
  m5 ]* B8 u5 Z) P3 r6 N2 F+ g) ?9 k* K6 V; m) r# A
Методы в Java создаются внутри классов. Вот базовый шаблон метода:3 h$ Y) r) D: w

  {- l5 ~$ W7 }2 K2 ?6 r
  1. public returnType methodName(parameters) {" R$ G) I  d8 ^5 F" }0 }3 b8 V, F
  2.     // код метода
    0 ]& x& _/ U+ p7 b5 M
  3.     return value;
    8 K+ f/ C5 a2 N2 u' U% m
  4. }8 e6 Y; S  s9 }5 [
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    " D" c8 C. A4 H- w

, ?) e. f/ p- I, z* K( T& uТеперь перейдём к примеру.
, o7 N: m6 ]) k% e6 V! j: \+ `( _' [# @0 ]
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
3 V  v5 D' ^7 x' H- L2 k
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    % N& E( j  H' e+ C
  2.     // Вызов метода атаки NPC# b4 I5 P0 t6 x
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    6 U0 q( r4 D3 o
  4. }8 _" ^# l' m  I
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
, w& k% i* F# P9 k$ J7 E
; Z* z# U$ t# M2 ]
: n. H* l, {9 E1 i3 yКласс Npc.java — вызов метода
  i; A! e; `( R* w, ?) u# x+ k* d$ c
! s5 L" L$ S! K
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)% d9 p6 O) B# Y( D' ?$ f
  2.     // Логика получения урона NPC8 l7 Y5 W6 {7 P; Q* s
  3.     this.health -= damage;  // это.здоровье -= урон;7 d2 e4 G4 j0 q8 B2 |( p- T
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  # \" Z3 v9 W0 B+ Y1 G; Y, x
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());" D* Y) f( |( b
  6.    
    ; I0 Q0 F1 J; d. O6 h% z
  7.     // Проверка на смерть NPC% d$ J( F) [5 B+ T$ [
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    " l! ~% y# ^  i4 x: z  f
  9.         this.die();  // это.умереть();* a! x& G# z; w( h/ Q
  10.     }% l. S9 d& {: C( l# r; t8 ~( }- `5 m
  11. }1 u2 G% b: O) X4 b& q& Y) V2 j: a
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть)., {( d, a% G8 `! |2 Q. @7 f: [
Пример взаимодействия (с переводом)
) K$ B7 _$ q  V8 O
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");# G. Y( g, D/ _2 v: r0 k
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");+ U3 }2 r$ Z* g  p% t# b7 g
  3. 5 E, Q, l' C; i8 _7 g% |2 z
  4. // Игрок атакует гоблина  x2 s. r' F) a. a3 U. |8 [% U* }
  5. player.attack(goblin);  // игрок.атаковать(гоблин);* B4 f2 R1 v% k4 T
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 4 F5 J7 o3 N' B# X7 Z

8 E- r8 N' s  E* @
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.8 N6 j' R* a, v! c
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!) a. R0 g7 _7 Z& b

' k0 c. A  F  Y7 I1 I: @
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30! k9 P& r0 k6 _7 H. H2 i) n
Привет, Астралия! Огромное спасибо за твои разъяснения ...
5 V  j( O7 f8 }! S( R
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.; f; B; a; L9 c% H4 |
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    $ Y0 U- I# i7 G. l* g
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    & W" l- d) w& N4 f# y# a" H
' r# y, H' C" k: X7 ^
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
    " y- H- i+ O  Y( }
  2.     // Логика взаимодействия игрока с NPC( h' ?' l& E6 p2 H5 F7 F
  3. }
    " N+ E( z. I0 ~
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    * v$ g' x% o1 @6 ~8 `$ M, Q
2 Z2 K: _/ X8 |  y
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)) o  n0 f% _  {  u, V7 P
  2.     // Логика перемещения NPC
    9 A  b, `/ X2 m6 {% ?! I8 J
  3. }
    & H1 w2 l! J  P7 x) Z2 ^! t8 k
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    7 m0 j. T9 K: o3 y/ ?/ E2 x2 P
/ Z5 y4 B7 P9 S7 C, z: k- ?
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример4 I6 I5 d! h8 |; ^6 G2 J) u3 c% V) {' |
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    3 e# t0 h1 J+ `3 {! p
  2.     this.health -= damage;  // NPC теряет здоровье+ o: k* _: U+ E
  3.    
    ' {: j7 U8 z1 l9 N& `3 I2 m) Q0 C
  4.     if (this.health <= 0) {
    4 O1 U/ m+ p+ u6 n; V% k' ^, S; s7 u
  5.         die();  // Если здоровье упало до 0, NPC умирает7 M; T' v) c- Q0 I" r+ ^$ ]' }
  6.     }
    * ^# j; c" X  m: U
  7. }9 g( q) R" {5 k0 w) m( i
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример4 \" ]; d8 J9 N* T
8 q7 a" [" |0 n$ ]  T4 q+ J
  1. public void die() {  // public void умереть(). r: I6 C2 Z. @$ f: W( z
  2.     // Логика смерти NPC
    $ M. S7 E. G# ?3 p" B5 ~
  3. }
    & f2 r/ B' m" k7 c8 \# @, c
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:: v3 b  u$ t7 @1 t- o7 N
$ N# e5 O7 n5 G+ Z) q% V
/ x+ g. d  M4 e( q& p
  1. public boolean isDead() {  // public boolean мертв()' g6 s, A( x: a8 B, b" H5 ?
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
      ?$ ?6 f& V  ~- L2 [. G' @- e
  3. }1 W. l/ G. O1 T4 |1 m
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример8 @+ w1 s! a0 i: L+ Z3 s
; g/ Y) Q  X" c
  1. public void heal(int amount) {  // public void вылечить(int количество). _5 l2 X3 D, U
  2.     this.health += amount;  // Увеличиваем здоровье
    ( k* L: E- {$ s/ i
  3.    
    - h" i7 Y4 Y& l& \# K' x
  4.     if (this.health > this.maxHealth) {2 ?4 @# F0 F  ~/ U
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    2 ?9 v" X/ t7 J: w) L
  6.     }' o/ @- M& R) `' j
  7. }
    ; D0 o) \. ~+ t, B- G, j! b
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:4 N- S; t) B6 b- N9 S1 @! c
+ J- S8 v  ?! x+ R9 E# |
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    - M& i9 W- b9 U) C
  2.     // Логика применения скилла NPC5 }) G1 u' T& j9 q% }& U7 R
  3. }
    ! h9 T0 Y- q* ?3 _2 h
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    ; _) F( x. L1 @+ \6 N) o4 S
7 b3 w8 P+ a" E! r

  1. 3 b2 T) z( i( m" b! }9 W2 m+ h
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок): u) D! k/ w# `9 h9 `+ d& V
  3.     // Логика взаимодействия с NPC4 w2 J9 K) d; x, Y0 v" B
  4. }6 W( x! j- G) k0 [  z
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:  S, O: o) _5 U2 l# P
0 ~* n% J' C5 e8 ?7 R* Q! f
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)3 T3 t5 u, {) G( e1 F* X+ L
  2.     // Логика открытия окна диалога/ P9 E3 b7 v' ?4 ^
  3. }9 z7 a2 i4 B: p+ c1 `: q* M
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.7 D+ Z4 j- T  C
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
; D( A% u  b. r5 F2 m% M: H) {) i- y" p' x$ ]- y1 a" n5 i
  N4 K" p1 ?2 P% z. {2 x) }
  P; S' G0 `. P: I
& P- u8 D0 K. n! L2 Z( Q: X
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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