ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² ΡƒΡ‡Ρ‘Π±Π΅, ΠΎΡ‡Π΅Π½ΡŒ быстро...
Π Π°Π±ΠΎΡ‚Π°Π΅ΠΌ вмСстС Π΄ΠΎ ΠΏΠΎΠ±Π΅Π΄Ρ‹

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ хранСния ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π’ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ событий ΡƒΡ‡ΡƒΠ²ΡΡ‚Π²ΡƒΡŽΡ‚ 2 ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°: источник (source) ΠΈ Π±Π»ΠΎΠΊ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π½ΠΈΡ (listenerинтСрфСйс для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° события ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°). Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ MouseListener опрСдСляСт ΠΏΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Ρ€Π°ΡΠΏΠΎΠ·Π½Π°ΡŽΡ‰ΠΈΡ… события Ρ‰Π΅Π»Ρ‡ΠΊΠ°, Π²Ρ…ΠΎΠ΄Π° Π² Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Π³Ρ€Π°Π½ΠΈΡ†, наТатия/ отпускания клавиши ΠΌΡ‹ΡˆΠΈ. ПослС всСх внСсСнных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° всСх классов, сгСнСрированная… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ хранСния ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Богласно Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρƒ задания Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ пСрСмСщСния Π»ΠΎΠΏΠ°Ρ‚ΠΊΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΡ‹ΡˆΠΈ.

MovableSprite (ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½Ρ‹ΠΉ спрайт) — это спрайт, способный ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ своС мСстополоТСниС. Π’ Π½Π°ΡˆΠ΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½Ρ‹ΠΌΠΈ спрайтами ΡΠ²Π»ΡΡŽΡ‚ΡΡ шайба (Puck) ΠΈ Π»ΠΎΠΏΠ°Ρ‚ΠΊΠ° (Puddle). По ΡΡƒΡ‚ΠΈ, Π½Π°ΠΌ Π½Π°Π΄ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ класс Π»ΠΎΠΏΠ°Ρ‚ΠΊΠΈ Puddle.

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· Ρ€ΠΈΡ. 1, Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² использования, Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования «Π”Π²ΠΈΠ³Π°Ρ‚ΡŒ Π»ΠΎΠΏΠ°Ρ‚ΠΊΡƒ» Π² Π½Π°ΡˆΠ΅ΠΌ случаС Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ΡΡ двумя Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ: «Π”Π²ΠΈΠ³Π°Ρ‚ΡŒ Π»ΠΎΠΏΠ°Ρ‚ΠΊΡƒ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ» ΠΈ «Π”Π²ΠΈΠ³Π°Ρ‚ΡŒ Π»ΠΎΠΏΠ°Ρ‚ΠΊΡƒ ΠΌΡ‹ΡˆΡŒΡŽ».

Рис. 1. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² использования ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° JBriks

ПослС всСх внСсСнных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° всСх классов, сгСнСрированная с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ срСдства Enterprise Architect Π½Π° Π±Π°Π·Π΅ исходных java Ρ„Π°ΠΉΠ»ΠΎΠ², выглядит Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

Рис. 2. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° всСх классов ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° JBriks

Рис. 3. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° класса Puddle

Рассмотрим ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ сдСланныС измСнСния Π² ΠΊΠ»Π°ΡΡΠ΅ Pudle. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ сдСланы это ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° событий ΠΌΡ‹ΡˆΠΈ посрСдством Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² интСрфСйса MouseListener.

Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описываСт ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ состояния источника (Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ, Π²Ρ‹Π±ΠΎΡ€ ΠΏΡƒΠ½ΠΊΡ‚Π° мСню, Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅, сворачиваниС окошка, Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ клавиши ΠΈ Ρ‚. Π΄.). Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ события.

Π’ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ событий ΡƒΡ‡ΡƒΠ²ΡΡ‚Π²ΡƒΡŽΡ‚ 2 ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°: источник (source) ΠΈ Π±Π»ΠΎΠΊ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π½ΠΈΡ (listenerинтСрфСйс для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° события ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°)

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ событиС.

Π‘Π»ΠΎΠΊ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΉ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ события, Π½ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ½ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ»ΠΈ нСсколькими источниками, ΠΏΡƒΡ‚Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² (ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π±Π»ΠΎΠΊΠ° ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π½ΠΈΡ) для ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ этих ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий находятся Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ java.awt.event.

Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ MouseEvent гСнСрируСтся, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠ΅Ρ€Π΅Ρ‚Π°Ρ‰Π΅Π½ ΠΌΡ‹ΡˆΡŒΡŽ (dragged), ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ (moved), ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» Ρ‰Π΅Π»Ρ‡ΠΎΠΊ (clicked), Π½Π°ΠΆΠ°Ρ‚Π° (pressed) ΠΈΠ»ΠΈ ΠΎΡ‚ΠΏΡƒΡ‰Π΅Π½Π° (released) ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΡ‹ΡˆΠΈ, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΡ‹ΡˆΠΈ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈΠ»ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π²/Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°.

БущСствуСт сСмь Ρ‚ΠΈΠΏΠΎΠ² Mouse-событий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ сСмью константами:

MOUSE_CLICKED ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Ρ‰Π΅Π»ΠΊΠ½ΡƒΠ» ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ;

MOUSE_DRAGGED ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠ΅Ρ€Π΅Ρ‚Π°Ρ‰ΠΈΠ» ΠΌΡ‹ΡˆΡŒ;

MOUSE_ENTERED ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΡ‹ΡˆΠΈ Π²Π²Π΅Π΄Π΅Π½ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚;

MOUSE_EXITED ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΡ‹ΡˆΠΈ Π²Ρ‹Π²Π΅Π΄Π΅Π½ ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°;

MOUSE_MOVED ΠΌΡ‹ΡˆΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ½ΡƒΡ‚Π°;

MOUSE_PRESSED ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΡ‹ΡˆΠΈ Π½Π°ΠΆΠ°Ρ‚Π°;

MOUSE_RELEASED ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΡ‹ΡˆΠΈ освобоТдСна.

МодСль дСлСгирования событий содСрТит Π΄Π²Π΅ части: источник событий ΠΈ Π±Π»ΠΎΠΊΠΈ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π½ΠΈΡ событий. Π‘Π»ΠΎΠΊΠΈ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π½ΠΈΡ событий ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΏΡƒΡ‚Π΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… интСрфСйсов ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π½ΠΈΡ событий. Π­Ρ‚ΠΈ интСрфСйсы ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ java.awt.event. Когда событиС происходит, источник события Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊΠΎΠΌ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π½ΠΈΡ, ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π΅ΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ события Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ MouseListener опрСдСляСт ΠΏΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Ρ€Π°ΡΠΏΠΎΠ·Π½Π°ΡŽΡ‰ΠΈΡ… события Ρ‰Π΅Π»Ρ‡ΠΊΠ°, Π²Ρ…ΠΎΠ΄Π° Π² Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Π³Ρ€Π°Π½ΠΈΡ†, наТатия/ отпускания клавиши ΠΌΡ‹ΡˆΠΈ.

Π’ Π½Π°ΡˆΠ΅ΠΌ случаСм ΠΌΡ‹ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

1) ΠΌΠ΅Ρ‚ΠΎΠ΄ mouseClicked, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вызываСтся ΠΏΡ€ΠΈ ΠΊΠ»ΠΈΠΊΠ΅ ΠΌΡ‹ΡˆΡŒΡŽ;

2) ΠΌΠ΅Ρ‚ΠΎΠ΄ mouseMoved, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вызываСтся ΠΏΡ€ΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈ ΠΌΡ‹ΡˆΠΈ.

Π’Π°ΠΊΠΆΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса Puddle Π±Ρ‹Π»Π° объявлСна Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ пСрСмСнная isMovingByMouse Ρ‚ΠΈΠΏΠ° bool, для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ, Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒ Π»ΠΎΠΏΠ°Ρ‚ΠΊΡƒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΡ‹ΡˆΠΈ ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

Π’ ΠΈΡ‚ΠΎΠ³Π΅ Π±Ρ‹Π»ΠΈ сдСланы Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΈΠ΅ измСнСния Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅:

import java.awt.Image;

import java.awt.Rectangle;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

