Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00
+ l8 j9 `6 z, i( D
( J8 v* ^/ Y, }$ O) l! W5 X4 t
: ~8 d* B* V6 t1 M1 ~! l. W/ cШаг 1: Введение в классы и методы на примере L2j_Mobius7 h1 v% Z0 a! i+ z6 X7 z
С статьёй можно ознакомится в разделе Обучение > Читать" Z# x# f9 X; M0 z0 M8 j! c

) c. M  q- W- s5 g' e: U- IДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.
- N$ q- o9 O9 U' b+ t& w; `% W' m; L7 y4 s) }) z3 Y
Обсуждаем:
. _8 g6 _+ S# o
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.) Q7 J& |& F) ?- k1 m7 T" f1 Q0 x# ^
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
7 x  a$ b* ]2 d+ X5 O# s8 M# k2 f5 r8 d+ j" g  Z, T9 I


% Y9 v0 |  }% U: l: b6 G/ p1 N0 L# {И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!
2 E, @( O! Q; e. L' g$ U9 w3 M0 X, N& s9 s
" y3 c# ?, n2 G8 u+ P1 |5 B/ p

9 V8 z2 ]: V# M8 v, x( I8 n+ v/ F( J/ ~! W0 ]
, {$ W  k1 i5 J2 h# T

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?
  H6 s6 N! @3 \. Z) t4 j
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
- `, y8 f3 W  s3 WПочему мы используем ключевое слово this для ссылки на п ...

* I6 [; J" Q) ~' ]9 G' S) Q/ S" e, kКлючевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
- l# D4 A4 n  l6 g" T3 U- uПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
9 M+ p% j+ G5 |4 Q( [2 L
8 }' Y  @) K" f. A* s) @. _6 MВот пример:
' ^6 }& }1 d# b7 R& w( K
  1. public class Player {+ |6 F# O. V- N) i, ~
  2.     private String name;& D  l( x3 m& `7 i% L

  3. 5 r( w. O/ @& ]- N
  4.     // Конструктор7 G6 H( E2 M8 I) n
  5.     public Player(String name) {
    " R. [  d5 u2 f' l. q- L
  6.         this.name = name; // Используем this для указания на поле класса7 f% j0 _0 G2 s$ ^7 Y$ i
  7.     }' h( A3 d9 A8 I0 R
  8. * n5 N8 n$ o( c8 q5 h( s
  9.     // Геттер для имени
    / D9 h  _7 `. x& w) r5 z
  10.     public String getName() {  R( h) n) C) V0 d# T
  11.         return this.name; // Используем this для обращения к полю класса5 G) A/ E  H( Y" a5 _
  12.     }) \% z2 F$ Y/ X5 Q/ n9 F1 U& B9 z( @
  13. }1 h% M. Z4 R" u% l( d' \
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
1 @  c) G. X# O0 g7 @( t8 i1 Q$ L1 ^. B7 a; `: s
Когда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору.) a* }- M& o8 b( L# ^7 v/ R

$ k# U5 D. |& i; G3 y* wПример передачи this:
3 v* _# U: p: Y, S) W4 T
  1. public class Game {8 b- X  O& d8 Y3 j
  2.     public void start(Player player) {
    ; A, F/ z+ n; d0 M  s. y" }8 _
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    4 u: M3 I# W7 L  |
  4.     }. e! l- K* _8 D2 }3 L" _& g
  5. }
    / x) T/ t9 R. O' ~% z
  6. - q% b: B- t- z- G
  7. public class Player {$ C+ }2 |9 l" X- Z- }) Q
  8.     private String name;
    . F7 f0 Z; h; j+ N4 v  c' ~3 l3 @

  9. # D- x4 w# k/ o/ A! b* j
  10.     public Player(String name) {
    7 l4 G7 k* X- ?  g/ f
  11.         this.name = name;
    ; i% y0 M( v) Q6 N
  12.     }
    ; X/ E% G" u: G8 m9 c2 X

  13. * v' M% e2 u- K
  14.     public void joinGame(Game game) {
    ) H0 Q) ?+ ^/ j, ]
  15.         game.start(this); // Передаем текущий объект Player2 s4 ~' H2 [, ~2 |: d5 }; c2 c. K
  16.     }. I9 a3 b! `7 R' x/ x
  17. }
    5 N5 f$ M) t6 I3 V* l3 {
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
. l: ]9 d  g/ n' L& t- S

" c, {+ g/ n: }- A6 x. QПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?4 I) y7 h# z7 M$ ^
  `  c9 E  W& h' t" C& B! q8 c
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день! 2 K+ I& }0 M; {% t- ~$ i7 R
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 8 f1 B# e; V- ^( O, s: w" L
Mike123 опубликовал в 2024-10-17 20:05
& H1 b* n. ^# C: v  o0 pДобрый день! 2 i) N' w7 O4 b  ~7 |( o
Как создаются и вызываются методы в Java? Мо ...
) a& P/ l1 J% A" E8 j  f
Привет, Mike 123! ?
" Q2 B! Z( a! Q+ k2 mОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
/ r' J4 H1 W$ x& Q1 K
$ B  K* S% W7 \Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.; u  o4 f8 q7 y5 n* q9 p1 ^
9 h/ c4 E6 X, M# _: T1 f
/ q. P5 A9 g$ C) c% Z0 N' d
Как создаются методы в Java?) o8 G' k% G1 b! Z& ?
  ~3 C- J# v8 m3 S! R. u* s6 C
