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

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

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

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ записСй ΡƒΠ΄Π°Π»Π΅Π½ΠΎ, ΠΌΠ΅Ρ‚ΠΎΠ΄ writeHiScores() создаСт Π½ΠΎΠ²ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, для Ρ‡Π΅Π³ΠΎ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° openRecordStore() пСрСдаСтся true. Π—Π°Ρ‚Π΅ΠΌ выполняСтся Ρ†ΠΈΠΊΠ» ΠΏΠΎ всСм элСмСнтам массива hiScores, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· элСмСнтов записываСтся Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. Когда всС Ρ€Π΅ΠΊΠΎΡ€Π΄Ρ‹ записаны, Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ закрываСтся, для Ρ‡Π΅Π³ΠΎ вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ closeRecordStore().

Π’Ρ‹ создали ΠΊΠΎΠ΄, ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ список Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ² Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠ³Ρ€Ρ‹, ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ список Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΏΠΎ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ ΠΈΠ³Ρ€Ρ‹. Но я Π½Π΅ упомянул ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ обновляСтся список Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ². ΠŸΡ€ΠΈ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ ΠΈΠ³Ρ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ update() Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ updateHiScores(), ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‰ΠΈΠΉ список Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ²:

if (carsLeft– == 0) {

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

try {

musicPlayer.stop();

}

catch (MediaException me) {

}

// воспроизвСсти Π·Π²ΡƒΠΊ окончания ΠΈΠ³Ρ€Ρ‹

try {

gameoverPlayer.start();

}

catch (MediaException me) {

}

// ΡΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ спрайт автомобиля

playerSprite.setVisible(false);

// ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ список Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ²

updateHiScores(); //Π’Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° updateHiScores() – это всС, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для обновлСния списка Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ²

gameOver = true;

return;

}

ΠœΠ΅Ρ‚ΠΎΠ΄ updateHiScores() β€“ это Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ провСряСт, ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π»ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΈΠ³Ρ€ΠΎΠΊΠ° Π² список Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ². Если Π΄Π°, Ρ‚ΠΎ ΠΎΠ½ добавляСт этот Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, удаляя наимСньший Ρ€Π΅ΠΊΠΎΡ€Π΄. Π’ листингС 19.3 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Листинг 19.3. ΠœΠ΅Ρ‚ΠΎΠ΄ updateHiScores() обновляСт список Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ²

private void updateHiScores() {

// ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π»ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΈΠ³Ρ€ΠΎΠΊΠ° Π² список Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ²

int i;

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

if (score > hiScores[i]) //Если счСт большС, Ρ‡Π΅ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€Π΅ΠΊΠΎΡ€Π΄, Ρ‚ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΈΠ³Ρ€Ρ‹ Π² список Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ²

break;

// ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² список Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ².

if (i < 5) {

for (int j = 4; j > i; j–) { //Π¦ΠΈΠΊΠ» смСщаСт мСньшиС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π² ΠΊΠΎΠ½Π΅Ρ† списка Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ²

hiScores[j] = hiScores[j – 1];

}

hiScores[i] = score;

}

}

ΠœΠ΅Ρ‚ΠΎΠ΄ updateHiScores() сначала провСряСт, ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π»ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Π½Π°Π±Ρ€Π°Π½Π½Ρ‹ΠΉ ΠΈΠ³Ρ€ΠΎΠΊΠΎΠΌ, Π² список Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ². Если Π΄Π°, Ρ‚ΠΎ ΠΎΠ½ добавляСтся Π² список Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ², ΠΏΡ€ΠΈ этом наимСньший Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ удаляСтся ΠΈΠ· списка. Π’ спискС Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ² содСрТится Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 5 записСй, поэтому ΠΏΡ€Π΅ΠΆΠ½ΠΈΠ΅ Ρ€Π΅ΠΊΠΎΡ€Π΄Ρ‹ ΡƒΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ мСсто Π½ΠΎΠ²Ρ‹ΠΌ. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ список Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ² Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ хранится Π² памяти Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°, ΠΏΠΎΠΊΠ° ΠΈΠ³Ρ€Π° сущСствуСт, Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Ссли Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ stop().

