Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠ³Ρ€ для ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠ²Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 49

Автор Майкл ΠœΠΎΡ€Ρ€ΠΈΡΠΎΠ½

if (playerSprite.collidesWith(landLayer, true)) {

// Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ исходныС полоТСния ΠΎΠΊΠ½Π° Π²ΠΈΠ΄Π° ΠΈ спрайта ΠΈΠ³Ρ€ΠΎΠΊΠ°

layers.setViewWindow(xView, yView, getWidth(),

getHeight() – infoBar.getHeight());

playerSprite.move(-xMove, -yMove);

}

else {

// Ссли столкновСниС Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΎΠΊΠ½Π° Π²ΠΈΠ΄Π°

xView += xMove;

yView += yMove;

}

Если столкновСниС ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ, Ρ‚ΠΎ ΠΎΠΊΠ½ΠΎ Π²ΠΈΠ΄Π° возвращаСтся Π² исходноС ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Ρ‹Π»ΠΎ сохранСно Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… xView, yView. Π‘ΠΏΡ€Π°ΠΉΡ‚ ΠΈΠ³Ρ€ΠΎΠΊΠ° Ρ‚Π°ΠΊΠΆΠ΅ возвращаСтся Π² исходноС ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ остаСтся Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ экрана. Если столкновСния Π½Π΅Ρ‚, Ρ‚ΠΎ ΠΎΠΊΠ½ΠΎ Π²ΠΈΠ΄Π° пСрСмСщаСтся Π² Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, опрСдСляСмоС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ xView ΠΈ yView. ОбновлСниС спрайтов ΠΈΠ³Ρ€Ρ‹ High Seas – это Ρ‚Π° Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ выполняСтся большСС число дСйствий. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это дСлаСтся:

for (int i = 0; i < 2; i++) {

// ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ спрайты ΠΏΠΈΡ€Π°Ρ‚ΠΎΠ², Π±ΠΎΡ‡Π΅ΠΊ ΠΈ ΠΌΠΈΠ½

pirateSprite[i].update();

barrelSprite[i].update();

// ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ столкновСниС спрайта корабля ΠΈ спрайта ΠΏΠΈΡ€Π°Ρ‚Π°

if (playerSprite.collidesWith(pirateSprite[i], true)) {

// воспроизвСсти Π·Π²ΡƒΠΊ спасСния ΠΏΠΈΡ€Π°Ρ‚Π°

try {

rescuePlayer.start();

}

catch (MediaException me) {

}

// ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ число спасСнных ΠΏΠΈΡ€Π°Ρ‚ΠΎΠ²

piratesSaved++; //Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ счСтчик ΠΏΠΈΡ€Π°Ρ‚ΠΎΠ², ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π±Ρ‹Π» спасСн ΠΏΠΈΡ€Π°Ρ‚

// ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠΈΡ€Π°Ρ‚Π° Π² Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

placeSprite(pirateSprite[i], landLayer); //Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ спрайт ΠΏΠΈΡ€Π°Ρ‚Π° снова, помСстив Π΅Π³ΠΎ Π² Π½ΠΎΠ²ΠΎΠ΅ мСсто

}

// ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ столкновСниС спрайта корабля со спрайтом Π±ΠΎΡ‡ΠΊΠΈ

if (playerSprite.collidesWith(barrelSprite[i], true)) {

// воспроизвСсти Π·Π²ΡƒΠΊ пополнСния энСргии

try {

Manager.playTone(ToneControl.C4 + 12, 250, 100);

}

catch (MediaException me) {

}

// ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΡΠ½Π΅Ρ€Π³ΠΈΡŽ ΠΈΠ³Ρ€ΠΎΠΊΠ°

energy = Math.min(energy + 5, 45); //Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΡΠ½Π΅Ρ€Π³ΠΈΡŽ ΠΈΠ³Ρ€ΠΎΠΊΠ°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»Π° ΠΏΠΎΠ΄ΠΎΡ€Π²Π°Π½Π° Π±ΠΎΡ‡ΠΊΠ°

// ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π±ΠΎΡ‡ΠΊΡƒ Π² Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

placeSprite(barrelSprite[i], landLayer); //Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ спрайт Π±ΠΎΡ‡ΠΊΠΈ снова, помСстив Π΅Π³ΠΎ Π² Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

}

}