Методы в Java создаются внутри классов. Вот базовый шаблон метода:  M1 j" N7 b% g, E/ ?' o3 Q5 p

. V( T, d* [. T# D9 H7 }! [
  1. public returnType methodName(parameters) {- d; B1 x. @# \1 h' F3 ?
  2.     // код метода
    , i# Y+ ^9 G3 D# f4 `* Q; B
  3.     return value;1 G1 d' G2 O$ _/ N; j/ d
  4. }
    # A, G3 O5 q6 L- ~
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
      }+ R5 {$ I5 a" O/ `. ?4 k( R4 y
) g2 a& G, w# A6 r$ z" L7 M; u: M
Теперь перейдём к примеру.
) F" r/ }9 U2 ]+ L7 }0 w8 L+ F( Y3 P7 R% s  L5 V
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода  B! _6 k$ H$ ~, I
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    # s1 n( o* [0 z5 g( ?
  2.     // Вызов метода атаки NPC0 d$ ]0 B/ ^4 o. \* v3 k' Z
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    / s$ O( T# C0 E1 {
  4. }
    % B) ]. \# J% @3 r+ q
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
, I; [% ~. x$ [1 Q
; T  W4 X. D( b0 P( u6 E& \& y! x7 ?8 j
Класс Npc.java — вызов метода
7 Y4 g" s; q0 h$ C! y+ q5 U2 w" I' m  M0 e: _
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)! p* F) Z9 y' p3 q3 `7 C/ ?5 ~
  2.     // Логика получения урона NPC
    ; \2 \7 Y! H4 F: J8 ?0 L9 v
  3.     this.health -= damage;  // это.здоровье -= урон;2 q" V  x# |' ?( b
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    " N- J1 v! s( i6 M: a6 P  M2 a
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());9 e$ [# [$ D- q; S! l
  6.    
    # X: [. N$ P" L, K  Y
  7.     // Проверка на смерть NPC# {# r4 O! x* v9 W- p
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    $ l) A2 F; B( ?- t. T2 A
  9.         this.die();  // это.умереть();2 T; \& ?3 h0 Y6 P
  10.     }; z, Y- w  L9 J- q9 t4 a3 S
  11. }2 f/ h4 P1 Z. s2 A9 Z1 i* z/ j
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).
    1 D, H- D/ |0 t; p3 ~" G
Пример взаимодействия (с переводом)4 e: x  M3 Z$ w6 x
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");0 P4 y* c3 q3 l
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");& E5 o2 p& o& N3 j% i1 `- I
  3. 2 J; ^, J% I- r: y" ~1 A5 W6 G  @6 D
  4. // Игрок атакует гоблина
    ; g7 i) Q: U" T$ p
  5. player.attack(goblin);  // игрок.атаковать(гоблин);
    ) ~" ]* O) Z- V7 y$ C
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода.
9 c- ]7 ]1 V' X6 F4 i3 y: x9 {  L6 S1 Z& y' s/ x
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
8 Z# _% Y  J, ?+ l7 p5 E& Q% p. ^5 kУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!! w( a5 G) l/ w/ g/ e' E

- Z+ j1 `" P% j$ R6 j
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:305 c6 p9 L" Z% o
Привет, Астралия! Огромное спасибо за твои разъяснения ...

" e  b0 m) N; Z# g) x3 jОсновные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.1 q' x" _% G  p% h
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример( _; i" [$ V5 b6 z# q* c; {$ b
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:
    8 d# F% b" \+ a4 l: x( n
9 N+ b! K2 a( ]! c) W
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)
      q  g: X* M9 W2 d3 m
  2.     // Логика взаимодействия игрока с NPC
    % x7 ~: C# E! _1 t
  3. }  j! f) r1 w0 j: h
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:
    ( m: T6 a% z5 R! x# d8 S' z
/ O+ C, {0 Z& t- V, p( A
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    6 j- b7 \6 `. b5 @
  2.     // Логика перемещения NPC
    ) u# H5 F# {  K9 y& b
  3. }3 `; A8 o5 B2 Z: U' Y
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:7 w8 I9 r& E- x& |$ _! q+ x* @
2 _$ f+ f  d" }# X$ H; ^' ^& H7 {2 C
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    8 f2 i; Z5 C, i8 |
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)
    ( \& f# E6 ]  Q5 m4 a: O. c2 z5 s
  2.     this.health -= damage;  // NPC теряет здоровье& d' l/ ]# f5 g# ~3 |6 c
  3.    
    9 [5 Q3 A( F( U* N
  4.     if (this.health <= 0) {$ N+ `$ \* V% u, X+ l
  5.         die();  // Если здоровье упало до 0, NPC умирает! M$ v) n- H# ^
  6.     }
    / i/ U4 U. F8 J$ L0 l# ]- N
  7. }
    7 N# w+ w6 W; I$ q; p( R
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    " [, S: T# W8 _* U9 Y! z& k
1 t( w$ Y. M: R" u# N7 I3 H4 W
  1. public void die() {  // public void умереть()
    % B+ V/ C1 ]& h& l
  2.     // Логика смерти NPC
    4 Z$ i7 h  \$ b+ V1 O/ [
  3. }0 y% a9 ]9 A( t8 X7 L5 k$ c4 Y
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:1 k# ^% Z- {/ |5 F% c' T# a5 b

1 ?6 ~" O2 S, o4 ~" N# b5 p' o# F
& N- e/ Y% b; M) g
  1. public boolean isDead() {  // public boolean мертв()* Y3 C. m, O& F* Q5 C& _7 h
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0( s( P; ~, ~& y# p
  3. }+ x- b. p7 L1 ^1 p' X- u1 o0 p+ ^
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    ; T9 _, B5 C2 f/ v4 \) Q4 q" J
% W% L8 b7 S5 @+ [
  1. public void heal(int amount) {  // public void вылечить(int количество)0 m( z9 W4 P* M% q+ d9 l4 x
  2.     this.health += amount;  // Увеличиваем здоровье
    1 _. F7 e/ }! P/ P1 A! [
  3.    
    9 e! d4 g1 h$ E9 o, y
  4.     if (this.health > this.maxHealth) {, H4 Z6 j# m- r$ R
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    : J! |! m6 `# O9 _) M
  6.     }
    ( Q1 k" r/ N2 n+ I! G( \
  7. }
    ( x; b5 `; _( o+ e& g# a
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:- a) o5 r) K7 W2 p. f
6 r, l  I# L- w7 U0 I$ N
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)+ R& \& x/ m; a: w. R' h1 q
  2.     // Логика применения скилла NPC7 }* A6 y6 ?% ~5 M$ L- f$ j& G
  3. }7 }' E; {) v( `7 g9 D8 a  {4 U
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:, |$ C& I/ i* n* k
# b/ S' x1 G, B0 S4 S  j0 T% h, j

  1. * j& Z, F( k! u& d4 r# [% {
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)
    ; k& b6 F1 W' X; T1 ^4 U  U
  3.     // Логика взаимодействия с NPC; }. U" A7 [+ H
  4. }
    ; N, ]1 X9 S  L- b; h
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:
    # y  ]6 @. {/ Z8 I1 V2 o3 D2 a

2 `9 Y& x# u5 J9 ?+ v. Y
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)4 y( b* u& j, r3 \1 A+ s# E
  2.     // Логика открытия окна диалога
    2 \- d+ k+ }% P3 |! k& ^  Y* t
  3. }
    + t/ f. E+ R' b: ?% @3 B6 f
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
& V2 W; _" |& O! X# X0 ^Если тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
% w" w, z- A2 ], F- U  F
2 ~# K+ k5 J6 g' s9 [' E
( e6 Y3 a( x- u/ |1 w7 `$ Z  Y9 j) u6 y# }' n1 }
7 k) O6 |+ \8 q
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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