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

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

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

private void checkBounds() {

// ΡΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ спрайт ΠΏΡ€ΠΈ нСобходимости

if (action == BA_HIDE) { //Π‘ΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ спрайт ΠΏΡ€ΠΈ ΡƒΠ΄Π°Ρ€Π΅Π½ΠΈΠΈ ΠΎ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ экрана

if (getX() < 0 || getX() > (canvas.getWidth() – getWidth()) ||

getY() < 0 || getY() > (canvas.getHeight() – getHeight()))

setVisible(false);

}

// ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ спрайт ΠΊ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠΌΡƒ ΠΊΡ€Π°ΡŽ экрана

else if (action == BA_WRAP) { //ΠŸΡ€ΠΈ достиТСнии Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ экрана спрайтом ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ спрайт ΠΊ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠΌΡƒ ΠΊΡ€Π°ΡŽ

//Wrap the sprite around the edges of the screen

if (getX() < -getWidth())

setPosition(canvas.getWidth(), getY());

else if (getX() > canvas.getWidth())

setPosition(-getWidth(), getY());

if (getY() < -getHeight())

setPosition(getX(), canvas.getHeight());

else if (getY() > canvas.getHeight())

setPosition(getX(), -getHeight());

}

// ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ двиТСния спрайта Π½Π° ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠ΅

else if (action == BA_BOUNCE) { //ΠŸΡ€ΠΈ ΡƒΠ΄Π°Ρ€Π΅Π½ΠΈΠΈ спрайта ΠΎ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ экрана ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ скорости Π½Π° ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠ΅

// Bounce the sprite at the edges of the screen

if (getX() < 0 || getX() > (canvas.getWidth() – getWidth()))

xSpeed = -xSpeed;

if (getY() < 0 || getY() > (canvas.getHeight() – getHeight()))

ySpeed = -ySpeed;

}

// ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ спрайт

else { //ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ спрайт ΠΏΠΎ достиТСнии Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ экрана

if (getX() < 0)

setPosition(0, getY());

else if (getX() > (canvas.getWidth() – getWidth()))

setPosition(canvas.getWidth() – getWidth(), getY());

if (getY() < 0)

setPosition(getX(), 0);

else if (getY() > (canvas.getHeight() – getHeight()))

setPosition(getX(), canvas.getHeight() – getHeight());

}

}

ΠœΠ΅Ρ‚ΠΎΠ΄ checkBounds() β€“ это рабочая лошадка класса MovingSprite. Π•Π³ΠΎ Ρ†Π΅Π»ΡŒΡŽ являСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° столкновСния спрайта с Π³Ρ€Π°Π½ΠΈΡ†Π΅ΠΉ экрана ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° этого события. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ провСряСт, Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ дСйствиС BA_HIDE, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ соотвСтствуСт ΡΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΡŽ спрайта. Π—Π°Ρ‚Π΅ΠΌ провСряСтся, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ дСйствиС, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ константС BA_WRAP, ΠΈ ΠΏΡ€ΠΈ столкновСнии спрайта с Π³Ρ€Π°Π½ΠΈΡ†Π΅ΠΉ экрана ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ спрайт ΠΊ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅. ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π° BA_BOUNCE соотвСтствуСт ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π½ΠΈΡŽ спрайта ΠΎΡ‚ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ экрана. И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, послСдний Π±Π»ΠΎΠΊ условия ΠΌΠ΅Ρ‚ΠΎΠ΄Π° checkBounds() просто останавливаСт спрайт ΠΏΠΎ достиТСнии ΠΈΠΌ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ экрана. Π’ классС MovingSprite Π΅ΡΡ‚ΡŒ ряд Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Ρ‹ Π΅Ρ‰Π΅ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΠ½ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ доступ ΠΊ значСниям ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… скоростСй ΠΏΠΎ осям X ΠΈ Y:

public int getXSpeed() {

return xSpeed;

}

public int getYSpeed() {

return ySpeed;

}

public void setXSpeed(int xMoveSpeed) {

xSpeed = xMoveSpeed;

}

public void setYSpeed(int yMoveSpeed) {

ySpeed = yMoveSpeed;

}

Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… xSpeed ΠΈ ySpeed. Новый класс MovingSprite Π³ΠΎΡ‚ΠΎΠ² ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅, поэтому Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° создании ΠΊΠΎΠ΄Π° самой ΠΈΠ³Ρ€Ρ‹ Space Out. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… класса.

ОбъявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… класса

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ³Ρ€Ρ‹ Space Out располоТСны Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ классС холста – SOCanvas. Π­Ρ‚ΠΎΡ‚ класс ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° всю ΠΈΠ³Ρ€ΠΎΠ²ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ SOCanvas достаточно Π²Π΅Π»ΠΈΠΊ, я Ρ€Π°Π·Π±ΠΈΠ» Π΅Π³ΠΎ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ части, ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ класса доступСн Π½Π° ΠΏΡ€ΠΈΠ»Π°Π³Π°Π΅ΠΌΠΎΠΌ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-дискС. НиТС пСрСчислСны Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅:

private LayerManager layers;

private Image background;

private Image smallCar;

private MovingSprite playerSprite;

private MovingSprite[] blobboSprite = new MovingSprite[3];

private MovingSprite[] jellySprite = new MovingSprite[3];

private MovingSprite[] timmySprite = new MovingSprite[3];

private MovingSprite[] missileSprite = new MovingSprite[10];

private Sprite[] explosionSprite = new Sprite[3]; //Π‘ΠΏΡ€Π°ΠΉΡ‚Ρ‹ Π²Π·Ρ€Ρ‹Π²ΠΎΠ² Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ, поэтому ΠΎΠ½ΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ спрайты

private Player musicPlayer;

private Player explosionPlayer;

private Player gameoverPlayer;

private boolean gameOver;

private int score, carsLeft;

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

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

Π”Π°Π»Π΅Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса Player, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΡƒΠ·Ρ‹ΠΊΠΎΠΉ Π² ΠΈΠ³Ρ€Π΅. НаконСц, состояниС ΠΈΠ³Ρ€Ρ‹ описываСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ gameOver, score ΠΈ carsLeft.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° start()

ΠœΠ΅Ρ‚ΠΎΠ΄ start() Π² ΠΈΠ³Ρ€Π΅ Space Out ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ΅Π½, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ выполняСт всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. НапримСр, Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΊΠΎΠ΄Π° создаСтся Π·Π²Π΅Π·Π΄Π½ΠΎΠ΅ Π½ΠΎΡ‡Π½ΠΎΠ΅ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ малСнького автомобиля:

try {

background = Image.createImage("/StarryNight.png");

smallCar = Image.createImage("/SmallCar.png");

}

catch (IOException e) {

System.err.println("Failed loading images!");

}

Когда эти Π΄Π²Π° изобраТСния Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΠΈΠ³Ρ€ΠΎΠ²Ρ‹ΠΌ спрайтам. Если Π²Ρ‹ вспомнитС, Ρ‚ΠΎ Π² ΠΈΠ³Ρ€Π΅ Π΅ΡΡ‚ΡŒ спрайт автомобиля, управляСмый ΠΈΠ³Ρ€ΠΎΠΊΠΎΠΌ, Π° Ρ‚Π°ΠΊΠΆΠ΅ нСсколько спрайтов Ρ€Π°ΠΊΠ΅Ρ‚, ΠΏΡ€ΠΈΡˆΠ΅Π»ΡŒΡ†Π΅Π² ΠΈ Π²Π·Ρ€Ρ‹Π²ΠΎΠ². ВсС эти спрайты, ΠΊΡ€ΠΎΠΌΠ΅ спрайта Π²Π·Ρ€Ρ‹Π²Π°, β€“ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса MovingSprite; спрайт Π²Π·Ρ€Ρ‹Π²Π° являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ класса Sprite, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ΠΏΠΎΠ΄Π²ΠΈΠΆΠ΅Π½. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΉ всС ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ спрайты:

try {

// ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ спрайт автомобиля ΠΈΠ³Ρ€ΠΎΠΊΠ°

playerSprite = new MovingSprite(Image.createImage("/Car.png"), 0, 0,

MovingSprite.BA_STOP, this); //Π‘ΠΏΡ€Π°ΠΉΡ‚ ΠΈΠ³Ρ€ΠΎΠΊΠ° останавливаСтся ΠΏΠΎ достиТСнии Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ экрана

int sequence5[] = { 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 4, 4, 3, 3, 2, 2, 1, 1 }; //Π­Ρ‚Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ позволяСт Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚ΡŒ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ Ρ„Ρ€Π΅ΠΉΠΌΠΎΠ² спрайтов

}

int sequence3[] = { 0, 0, 0, 1, 1, 1, 2, 2, 2, 1, 1, 1 };

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

// ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ спрайт ΠΏΡ€ΠΈΡˆΠ΅Π»ΡŒΡ†Π° Π‘Π»ΠΎΠ±Π±ΠΎ

blobboSprite[i] = new MovingSprite(Image.createImage("/Blobbo.png"), 20, 21, 3, 2,

MovingSprite.BA_BOUNCE, this); //Π‘ΠΏΡ€Π°ΠΉΡ‚ ΠΏΡ€ΠΈΡˆΠ΅Π»ΡŒΡ†Π° Π‘Π»ΠΎΠ±Π±ΠΎ отталкиваСтся ΠΎΡ‚ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ экрана

blobboSprite[i].setFrameSequence(sequence5);

blobboSprite[i].setVisible(false);

// Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ спрайт ΠΏΡ€ΠΈΡˆΠ΅Π»ΡŒΡ†Π° Π”ΠΆΠ΅Π»Π»ΠΈ

jellySprite[i] = new MovingSprite(Image.createImage("/Jelly.png"), 21, 21, 1, 4,

MovingSprite.BA_BOUNCE, this); //Π‘ΠΏΡ€Π°ΠΉΡ‚ ΠΏΡ€ΠΈΡˆΠ΅Π»ΡŒΡ†Π° Π”ΠΆΠ΅Π»Π»ΠΈ отталкиваСтся ΠΎΡ‚ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ экрана

jellySprite[i].setFrameSequence(sequence3);

jellySprite[i].setVisible(false);

// Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ спрайт ΠΏΡ€ΠΈΡˆΠ΅Π»ΡŒΡ†Π° Π’ΠΈΠΌΠΌΠΈ

timmySprite[i] = new MovingSprite(Image.createImage("/Timmy.png"), 21, 11, 5, 0,

MovingSprite.BA_WRAP, this); //Если спрайт ΠΏΡ€ΠΈΡˆΠ΅Π»ΡŒΡ†Π° Π’ΠΈΠΌΠΌΠΈ достигаСт Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ экрана, Ρ‚ΠΎ ΠΎΠ½ появляСтся Ρƒ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹

timmySprite[i].setFrameSequence(sequence3);

timmySprite[i].setVisible(false);

// Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ спрайты Π²Π·Ρ€Ρ‹Π²ΠΎΠ²

explosionSprite[i] = new Sprite(Image.createImage("/Explosion.png"), 21, 21);

explosionSprite[i].setVisible(false);

}

// ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ спрайты Ρ€Π°ΠΊΠ΅Ρ‚

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

missileSprite[i] = new MovingSprite(Image.createImage("/Missiles.png"),

11, 11, 0, 0,MovingSprite.BA_HIDE, this);

missileSprite[i].setVisible(false); //ВсС спрайты Π² ΠΈΠ³Ρ€Π΅ сначала скрыты

}

}

catch (IOException e) {

System.err.println("Failed loading images!");

}

Π‘ΠΏΡ€Π°ΠΉΡ‚ ΠΈΠ³Ρ€ΠΎΠΊΠ° создаСтся ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса MovingSprite с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ достиТСния спрайтом Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ экрана. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ спрайты – это Ρ‚Π°ΠΊΠΆΠ΅ двиТущиСся спрайты, Π½ΠΎ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ скоростями ΠΈ дСйствиями ΠΏΠΎ достиТСнии Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ экрана. НапримСр, ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΡˆΠ΅Π»ΡŒΡ†Π° Jelly ΠΏΠΎ оси Π₯ Ρ€Π°Π²Π½Π° 1, Π° ΠΏΠΎ оси Y – 4, Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ спрайта ΠΏΡ€ΠΈΡˆΠ΅Π»ΡŒΡ†Π° Timmy ΠΏΠΎ оси X Ρ€Π°Π²Π½Π° 5, Π° ΠΏΠΎ оси Y – 0. Π‘ΠΏΡ€Π°ΠΉΡ‚Ρ‹ ΠΏΡ€ΠΈΡˆΠ΅Π»ΡŒΡ†Π΅Π² Blobbo ΠΈ Jelly ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ Π³Ρ€Π°Π½ΠΈΡ† экрана, спрайт Timmy ΠΏΡ€ΠΈ достиТСнии Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ экрана появляСтся Ρƒ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠΉ стороны, Π° спрайты Ρ€Π°ΠΊΠ΅Ρ‚ ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎ достиТСнии Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ экрана. НаконСц, Π² ΠΈΠ³Ρ€Π΅ Π΅ΡΡ‚ΡŒ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ спрайт – спрайт Π²Π·Ρ€Ρ‹Π²Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ остаСтся Π½Π΅ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½Ρ‹ΠΌ. ВсС спрайты Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ спрайта ΠΈΠ³Ρ€ΠΎΠΊΠ° ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ ΠΈΠ³Ρ€Ρ‹. Π—Π°Ρ‚Π΅ΠΌ спрайты Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ слоСв, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΡΡ‚ΡŒ ΠΈ отрисовку спрайтов. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ слоСв:

layers = new LayerManager();

layers.append(playerSprite);

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

layers.append(blobboSprite[i]);

layers.append(jellySprite[i]);

layers.append(timmySprite[i]);

layers.append(explosionSprite[i]);

}

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

layers.append(missileSprite[i]);

}

НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π² ΠΈΠ³Ρ€Π΅ Space Out это Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ порядок добавлСния спрайтов Π² ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ слоСв опрСдСляСт порядок Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΡ… Π½Π° экран, Z-Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ, β€“ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ спрайт, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° append(), Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ Π½Π° экран ΠΏΠΎΠ²Π΅Ρ€Ρ… ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ…. Но это Π½Π΅ относится ΠΊ ΠΈΠ³Ρ€Π΅ Space Out, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ порядок Π²Ρ‹Π²ΠΎΠ΄Π° спрайтов Π½Π° экран Π² Π½Π΅ΠΉ Π½Π΅ Π²Π°ΠΆΠ΅Π½. Π—Π²ΡƒΠΊΠΎΠ²Ρ‹Π΅ эффСкты ΠΈ ΠΌΡƒΠ·Ρ‹ΠΊΠ° ΠΈΠ³Ρ€Π°ΡŽΡ‚ Π²Π°ΠΆΠ½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π² ΠΈΠ³Ρ€Π΅ Space Out, Ρ‡Ρ‚ΠΎ, вСроятно, Π½Π΅ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Π²Π°Ρ‚Π΅Π»Π΅ΠΉ:

try {

InputStream is = getClass().getResourceAsStream("Music.mid");

musicPlayer = Manager.createPlayer(is, "audio/midi");

musicPlayer.prefetch();

musicPlayer.setLoopCount(-1);

is = getClass().getResourceAsStream("Explosion.wav");

explosionPlayer = Manager.createPlayer(is, "audio/X-wav");

explosionPlayer.prefetch();

is = getClass().getResourceAsStream("GameOver.wav");

gameoverPlayer = Manager.createPlayer(is, "audio/X-wav");

gameoverPlayer.prefetch();

}

catch (IOException ioe) {

}

catch (MediaException me) {

}

Из ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ для проигрывания ΠΌΡƒΠ·Ρ‹ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Π²Π°Ρ‚Π΅Π»ΡŒ MIDI-Π°ΡƒΠ΄ΠΈΠΎ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π²Π° проигрыватСля для воспроизвСдСния ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… Π·Π²ΡƒΠΊΠΎΠ²Ρ‹Ρ… эффСктов (Π·Π²ΡƒΠΊΠΈ Π²Π·Ρ€Ρ‹Π²Π° ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΈΠ³Ρ€Ρ‹). ПослСдний Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° start() β€“ это Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΈΠ³Ρ€Ρƒ:

newGame();

Π§ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅ Π²Ρ‹ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚Π΅ΡΡŒ с Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° newGame(). А ΠΏΠΎΠΊΠ° Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΌΠ΅Ρ‚ΠΎΠ΄ update() β€“ сСрдцС Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… ΠΌΠΈΠ΄Π»Π΅Ρ‚ΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Space Out.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° update()

ΠœΠ΅Ρ‚ΠΎΠ΄ update() вызываСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π·Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ Ρ†ΠΈΠΊΠ» ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°, ΠΎΠ½ выполняСт ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ спрайтов, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ столкновСний, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΈΡˆΠ΅Π»ΡŒΡ†Π΅Π², Π° Ρ‚Π°ΠΊΠΆΠ΅ обСспСчиваСт Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈΠ³Ρ€Ρ‹. ΠœΠ΅Ρ‚ΠΎΠ΄ update() начинаСтся с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ окончания ΠΈΠ³Ρ€Ρ‹, Ссли это Ρ‚Π°ΠΊ, Ρ‚ΠΎ начинаСтся новая ΠΈΠ³Ρ€Π° Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ клавиши Огонь.