Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 % y  {/ v! }' g+ N, W$ X6 l
( c$ H' o' s  ~. f

, M7 F3 o9 T/ w2 UШаг 1: Введение в классы и методы на примере L2j_Mobius
# Q1 _4 e/ l4 ^С статьёй можно ознакомится в разделе Обучение > Читать
" c: k2 C/ P& j7 j. i3 n! [+ A$ V3 J5 n9 h- B) g2 ^
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.8 n' R3 r) B9 r* O0 R+ D9 I
: P( Q9 Q% ^0 g8 `% q- c; D4 d
Обсуждаем:
2 k' `* i! ~- ?  k! b! \( ?
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.- d& w9 F* Y+ C( ?# y
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
9 i( r# h8 Z$ V& Y1 j& M7 |! E) F+ Z3 g# n" I$ U

- ~6 e  m& s1 O; h
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!: i0 e  y6 E3 d: |& b- v1 ~2 ~

* g( S& c+ l) s- G- l. I3 Q7 H$ N# a0 t9 R

+ f7 g+ F. h, d$ C, r+ P' z) G# L4 g. f- X7 v( p! B' C( h
$ U0 F6 A3 T2 `$ J9 G

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
& Y3 R/ `: M) s* U9 j, E$ M- J5 j
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
# {+ p+ c0 j  h9 r& u5 K3 YПочему мы используем ключевое слово this для ссылки на п ...
8 H! w; @" J; t$ M* C8 y
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
( O& R. P% k6 N4 V7 Q, pПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
! _$ d! r9 z. E' ~# H  ?& _7 `
9 |' z% I4 W1 L$ J+ \& NВот пример:9 m  C. x$ A  z* E0 V/ W
  1. public class Player {
    , p. P) ?) T2 r
  2.     private String name;
    ) N/ y2 k1 K# R
  3. ! q3 r4 D# w4 [
  4.     // Конструктор
    2 J/ w& \# j* @9 g
  5.     public Player(String name) {3 Z; u5 ?/ d. x: S1 U
  6.         this.name = name; // Используем this для указания на поле класса+ f+ x4 [2 v4 g! Q+ A/ u$ y
  7.     }
    + B0 }' s! C) @8 g7 J

  8. ( }( T1 ^( T3 n
  9.     // Геттер для имени# d9 J& C, S/ R- |/ u1 z$ o, z
  10.     public String getName() {2 ~! z9 v% P5 a8 p
  11.         return this.name; // Используем this для обращения к полю класса
    % @7 b! v0 H9 b/ Y  T$ G
  12.     }( I+ w! l+ b4 N, ~
  13. }
    , ^  x. d1 w& S3 z# B" v
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
1 Y- w! [) y) w  x
7 I  m3 x9 n/ G$ o& f) dКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.
    ' `8 V- X. m% `. t$ E
: J  X8 p- s; M& a6 e9 n* d
Пример передачи this:" h: r! ?% }7 u. R$ [) T5 n6 W
  1. public class Game {
    7 Q% b4 I, x- B7 {( c
  2.     public void start(Player player) {) a0 s' O  n" W, S
  3.         System.out.println("Игра началась с игроком: " + player.getName());9 S( G1 ?8 Z; e, V( n: Z5 M0 u
  4.     }+ @5 E1 f# g4 ^& M% `5 S/ _9 @
  5. }
    & s5 r+ u, _: k: ~, f) r( r6 F

  6. : z9 ?8 l8 J- e% R) X+ R4 D' Y+ o: M
  7. public class Player {6 J! O2 T* _* ^# r8 o
  8.     private String name;
    , j9 q7 A" u5 i/ ~. K) t; N% w

  9. & P+ ?: u) c  G# U
  10.     public Player(String name) {
    # c& s) R8 m( u  `
  11.         this.name = name;
    ; ]% O) E/ P$ |, P3 @
  12.     }- q, s2 W* q; x4 H5 h; |/ e! R

  13. 3 C7 \- A& _! s+ g
  14.     public void joinGame(Game game) {8 I( b: V+ ^3 L" o/ [
  15.         game.start(this); // Передаем текущий объект Player) P( [, h8 j  V0 Y& `* A1 F0 C- Z- f
  16.     }3 o. S% a3 I+ N8 b- s
  17. }, y7 h+ ?" K" c# M) U5 @, S- ~
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.1 z, C4 {  ]/ q1 }  y: W' y

: ^0 {) r* j  w
Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?4 e* K5 G, }0 M3 H$ ?5 O

) |. Z! H& c1 X- i
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! 6 z8 a, O1 H' _3 s; u3 m. i
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
5 T* v, B2 _6 l1 p2 m9 J7 }
Mike123 опубликовал в 2024-10-17 20:05
  d* W: b  u) ]3 c8 b. dДобрый день! " h/ i. G! }3 M2 ^: }3 r, y' m