ПослСднСС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΈΠ³Ρ€Ρ‹ Space Out 2 касаСтся ΠΌΠ΅Ρ‚ΠΎΠ΄Π° draw(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ список Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ² Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ заставкС. Π’ листингС 19.4 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° draw().

Листинг 19.4. ΠœΠ΅Ρ‚ΠΎΠ΄ draw() Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ заставку ΠΈ список Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ² ΠΏΠΎ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ ΠΈΠ³Ρ€Ρ‹

private void draw(Graphics g) {

// вывСсти Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π²Π΅Π·Π΄Π½ΠΎΠ³ΠΎ Π½Π΅Π±Π°

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

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

layers.paint(g, 0, 0);

if (gameOver) {

// вывСсти ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ заставки ΠΈ список Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ²

g.drawImage(splash, 90, 10, Graphics.TOP | Graphics.HCENTER);

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

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

Font.SIZE_LARGE));

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

g.drawString(Integer.toString(hiScores[i]), 90, 90 + (i * 15),

Graphics.TOP | Graphics.HCENTER);

}

else {

// вывСсти ΠΎΡΡ‚Π°Π²ΡˆΠ΅Π΅ΡΡ число Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ ΠΈ счСт

for (int i = 0; i < carsLeft; i++)

g.drawImage(smallCar, 2 + (i * 20), 2, Graphics.TOP | Graphics.LEFT);

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

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

Font.SIZE_MEDIUM));

g.drawString(Integer.toString(score), 175, 2, Graphics.TOP |

Graphics.RIGHT);

}

// вывСсти Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ Π½Π° экран

flushGraphics();

}

ΠœΠ΅Ρ‚ΠΎΠ΄ draw() ΠΈΠ³Ρ€Ρ‹ Space Out 2 устроСн нСсколько ΠΈΠ½Π°Ρ‡Π΅, Ρ‡Π΅ΠΌ Π΅Π³ΠΎ прСдыдущая вСрсия. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½ содСрТит условный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ if, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰ΠΈΠΉ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠ΅ ΠΈΠ³Ρ€Ρ‹. Если ΠΈΠ³Ρ€Π° ΠΎΠΊΠΎΠ½Ρ‡Π΅Π½Π°, Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ draw() Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° экран заставку со списком Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ². Если ΠΈΠ³Ρ€Π° Π½Π΅ ΠΎΠΊΠΎΠ½Ρ‡Π΅Π½Π°, Ρ‚ΠΎ Π½Π° экран выводятся ΠΎΡΡ‚Π°Π²ΡˆΠ΅Π΅ΡΡ число Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ ΠΈ счСт Π² ΠΈΠ³Ρ€Π΅. Π‘Π»ΠΎΠΈ выводятся Π²Π½Π΅ зависимости ΠΎΡ‚ статуса ΠΈΠ³Ρ€Ρ‹.

ВСстированиС ΠΈΠ³Ρ€Ρ‹

Аналогично ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΈΠΊΡƒ, ΠΈΠ³Ρ€Ρƒ Space Out 2 достаточно просто Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. На самом Π΄Π΅Π»Π΅ это Π΄Π°ΠΆΠ΅ вСсСло, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ придСтся ΠΏΠΎΠΈΠ³Ρ€Π°Ρ‚ΡŒ нСсколько Ρ€Π°Π·, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ список Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ². На рис. 19.5 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° заставка ΠΈΠ³Ρ€Ρ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ выводится список Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ². Если ΠΈΠ³Ρ€Π° Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅, Ρ‚ΠΎ список Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ² пуст.

Рис. 19.5. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запускС ΠΈΠ³Ρ€Ρ‹ Π½Π° экранС появляСтся заставка, список Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ² состоит ΠΈΠ· ΠΎΠ΄Π½ΠΈΡ… Π½ΡƒΠ»Π΅ΠΉ

ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΈΠ³Ρ€Π° пытаСтся ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ список Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ² ΠΈΠ· Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° записСй, ΠΎΠ΄Π½Π°ΠΊΠΎ Ссли Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π½Π΅ сущСствуСт, Ρ‚ΠΎ всС элСмСнты списка Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ² Ρ€Π°Π²Π½Ρ‹ 0. Когда Π²Ρ‹ нСсколько Ρ€Π°Π· ΠΏΠΎΠΈΠ³Ρ€Π°Π΅Ρ‚Π΅ Π² Space Out 2, Π² список Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ² Π±ΡƒΠ΄ΡƒΡ‚ занСсСны Π½ΠΎΠ²Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹. Если Π²Ρ‹ Π²Ρ‹ΠΉΠ΄Π΅Ρ‚Π΅ ΠΈΠ· ΠΈΠ³Ρ€Ρ‹, Ρ‚ΠΎ список Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ сохранСн Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ записСй. Когда ΠΈΠ³Ρ€Π° запускаСтся снова, Ρ€Π΅ΠΊΠΎΡ€Π΄Ρ‹ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈΠ· Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°. На рис. 19.6 ΠΏΠΎΠΊΠ°Π·Π°Π½ список Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ², Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΈΠ· памяти.

