📄 socanvas.java
字号:
Manager.playTone(ToneControl.C4 - 6, 100, 100); } catch (Exception e) { } // Create an explosion addExplosion(timmySprite[j]); // Hide the sprites and update the score timmySprite[j].setVisible(false); missileSprite[i].setVisible(false); score += 20; break; } } } // The missile is an alien missile else { // Did the missile hit the player car sprite if (missileSprite[i].collidesWith(playerSprite, false)) { // Play a wave sound for the car getting destroyed try { explosionPlayer.start(); } catch (MediaException me) { } // Create an explosion addExplosion(playerSprite); // Reset the player car sprite playerSprite.setPosition(0, getHeight() - playerSprite.getHeight() - 10); playerSprite.setXSpeed(4); playerSprite.setYSpeed(0); // Hide the missile sprite missileSprite[i].setVisible(false); // See whether the game is over if (carsLeft-- == 0) { // Stop the music try { musicPlayer.stop(); } catch (MediaException me) { } // Play a wave sound for the game ending try { gameoverPlayer.start(); } catch (MediaException me) { } // Hide the player car playerSprite.setVisible(false); gameOver = true; return; } } } missileSprite[i].update(); } } // Randomly add a new alien (chance is based on score) if (score < 250) { if (rand.nextInt() % 40 == 0) addAlien(); } else if (score < 500) { if (rand.nextInt() % 20 == 0) addAlien(); } else if (score < 1000) { if (rand.nextInt() % 10 == 0) addAlien(); } else { if (rand.nextInt() % 5 == 0) addAlien(); } // Randomly fire a missile from an alien if (rand.nextInt() % 4 == 0) { switch (Math.abs(rand.nextInt() % 3)) { // Fire a missile from a Blobbo alien case 0: for (int i = 0; i < 3; i++) if (blobboSprite[i].isVisible()) { addMissile(blobboSprite[i]); break; } break; // Fire a missile from a Jelly alien case 1: for (int i = 0; i < 3; i++) if (jellySprite[i].isVisible()) { addMissile(jellySprite[i]); break; } break; // Fire a missile from a Timmy alien case 2: for (int i = 0; i < 3; i++) if (timmySprite[i].isVisible()) { addMissile(timmySprite[i]); break; } break; } } } private void draw(Graphics g) { // Draw the starry night background g.drawImage(background, 0, 0, Graphics.TOP | Graphics.LEFT); // Draw the layers layers.paint(g, 0, 0); // Draw the remaining cars and the score 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); if (gameOver) { // Draw the game over message and score 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)); g.drawString("Final Score : " + score, 90, 70, Graphics.TOP | Graphics.HCENTER); } // Flush the offscreen graphics buffer flushGraphics(); } private void newGame() { // Initialize the game variables gameOver = false; score = 0; carsLeft = 3; // Initialize the player car sprite playerSprite.setPosition(0, getHeight() - playerSprite.getHeight() - 10); playerSprite.setXSpeed(4); playerSprite.setYSpeed(0); playerSprite.setVisible(true); // Initialize the alien and explosion sprites for (int i = 0; i < 3; i++) { blobboSprite[i].setVisible(false); jellySprite[i].setVisible(false); timmySprite[i].setVisible(false); explosionSprite[i].setVisible(false); } // Initialize the missile sprites for (int i = 0; i < 10; i++) { missileSprite[i].setVisible(false); } // Start the music (at the beginning) try { musicPlayer.setMediaTime(0); musicPlayer.start(); } catch (MediaException me) { } } private void placeSprite(Sprite sprite) { // Place the sprite at a random position sprite.setPosition(Math.abs(rand.nextInt() % (getWidth() - 50) + 25), Math.abs(rand.nextInt() % (getHeight() - 100)) + 25); } private void addAlien() { switch (Math.abs(rand.nextInt() % 3)) { // Add a Blobbo alien case 0: for (int i = 0; i < 3; i++) if (!blobboSprite[i].isVisible()) { placeSprite(blobboSprite[i]); blobboSprite[i].setVisible(true); break; } break; // Add a Jelly alien case 1: for (int i = 0; i < 3; i++) if (!jellySprite[i].isVisible()) { placeSprite(jellySprite[i]); jellySprite[i].setVisible(true); break; } break; // Add a Timmy alien case 2: for (int i = 0; i < 3; i++) if (!timmySprite[i].isVisible()) { placeSprite(timmySprite[i]); timmySprite[i].setVisible(true); break; } break; } } private void addMissile(MovingSprite sprite) { for (int i = 0; i < 10; i++) if (!missileSprite[i].isVisible()) { switch (Math.abs(sprite.getXSpeed())) { // Fire a Blobbo missile case 3: missileSprite[i].setFrame(1); missileSprite[i].setPosition(sprite.getX() + 5, sprite.getY() + 21); missileSprite[i].setXSpeed(sprite.getXSpeed() / 2); missileSprite[i].setYSpeed(5); break; // Fire a Jelly missile case 1: missileSprite[i].setFrame(2); missileSprite[i].setPosition(sprite.getX() + 5, sprite.getY() + 21); missileSprite[i].setXSpeed(0); missileSprite[i].setYSpeed(4); break; // Fire a Timmy missile case 5: missileSprite[i].setFrame(3); missileSprite[i].setPosition(sprite.getX() + 5, sprite.getY() + 11); missileSprite[i].setXSpeed(sprite.getXSpeed() / 2); missileSprite[i].setYSpeed(3); break; // Fire a player missile case 2: case 4: missileSprite[i].setFrame(0); missileSprite[i].setPosition(sprite.getX() + 6, sprite.getY() - 11); missileSprite[i].setXSpeed(0); missileSprite[i].setYSpeed(-4); break; } // Show the missile missileSprite[i].setVisible(true); break; } } private void addExplosion(MovingSprite sprite) { for (int i = 0; i < 3; i++) if (!explosionSprite[i].isVisible()) { // Add an explosion where the moving sprite is located explosionSprite[i].setFrame(0); explosionSprite[i].setPosition(sprite.getX(), sprite.getY()); explosionSprite[i].setVisible(true); break; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -