artace.ru - творческий сектор

Название: Шаг 1: Введение в классы и методы на примере L2j_Mobius [Версия для печати]

Автор: Astraliya    Время: 2024-10-16 21:14
Название: Шаг 1: Введение в классы и методы на примере L2j_Mobius
Последний раз это сообщение было отредактировано Astraliya в 2024-10-21 18:00 - `7 K' T) P8 ?/ ~
: Z3 S, p! l+ c) k3 `* D

) ]- }5 X; _( d8 T6 u" b& s8 yШаг 1: Введение в классы и методы на примере L2j_Mobius' _* a" m! B7 t% ?, ~+ P3 ?3 ^
С статьёй можно ознакомится в разделе Обучение > Читать: \. H- Q; [# ?6 v: \
8 e. S; M5 x4 U& s/ k3 t7 R
Добро пожаловать в обсуждение первого шага нашего цикла образовательных статей по Java для разработки серверов Lineage 2 на основе сборки L2J_Mobius! В этой ветке вы можете задать любые вопросы по теме классов и методов в Java, обсудить примеры из статьи и поделиться своими наблюдениями., \7 |0 \7 G+ v' z2 J8 k
1 E) x+ y+ V6 k1 T/ t
Обсуждаем:
6 T" D6 l0 X: m( A& k" R4 Z! \9 ~& [Не стесняйтесь задавать вопросы, делиться опытом и помогать другим изучать Java и разработку серверов Lineage 2!2 n, y( N* V6 ]0 q2 G

: `( i; W& W8 K0 W2 T
6 n8 l) z$ s5 H* p! @8 t! E# _- h  ~% l
И помните, если код не работает — значит, это он проверяет, насколько вы упорны! ? Но мы вместе разберемся!* S1 T( p) L' z0 x( t6 K3 v: Q
( h( ?' u1 E+ h. G( p: o4 R' F
  c' D3 P3 _6 ]* O- @

( l% P7 H- K8 k5 {; _
" A6 [. B# D' `% N8 F( Q8 F5 R  N  ?7 z6 L$ }3 T( S0 g: y

Автор: Mike123    Время: 2024-10-17 01:17
Почему мы используем ключевое слово this для ссылки на поля класса?
" L/ g  N. \/ G0 _
Автор: Astraliya    Время: 2024-10-17 01:29
Mike123 опубликовал в 2024-10-17 01:17
1 I2 z9 K( l0 }2 }6 X: D( iПочему мы используем ключевое слово this для ссылки на п ...
4 r6 n* Q8 c" {- o7 I/ E
Ключевое слово this в Java используется для ссылки на текущий объект класса. Оно необходимо в тех случаях, когда имена параметров метода совпадают с именами полей класса.
+ u+ h1 u4 y$ U5 l/ k8 K; MПредставим, что у нас есть класс Player, у которого есть поле name. Когда мы передаем значение этому полю через конструктор или метод, можно столкнуться с ситуацией, когда параметр метода или конструктора имеет то же имя, что и поле класса.
8 B0 j- m7 I5 E5 T# R% W- A) O  A2 Q: I
Вот пример:4 s6 q" i  X- a  V1 M1 ~
  1. public class Player {; A+ c+ M) }' }7 l" O/ E/ E4 l
  2.     private String name;/ ]4 y7 d$ g4 B- C6 p
  3. + q2 u8 i7 [6 r
  4.     // Конструктор
    9 U4 M- {6 A) ~; k' S  E
  5.     public Player(String name) {
    ( c; K- Z3 W8 x' [; C% c9 m
  6.         this.name = name; // Используем this для указания на поле класса
    0 E( J, n7 u0 E& |' x* F
  7.     }) {8 S  |; C7 S& z7 V, K" h' F
  8. 2 b7 [/ N  k9 `2 L9 G
  9.     // Геттер для имени- x  K1 U' B6 T
  10.     public String getName() {
    " F, o  l3 e" O* @" H
  11.         return this.name; // Используем this для обращения к полю класса+ Z6 {: p5 i, y. M
  12.     }
    + g2 }9 b6 I7 v# U& ~: d
  13. }& t/ L& j: G% m* c
Скопировать код
В этом примере параметр конструктора и поле класса называются одинаково — name. Чтобы указать, что мы говорим именно о поле класса, а не о параметре метода, мы используем this.name. Это ясно даёт понять компилятору, что мы присваиваем значение параметра name полю класса name.
/ g3 J( ]% ~& S" @3 p" h. l. z3 Q7 n+ D3 |* y# R6 K
Когда необходимо использовать this:8 _8 L4 k0 C/ c: A& t9 C
Пример передачи this:
, L7 ?  r% J. @
  1. public class Game {% P+ _, E& S8 `' _1 ~
  2.     public void start(Player player) {7 M  I; u7 p9 N. o. B( ^
  3.         System.out.println("Игра началась с игроком: " + player.getName());
    " [* d$ ^( q- d1 U( A  {- P
  4.     }9 [$ ]' D) P0 h7 }% E. [( r
  5. }
    : i2 a' {' X* Q( A' c) o
  6. . }3 P( W& }- m, D$ a6 P- w3 T
  7. public class Player {7 a, I  {# p* {
  8.     private String name;
    2 X9 K5 M0 D( P; O3 H# o

  9. # T1 C% Q: ^. n" t: u
  10.     public Player(String name) {
    ; ?. Y1 R9 a. b2 ]: q
  11.         this.name = name;
    * r, z/ R! O9 u" I" m" S
  12.     }  |9 X4 T) @8 y3 A+ X* D$ `& w- V

  13. ; h( d, o& o  l- Y, K6 n7 ^
  14.     public void joinGame(Game game) {& J4 N9 ~8 }8 D* |
  15.         game.start(this); // Передаем текущий объект Player  _' D& f! ~( M2 x
  16.     }1 R- K8 }" u" u8 `$ g/ c) Z  s
  17. }
    % c' w, @' J; u9 R
Скопировать код
Заключение:Использование this помогает избежать путаницы между параметрами и полями класса и делает код более понятным. Это ключевой инструмент для работы с объектами и методами в Java.
4 D$ G7 W2 n5 V: K2 ]

5 |( P9 a0 ~- {. m  `2 t' ?Помните, если Java кажется сложной, просто представьте, что она — это NPC, которого нужно приручить! ?6 s2 b) O4 N8 a; ]3 x: r, q

; @* `9 N) Z3 _% {
Автор: Mike123    Время: 2024-10-17 20:05
Добрый день!   B0 C& l8 D2 w  q  c- n0 w* {' S
Как создаются и вызываются методы в Java? Можешь показать на примере взаимодействия между методами?
Автор: Astraliya    Время: 2024-10-17 20:23
Последний раз это сообщение было отредактировано Astraliya в 2024-10-17 20:24
4 _9 x" v( ]! K+ I
Mike123 опубликовал в 2024-10-17 20:05$ W# z2 R6 y3 Y
Добрый день!
2 C, ?' `3 _! m: R: eКак создаются и вызываются методы в Java? Мо ...
7 c+ m3 s( I3 V4 A% H1 S
Привет, Mike 123! ?
) e7 ]  _; c" j) c3 y! l3 [Отличный вопрос! Давай разберём, как создаются и вызываются методы в Java, на примере из исходников L2J_Mobius. Методы — это один из основополагающих элементов в программировании, и они позволяют нам разбить код на удобные блоки, которые можно многократно использовать.
5 O3 ~- N) f3 M. q/ O
. D6 F: c+ D" x4 U% q- y# L5 @Для лучшего понимания логики кода и изучения английского языка информация будет подаваться в двуязычном формате. Сначала будет представлен код на английском, а затем — его перевод на русский язык с пояснениями. Такой подход позволит не только разобраться в структуре кода, но и улучшить владение английской технической терминологией.
" H1 b, I( `. F) t- H' ]
8 x' Z; J0 o) s* _/ V$ D# v6 E! |2 A! v3 _3 C: T5 T
Как создаются методы в Java?% p; h( c! L# V1 h  Z

1 `# U- D3 x$ d3 J& jМетоды в Java создаются внутри классов. Вот базовый шаблон метода:
- k+ C( o: l' {2 C" r, z5 b+ n/ J' @2 j3 l4 h6 P% V. x
  1. public returnType methodName(parameters) {4 S& S2 r% y; M4 ?% r0 i
  2.     // код метода* N7 g2 b# I! t. m) {3 n
  3.     return value;
    4 I. B9 p" A8 `; e" ^' V" A$ p5 X( y
  4. }* L1 A& j* X& Y* g( |% s) _3 U8 m
Скопировать код

9 e- w0 B: X$ @$ r5 l' A# oТеперь перейдём к примеру.  w. \+ B- |  |( ?# R2 e
: p& Z, ?2 R0 x( R4 [7 R" M" B
Пример на основе L2J_Mobius с переводомКласс Player.java — создание метода
3 Q* i2 J& k" Q4 q
  1. public void attack(Npc target) {  // public void атака(Npc цель)
    ' b! a; o& B4 ]$ t. I; `8 m  R
  2.     // Вызов метода атаки NPC2 H) b8 S8 I1 v! }
  3.     target.receiveDamage(this, calculateDamage());  // цель.получитьУрон(это, рассчитатьУрон());
    3 [* i8 b4 c! C# ]# W7 S, [
  4. }0 l, L7 V$ t2 Z+ H
Скопировать код
Метод называется attack (атака) и принимает объект Npc в качестве параметра.Внутри метода вызывается другой метод у Npc — receiveDamage (получитьУрон), передавая объект игрока (this — это) и результат расчёта урона (calculateDamage() — рассчитатьУрон()).
! v% m, x( ]& ~/ m9 x0 b8 G' S& S' J6 t# C  I: Z) A0 U
$ M5 T) O7 F7 J  u: D  q" A( |- X8 _
Класс Npc.java — вызов метода
; ^6 k, C6 }/ P% e3 f, W1 [) b0 j' ~& p# g- a9 L$ @0 G0 }  ]2 U
  1. public void receiveDamage(Player player, int damage) {  // public void получитьУрон(Игрок игрок, int урон)
    5 J9 ~8 z* b3 C0 _$ |
  2.     // Логика получения урона NPC
    " t- t0 i% T% Y7 z  N
  3.     this.health -= damage;  // это.здоровье -= урон;: }- y* p1 a% B5 V0 Z# ^
  4.     System.out.println(player.getName() + " нанес " + damage + " урона NPC " + this.getName());  
    % r9 y' Z2 h! ]( d* K) h
  5.     // System.out.println(игрок.получитьИмя() + " нанес " + урон + " урона NPC " + это.получитьИмя());2 x" M9 c6 a  Q2 U4 t
  6.    
    : A$ f1 H1 ]9 K; G% ^* o
  7.     // Проверка на смерть NPC
    , |2 A2 [* Y' C! {4 I0 B
  8.     if (this.health <= 0) {  // если (это.здоровье <= 0)8 P$ I1 u: c. v4 M$ p* W* t
  9.         this.die();  // это.умереть();" c. o  @, f+ ~! \8 b
  10.     }/ y; q$ n  c, L! l
  11. }: _3 {+ P3 F) j5 U* U% ]! X4 D
Скопировать код
Пример взаимодействия (с переводом)" X7 J, Z6 `' p- l
  1. Player player = new Player("Mike123");  // Игрок игрок = новый Игрок("Mike123");
    - X$ M+ h0 l* X2 _$ K
  2. Npc goblin = new Npc("Гоблин");  // НПЦ гоблин = новый НПЦ("Гоблин");
    5 n) g, R7 O3 t- |& C

  3. ; m! I: p/ ^3 \7 L9 U% g
  4. // Игрок атакует гоблина
    + M# H, k6 W$ o( H5 b
  5. player.attack(goblin);  // игрок.атаковать(гоблин);7 w1 V6 ^- h1 U
Скопировать код
акой подход поможет тебе учить английский, а также понять логику кода. & _, ?' w% P- i( F- v1 s! ?0 ^

& |2 X$ E) o5 q+ X) _
Автор: Mike123    Время: 2024-10-17 20:30
Привет, Астралия! Огромное спасибо за твои разъяснения и помощь! Теперь я начинаю лучше понимать, как работают методы в Java и как они взаимодействуют друг с другом. Мне очень помог твой пример, особенно с переводом на русский — это здорово облегчает процесс изучения.6 G  p7 e( q! e
У меня возник ещё один вопрос: какие классы из сборки L2J_Mobius можно использовать для создания базового NPC? Хотелось бы попробовать реализовать простого NPC с минимальным набором функций. Заранее благодарю за ответ!: _) P' ?4 ~% w: S4 K

( o8 M9 R2 [/ \3 O" f# s2 }8 b) d
Автор: Astraliya    Время: 2024-10-17 20:57
Mike123 опубликовал в 2024-10-17 20:30. y5 s+ \; {) ?: s
Привет, Астралия! Огромное спасибо за твои разъяснения ...
. n, h; n( P. |% w( |
Основные методы, которые используются для NPC в сборке L2J_Mobius, связаны с их взаимодействием с игроками, передвижением, боем и управлением их состоянием. Вот несколько ключевых методов из классов Npc.java и Creature.java, которые ты можешь использовать для создания и управления NPC.
/ ]$ D" `7 _5 r8 _1. getName() и getId()
  1. <blockquote>public String getName() {  // public String получитьИмя()
Скопировать код
2. onAction(Player player)- p/ z, N9 t; q
  1. public void onAction(Player player) {  // public void наДействие(Игрок игрок)2 t$ t( V6 ^7 X# B
  2.     // Логика взаимодействия игрока с NPC) F. w6 G4 n; s4 P
  3. }
      L4 j" E' ?8 J3 M6 f, Q: z
Скопировать код
3. moveToLocation(int x, int y, int z)( ~% T& C6 F3 [
  1. public void moveToLocation(int x, int y, int z) {  // public void переместитьсяВ(х, у, z)
    # x  W& Z' Z9 ?) F0 U
  2.     // Логика перемещения NPC
    4 L/ H  O$ t, [3 \) [9 |& `
  3. }% B0 Q3 U5 O+ c9 D% {
Скопировать код
4. attackCharacter(Creature target)
" A! g: a: u% L4 u
  1. <blockquote>public void attackCharacter(Creature target) {  // public void атаковатьСущество(Существо цель)
Скопировать код
5. takeDamage(int damage, Creature attacker)
  1. public void takeDamage(int damage, Creature attacker) {  // public void получитьУрон(int урон, Существо атакующий)$ `" n5 M6 ]' J
  2.     this.health -= damage;  // NPC теряет здоровье
    % s: V( {  O0 F4 O4 R" }
  3.     $ Q. j9 `# q9 N& p, U; n
  4.     if (this.health <= 0) {
    ! B* m5 M# m* C$ e( F. Q4 Y1 p  k+ ]- m4 j
  5.         die();  // Если здоровье упало до 0, NPC умирает8 U: p, D6 O: {
  6.     }8 Z3 y4 P# L+ g0 `- y6 M
  7. }
    & Y. }6 r5 a8 p9 v+ x2 |  H$ H  V0 V
Скопировать код
6. die()
) f- I6 H/ F. @* g
  1. public void die() {  // public void умереть()) k) X3 E# p0 E# \7 \
  2.     // Логика смерти NPC4 n4 D( ?! W( }* ^( f2 \, |
  3. }
    5 J) S- d1 ^) D. F* ^
Скопировать код
7. isDead()9 y1 V* l9 P6 W+ h. J6 H
3 I+ @& ?2 B6 a" Y6 N9 B
  1. public boolean isDead() {  // public boolean мертв()
    % G7 a# _2 y% q" G2 `6 z& P" g$ A
  2.     return this.health <= 0;  // Возвращает true, если здоровье <= 0
    ( X& W5 f! S! U7 p- k+ T
  3. }3 E0 X$ U9 i( M$ P* b
Скопировать код
8. heal(int amount)
4 p( y9 z6 E1 C4 U3 p
  1. public void heal(int amount) {  // public void вылечить(int количество)
    $ \1 r. @' f' Y# p4 G
  2.     this.health += amount;  // Увеличиваем здоровье
    ' z6 q( g6 v# _# [, B: R
  3.    
    6 ~( i  w& a' P9 b
  4.     if (this.health > this.maxHealth) {: Q1 D9 E! E8 t; ]! B, ]" e
  5.         this.health = this.maxHealth;  // Здоровье не может быть больше максимального
    : H6 U; r; D; l  w0 L( u
  6.     }
    : o: `* g* Q3 `2 R" ]
  7. }8 K& I+ e* }% K( l+ b
Скопировать код
9. doCast(Skill skill)
. m* z( G- g( X' q$ M3 g. z0 A
  1. public void doCast(Skill skill) {  // public void использоватьЗаклинание(Умение скилл), m6 F! k6 s8 a* S# }- ?1 a
  2.     // Логика применения скилла NPC7 ?8 E$ U( K. L! E2 x- ?& I; o' r
  3. }
    . a" Z4 y4 v+ n9 b5 P
Скопировать код
10. onInteract(Player player)
, C4 v! S7 m+ ^1 l1 W
  1. " m( m6 G  l) E1 B, `
  2. public void onInteract(Player player) {  // public void наВзаимодействие(Игрок игрок)8 m) M' e8 H2 Q
  3.     // Логика взаимодействия с NPC
    0 h. D: O. B+ n( t2 R
  4. }
    : k, s* I' b* |
Скопировать код
11. showChatWindow(Player player)
. Z# A6 K# T7 m' M- k, X
  1. public void showChatWindow(Player player) {  // public void показатьОкноДиалога(Игрок игрок)
    * l# u0 K. @/ o1 f3 N. r4 d- N
  2.     // Логика открытия окна диалога
    ) S( q5 N' n/ w
  3. }
    4 u# Z0 L. w9 l# E9 u) W
Скопировать код
ЗаключениеЭти методы помогут тебе создать функционального NPC, который может взаимодействовать с игроками, получать и наносить урон, двигаться, использовать заклинания и вести диалоги. Ты можешь начать с базового NPC и постепенно добавлять ему новые функции, используя указанные методы.
5 }% ]3 b, C1 a& W3 r- u3 qЕсли тебе нужны примеры кода или более детальные разъяснения — не стесняйся, спрашивай!
2 s+ I* G5 s9 ~, g  \9 U  I3 J5 u. j1 Q( b% C8 k
8 v! a9 U/ L8 y6 s2 m

4 {; N+ ?4 A7 N+ R0 s# o/ z% \& b  T) a) c/ m2 J





Добро пожаловать artace.ru - творческий сектор (https://artace.ru/) Powered by Discuz! X3.5