ПослС обновлСния ΠΎΠ±ΠΎΠΈΡ… спрайтов этот ΠΊΠΎΠ΄ провСряСт столкновСниС ΠΌΠ΅ΠΆΠ΄Ρƒ спрайтом корабля ΠΈ спрайтом ΠΏΠΈΡ€Π°Ρ‚Π°. Если столкновСниС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ, Ρ‚ΠΎ воспроизводится Π·Π²ΡƒΠΊ спасСния, ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠΉ, Ρ‡Ρ‚ΠΎ ΠΏΠΈΡ€Π°Ρ‚ спасСн. Число спасСнных ΠΏΠΈΡ€Π°Ρ‚ΠΎΠ², опрСдСляСмоС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ piratesSaved, увСличиваСтся Π½Π° 1. Π‘ΠΏΡ€Π°ΠΉΡ‚ ΠΏΠΈΡ€Π°Ρ‚Π° помСщаСтся Π² Π½ΠΎΠ²ΠΎΠ΅ случайноС ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, для Ρ‡Π΅Π³ΠΎ вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ placeSprite(). Для ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΏΠΈΡ€Π°Ρ‚ исчСз, Π° Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠ½ просто пСрСмСстился Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅ мСсто Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅. Π­Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΠΈΡ€Π°Ρ‚Π° ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ³ΠΎ простым ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ΠΌ спрайта. НаконСц, Π² этом Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΊΠΎΠ΄Π° ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ placeSprite(). ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ столкновСниС ΠΌΠ΅ΠΆΠ΄Ρƒ спрайтами корабля ΠΈ ΠΏΠΈΡ€Π°Ρ‚Π°, провСряСтся столкновСниС корабля с Π±ΠΎΡ‡ΠΊΠΎΠΉ. Π’ этом случаС воспроизводится Ρ‚ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ сигнал, Π° Π½Π΅ wav-Ρ„Π°ΠΉΠ». ЭнСргия ΠΈΠ³Ρ€ΠΎΠΊΠ° увСличиваСтся, Π° Π±ΠΎΡ‡ΠΊΠ° пСрСмСщаСтся Π² Π½ΠΎΠ²ΠΎΠ΅ мСсто Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅.

...

Π‘ΠΎΠ²Π΅Ρ‚ Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ

ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ объСм энСргии ΠΈΠ³Ρ€ΠΎΠΊΠ° Π² ΠΈΠ³Ρ€Π΅ High Seas Ρ€Π°Π²Π΅Π½ 45, поэтому ΠΊΠΎΠ΄, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠΉ ΡΠ½Π΅Ρ€Π³ΠΈΡŽ ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΏΡ€ΠΈ столкновСнии с Π±ΠΎΡ‡ΠΊΠΎΠΉ, восстанавливаСт ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ энСргии Π΄ΠΎ 45. Если Π±Ρ‹ Π½Π΅ Π±Ρ‹Π»ΠΎ этого ограничСния, Ρ‚ΠΎ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ энСргии ΠΌΠΎΠ³ Π±Ρ‹ бСсконСчно расти, Π·Π°Π³ΠΎΡ€ΠΎΠ΄ΠΈΠ² ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ спасСнных ΠΏΠΈΡ€Π°Ρ‚ΠΎΠ².

Π‘ΠΏΡ€Π°ΠΉΡ‚Ρ‹ ΠΌΠΈΠ½Ρ‹ ΠΈ осьминога ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ update() Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ спрайты Π±ΠΎΡ‡ΠΊΠΈ ΠΈ ΠΏΠΈΡ€Π°Ρ‚Π°. Но этот ΠΊΠΎΠ΄ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ ΠΎΡ‚ обновлСния Π±ΠΎΡ‡Π΅ΠΊ ΠΈ ΠΏΠΈΡ€Π°Ρ‚ΠΎΠ², ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ число ΠΌΠΈΠ½ ΠΈ осьминогов большС числа Π±ΠΎΡ‡Π΅ΠΊ ΠΈ ΠΏΠΈΡ€Π°Ρ‚ΠΎΠ². ИмСнно поэтому Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ†ΠΈΠΊΠ» for:

for (int i = 0; i < 5; i++) {

// Update the mine and squid sprites

mineSprite[i].update();

squidSprite[i].update();

// ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ столкновСниС спрайта ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΈ спрайта ΠΌΠΈΠ½Ρ‹

if (playerSprite.collidesWith(mineSprite[i], true)) {

// воспроизвСсти Π·Π²ΡƒΠΊ ΠΏΠΎΠ΄Ρ€Ρ‹Π²Π° Π½Π° ΠΌΠΈΠ½Π΅

try {

minePlayer.start();

}

catch (MediaException me) {

}

// ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΡΠ½Π΅Ρ€Π³ΠΈΡŽ ΠΈΠ³Ρ€ΠΎΠΊΠ°

energy -= 10; //Π£ΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΡΠ½Π΅Ρ€Π³ΠΈΡŽ ΠΈΠ³Ρ€ΠΎΠΊΠ°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ подорвался Π½Π° ΠΌΠΈΠ½Π΅

// ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΌΠΈΠ½Ρƒ Π² Π½ΠΎΠ²ΠΎΠ΅ случайноС ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

placeSprite(mineSprite[i], landLayer); //Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ спрайт ΠΌΠΈΠ½Ρ‹ снова, помСстив Π΅Π³ΠΎ Π² Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

}

// ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ столкновСниС спрайта ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΈ спрута

if (playerSprite.collidesWith(squidSprite[i], true)) {

// воспроизвСсти Π·Π²ΡƒΠΊ столкновСния со спрутом

try {

Manager.playTone(ToneControl.C4, 250, 100);

}

catch (MediaException me) {

}

// ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΡΠ½Π΅Ρ€Π³ΠΈΡŽ ΠΈΠ³Ρ€ΠΎΠΊΠ°

energy -= 5; //Π£ΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΡΠ½Π΅Ρ€Π³ΠΈΡŽ ΠΈΠ³Ρ€ΠΎΠΊΠ°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΏΠΎΠΏΠ°Π» Π² Ρ‰ΡƒΠΏΠ°Π»ΡŒΡ†Π° спрута

}

}

Π‘Π½Π°Ρ‡Π°Π»Π° выполняСтся ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ спрайта, Π·Π°Ρ‚Π΅ΠΌ провСряСтся столкновСниС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠ³Ρ€ΠΎΠΊΠΎΠΌ ΠΈ ΠΌΠΈΠ½ΠΎΠΉ, Π² этом случаС воспроизводится Π·Π²ΡƒΠΊΠΎΠ²ΠΎΠΉ эффСкт, ΠΈ энСргия ΠΈΠ³Ρ€ΠΎΠΊΠ° ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ. Мина Ρ‚Π°ΠΊΠΆΠ΅ пСрСмСщаСтся Π² Π½ΠΎΠ²ΠΎΠ΅ мСсто, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ это дСлаСтся с ΠΏΠΈΡ€Π°Ρ‚ΠΎΠΌ ΠΈ Π±ΠΎΡ‡ΠΊΠΎΠΉ.

