Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 1 [" _7 g& L7 P# `

2 t; H; P2 ]) g+ ]8 j- m& A. z) A, y/ G
Шаг 1: Введение в классы и методы на примере L2j_Mobius
& _3 C4 r) [+ mС статьёй можно ознакомится в разделе Обучение > Читать
9 Z/ @$ g8 u7 Q( x. d& p9 u* [! o; Z( x5 k
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
( x: u- w$ k5 ?; p
  a3 R* f, ~2 E* ?) \Обсуждаем:7 }! C! m! d0 t" u" s1 x* @4 k
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.
    / ?0 p, D5 R' h5 K" a9 s* u
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
: P# h. T  q- ?0 V8 Y& w* A7 y7 w& S( q- W. N

8 P2 w" M* v0 N
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
* W6 D( H& y* v7 t6 e: ]' ~  p, k
. w& h* |6 L, o- h

1 S( i2 q% i# x0 [8 ~/ l
# k" J/ q3 [$ P8 ]& H! G; ]3 J
2 T4 H+ A$ E" d+ K$ J' }1 p

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
4 h, U) S9 }: r
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17. i7 p; r* L; [. t+ L/ \3 h
Почему мы используем ключевое слово this для ссылки на п ...

  Z) G3 P5 r  hКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.6 I8 t3 V2 _# w. n/ ]6 L
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
# U+ y, G6 G4 p( Z  G' r) G! e5 \8 C/ R; A& `
Вот пример:" {; ~  X& S3 _, e# C
  1. public class Player {
      U1 Q8 J# i# H+ |! p( _: u
  2.     private String name;
    $ X% \: P' ?  x* i& |

  3. % H1 R" r5 u/ ]6 K# W6 g* f: j
  4.     // Конструктор
    9 H$ d; p7 O/ K2 r. e: C. D
  5.     public Player(String name) {% r( J; k' Y. a! Z# S1 f- s2 s
  6.         this.name = name; // Используем this для указания на поле класса
    ; x. m- u5 \. w- R
  7.     }. S+ i5 ]+ v; W3 O* Z# |8 w& a/ z8 o' {

  8. ; ~& w5 f! _8 R! x4 ^; I
  9.     // Геттер для имени7 A3 y1 \0 X( j3 y8 N9 v  S* ~# e" g
  10.     public String getName() {
    ; j. |' _& P0 F# D
  11.         return this.name; // Используем this для обращения к полю класса
    5 O1 t, L9 ~4 u
  12.     }6 \+ p# h3 X* {0 _8 o
  13. }
    ) b9 C% L4 P* z! ?  F# V
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.+ V# t: a5 v  f7 b' H

/ l2 L* B! Z: n. Q# G/ EКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    + K( ]# R2 z! z3 n; c/ S7 x

5 Y: C# ?" d  w2 w4 \Пример передачи this:
$ Q( M0 d7 f! }7 z' E4 F
  1. public class Game {
    5 D# ?* T6 t1 L7 G; N9 `/ X6 K" d
  2.     public void start(Player player) {) {7 u* P2 U4 B# {$ u; w
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    6 Z$ {, Y  H  A; R' P; B- M3 n
  4.     }
    ' ?1 l. c+ T/ v/ i  a- v
  5. }
    7 [4 k) s9 I3 r# X
  6. & _% ?) k9 c# B, T: ]1 w, @
  7. public class Player {
    % G1 b7 I+ B* Y5 r* f5 _
  8.     private String name;& z/ T% Z% H. S$ j' h
  9. ! p) H, |1 H% e% i: X9 V9 I
  10.     public Player(String name) {; I5 \3 G% {, H! x$ R+ V
  11.         this.name = name;
    , N+ F3 ]2 ~+ ~% x$ e  b$ l. U6 [
  12.     }
    . T' }& ]! V; \/ |: F; ]

  13. - @7 ?$ v- N% @( ~5 u
  14.     public void joinGame(Game game) {
    5 O9 ^7 m/ B  Q  k8 h
  15.         game.start(this); // Передаем текущий объект Player+ j6 [& D+ x! y5 u$ y* t/ W
  16.     }0 g6 P# U- e9 m: z' E! m- j/ |! F
  17. }, e5 x" e, y# s4 q
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java." @* Z( B% P# G, F* n

3 f6 T) B$ l4 a; n6 p
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?
: o% H1 D7 U: ^  P2 \5 }7 k) j' Z% a, [( Y( e( L% Y
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
2 ~0 K, V+ a, @0 L& pКак создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
' D# I9 l" ~! Q  [. q6 B# V% E
Mike123 опубликовал в 2024-10-17 20:05
" q. A) k6 L' H: Y8 J7 T7 p. [Добрый день!
0 P* C5 J- F; d" S2 N  g* |Как создаются и вызываются методы в Java? Мо ...