class Puddle extends MovableSprite implements KeyListener, MouseListener {

static final int LEFT = 37;

static final int RIGHT = 39;

static final int alpha = 10;

boolean isMovingByMouse = false;//статус возмоТностиуправлСния Π»ΠΎΠΏΠ°Ρ‚ΠΊΠΎΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΡ‹ΡˆΠΈ

public Puddle (PlayField p, Image pic) {

super (

p,

pic,

new Rectangle (

p.getWidth () / 2,

p.getHeight () — 20,

pic.getWidth (p),

pic.getHeight (p)),

0,

10);

_pf.addKeyListener (this);

_pf.addMouseListener (this);

}

public void move () {

if (_isMoving) {

Rectangle b = _pf.getBoundary ();

_pos.x += _v.getSpeedX ();

if (_pos.x < b. x)

_pos.x = b. x;

else if (_pos.x + _pos.width > b. x + b. width)

_pos.x = b. x + b. width — _pos.width;

}

}

public void hitBy (Puck p) {

if (p.getDirection () == 90) {

p.setDirection (270 + alpha);

} else {

int px = p. getBounds ().x + p. getBounds ().width/2;

int l = (int) (_pos.x +_pos.width*(1.0/3));

int r = (int) (_pos.x +_pos.width*(2.0/3));

if (px < l || px > r) {

p.getVelocity ().reverse ();

} else {

p.getVelocity ().reverseY ();

}

}

}

/* ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ наТатия клавиш */

public void keyPressed (KeyEvent e) {

if (e.getKeyCode () == LEFT) {

startMoving ();

_v.setDirection (180);

} else if (e.getKeyCode () == RIGHT) {

startMoving ();

_v.setDirection (0);

}

}

/* ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ отпускания клавиш */

public void keyReleased (KeyEvent e) {

stopMoving ();

}

public void keyTyped (KeyEvent e) {

;

}

/* ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ ΠΌΡ‹ΡˆΠΈ.

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ ΠΌΡ‹ΡˆΠΈ, Π΄Π²ΠΈΠ³Π°Π΅ΠΌ Π»ΠΎΠΏΠ°Ρ‚ΠΊΡƒ, вмСстС с ΠΊΡƒΡ€ΡΠΎΡ€ΠΎΠΌ ΠΌΡ‹ΡˆΠΈ,

Ссли Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ двиТСния Π»ΠΎΠΏΠ°Ρ‚ΠΊΠΎΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΡ‹ΡˆΠΈ */

public void mouseMoved (MouseEvent me) //ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ событиС mouseMoved

{

if (isMovingByMouse)

{

Rectangle b = _pf.getBoundary ();

//Ссли Ρ…ΠΎΡ‚ΠΈΠΌ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π»ΠΎΠΏΠ°Ρ‚ΠΊΠΎΠΉ ΠΏΠΎ Π»Π΅Π²ΠΎΠΌΡƒ ΠΊΡ€Π°ΡŽ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ курсора ΠΌΡ‹ΡˆΠΈ

//_pos.x = me. getX ();

//Ссли Ρ…ΠΎΡ‚ΠΈΠΌ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π»ΠΎΠΏΠ°Ρ‚ΠΊΠΎΠΉ ΠΏΠΎ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ курсора ΠΌΡ‹ΡˆΠΈ

_pos.x = me. getX ()-_pos.width/2;

if (_pos.x < b. x)

_pos.x = b. x;

else if (_pos.x + _pos.width > b. x + b. width)

_pos.x = b. x + b. width — _pos.width;

}

}

public void mouseExited (MouseEvent me)

{}

public void mousePressed (MouseEvent me)

{}

public void mouseReleased (MouseEvent me)

{}

public void mouseEntered (MouseEvent me)

{}

/*ΠŸΡ€ΠΈ ΠΊΠ»ΠΈΠΊΠ΅ ΠΌΡ‹ΡˆΡŒΡŽ Π½Π°Π΄ курсором ΠΌΡ‹ΡˆΠΈ,

Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΈΠ»ΠΈ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ пСрСмСщСния Π»ΠΎΠΏΠ°Ρ‚ΠΊΠΈ ΠΌΡ‹ΡˆΡŒΡŽ*/

public void mouseClicked (MouseEvent me)

{

//Если Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ курсором ΠΌΡ‹ΡˆΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ ΠΈΠ»ΠΈ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ

//Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ прямом ΠΊΠ»ΠΈΠΊΠ΅ ΠΌΡ‹ΡˆΠΊΠΎΠΉ Π½Π° Π»ΠΎΠΏΠ°Ρ‚ΠΊΠ΅

//if (_pos.contains (me.getX (), me. getY ()))

// ΠΏΡ€ΠΈ ΠΊΠ»ΠΈΠΊΠ΅ ΠΌΡ‹ΡˆΠΊΠΎΠΉ Π½Π°Π΄ Π»ΠΎΠΏΠ°Ρ‚ΠΊΠΎΠΉ

if (_pos.contains (me.getX (),_pos.getY ()))

isMovingByMouse=!isMovingByMouse;//смСна статуса

if (isMovingByMouse)

System.out.println («Moving by mouse is possible!»);

else

System.out.println («Moving by mouse is impossible!»);

}

}

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