Π‘Ρ‚ΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ со спрайтом осьминога выполняСтся ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅. ВмСсто Π·Π²ΡƒΠΊΠΎΠ²ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° воспроизводится Ρ‚ΠΎΠ½, Π° энСргия ΠΈΠ³Ρ€ΠΎΠΊΠ° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ. Однако спрайт осьминога Π½Π΅ пСрСмСщаСтся Π² Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ встрСча корабля с осьминогом Π½Π΅ заканчиваСтся гибСлью ΠΈΠ»ΠΈ исчСзновСниСм Π±Π΅Π΄Π½ΠΎΠ³ΠΎ морского ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ³ΠΎ. Π’ этом случаС ΠΈΠ³Ρ€ΠΎΠΊ тСряСт ΡΠ½Π΅Ρ€Π³ΠΈΡŽ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½ находится Π² Ρ‰ΡƒΠΏΠ°Π»ΡŒΡ†Π°Ρ… монстра. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ осьминогов опаснСС ΠΌΠΈΠ½, нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ энСргии мСньшС.

ЭнСргия корабля слуТит ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ продолТСния ΠΈΠ³Ρ€Ρ‹. Когда энСргия становится мСньшС 0, ΠΈΠ³Ρ€Π° заканчиваСтся. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄, Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΠΈΠΉ ΠΈΠ³Ρ€Ρƒ Π² случаС Π³ΠΈΠ±Π΅Π»ΠΈ пиратского судна:

if (energy <= 0) {

// ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΌΡƒΠ·Ρ‹ΠΊΡƒ

try {

musicPlayer.stop();

}

catch (MediaException me) {

}

// воспроизвСсти Π·Π²ΡƒΠΊ Ρ‚ΠΎΠ½ΡƒΡ‰Π΅Π³ΠΎ корабля

try {

gameoverPlayer.start();

}

catch (MediaException me) {

}

// ΡΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΡ€Π°Π±Π»ΡŒ ΠΈΠ³Ρ€ΠΎΠΊΠ°

playerSprite.setVisible(false); //Π‘ΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΡ€Π°Π±Π»ΡŒ ΠΈΠ³Ρ€ΠΎΠΊΠ°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΠ³Ρ€Π° ΠΎΠΊΠΎΠ½Ρ‡Π΅Π½Π°

gameOver = true;

}

ΠŸΡ€ΠΈ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ ΠΈΠ³Ρ€Ρ‹ сначала останавливаСтся ΠΌΡƒΠ·Ρ‹ΠΊΠ°, Π·Π°Ρ‚Π΅ΠΌ воспроизводится Π±ΡƒΠ»ΡŒΠΊΠ°ΡŽΡ‰ΠΈΠΉ Π·Π²ΡƒΠΊ Ρ‚ΠΎΠ½ΡƒΡ‰Π΅Π³ΠΎ корабля. Π—Π°Ρ‚Π΅ΠΌ спрайт ΠΈΠ³Ρ€ΠΎΠΊΠ° скрываСтся, для Ρ‡Π΅Π³ΠΎ вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ setVisible(). Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΡ€Π°Π±Π»ΡŒ Π·Π°Ρ‚ΠΎΠ½ΡƒΠ». НаконСц, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ gameOver присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true, Ρ‡Ρ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ³Ρ€Π° Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π°. ПослСдний Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° update() создаСт Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ слоя:

if (++waterDelay > 3) {

if (++waterTile[0] > 3)

waterTile[0] = 1;

waterLayer.setAnimatedTile(-1, waterTile[0]);

if (–waterTile[1] < 1)

waterTile[1] = 3;

waterLayer.setAnimatedTile(-2, waterTile[1]);

waterDelay = 0;

}

Π’ случаС Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ слоя ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π΄Π²ΡƒΡ… Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… элСмСнтов измСняСт свой Π²ΠΈΠ΄. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ анимация слоя выполняСтся Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹Ρ… направлСниях, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ элСмСнты слоя Π½Π΅ Π±Ρ‹Π»ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