0 o& ^, s+ z, T: sПривет, Mike 123! ?
1 K! F( p! P( F$ NОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.+ E: ]) Q) h4 Y$ J' c  N, V2 W1 X" I

  j7 `; I# E; ~: @$ e( [8 n6 C  g/ `Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.4 ?$ _" b/ f/ J5 @% e4 f
2 r* g! S6 o1 Z1 A4 X/ E

; Z- h7 L9 \1 Z! j/ u6 kКак создаются методы в Java?! B- y/ f' _( @* d* u
( b! k+ u8 o5 D! N2 k
Методы в Java создаются внутри классов. Вот базовый шаблон метода:6 Y; G: V% Z( u" A- c/ w

! A/ k2 E5 J; C  a  ~8 @% P& m
  1. public returnType methodName(parameters) {
    ; x# @+ Y/ E* j
  2.     // код метода
    ! r0 \0 r9 e) j
  3.     return value;
    % [- N! G, }3 Y1 y0 ?( C. ^0 z
  4. }
    $ w( o3 c5 {  |! N, n
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    6 R' R- x6 H  y7 M

" [5 f: }& M+ f  `Теперь перейдём к примеру." Q) e+ B+ v$ D

/ f0 d- z9 f4 g' V) ~Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
  t2 _) ^2 }  e- H$ T" C3 [
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    3 K5 E. v9 ^1 m! ]! q
  2.     // Вызов метода атаки NPC: ]" n4 o' e! g4 o2 I/ k
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    - t% g  C  C, o' L- ?
  4. }( V/ U. G$ j8 J0 |3 p% m! W* ~+ g3 u0 _, Q
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).4 n* L4 }! Y9 T  P! w0 g8 E
1 N1 a$ l/ w: G8 L0 `4 \

( h! F6 `" P9 v# C6 eКласс Npc.java — вызов метода
6 v! j  Y# y4 q- D4 U
; Z" y5 I. f: i" ?  N' _4 K+ u
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    6 Z; A' K4 x, C+ v, c
  2.     // Логика получения урона NPC5 ^4 ^! X! f) k# @7 l
  3.     this.health -= damage;  // это.здоровье -= урон;
    # X' f$ n, b& M! I! ^, r
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  ) i/ G: l2 N+ Z5 b, L! l
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    4 ~0 ^7 \+ H# x- S- P
  6.    
    % }& w( ^: A: D. P$ B1 ?* R
  7.     // Проверка на смерть NPC
    ) A& z9 E1 w" t
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)- m5 Y5 O  n. [# {8 W& ]
  9.         this.die();  // это.умереть();
    , C6 j5 P1 G- d& }( c. B
  10.     }4 _0 ^% k% v/ o- d$ l
  11. }
    * s1 R) n3 ]4 T  D' I0 T
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    ; E, s9 R, u6 b8 }4 h
Пример взаимодействия (с переводом)$ K$ Q! F* q6 u9 e
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");- y! m1 c1 A) M
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");; R/ P; {: T2 R. f% j/ b, J
  3. 9 g% ^/ o; E! {3 c
  4. // Игрок атакует гоблина
    5 S% R# Q' S, w! F! @! x. P8 y4 x
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    ; }9 a& J$ Q8 y: @. l6 T- p7 M
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
; ]7 p( F; v" ?: j: K
8 f8 R* ~1 ~, ^6 ^: X
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
, P; D! q" X6 E5 a( [4 S8 vУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!9 g( C) x. z" ~' A4 V' {/ L1 `0 Z0 J
, E0 `+ A: U! c4 V' L" T9 \9 ~
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
9 s0 a! q' e2 o# V# bПривет, Астралия! Огромное спасибо за твои разъяснения ...
0 B2 V) N7 B7 _& L9 G, \& B
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.5 x  E% E5 X) `( ^& d4 c
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример, N9 \1 k/ V8 ?! o- Y: u4 e8 H( R
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    1 F1 t8 X, |# u/ T* F* d1 A

3 z3 B. @( d" Q, v( _% ~+ E. M. Q; \
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)$ P; X: [2 F  c. y: g) q
  2.     // Логика взаимодействия игрока с NPC
    # s2 f. @8 I/ G) X; h) k
  3. }
    0 F8 \+ N: n# O. }- S$ {) }
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    ' u8 E+ A6 d, S, t4 \' O

6 _2 P( |$ ^" N3 t7 Z  _" e
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    ; B4 ]$ g  u/ |5 Z. e: G
  2.     // Логика перемещения NPC
    9 y" A" W- \" t- W) g4 Y/ ~+ F$ g
  3. }
    , W" P, Z0 K! P8 R! H
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    # g/ e' Y# C) n% |/ f

8 C3 [0 E6 y( C6 \8 H
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример( A- N  k* ~! u+ M* y' \9 J: @
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)3 F1 J  ~2 K; P2 g; c# t
  2.     this.health -= damage;  // NPC теряет здоровье2 P/ W5 D$ O- v9 [5 T
  3.       w* V% J4 y2 ^9 F
  4.     if (this.health <= 0) {
    . f, }" L& H& W* v2 z
  5.         die();  // Если здоровье упало до 0, NPC умирает7 ]( \1 ?! V. c4 R- k) A4 U
  6.     }
    ( e7 N  H& N, I. q' E
  7. }6 i$ [# ^7 c* k
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    3 x. q. P* y# b8 D0 u/ I
$ ]) {( A; k% s& R9 ^* M* ]1 w
  1. public void die() {  // public void умереть()/ i* ?! M2 W3 p& c
  2.     // Логика смерти NPC7 `' T% C9 d) [5 U/ K. |7 s2 [
  3. }! r; m0 Z- L! _' q( c
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    & R* C4 ]0 n; X2 m# d2 p: Q0 ^
$ d9 r% y2 c. N& N; g2 o" C+ U