Рис. 19.6. Бписок Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ² считываСтся ΠΈΠ· памяти Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°

Бписок Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ² ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ³Ρ€Ρ‹ Space Out 2, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ отслСТиваСт ваши Π»ΡƒΡ‡ΡˆΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.

...

Π’ ΠΊΠΎΠΏΠΈΠ»ΠΊΡƒ Π˜Π³Ρ€ΠΎΠΊΠ°

ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π½Π΅ судитС строго ΠΎ ΠΌΠΎΠΈΡ… способностях ΠΊΠ°ΠΊ ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΏΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ Π½Π° рис. 19.6. Π₯отя Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅Π²Π·ΠΎΠΉΡ‚ΠΈ ΠΌΠΎΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, тСстируя ΠΈΠ³Ρ€Ρƒ, я Π½Π΅ ΠΏΡ€Π΅Ρ‚Π΅Π½Π΄ΡƒΡŽ Π½Π° Π·Π²Π°Π½ΠΈΠ΅ мастСра ΠΈΠ³Ρ€Ρ‹ Space Out. НСмного ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ, ΠΈ всС получится!

РСзюмС

Π₯отя списки Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ² Π½Π΅ Ρ‚Π°ΠΊ популярны Π½Π° сСгодняшний дСнь, ΠΊΠ°ΠΊ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π° ΡˆΠΈΡ€ΠΎΠΊΠΎΠ³ΠΎ распространСния Π°Ρ€ΠΊΠ°Π΄, Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ ΡΠ±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… со счСтов. По сСй дСнь Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ваши ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Π΅ достиТСния ΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Ρ‹. Бписки Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ² – Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ способ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠ΅ ΠΈΠ³Ρ€Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ стимулом для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ². ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, списки Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ² Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ Π²ΠΎ всСх ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΈΠ³Ρ€Π°Ρ…, Π½ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈΡ…, Ссли это цСлСсообразно. Π˜Π³Ρ€Π° Space Out – Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠΉ ΠΈΠ³Ρ€Ρ‹.

Π­Ρ‚Π° Π³Π»Π°Π²Π° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ ΠΊΠ½ΠΈΠ³Ρƒ, я надСюсь, ΠΎΠ½Π° послуТила Π²Π°ΠΌ Π½Π°Ρ‡Π°Π»ΠΎΠΌ Π΄ΠΎΡ€ΠΎΠ³ΠΈ Π² ΠΌΠΈΡ€ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ программирования ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΈΠ³Ρ€. Π’Ρ‹, вСроятно, Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ знания для создания собствСнных ΠΈΠ³Ρ€ ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². Π― ТСлаю Π²Π°ΠΌ успСхов Π² Ρ€Π°Π±ΠΎΡ‚Π΅ Π½Π°Π΄ собствСнными ΠΈΠ³Ρ€Π°ΠΌΠΈ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΉΡ‚ΠΈ Π½Π° ΠΌΠΎΠΉ сайт ΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ идСями создания ΠΈΠ³Ρ€ Π½Π° Ρ„ΠΎΡ€ΡƒΠΌΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ посвящСн этой ΠΊΠ½ΠΈΠ³Π΅(http://www.michaelmorrison.com/).

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Подобно Π”ΠΆΠΎΡ€Π΄ΠΆΡƒ ΠšΠ°ΡΡ‚Π°Π½Ρ†Π° (George Cantanza) ΠΈΠ· классичСского эпизода Β«Π‘Π΅ΠΉΠ½Ρ„Π΅Π»Π΄Π°Β» (Seinfeld), Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свои знания Π² области ΠΈΠ³Ρ€ ΠΈ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ свой слСд Π² спискС Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ². Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π»ΡŽΠ±ΡƒΡŽ ΠΈΠ³Ρ€Ρƒ, Π½Π°Π±Π΅Ρ€ΠΈΡ‚Π΅ большоС число ΠΎΡ‡ΠΊΠΎΠ² ΠΈ внСситС сСбя Π² ΠΈΠ³Ρ€ΠΎΠ²ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ. Π’Ρ‹ смоТСтС ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свои достиТСния Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ родствСнникам ΠΈ Π΄Ρ€ΡƒΠ·ΡŒΡΠΌ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ это ΠΏΠΎΠ΄Ρ‚ΠΎΠ»ΠΊΠ½Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ список Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ², ΠΊΡƒΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π° ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»Ρ‹.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ А Java Game API

Java – это Π½Π΅ просто язык программирования; это Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° классов ΠΈ интСрфСйсов, которая ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π”Π°ΠΆΠ΅ язык MIDP API, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠΌ Java, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ создан для программирования Π½Π° ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°Ρ…, содСрТит вСсьма интСрСсныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ MIDP API имССтся ΠΏΠ°ΠΊΠ΅Ρ‚ классов, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ для ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΈΠ³Ρ€. Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ называСтся javax.microedition.lcdui.game. Он Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² вСрсии 2.0 MIDP API Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° многочислСнныС запросы Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΈΠ³Ρ€.

ΠšΠ»Π°ΡΡΡ‹ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ javax.microedition.lcdui.game часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Β«API для ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΈΠ³Ρ€Β»; эти классы ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ MIDP 1.0 ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Π²Π°ΠΌ Π½Π΅ придСтся ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π°Ρ‚ΡŒ вСлосипСд, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΈΠ³Ρ€Ρ‹ Π² MIDP 2.0 API. ВСроятно, самой Π²Π°ΠΆΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π² API являСтся встроСнная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ с Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, которая максимально ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈΠ³Ρ€ с ΠΏΠ»Π°Π²Π½ΠΎΠΉ графичСской Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠ΅ΠΉ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, API ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΠΊ анимация спрайтов, Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ слои, поиск ошибок ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

API для ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΈΠ³Ρ€ Π² MIDP 2.0 Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΡΡ‚ΡŒ классов:

β–Ί GameCanvas;

β–Ί Layer;

β–Ί LayerManager;

β–Ί Sprite;

β–Ί TiledLayer.

ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π°Π·Π΄Π΅Π»Ρ‹ Π΄Π°Π½Π½ΠΎΠ³ΠΎ прилоТСния ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ справочник ΠΏΠΎ API для ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΈΠ³Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит описания классов MIDP 2.0, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ для ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΈΠ³Ρ€.

Класс GameCanvas

Класс GameCanvas происходит ΠΈΠ· стандартного класса Canvas; ΠΎΠ½ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ схСму, которая ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ с Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ класс GameCanvas Π² качСствС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ интСрфСйса ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΈΠ³Ρ€ Π½Π° экранС Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π²Π°ΠΌ странным, Π½ΠΎ класс GameCanvas ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ Π² ΠΈΠ³Ρ€Π°Ρ…. Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ классы J2ME, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ Π² классС GameCanvas Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ эффСктивна, поэтому ΠΎΠ½Π° Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ высоким трСбованиям, ΠΏΡ€Π΅Π΄ΡŠΡΠ²Π»ΡΠ΅ΠΌΡ‹ΠΌ ΠΊ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ ΠΈΠ³Ρ€Π°ΠΌ.

ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹

Π’ классС GameCanvas Π·Π°Π΄Π°Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ константы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ клавиш Π½Π° мобильном Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π΅:

β–Ί LEFT_PRESSED – клавиша ←;

β–Ί RIGHT_PRESSED – клавиша β†’;

β–Ί UP_PRESSED – клавиша ↑;

β–Ί DOWN_PRESSED – клавиша ↓;

β–Ί FIRE_PRESSED – клавиша Primary Fire;

β–Ί GAME_A_PRESSED – клавиша Game A (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ);

β–Ί GAME_B_PRESSED – клавиша Game B (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ);

β–Ί GAME_C_PRESSED – клавиша Game C (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ);

β–Ί GAME_D_PRESSED – клавиша Game D (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ).

Π­Ρ‚ΠΈ константы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ вмСстС с ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠΎΠΉ getKeyStates(), которая описана Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹Β» описания класса GameCanvas. ВсС константы клавиш ΡΠ²Π»ΡΡŽΡ‚ΡΡ масками Π±ΠΈΡ‚Π°, Π° это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π±Ρ‹Π»Π° Π½Π°ΠΆΠ°Ρ‚Π° опрСдСлСнная клавиша ΠΈΠ»ΠΈ Π½Π΅Ρ‚.