📄 socanvas.java
字号:
/* * To change this template, choose Tools | Templates * and open the template in the editor. *//** * * @author Administrator */import javax.microedition.lcdui.*;import javax.microedition.lcdui.game.*;import java.util.*;import java.io.*;import javax.microedition.media.*;import javax.microedition.media.control.*;public class SOCanvas extends GameCanvas implements Runnable { private Random rand; private Display display; private boolean sleeping; private long frameDelay; 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; public SOCanvas(Display d) { super(true); display = d; // Initialize the random number generator rand = new Random(); // Set the frame rate (30 fps) frameDelay = 33; } public void start() { // Set the canvas as the current screen display.setCurrent(this); // Initialize the background and small car images try { background = Image.createImage("/StarryNight.png"); smallCar = Image.createImage("/SmallCar.png"); } catch (IOException e) { System.err.println("Failed loading images!"); } // Initialize the sprites try { // Create the player car sprite 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++) { // Create the Blobbo alien sprites blobboSprite[i] = new MovingSprite(Image.createImage("/Blobbo.png"), 20, 21, 3, 2, MovingSprite.BA_BOUNCE, this); blobboSprite[i].setFrameSequence(sequence5); blobboSprite[i].setVisible(false); // Create the Jelly alien sprites jellySprite[i] = new MovingSprite(Image.createImage("/Jelly.png"), 21, 21, 1, 4, MovingSprite.BA_BOUNCE, this); jellySprite[i].setFrameSequence(sequence3); jellySprite[i].setVisible(false); // Create the Timmy alien sprites timmySprite[i] = new MovingSprite(Image.createImage("/Timmy.png"), 21, 11, 5, 0, MovingSprite.BA_WRAP, this); timmySprite[i].setFrameSequence(sequence3); timmySprite[i].setVisible(false); // Create the explosion sprites explosionSprite[i] = new Sprite(Image.createImage("/Explosion.png"), 21, 21); explosionSprite[i].setVisible(false); } // Create the missile sprites 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!"); } // Create the layer manager and add the sprites to it 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]); } // Initialize the music and wave players 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) { } // Start a new game newGame(); // Start the animation thread sleeping = false; Thread t = new Thread(this); t.start(); } public void stop() { // Close the music and wave players musicPlayer.close(); explosionPlayer.close(); gameoverPlayer.close(); // Stop the animation sleeping = true; } public void run() { Graphics g = getGraphics(); // The main game loop while (!sleeping) { update(); draw(g); try { Thread.sleep(frameDelay); } catch (InterruptedException ie) {} } } private void update() { // Check to see whether the game is being restarted if (gameOver) { int keyState = getKeyStates(); if ((keyState & FIRE_PRESSED) != 0) // Start a new game newGame(); // The game is over, so don't update anything return; } // Process user input to move the car and fire missiles int keyState = getKeyStates(); if ((keyState & LEFT_PRESSED) != 0) { playerSprite.setXSpeed(-2); } else if ((keyState & RIGHT_PRESSED) != 0) { playerSprite.setXSpeed(4); } if ((keyState & FIRE_PRESSED) != 0) { // Play a fire sound try { Manager.playTone(ToneControl.C4 + 12, 10, 100); } catch (Exception e) { } addMissile(playerSprite); } playerSprite.update(); // Update the alien and explosion sprites for (int i = 0; i < 3; i++) { if (blobboSprite[i].isVisible()) { blobboSprite[i].update(); blobboSprite[i].nextFrame(); } if (jellySprite[i].isVisible()) { jellySprite[i].update(); jellySprite[i].nextFrame(); } if (timmySprite[i].isVisible()) { timmySprite[i].update(); timmySprite[i].nextFrame(); } if (explosionSprite[i].isVisible()) { if (explosionSprite[i].getFrame() < 3) explosionSprite[i].nextFrame(); else explosionSprite[i].setVisible(false); } } // Check for collisions and update the missile sprites for (int i = 0; i < 10; i++) { if (missileSprite[i].isVisible()) { // Is the missile a player missile? if (missileSprite[i].getFrame() == 0) { for (int j = 0; j < 3; j++) { // Did the missile hit a Blobbo alien? if (blobboSprite[j].isVisible()) if (missileSprite[i].collidesWith(blobboSprite[j], false)) { // Play a destruction sound try { Manager.playTone(ToneControl.C4 - 6, 100, 100); } catch (Exception e) { } // Create an explosion addExplosion(blobboSprite[j]); // Hide the sprites and update the score blobboSprite[j].setVisible(false); missileSprite[i].setVisible(false); score += 10; break; } // Did the missile hit a Jelly alien? if (jellySprite[j].isVisible()) if (missileSprite[i].collidesWith(jellySprite[j], false)) { // Play a destruction sound try { Manager.playTone(ToneControl.C4 - 6, 100, 100); } catch (Exception e) { } // Create an explosion addExplosion(jellySprite[j]); // Hide the sprites and update the score jellySprite[j].setVisible(false); missileSprite[i].setVisible(false); score += 15; break; } // Did the missile hit a Timmy alien? if (timmySprite[j].isVisible()) if (missileSprite[i].collidesWith(timmySprite[j], false)) { // Play a destruction sound try {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -