Top.Mail.Ru

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

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

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

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

x
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 / l; X$ ?4 c) K: w

2 c, d* {. x: v# \( s: q! |. z2 i) g
3 A' ?! A& f# C* I: p; rШаг 1: Введение в классы и методы на примере L2j_Mobius
% y$ R- }  w& b9 J! r2 }- sС статьёй можно ознакомится в разделе Обучение > Читать
6 z3 m6 f" J! N" E5 E
4 A* z3 ]$ V5 A2 tДобро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями.5 V) o* a2 ]/ F# ]0 @, Q3 Z

8 E$ _/ L* ]% y9 _Обсуждаем:
8 Z3 w) v& b* K
  • Основные принципы работы с классами и методами.
  • Как создавать объекты и конструкторы в Java.
  • Примеры взаимодействия методов и полей классов.
  • Как правильно организовать код в серверной разработке на основе L2J_Mobius.* ^; z. P( m% _( t
Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!
# o" z6 W7 H  p
& M$ _/ a$ v! y' w$ _8 |1 B, X

5 t9 c: L' X! h1 g  \И помните, если код не работает — значит, это он проверяет, насколько вы упорны! 😄 Но мы вместе разберемся!0 c, D. N$ n# S+ t  b! S4 |0 d& x% y
" v: r; i  Q9 j- }$ \
% i: w7 d0 N/ G0 w4 w1 c2 v+ f& ^
7 L) U  d( C' {' j; t( d, a0 ~+ A
4 }5 i2 X: M7 Z

' ~" k& v! M9 t) Z/ f

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

Mike123 Опубликовано 2024-10-17 01:17:59 | Показать все сообщения
Почему мы используем ключевое слово this для ссылки на поля класса?7 w1 E2 q9 b* B+ P, h$ T( r+ n
 Автор| Astraliya Опубликовано 2024-10-17 01:29:05 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 01:17
8 i3 q7 y1 q6 t# y9 }+ {Почему мы используем ключевое слово this для ссылки на п ...
1 X; X$ e. L+ h1 T
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.5 f, V- D% B# r3 q. x( g% q
Представим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.* m8 O9 C& r3 y0 \. ~; x

0 W/ z4 a1 K/ {  Z- R; SВот пример:
& g; ~1 m) J; c/ A& ~& N
  1. public class Player {* d0 G5 M6 @6 j
  2.     private String name;& F: t9 z& W" ~4 P3 U
  3. # y3 ]' ?8 G. F0 f$ N) |
  4.     // Конструктор. _5 a" \; u- [1 [2 v  |) h
  5.     public Player(String name) {9 L& _* P7 R  I  s
  6.         this.name = name; // Используем this для указания на поле класса. z- Y" v+ S/ o* u% K% z
  7.     }) e, U- `+ j- n1 U& A
  8. $ [4 \7 X: |4 S% i
  9.     // Геттер для имени$ A: Z5 e; A" P8 u0 N
  10.     public String getName() {
    + t* l( y  P( R- z
  11.         return this.name; // Используем this для обращения к полю класса6 y, g& Y; W/ S8 I; X* G5 S, P! g# E* s
  12.     }0 `; x" B; E; y) b9 G
  13. }
    ' x7 E  p! C  u" z' c
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
2 P7 ~, p2 o9 |+ t5 H+ x
; M* m* B- e$ c6 x# V1 NКогда необходимо использовать this:
  • Разрешение конфликта имён: Если имя параметра совпадает с именем поля класса, как в примере выше, this помогает разрешить этот конфликт.
  • Передача текущего объекта: Иногда this используется для передачи ссылки на текущий объект как аргумент другому методу или конструктору." k0 a# w: L9 U0 v7 M$ s
/ c( `" ]* a; Y$ V% k$ A
Пример передачи this:( C& o8 i$ T  s9 H! K( N
  1. public class Game {
    ' W" H9 S: `: m
  2.     public void start(Player player) {
    0 ?  z4 N# t/ J  o2 F
  3.         System.out.println("Игра началась с игроком: " + player.getName());1 }; P. C; v/ T4 ^& _! H
  4.     }' X' k: S4 E& u7 {: g7 r9 N, X
  5. }# K5 w  i% v0 P  a6 x
  6. 3 [. h- }* j: ~& p
  7. public class Player {. j( C6 ?  S8 l
  8.     private String name;+ |7 ~6 K, S3 ~! c; o. `: S

  9. 1 i7 ~( G. V" j$ {& ~9 F0 d( P
  10.     public Player(String name) {, Z9 K- b# J% _) \2 A6 J+ E3 n  a
  11.         this.name = name;, ]9 s5 S& C. n) t# P/ g6 g
  12.     }
    % y7 Q3 T& d1 J( y. [' T
  13. 2 }: }( v8 l8 L) r
  14.     public void joinGame(Game game) {) ~' h* ^' ]! d2 t! @
  15.         game.start(this); // Передаем текущий объект Player
    3 i& ~- n( ?2 n3 s0 D0 ~
  16.     }  {& h& U% z& `& ]5 g8 `* ?
  17. }$ r4 _' M( Z( N5 p
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.4 a8 s/ s$ `3 @8 {# d9 n7 D


$ Y' ]6 f" b* v( d4 e7 C3 ]9 u1 r+ xПомните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! 😄# Y( X, S+ g" N5 J: y) q9 O2 C9 g
; p: ~" {0 u! P4 V
Mike123 Опубликовано 2024-10-17 20:05:34 | Показать все сообщения
Добрый день!
7 T$ [8 d; v7 Q9 E* u0 @Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
 Автор| Astraliya Опубликовано 2024-10-17 20:23:44 | Показать все сообщения
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24 ; U' X" m! r5 c* p9 ^/ Q% K
Mike123 опубликовал в 2024-10-17 20:055 g  d  h5 u+ [. `5 q& v1 F
Добрый день! 9 N  n0 c% l0 S: ~6 k% n2 o4 v( V
Как создаются и вызываются методы в Java? Мо ...
0 |' ~. i+ t* s' z
Привет, Mike 123! 👋
( W: X8 W8 |3 D& OОтличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
) ]; w" m+ C4 u0 x+ G3 _$ p5 N/ c& t4 d3 H& P  P: X
Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.3 e! N. e8 Z/ ]# J; D2 Z4 y% W

2 Q+ y6 f9 u1 H" B7 H6 {* r
' Q( b  s* k# H6 KКак создаются методы в Java?3 Q! r- w$ E/ ]  p; j

3 h2 c# I+ V! nМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
9 ^; c" t. o( u* P( @7 E: k. f9 X
  1. public returnType methodName(parameters) {
    % Z; ?0 B, v3 X$ m6 a
  2.     // код метода
    " @+ c* q. j8 |# G
  3.     return value;2 q& i+ K; s9 O1 q2 Z
  4. }- R% G- A+ k( d
Скопировать код
  • public — модификатор доступа (есть также другие, например, private, protected).
  • returnType — тип возвращаемого значения (если метод ничего не возвращает, используется void).
  • methodName — имя метода.
  • parameters — параметры, которые передаются в метод.
  • return — инструкция, которая возвращает значение (если это не void метод).
    " n: N4 @# v' v4 ~

1 u) E6 l9 X, a5 D; k: G: {Теперь перейдём к примеру.% G7 N( z1 D% N* b6 c

1 Y0 L4 {; Z3 H1 J5 J! M6 RПример на основе L2J_Mobius с переводомКласс Player.java — создание метода" O. c( Q' v. t) U
  1. public void attack(Npc target) {  // public void атака(Npc цель)3 G  ^  C; m0 b1 i: n
  2.     // Вызов метода атаки NPC
    9 m" w' c" a, s/ i3 }
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());2 G4 A. y+ b3 Q: u9 O
  4. }) E7 n9 r* ^! ^+ ^3 S
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
( X0 D9 q8 J2 {2 l9 i6 x9 A& R# w0 ]

" T4 b0 ^: \) o4 F6 |5 h9 \Класс Npc.java — вызов метода
5 z5 }: g+ b" f  Z9 B5 ^2 y
( y5 ^" t+ [7 p' I2 N% q$ C
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)& R. a: o, T  d
  2.     // Логика получения урона NPC
    ! [( I; n' T& E2 Y. ~/ p
  3.     this.health -= damage;  // это.здоровье -= урон;" G9 O5 y+ C6 ~  F3 f4 w6 c, R% @  i4 J
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    5 @: A+ O( \6 x9 C$ c9 v. j7 i5 Z
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());
    4 j7 T- @' g- u8 V
  6.    
    0 Z% \: c: g& i4 a! I4 H. Y
  7.     // Проверка на смерть NPC
    3 i4 Z: D+ ?/ f  X
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)
    / P4 y! V) i. R8 h
  9.         this.die();  // это.умереть();
    + u6 k4 B1 H5 t
  10.     }
    ( z3 X4 z7 p& S0 P! `* @
  11. }$ j! g) w  `* X( O# i* }( }4 o- X4 S1 F
Скопировать код
  • Метод receiveDamage (получитьУрон) получает параметры: игрока, который атаковал, и величину урона.
  • NPC теряет здоровье (this.health -= damage; — это.здоровье -= урон).
  • Если здоровье падает ниже 0, вызывается метод die() (умереть).% L+ I" t) q5 d$ r
Пример взаимодействия (с переводом)3 }* n  \6 @& {. a6 H4 G. V
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");5 L* h; n$ o2 n. {( H
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    " [  e4 g5 M+ h4 N$ W
  3. 2 `" g+ V7 \3 @& r7 K, S
  4. // Игрок атакует гоблина
    2 x- F' v6 ]7 m
  5. player.attack(goblin);  // игрок.атаковать(гоблин);+ ^5 [6 K; S8 b+ L/ m
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. - D2 q) a& c/ ~5 Z) ?7 y& q/ l
4 k. B7 U9 w4 B$ h/ G
Mike123 Опубликовано 2024-10-17 20:30:42 | Показать все сообщения
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.
. e5 S1 r! K% a% dУ меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!4 {( z2 J( O0 g9 T# e1 H; h
; d  q  _- k5 d9 l1 V# o
 Автор| Astraliya Опубликовано 2024-10-17 20:57:07 | Показать все сообщения
Mike123 опубликовал в 2024-10-17 20:30, ], K1 N. U3 W  @
Привет, Астралия! Огромное спасибо за твои разъяснения ...
% ^9 x+ R+ Q; R
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.% r+ k5 t# L( q; [1 y- b
1. getName() и getId()
  • Эти методы позволяют получить имя и ID NPC.
  • Пример( w, @/ W9 t. B, B1 O
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)
  • Этот метод вызывается, когда игрок взаимодействует с NPC. Например, если игрок кликает на NPC, этот метод отвечает за то, как NPC будет реагировать.
  • Пример:/ T; ]9 Z6 \. [

, z0 Z/ @/ f2 K
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)  g6 O' S) a$ A! [8 S+ h
  2.     // Логика взаимодействия игрока с NPC9 c2 M4 S, I7 }$ u0 ]
  3. }
    , O; i& E3 Y( u3 Y! r; _# ]
Скопировать код
3. moveToLocation(int x, int y, int z)
  • Метод для перемещения NPC в заданные координаты. Этот метод часто используется в патрулировании или движении NPC.
  • Пример:" c. `# W( I" e8 `% t8 }
0 m( s. L% f! `% F
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)/ m! Y$ O6 f- a' r6 ~
  2.     // Логика перемещения NPC: Z* B3 D2 A5 L% q4 X0 _" R' ^
  3. }' c9 h( n% k6 g1 {0 T
Скопировать код
4. attackCharacter(Creature target)
  • Метод для атаки цели (игрока или другого существа). Этот метод используется в боевых NPC для инициирования атаки на игрока.
  • Пример:
    ' X) X: q  K/ f# t) ^
& P* m9 m9 c( |; z8 O
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  • Этот метод отвечает за получение урона NPC от атакующего (игрока или другого существа). Здесь NPC теряет здоровье и проверяется его состояние после удара.
  • Пример
    ; S' T* W9 `8 I- b1 F
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)3 B6 q* }5 s) @, B5 z+ U! F
  2.     this.health -= damage;  // NPC теряет здоровье) t( h6 ~+ Y+ L% j9 D: C1 H8 G4 V
  3.     # Q* n9 g5 {: T& D& u( ]( B
  4.     if (this.health <= 0) {
      B: C1 D+ l( d( J4 ~. H1 [" `
  5.         die();  // Если здоровье упало до 0, NPC умирает4 |- J, c0 c9 ~1 Z5 I8 T( Q5 A
  6.     }
    $ S# D( J/ [2 Y9 e9 @+ I2 e
  7. }
    2 M7 I  ?* I3 J' O( F' N! @
Скопировать код
6. die()
  • Метод, который вызывается, когда здоровье NPC падает до нуля или ниже. Этот метод обрабатывает смерть NPC.
  • Пример
    & V# R* _* B7 Y
: H$ }$ a1 t: \0 q4 l( n
  1. public void die() {  // public void умереть()/ \9 u/ t& q. W+ }7 ^% l
  2.     // Логика смерти NPC
    , U* P3 z: o8 y! W+ S/ W* u
  3. }& ^( w) ~% _, ]% R7 i
Скопировать код
7. isDead()
  • Проверяет, мёртв ли NPC. Это полезно для того, чтобы убедиться, что NPC нельзя атаковать, если он уже мёртв.
  • Пример:
    ' O  n4 c) V7 S8 r! ?; [; k# [! I) a
1 E8 d( Q: x- O4 J8 S$ D. u* ]7 f
2 U/ A$ m: o* }( N
  1. public boolean isDead() {  // public boolean мертв()8 b) U3 x0 ~- q8 R6 F8 y
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0% A" p# |8 y$ Y# }- T/ ]
  3. }
    3 `  K. L1 l4 D; L' _" c
Скопировать код
8. heal(int amount)
  • Метод для восстановления здоровья NPC. Его можно использовать, если NPC нужно вылечить во время игры.
  • Пример
    ! X! y; [% ^" I$ v

8 i0 J  m. S" s% w& B
  1. public void heal(int amount) {  // public void вылечить(int количество)) a, c( a  N; H9 g: P) `
  2.     this.health += amount;  // Увеличиваем здоровье
    3 i; M9 P8 p3 J1 t) n, F
  3.     & P$ _" g9 S* T; O- ~7 h. u
  4.     if (this.health > this.maxHealth) {
    3 L5 `0 X8 @' n/ G
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
      Q! C" @$ p, ]8 s" }
  6.     }
    5 O) i" |/ u" Z, x  s% e. i
  7. }: u6 a. x! h7 R4 O
Скопировать код
9. doCast(Skill skill)
  • Этот метод используется для того, чтобы заставить NPC применить магическое умение (скилл). Он полезен для NPC, которые могут использовать заклинания или специальные атаки.
  • Пример:! P  _  z9 F# [1 S$ l0 Q

; I# C0 Y7 b" y( V' q( r
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл)
    ) O8 A0 H5 F/ [5 Y( P
  2.     // Логика применения скилла NPC3 @5 C7 S9 Z, D
  3. }
    6 Y  R! t2 e7 @4 D3 M+ U% D
Скопировать код
10. onInteract(Player player)
  • Метод, который вызывается при взаимодействии с NPC, когда игрок инициирует диалог или другое действие.
  • Пример:
    / o; C# l, d7 m* O& H

4 h7 }; f7 Q7 i9 j3 f6 s* u% X

  1. - \9 p( b  R+ L3 U" [- \8 R2 w
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок); C+ @; R" w  H2 A9 z* R
  3.     // Логика взаимодействия с NPC
    6 S2 o, ]4 m* C% d/ R6 O  r& t( w
  4. }; R% M, w% ?; s
Скопировать код
11. showChatWindow(Player player)
  • Метод для отображения диалогового окна, когда игрок взаимодействует с NPC.
  • Пример:, W: a/ d2 p% k$ q% Z" l8 y

/ y% [4 P. j$ d. k$ z. m) s
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)) L$ M; a$ z8 V
  2.     // Логика открытия окна диалога; O0 n( \# `" S
  3. }
    6 w7 c0 k# P  V3 D5 [* q3 r
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
9 w* l/ F$ m" R! IЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
7 y6 ~; H8 i" {9 ]# H
3 q& g2 W+ W& V0 y' R" \8 m* |8 `: p  F+ D6 q0 C
" C% v3 x+ i4 W& \. Y' x" ?& x
5 c" v/ I" l9 h8 R( q' P
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

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

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

подписок0

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

постов9

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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