Π’Ρ‹Π²ΠΎΠ΄ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ экрана

Благодаря ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρƒ слоСв Π²Ρ‹Π²ΠΎΠ΄ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ экрана вСсьма прост. Π’ листингС 12.3 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° draw() класса HSCanvas.

Листинг 12.3. ΠœΠ΅Ρ‚ΠΎΠ΄ draw() класса HSCanvas Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ строку, ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Π΅ слои ΠΈ строку Β«Game OverΒ» ΠΏΡ€ΠΈ нСобходимости

private void draw(Graphics g) {

// вывСсти ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ строку, ΠΎΡΡ‚Π°Π²ΡˆΡƒΡŽΡΡ ΡΠ½Π΅Ρ€Π³ΠΈΡŽ ΠΈ число спасСнных ΠΏΠΈΡ€Π°Ρ‚ΠΎΠ²

g.drawImage(infoBar, 0, 0, Graphics.TOP | Graphics.LEFT);

g.setColor(0, 0, 0); // Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ

g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_MEDIUM));

g.drawString("Energy:", 2, 1, Graphics.TOP | Graphics.LEFT);

g.drawString("Pirates saved: " + piratesSaved, 88, 1, Graphics.TOP |

Graphics.LEFT);

g.setColor(32, 32, 255); // синий //Π‘ΠΏΡ€Π°Π²Π° ΠΎΡ‚ тСкста Energy вывСсти ΠΎΡΡ‚Π°Π²ΡˆΡƒΡŽΡΡ ΡΠ½Π΅Ρ€Π³ΠΈΡŽ ΠΊΠ°ΠΊ синий ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ

g.fillRect(40, 3, energy, 12);

// вывСсти слои

layers.paint(g, 0, infoBar.getHeight());

if (gameOver) {

// вывСсти сообщСниС ΠΎΠ± ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ ΠΈΠ³Ρ€Ρ‹ ΠΈ Π½Π°Π±Ρ€Π°Π½Π½Ρ‹Π΅ ΠΎΡ‡ΠΊΠΈ

g.setColor(255, 255, 255); // white

g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_LARGE));

g.drawString("GAME OVER", 90, 40, Graphics.TOP | Graphics.HCENTER);

g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD,

Font.SIZE_MEDIUM)); //ВывСсти число спасСнных ΠΏΠΈΡ€Π°Ρ‚ΠΎΠ²

if (piratesSaved == 0)

g.drawString("You didn\'t save any pirates.", 90, 70,

Graphics.TOP | Graphics.HCENTER);

else if (piratesSaved == 1)

g.drawString("You saved only 1 pirate.", 90, 70,

Graphics.TOP | Graphics.HCENTER);

else

g.drawString("You saved " + piratesSaved + " pirates.", 90, 70,

Graphics.TOP | Graphics.HCENTER);

}

// вывСсти Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ

flushGraphics();

}

ΠŸΠ΅Ρ€Π²Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ строку – Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ΅ растровоС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ энСргии ΠΈ число спасСнных ΠΏΠΈΡ€Π°Ρ‚ΠΎΠ². Π˜Π½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ энСргии рисуСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° fillRect(), Π° тСкст выводится ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ drawString().

Π‘Π»ΠΎΠΈ выводятся Π² сСрСдинС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° draw(), для этого Π½ΡƒΠΆΠ½Π° лишь ΠΎΠ΄Π½Π° строка ΠΊΠΎΠ΄Π°, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ слСдуСт сообщСниС ΠΎΠ± ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ ΠΈΠ³Ρ€Ρ‹. Если ΠΈΠ³Ρ€Π° Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π°, Ρ‚ΠΎ выводится сообщСниС ΠΎ ΠΊΠΎΠ½Ρ†Π΅ ΠΈΠ³Ρ€Ρ‹ – Β«GAME OVERΒ», послС Ρ‡Π΅Π³ΠΎ появляСтся число спасСнных ΠΏΠΈΡ€Π°Ρ‚ΠΎΠ² – счСт ΠΈΠ³Ρ€Ρ‹.