Как создаются и вызываются методы в Java? Мо ...
! I5 o; ~% t2 k5 j
Привет, Mike 123! ?9 L* y& O7 I+ U; F, ~+ @0 A- v/ F
Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
* c: v7 u& K7 {7 K, v2 \: {! h: s( q8 V5 Z& I  C1 K
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
  Z+ d0 }6 \& R$ U2 W7 T, r1 g# Y# z# X% ]+ F7 ~

. M0 k3 h0 z' N# F- x$ V/ o0 ]Как создаются методы в Java?: i" B  ?8 k+ g% H  r2 H6 e6 C, I" U' N; Z

1 Y% }$ f. d: r4 v- w# RМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
* e- F$ A' e4 ~( m2 c9 b6 ?0 R+ e$ O/ x& g$ r& g) \0 F# ]
  1. public returnType methodName(parameters) {
    ' V9 w8 P/ l1 s6 w
  2.     // код метода5 j6 a9 Y& S/ y7 b
  3.     return value;
    / T8 b5 B' W7 `
  4. }1 q; d- D3 g) u9 I+ ?2 I% j4 k
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    2 m# E. G& K$ P( \% x8 c
/ g: K3 c5 \8 e! v( q6 c' X& C/ a
Теперь перейдём к примеру.1 ?, J, y- r, `) O

' S  t/ A! d; I! m6 w9 B; w0 oПример на основе L2J_Mobius с переводомКласс Player.java — создание метода  x4 ]" I/ ~& G7 c$ S5 i
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    - a4 N$ o1 D( T' D& L4 S5 U
  2.     // Вызов метода атаки NPC
    $ p) A( E' e, v% y1 B4 u* m, [% ]8 }
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    ( f( l& y" W" B6 Q/ W9 ^- e& m1 A* W
  4. }
    1 Q" e0 U$ D6 i5 Y; @3 e# X
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
7 z- C; ]- E: y  [
% T. t" L5 L/ I; Z2 _7 C# K1 ]8 e! z1 u7 x- Z4 N$ G
Класс Npc.java — вызов метода
1 Z- r% ?4 @0 s$ w7 h0 ]- ^$ C$ u( `. @+ x
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    & T3 }6 m. e6 T% e. {  \1 K
  2.     // Логика получения урона NPC* v$ o5 t$ ^$ [! T
  3.     this.health -= damage;  // это.здоровье -= урон;
    0 S* l4 ?0 k$ x) E4 d
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    9 k6 g/ w( o7 S1 I$ ~- O
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    / _% }' Y% O" {3 n; ?* a* S
  6.    
    - i+ N3 l  ^# I
  7.     // Проверка на смерть NPC
    3 X$ v- [5 M( L" @9 S' U6 {) [
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)6 r+ t% t: h$ H, g: q
  9.         this.die();  // это.умереть();
    # x0 U4 I' G( N; y
  10.     }
    7 b& ~6 u% w2 P) E& B
  11. }
    2 h# Z. ~  [; M. D; B
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    " m- ^% g  Z6 J$ Z$ C2 |
Пример взаимодействия (с переводом)
% v7 B" v: T, S( t
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");# w% f& z" N! B) b5 t# x: U
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");. L% o: g6 X- z9 l

  3. 9 n8 v6 g# v. V  w" p% N
  4. // Игрок атакует гоблина
      R+ ^( T6 j4 B
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    : x# Q3 D  ~( D( B5 T
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. 6 c: Q! M6 c( ]* h
$ a* b1 D6 b8 g. l7 q* H( V
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
5 g% y4 g$ @2 a/ B* v6 K: v/ `У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!
9 S% s6 ~1 [6 S8 g6 U* n
# [! z" o3 X* Y
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30
! T- w/ S' L  w6 a# DПривет, Астралия! Огромное спасибо за твои разъяснения ...
; h' K6 N1 ~. T1 m
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
; O) t1 W1 I1 S/ F1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример
    $ x  P2 h" x1 n0 ~: P
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:" H. c! L) z. q. K: v4 t" A% B1 C
2 R! c. A) K/ Z
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)  ?) s( B- i' Y( i
  2.     // Логика взаимодействия игрока с NPC( G# R  {% w* x  y, ^
  3. }6 x& S) [/ R6 r4 g$ H! o! Q
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    * v, ]% Z* B! [" D3 P0 e! T
' ]3 e4 \* c% f! j  N* `
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    0 V8 t& l2 X- r
  2.     // Логика перемещения NPC
    3 F. R: s% S# U' `: ^4 n( `
  3. }
    , ~( T: Z2 O' l9 \- B$ b
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    * ~6 o/ u5 H' N5 s
6 s( L( Q0 s4 l' J1 C% v- ]
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример, E- M( K; g& w; [) r, j# Y7 z
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)" ]# h! I9 D# R: u8 d( Z/ x
  2.     this.health -= damage;  // NPC теряет здоровье
    1 a7 R# r& X& F
  3.    
    / J- a: z' M. s: e8 C5 t+ B, g
  4.     if (this.health <= 0) {! t$ u' I  c7 z! e2 h6 z
  5.         die();  // Если здоровье упало до 0, NPC умирает
    7 P7 y  `7 P9 C9 V' X
  6.     }
    # Y% R7 z5 ^" z& Z: L+ E
  7. }$ f5 Z: T6 N; q
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример& d# G2 {+ S; S* h; z, d" o2 m
" M& t; v1 T# X9 d
  1. public void die() {  // public void умереть()% b/ K( g4 u7 j8 y
  2.     // Логика смерти NPC
    3 `- t8 c5 T+ E3 L1 F
  3. }
    % V/ w9 M0 H! q4 o
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    # A2 N9 S6 ]7 a; o
( N; K7 P( ^+ a( \
% k  G: O0 J! J  y% N. }
  1. public boolean isDead() {  // public boolean мертв()
    $ G$ Y7 M. J6 {* ~) {
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0: n, h5 r) e6 C) v8 }
  3. }
    : B/ D  X# W5 {: \0 R
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    3 I+ E6 U8 f; F% O3 N

+ B( C- Y# o: O
  1. public void heal(int amount) {  // public void вылечить(int количество)- m# \, u( t# B4 q
  2.     this.health += amount;  // Увеличиваем здоровье
    ' a  x) S2 D- p  X& Y9 a
  3.     + b0 Z) X! {9 S+ f: H$ i" q5 l5 s
  4.     if (this.health > this.maxHealth) {& T  Y) b# F! f( W3 @3 j
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    8 N; r( L' ^( `
  6.     }+ c% r) z4 T# P, U% _" E
  7. }
    $ E5 m  D+ F8 x! i" Q
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:5 ]# B* w& |( p7 C8 s' }" x" f
, X$ N. n: ^. L% C
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    " P% A" L* I: W
  2.     // Логика применения скилла NPC3 n. ^" A7 Y2 Q0 h5 m; L2 h, ]9 Y
  3. }( C. d- i/ _" L+ w6 Z& O) c
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:- e3 b0 T0 _) ~  m' r

7 d+ x+ v2 I& b
  1. $ T' a% U7 e' ^# x" \5 L9 S: A6 Z
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)" E/ ?" R, f) z3 m/ r1 c
  3.     // Логика взаимодействия с NPC
    & v' n) b' z' E+ v- K) c. G1 @$ @
  4. }
    : r! u0 O2 O  u/ V
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    1 G7 `- }* V2 J' j- p% Y( H

" A7 L3 g. E6 F
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    ; o3 }) [6 B, P$ m
  2.     // Логика открытия окна диалога0 a/ W9 J( r6 z( O& n0 Y5 I
  3. }
    9 q3 R% }; d; T  T9 y- f* F
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
0 q3 P& T' ?2 K, vЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!1 G7 v  h" f- p5 M
  s, ~# J/ g8 Z4 p9 w- r! Z* \

8 g: P0 `1 F+ A" a* W5 h) Z' u$ n4 p5 ?/ X* X7 Y. m8 U" n6 l+ t4 Q; r
+ g1 K1 {/ O; B; e( W
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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