1 p2 I& @8 p- j; e
  1. public boolean isDead() {  // public boolean мертв()
    2 u* k- o0 E# y, f! O# `  E
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 03 ~; W1 u/ Z( p9 B& @9 q' z
  3. }8 _& m0 U0 X6 q( a
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    % b+ r, C! r! E) U1 B% g/ f+ c

  @- C3 c; D/ u8 g
  1. public void heal(int amount) {  // public void вылечить(int количество)' C0 p6 }; N9 z2 A% C  L6 {
  2.     this.health += amount;  // Увеличиваем здоровье
    4 \4 S' [* ~( j2 I2 }
  3.    
    1 S0 q9 v  X4 O/ H6 \
  4.     if (this.health > this.maxHealth) {
    / [# ]; W8 j5 Y2 W5 M* |
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального- d! `6 W/ Z# h6 {6 ~
  6.     }3 B! l4 Z8 b5 T9 _4 ~* L
  7. }
    $ m8 f; C# P. U3 C- a
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:
    . Z9 O& }( Y1 Y5 h1 g( @
; w) Y; [+ o8 c1 }8 h8 i% I3 M
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)+ [: i: ^" b* C) y
  2.     // Логика применения скилла NPC
    & v" ?- B9 q5 Q9 D& t4 a
  3. }! W; Y9 \: z5 G8 s' o; P9 E
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:* t4 ^% R1 |" t6 d. C; B

) \+ x( W7 w! w! t

  1. 1 Y) I* W1 v- l6 Y7 R6 i
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)+ v6 B3 ]2 x' B
  3.     // Логика взаимодействия с NPC( |3 P) Q8 d9 u% G4 L4 A7 K6 D
  4. }
    # B; @8 o. j. U. ?4 S" n
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:& U  r8 P5 j: |) \

9 M- l# j8 h/ e; f
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    # ]/ K% |7 S1 S& A7 M0 {1 D
  2.     // Логика открытия окна диалога& N4 |6 m( k; F4 f9 O; S
  3. }$ ]3 i$ n7 u0 I/ E) H3 C# {6 U
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы., C1 F; D: U* f" v3 V# u# u7 J
Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
2 e3 {9 R& r8 e# V+ r! |; e, I# m0 h# i

7 h  Q8 j+ o$ r  M0 o! P' T' r; U! r0 Z- X' g% Y' r5 }' _

( T8 S/ ]$ N0 v! ^4 F2 y
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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