Начало Π½ΠΎΠ²ΠΎΠΉ ΠΈΠ³Ρ€Ρ‹

Π’ Ρ€Π°Π·ΡŠΡΡΠ½Π΅Π½ΠΈΡΡ… я нСсколько Ρ€Π°Π· ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π» ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ newGame(). ΠŸΡ€ΠΈΡˆΠ»Π° ΠΏΠΎΡ€Π° ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Листинг 12.4 содСрТит ΠΊΠΎΠ΄ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π΅Π³ΠΎ Π½ΠΎΠ²ΡƒΡŽ ΠΈΠ³Ρ€Ρƒ.

Листинг 12.4. ΠœΠ΅Ρ‚ΠΎΠ΄ newGame() класса HSCanvas ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ³Ρ€Ρ‹, измСняСт ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ пиратского корабля ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ воспроизвСдСниС ΠΌΡƒΠ·Ρ‹ΠΊΠΈ

private void newGame() {

// ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ³Ρ€Ρ‹

gameOver = false;

energy = 45;

piratesSaved = 0;

// ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ спрайт пиратского корабля

playerSprite.setVisible(true); //Π’ Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠ³Ρ€Ρ‹ Π²Π°ΠΆΠ½ΠΎ вывСсти Π½Π° экран ΠΊΠΎΡ€Π°Π±Π»ΡŒ ΠΈΠ³Ρ€ΠΎΠΊΠ°

// ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠΊΠ½ΠΎ Π²ΠΈΠ΄Π°

placeSprite(playerSprite, landLayer); //ΠŸΡ€ΠΈ запускС ΠΈΠ³Ρ€Ρ‹ ΠΊΠΎΡ€Π°Π±Π»ΡŒ ΠΈΠ³Ρ€ΠΎΠΊΠ° помСщаСтся Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅ случайно

xView = playerSprite.getX() – ((getWidth() – playerSprite.getWidth()) / 2);

yView = playerSprite.getY() – ((getHeight() – playerSprite.getHeight()) / 2);

layers.setViewWindow(xView, yView, getWidth(),

getHeight() – infoBar.getHeight());

// Π½Π°Ρ‡Π°Ρ‚ΡŒ воспроизвСдСниС ΠΌΡƒΠ·Ρ‹ΠΊΠΈ

try {

musicPlayer.setMediaTime(0);

musicPlayer.start();

}

catch (MediaException me) {

}

}

ΠœΠ΅Ρ‚ΠΎΠ΄ newGame() начинаСтся с ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Ρ€Π΅Ρ… основных ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ energy Ρ€Π°Π²Π½ΠΎ максимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ 45. Π—Π°Ρ‚Π΅ΠΌ спрайт ΠΈΠ³Ρ€ΠΎΠΊΠ° становится Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ, для Ρ‡Π΅Π³ΠΎ вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ setVisible(). Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ ΠΈΠ³Ρ€Ρ‹ спрайт пиратского корабля исчСзаСт с экрана. Π‘ΠΏΡ€Π°ΠΉΡ‚ ΠΈΠ³Ρ€ΠΎΠΊΠ° помСщаСтся Π² случайноС мСсто Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅, для Ρ‡Π΅Π³ΠΎ вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ placeSprite(). Π’ соотвСтствии с этим измСняСтся ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° Π²ΠΈΠ΄Π° Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ спрайт оказался Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ ΠΎΠΊΠ½Π°. Π’ ΠΊΠΎΠ½Ρ†Π΅ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² setMediaTime() ΠΈ start() начинаСтся воспроизвСдСниС ΠΌΡƒΠ·Ρ‹ΠΊΠΈ.

БСзопасноС Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ спрайтов