?? mygame.java
字號:
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.applet.AudioClip;
import java.io.File;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.Sequence;
import javax.sound.midi.Sequencer;
public class MyGame
extends Applet
implements Runnable, MouseListener, KeyListener {
static String he = new String();
// These are for the star field
int starsX[];
int starsY[];
Color starsC[];
int numStars = 30;
int speed = 6, xSize = 350, ySize = 500;
//some setting of the game
int meteorNumber = 5;
int score = 0;
double mx = 0;
double my = 0;
// create SkyMaster and meteor
SkyMaster skymaster = new SkyMaster();
meteor meteor[] = new meteor[10];
meteor meteor0 = new meteor();
meteor meteor1 = new meteor();
meteor meteor2 = new meteor();
meteor meteor3 = new meteor();
meteor meteor4 = new meteor();
meteor meteor5 = new meteor();
meteor meteor6 = new meteor();
meteor meteor7 = new meteor();
meteor meteor8 = new meteor();
meteor meteor9 = new meteor();
meteor meteor10 = new meteor();
public int buildTime = 0;
public double top;
// Sound resource
AudioClip blast, crash, kill;
Sequence sequence;
Sequencer sequencer;
//the resource of the game
//Image resource
//change the image to the comfortable size
int MySize=40;
int BulletSize=10;
int NucealSizeX=350;
int NucealSizeY=10;
Image loading;
Image offImage;
Image playerImage;
Image fire;
Image bomb1;
Image bomb2;
Image bomb3;
Image meteorImage;
Image bulletImage;
Image nucealImage;
Image meteorBulletImage;
Image backGndImage;
Image cover;
Graphics offGraphics;
Font gameOverFont = new Font("Braggadocio", Font.BOLD, 30);
Font gameStartFont = new Font("TimesRoman", Font.BOLD + Font.ITALIC, 50);
Font introFont = new Font("TimesRoman", Font.BOLD + Font.ITALIC, 20);
Font scoreFont = new Font("Arial", Font.BOLD + Font.ITALIC, 15);
int godTime = 0;
int fireTimer = 0;
int playerStatus = 0;
Thread mainThread;
public void init() {
mainThread = new Thread(this);
mainThread.start();
try {
PlayMusic();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//initial the starfield
initStars();
meteor[0] = meteor0;
meteor[1] = meteor1;
meteor[2] = meteor2;
meteor[3] = meteor3;
meteor[4] = meteor4;
meteor[5] = meteor5;
meteor[6] = meteor6;
//initial the SkyMaster
skymaster.setBombTimer(0);
skymaster.setBulletNumber(4);
for (int i = 0; i < meteorNumber; i++) {
meteor[i].setBombTimer(0);
for (int j = 0; j < meteor[i].getBulletNumber(); j++) {
meteor[i].setBulletStatus(j, 0);
meteor[i].setBulletSpeed(3);
}
}
for (int i = 0; i < skymaster.getBulletNumber(); i++) {
skymaster.setBulletStatus(i, 0);
}
addMouseListener(this);
addKeyListener(this);
//Image and Sound
offImage = createImage(getSize().width, getSize().height);
playerImage = getImage(getCodeBase(), "image/player.gif");
fire = getImage(getCodeBase(), "image/fire.gif");
meteorImage = getImage(getCodeBase(), "image/meteor.gif");
bulletImage = getImage(getCodeBase(), "image/BulletImage.gif");
nucealImage = getImage(getCodeBase(), "image/NucealImage.gif");
meteorBulletImage = getImage(getCodeBase(), "image/samllMeteor.gif");
backGndImage = getImage(getCodeBase(), "image/backGndImage.gif");
cover = getImage(getCodeBase(), "image/cover.gif");
bomb1 = getImage(getCodeBase(), "image/bomb1.gif");
bomb2 = getImage(getCodeBase(), "image/bomb2.gif");
bomb3 = getImage(getCodeBase(), "image/bomb3.gif");
loading = getImage(getCodeBase(), "image/loading2.jpg");
try {
blast = getAudioClip(getCodeBase(), "music/blast.au");
crash = getAudioClip(getCodeBase(), "music/collisn.au");
kill = getAudioClip(getCodeBase(), "music/mdestr.au");
} catch (Exception e) {
}
blast.play();
blast.stop();
crash.play();
crash.stop();
kill.play();
kill.stop();
}
// This creates the starfield in the background
public void initStars() {
starsX = new int[numStars];
starsY = new int[numStars];
starsC = new Color[numStars];
for (int i = 0; i < numStars; i++) {
starsX[i] = (int) ((Math.random() * xSize - 1) + 1);
starsY[i] = (int) ((Math.random() * ySize - 1) + 1);
starsC[i] = NewColor();
}
}
public void DrawPlayField(Graphics g) {
// Show stars
moveStars();
for (int a = 0; a < numStars; a++) {
g.setColor(starsC[a]);
g.drawRect(starsX[a], starsY[a], 1, 1);
}
}
// If a star in the background reaches the bottome then it will go back to the top
public void moveStars() {
for (int i = 0; i < numStars; i++) {
if (starsY[i] + 1 > ySize - (speed * 2)) {
starsY[i] = 0;
starsX[i] = (int) ((Math.random() * xSize - 1) + 1);
starsC[i] = NewColor();
} else {
starsY[i] += speed;
}
}
}
public Color NewColor() {
int[] rgb;
int t;
rgb = new int[3];
for (int i = 0; i < 3; i++)
rgb[i] = 0;
t = (int) (Math.random() * 3);
rgb[t] = (int) (Math.random() * 128 + 1) + 127;
return new Color(rgb[0], rgb[1], rgb[2]);
}
public void restart() {
skymaster.setLife(5);
skymaster.setNucealNumber(3);
skymaster.setStatus(1); //regenerate
skymaster.setX(175);
skymaster.setY(400);
skymaster.setBombTimer(0);
for (int i = 0; i < meteorNumber; i++) {
meteor[i].setBombTimer(0);
meteor[i].setStatus(0); //dead
for (int j = 0; j < meteor[i].getBulletNumber(); j++) {
meteor[i].setBulletStatus(j, 0); //no bullets
}
}
playerStatus = 1;
}
public void PlayMusic() throws Exception {
sequence = MidiSystem.getSequence(new File("music/background.mid"));
sequencer = MidiSystem.getSequencer();
sequencer.open();
sequencer.setSequence(sequence);
sequencer.start();
}
public void mousePressed(MouseEvent event) {
}
public void mouseReleased(MouseEvent event) {
}
public void mouseClicked(MouseEvent event) {
playerStatus = 1;
}
public void mouseEntered(MouseEvent event) {
}
public void mouseExited(MouseEvent event) {
}
public void keyTyped(KeyEvent event) {
}
public void keyPressed(KeyEvent event)
{
try{
if (playerStatus == 1) {
switch ((int) event.getKeyCode()) {
case 38 :
skymaster.setUp(true);
break;
case 40 :
skymaster.setDown(true);
break;
case 37 :
skymaster.setLeft(true);
break;
case 39 :
skymaster.setRight(true);
break;
case 32 :
blast.play();
for (int i = 0; i < skymaster.getBulletNumber(); i++) {
if (skymaster.getBulletStatus(i)
== 0 ) {
skymaster.setBulletStatus(i, 1); //fire
skymaster.setBulletX(i,skymaster.getX()+10);
skymaster.setBulletY(i,skymaster.getY());
break;
}
}
break;
case 10 :
if(skymaster.nucealNumber>0)
{ blast.play();
if(skymaster.getNucealStatus()==false)
{
skymaster.setNucealStatus(true);
skymaster.setNucealX(1);
skymaster.setNucealY(skymaster.getY());
for(int i=0;i<meteorNumber;i++)
for(int j=0;j<10;j++)
{
if(meteor[i].getBulletStatus(j)==1)
{ meteor[i].setBulletStatus(j,0);
meteor[i].nowBullet--;
}
}
skymaster.nucealNumber--;
}
}
break;
}
}
if ((playerStatus == 0 | playerStatus == 2) & event.getKeyCode()
== Event.ENTER) {
restart();
}
}
catch(Exception e)
{
}
}
public void keyReleased(KeyEvent event) {
switch ((int) event.getKeyCode()) {
case 38 :
skymaster.setUp(false);
break;
case 40 :
skymaster.setDown(false);
break;
case 37 :
skymaster.setLeft(false);
break;
case 39 :
skymaster.setRight(false);
break;
}
}
public void buildmeteor() {
if (buildTime > 30) {
for (int i = 0; i < meteorNumber; i++) {
if (meteor[i].getStatus() == 0 & meteor[i].getBombTimer() == 0)
//dead and bombed
{
meteor[i].setStatus(1); //regenerate
meteor[i].setY(0);
meteor[i].setX((double) chooseRandom(300));
buildTime = 0;
break;
}
}
}
}
public static final int chooseRandom(int x) {
return (int) (Math.random() * x);
}
public void drawBackGnd(Graphics g) {
g.setColor(Color.black);
g.fillRect(0, 0, getSize().width, getSize().height);
DrawPlayField(g);
g.setFont(scoreFont);
g.setColor(Color.white);
g.drawString("score " + score, 30, 30);
g.drawString("life " + skymaster.life, 30, 50);
g.drawString("nuceal weapon "+skymaster.nucealNumber,30,70);
}
public void drawFace(Graphics g) {
g.drawImage(loading, 0, 0, this);
}
public void paint(Graphics g) {
switch (playerStatus) {
case 0 : //start
drawFace(g);
g.setFont(gameStartFont);
g.setColor(Color.blue);
g.drawString("Sky Master", 50, 200);
g.setColor(Color.red);
g.drawString("Sky Master", 53, 203);
g.setColor(Color.white);
g.setFont(scoreFont);
// g.drawString("SHILEI 2004 All Rights Reserved",50,getSize().height-30);
g.drawString(
"Please press MOUSE LEFT BUTTON down",
20,
getSize().height - 80);
break;
case 1 : //playing
drawBackGnd(g); //draw black
DrawPlayField(g);
skymaster.drawBullet(g);
skymaster.drawNuceal(g);
skymaster.draw(g);
for (int i = 0; i < meteorNumber; i++) {
meteor[i].draw(g);
meteor[i].drawBullet(g);
}
break;
case 2 : //dead
drawBackGnd(g);
skymaster.drawBullet(g);
skymaster.drawNuceal(g);
skymaster.draw(g);
for (int i = 0; i < meteorNumber; i++) {
meteor[i].draw(g);
meteor[i].drawBullet(g);
}
g.setFont(gameOverFont);
g.setColor(Color.white);
g.drawString("You Lose", 90, 150);
g.setColor(Color.red);
g.drawString("You Lose", 92, 152);
break;
}
}
public void update(Graphics g)
//double-buffering
{
offGraphics = offImage.getGraphics();
offGraphics.setColor(getBackground());
offGraphics.fillRect(0, 0, getSize().width, getSize().height);
//draw in another floor
offGraphics.setColor(g.getColor());
paint(offGraphics); //draw once in offGraphics will not echo
g.drawImage(offImage, 0, 0, this);
}
public void run() {
while (true) {
try {
if (playerStatus == 1) {
buildmeteor(); //build meteor
buildTime++;
if (godTime> 0) {
godTime -= 1;
} //undeadTime decreases
top = (top + 0.5) % 56;
if (skymaster.getStatus() == 1) //SkyMaster is alive
{
skymaster.action();
}
skymaster.moveBullet();
skymaster.revive();
if (skymaster.getBombTimer() > 0) //bombing
{
skymaster.setBombTimer(skymaster.bombTimer - 1);
}
for (int i = 0; i < meteorNumber; i++) {
if (meteor[i].getStatus() == 1) //alive
{
meteor[i].action();
}
meteor[i].moveBullet();
meteor[i].revive();
if (meteor[i].getBombTimer() > 0) //bombing
{
meteor[i].setBombTimer(meteor[i].bombTimer - 1);
}
}
}
repaint();
mainThread.sleep(20);
} catch (Exception e) {
}
}
}
public void stop() {
mainThread = null;
}
public void destroy() {
try{
mainThread.destroy();
offGraphics.dispose();
removeMouseListener(this);
removeKeyListener(this);
}
catch(Exception e){}
}
public static void main(String[] args) {
try{MyGame go = new MyGame();
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -