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

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

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

private TiledLayer landLayer;

private int waterDelay;

private int[] waterTile = { 1, 3 }; //Π’ слоС Π²ΠΎΠ΄Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π΄Π²Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… изобраТСния

private Image infoBar;

private Sprite playerSprite;

private DriftSprite[] pirateSprite = new DriftSprite[2];

private DriftSprite[] barrelSprite = new DriftSprite[2];

private DriftSprite[] mineSprite = new DriftSprite[5];

private DriftSprite[] squidSprite = new DriftSprite[5];

private Player musicPlayer;

private Player rescuePlayer;

private Player minePlayer;

private Player gameoverPlayer;

private boolean gameOver;

private int energy, piratesSaved;

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ нСсколько ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для хранСния ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° слоСв, полоТСния ΠΎΠΊΠ½Π° Π²ΠΈΠ΄Π°, слоя Π²ΠΎΠ΄Ρ‹ ΠΈ слоя ΡΡƒΡˆΠΈ. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ waterDelay ΠΈ waterTile ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‚ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ Π²ΠΎΠ΄Ρ‹ Π² Π·Π°ΠΌΠΎΡ‰Π΅Π½Π½ΠΎΠΌ слоС Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ слоя. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² ΠΈΠ³Ρ€Π΅ Π΄Π²Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… элСмСнта Π²ΠΎΠ΄Ρ‹, пСрСмСнная waterTile – это массив Ρ†Π΅Π»Ρ‹Ρ… чисСл, состоящий ΠΈΠ· Π΄Π²ΡƒΡ… элСмСнтов.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ infoBar Ρ…Ρ€Π°Π½ΠΈΡ‚ растровоС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ ΠΊΠ°ΠΊ Ρ„ΠΎΠ½ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ строки, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ отобраТаСтся энСргия корабля ΠΈ число спасСнных ΠΏΠΈΡ€Π°Ρ‚ΠΎΠ². Π—Π°Ρ‚Π΅ΠΌ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ нСсколько спрайтов: пиратский ΠΊΠΎΡ€Π°Π±Π»ΡŒ, Π΄Π²Π° ΠΏΠΈΡ€Π°Ρ‚Π° ΠΈ ΠΏΠ°Ρ€Π° Π±ΠΎΡ‡Π΅ΠΊ, ΠΏΡΡ‚ΡŒ ΠΌΠΈΠ½ ΠΈ ΠΏΡΡ‚ΡŒ осьминогов. Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² ΠΈΠ³Ρ€Π΅ большС Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ спрайты. ПозТС Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ спрайты, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ иллюзию Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΡ… число ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»ΠΎΡΡŒ.

Π—Π²ΡƒΠΊΠΎΠ²Ρ‹Π΅ эффСкты ΠΈ ΠΌΡƒΠ·Ρ‹ΠΊΠ° Π² ΠΈΠ³Ρ€Π΅ воспроизводятся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса Player. И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, состояниС ΠΈΠ³Ρ€Ρ‹ отраТаСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ energy ΠΈ piratesSaved.

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

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

try {

infoBar = Image.createImage("/InfoBar.png");

waterLayer = new TiledLayer(24, 24, Image.createImage("/Water.png"), 32, 32);

landLayer = new TiledLayer(24, 24, Image.createImage("/Land.png"), 32, 32);

}

catch (IOException e) {

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

}

Если Π²Ρ‹ вспомнитС, Ρ‚ΠΎ Π² Π²ΠΎΠ΄Π½ΠΎΠΌ слоС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π΄Π²Π° Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… элСмСнта, ΠΈΠΌΠΈΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΎΠ΄Ρ‹. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΉ эти элСмСнты:

waterLayer.createAnimatedTile(1); waterLayer.createAnimatedTile(3);

Π”Π²Π° Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… элСмСнта ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ индСксы (1 ΠΈ 3), это Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ элСмСнты ΠΏΡ€ΠΈ создании Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ. Если использовались ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ значСния, Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹. Π’Π°ΠΊΠΆΠ΅ Π² этой Π³Π»Π°Π²Π΅ Π²Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π²ΠΎΠ΄Π½Ρ‹ΠΉ слой, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ являСтся массив Ρ†Π΅Π»Ρ‹Ρ… чисСл waterMap, содСрТащий ΠΊΠ°Ρ€Ρ‚Ρƒ слоя. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π·Π°ΠΌΠΎΡ‰Π΅Π½Π½Ρ‹ΠΉ слой значСниями ΠΈΠ· этого массива:

for (int i = 0; i < waterMap.length; i++) {

int column = i % 24;

int row = (i – column) / 24;

waterLayer.setCell(column, row, waterMap[i]);

}

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ слоя, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ waterDelay, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ счСтчик, Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ:

waterDelay = 0;

Подобно Π²ΠΎΠ΄Π½ΠΎΠΌΡƒ слою, слой ΡΡƒΡˆΠΈ описываСтся ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ индСксов landMap, содСрТаниС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Ρ€Π°Π½Π΅Π΅. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ выполняСт ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ слоя ΡΡƒΡˆΠΈ:

for (int i = 0; i < landMap.length; i++) {

int column = i % 24;

int row = (i – column) / 24;

landLayer.setCell(column, row, landMap[i]);

}

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

try {

playerSprite = new Sprite(Image.createImage("/PlayerShip.png"), 43, 45);

int sequence2[] = { 0, 0, 0, 1, 1, 1 };

int sequence4[] = { 0, 0, 1, 1, 2, 2, 3, 3 };

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

pirateSprite[i] = new DriftSprite(Image.createImage("/Pirate.png"), //Π§Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ ΠΈ пятый ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ конструктора DriftSprite() – это ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ спрайта ΠΈ слой-Π±Π°Ρ€ΡŒΠ΅Ρ€ соотвСтствСнно

29, 29, 2, landLayer);

pirateSprite[i].setFrameSequence(sequence2);

placeSprite(pirateSprite[i], landLayer);

barrelSprite[i] = new DriftSprite(Image.createImage("/Barrel.png"),

24, 22, 1, landLayer);

barrelSprite[i].setFrameSequence(sequence4);

placeSprite(barrelSprite[i], landLayer); //ΠœΠ΅Ρ‚ΠΎΠ΄ placeSprite () случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ спрайт Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅

}

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

mineSprite[i] = new DriftSprite(Image.createImage("/Mine.png"),

27, 23, 1, landLayer);

mineSprite[i].setFrameSequence(sequence2);

placeSprite(mineSprite[i], landLayer);

squidSprite[i] = new DriftSprite(Image.createImage("/Squid.png"),

24, 35, 3, landLayer);

squidSprite[i].setFrameSequence(sequence2);

placeSprite(squidSprite[i], landLayer);

}

}

catch (IOException e) {

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

}

Π‘ΠΏΡ€Π°ΠΉΡ‚ ΠΈΠ³Ρ€ΠΎΠΊΠ° создаСтся Π² Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Ρ€Π΅ΠΉΠΌΠ° пСрСдаСтся конструктору. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ спрайты – это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса DriftSprite, ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ скорости. НапримСр, спрайты ΠΏΠΈΡ€Π°Ρ‚ΠΎΠ² ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ 2, Π° спрайты ΠΌΠΈΠ½ ΠΈ Π±ΠΎΡ‡Π΅ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ со ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ 1. Бмысл Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΈΡ€Π°Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ»Π°Π²Π°Ρ‚ΡŒ, поэтому ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ быстрСС Π±ΠΎΡ‡Π΅ΠΊ ΠΈ ΠΌΠΈΠ½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π° самом Π΄Π΅Π»Π΅ просто Π΄Ρ€Π΅ΠΉΡ„ΡƒΡŽΡ‚. Аналогично, спрайты осьминогов ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ 3. Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ пСрСмСнная landLayer выполняСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±Π°Ρ€ΡŒΠ΅Ρ€Π° для всСх спрайтов.

...

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

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

Π—Π°ΠΌΠΎΡ‰Π΅Π½Π½Ρ‹Π΅ слои ΠΈ ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Π΅ спрайты ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ слоСв, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ заботится ΠΎΠ± ΠΈΡ… упорядочивании ΠΈ создании. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ добавляСт спрайты Π² ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ слоСв:

layers = new LayerManager();

layers.append(playerSprite);

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

layers.append(pirateSprite[i]);

layers.append(barrelSprite[i]);

}

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

layers.append(mineSprite[i]);

layers.append(squidSprite[i]);

}

layers.append(landLayer);

layers.append(waterLayer); //ПослСдним добавляСтся слой Π²ΠΎΠ΄Ρ‹, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ ΠΏΠΎΠ΄ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ элСмСнтами

НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ порядок, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ добавляСтС спрайты Π² ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ слоСв, ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ΅Π½, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ спрайт Π±ΡƒΠ΄Π΅Ρ‚ выводится Π½Π° экран ΠΏΠΎΠ²Π΅Ρ€Ρ… ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Π΅ слои Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² послСднюю ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ. Π—Π²ΡƒΠΊΠΎΠ²Ρ‹Π΅ эффСкты ΠΈ ΠΌΡƒΠ·Ρ‹ΠΊΠ° ΠΈΠ³Ρ€Π°ΡŽΡ‚ большоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΈΠ³Ρ€, ΠΈ High Seas – Π½Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄ устанавливаСт ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Π²Π°Ρ‚Π΅Π»ΠΈ:

try {

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

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

musicPlayer.prefetch();

musicPlayer.setLoopCount(-1);

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

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

rescuePlayer.prefetch();

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

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

minePlayer.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(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСт всю ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΌΠΈΠ΄Π»Π΅Ρ‚Π°.

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

Как Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, ΠΌΠ΅Ρ‚ΠΎΠ΄ update() вызываСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π·Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ Ρ†ΠΈΠΊΠ», ΠΎΠ½ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ спрайтов, слоСв, провСряСт столкновСния, ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ обСспСчиваСт Ρ€Π°Π±ΠΎΡ‚Ρƒ прилоТСния. Π’ ΠΈΠ³Ρ€Π΅ High Seas этот ΠΌΠ΅Ρ‚ΠΎΠ΄ начинаСтся с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ окончания ΠΈΠ³Ρ€Ρ‹. Если Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ, начинаСтся новая ΠΈΠ³Ρ€Π°, для Ρ‡Π΅Π³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ «огонь»:

if (gameOver) {

int keyState = getKeyStates();

if ((keyState & FIRE_PRESSED) != 0)

// Start a new game

newGame();

// ΠΈΠ³Ρ€Π° ΠΎΠΊΠΎΠ½Ρ‡Π΅Π½Π°, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π΅ трСбуСтся

return;

}

Для Π½Π°Ρ‡Π°Π»Π° ΠΈΠ³Ρ€Ρ‹ вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ newGame(), ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ update() Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅Ρ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ сразу послС Π²Ρ‹Π·ΠΎΠ²Π° этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ нСобходимости ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΡƒΡŽ ΠΈΠ³Ρ€Ρƒ. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ функция ΠΌΠ΅Ρ‚ΠΎΠ΄Π° update() β€“ это ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… клавиш со стрСлками ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΎΠΊΠ½ΠΎ Π²ΠΈΠ΄Π°:

int keyState = getKeyStates();

int xMove = 0, yMove = 0;

if ((keyState & LEFT_PRESSED) != 0) {

xMove = -4;

playerSprite.setFrame(3);

}

else if ((keyState & RIGHT_PRESSED) != 0) {

xMove = 4; //Π§Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΡ€Π°Π±Π»ΡŒ ΠΈΠ³Ρ€ΠΎΠΊΠ° пСрСдвигался быстрСС, Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

playerSprite.setFrame(1);

}

if ((keyState & UP_PRESSED) != 0) {

yMove = -4;

playerSprite.setFrame(0);

}

else if ((keyState & DOWN_PRESSED) != 0) {

yMove = 4;

playerSprite.setFrame(2);

}

if (xMove != 0 || yMove != 0) { //Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° Π²ΠΈΠ΄Π° ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ спрайт ΠΈΠ³Ρ€ΠΎΠΊΠ° Π² соотвСтствии с Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ клавишСй

layers.setViewWindow(xView + xMove, yView + yMove, getWidth(),

getHeight() – infoBar.getHeight());

playerSprite.move(xMove, yMove);

}

Если Π²Ρ‹ вспомнитС, Π² ΠΈΠ³Ρ€Π΅ High Seas пиратский ΠΊΠΎΡ€Π°Π±Π»ΡŒ остаСтся Π½Π΅ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½Ρ‹ΠΌ Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ экрана, Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ. Код ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° достигаСт этого эффСкта, пСрСмСщая ΠΎΠΊΠ½ΠΎ Π²ΠΈΠ΄Π° Π² соотвСтствии с Π½Π°ΠΆΠ°Ρ‚Ρ‹ΠΌΠΈ клавишами. Π‘Π½Π°Ρ‡Π°Π»Π° опрСдСляСтся, Π½Π° ΠΊΠ°ΠΊΠΎΠ΅ расстояниС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΠΊΠ½ΠΎ пСрСмСщаСтся Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° setViewWindow(). Π‘ΠΏΡ€Π°ΠΉΡ‚ ΠΈΠ³Ρ€ΠΎΠΊΠ° пСрСмСщаСтся Π½Π° это расстояниС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ экрана. Класс DriftSprite провСряСт столкновСниС со слоСм-Π±Π°Ρ€ΡŒΠ΅Ρ€ΠΎΠΌ всСх спрайтов, ΠΊΡ€ΠΎΠΌΠ΅ спрайта пиратского корабля. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π΄Π°Π»Π΅Π΅ ΠΊΠΎΠ΄ выполняСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ столкновСния корабля ΠΈΠ³Ρ€ΠΎΠΊΠ° со слоСм-Π±Π°Ρ€ΡŒΠ΅Ρ€ΠΎΠΌ: