📄 webwar.java
字号:
import java.applet.*;
import java.awt.*;
public class WebWar extends Applet implements Runnable
{
Thread MyThread = null;
static final int FPS = 60;
static final int DELAY = 1000/FPS;
static final int GAME_ACTIVE = 0;
static final int INTRO_ACTIVE = 1;
static final int MAX_OBJECTS = 32;
static final int DISTANCE = 96;
static int GameFlag;
static int KeyDownCode;
static int KeyUpCode;
static boolean Key_L;
static boolean Key_R;
static boolean Key_U;
static boolean Key_D;
static int GameCounter;
static int WaveCounter;
static int OverCounter;
static boolean GameOver;
static int Score = 0;
static int HiScore = 0;
static int Stage = 0;
static int Lives = 3;
static AudioClip LaserSfx;
static AudioClip ExploSfx;
static AudioClip BulletSfx;
static AudioClip ReadySfx;
static AudioClip OverSfx;
static Image Title;
static Image Burki;
static private Image BackBuffer;
static private Graphics MyGfx;
static private Dimension dimBackBuffer;
static Object3D MyObjects[] = new Object3D[MAX_OBJECTS];
static Stars3D Stars = new Stars3D();
static int AttackWave[];
static Waves3D Waves = new Waves3D();
static Camera3D Camera = new Camera3D();
MediaTracker m_mediaTracker = new MediaTracker(this);
int TextLength = 0;
Text3D MyText[];
public WebWar()
{
}
public String getAppletInfo()
{
return "Name: LaserWheel\r\n" +
"Author: Burkhard Ratheiser\r\n" +
"(c)1997 Just for fun...";
}
public void paint(Graphics g)
{
if (m_mediaTracker.checkAll())
{
if (m_mediaTracker.isErrorAny())
{
g.drawString("Error loading images",10,30);
return;
}
if (BackBuffer != null)
{
g.drawImage(BackBuffer,0,0,null);
}
}
else
{
g.drawString("Loading data, please wait...",10,20);
}
}
public void update(Graphics g)
{
switch (GameFlag)
{
case GAME_ACTIVE:
{
PaintGame(MyGfx);
paint(g);
break;
}
case INTRO_ACTIVE:
{
PaintIntro(MyGfx);
paint(g);
break;
}
}
}
private void PaintIntro(Graphics g)
{
g.setColor(Color.black);
g.fillRect(0,0,dimBackBuffer.width,dimBackBuffer.height);
Stars.Draw(g);
Stars.Move();
g.drawImage(Burki,158,80,null);
g.setColor(Color.yellow);
for (int i=0; i<TextLength; i++)
{
MyText[i].Draw(g,0,-120);
}
g.setColor(Color.white);
g.drawString("written by Burkhard Ratheiser",140,228);
g.setColor(Color.red);
g.drawString("press Space to start",160,280);
}
private void PaintGame(Graphics g)
{
g.setColor(Color.black);
g.fillRect(0,0,dimBackBuffer.width,dimBackBuffer.height);
//Stars.Draw(g);
//Stars.Move();
PaintFrame(g);
if (Score > HiScore)
HiScore = Score;
g.setColor(Color.white);
g.drawString("Score: " + Score,32,20);
g.drawString("Hi: " + HiScore,140,20);
g.drawString("Stage: " + Stage,230,20);
g.drawString("Lives: " + Lives,320,20);
g.setColor(Color.red);
if (GameCounter < 192)
if ((GameCounter & 16) == 0)
g.drawString("Get Ready",dimBackBuffer.width/2-24,dimBackBuffer.height/2-16);
if (OverCounter > 0)
g.drawString("Game Over",dimBackBuffer.width/2-24,dimBackBuffer.height/2-16);
if (--OverCounter == 0) InitIntro();
}
private void PaintFrame(Graphics g)
{
Camera.Transform();
for (int i=0; i<MAX_OBJECTS; i++)
{
if (MyObjects[i] != null)
MyObjects[i].Draw(g,Camera.CameraMatrix);
}
}
public void init()
{
//resize(320,200);
requestFocus();
dimBackBuffer = size();
Point2D.ScreenWidth = dimBackBuffer.width;
Point2D.ScreenHeight = dimBackBuffer.height;
for (int i=0; i<360+90; i++)
Matrix3D.SinusList[i] = Math.sin(i * 2 * Math.PI / 360);
BackBuffer = createImage(dimBackBuffer.width,dimBackBuffer.height);
MyGfx = BackBuffer.getGraphics();
LaserSfx = LoadAudioClip("Laser.au");
ExploSfx = LoadAudioClip("Explo.au");
BulletSfx = LoadAudioClip("Bullet.au");
ReadySfx = LoadAudioClip("Ready.au");
OverSfx = LoadAudioClip("Over.au");
Burki = LoadImage("Burki.gif");
HiScore = 0;
InitText("WEBWAR",1.5,1.5,1,3,0,0);
InitIntro();
}
public void InitText(String text, double xscale, double yscale, double zscale, int xrot, int yrot, int zrot)
{
for (int i=0; i<text.length(); i++)
{
if (!Character.isSpace(text.charAt(i)))
TextLength++;
}
MyText = new Text3D[TextLength];
double xpos = -((text.length()-1)*DISTANCE/2);
double ypos = 0;
int j = 0;
for (int i=0; i<text.length(); i++)
{
if (!Character.isSpace(text.charAt(i)))
{
Character character = new Character(Character.toLowerCase(text.charAt(i)));
MyText[j++] = new Text3D(character.toString(),xpos,ypos,xscale,yscale,zscale,xrot,yrot,zrot);
}
xpos += DISTANCE;
}
}
public void InitIntro()
{
KeyDownCode = 0;
KeyUpCode = 0;
//InitText("WEBWAR",1.5,1.5,1,3,0,0);
GameFlag = INTRO_ACTIVE;
}
public void InitGame()
{
for (int i=0; i<MAX_OBJECTS; i++)
{
MyObjects[i] = null;
}
GameCounter = 0;
WaveCounter = 0;
OverCounter = 0;
GameOver = false;
Score = 0;
Lives = 3;
Stage = 1;
AttackWave = (int[])Waves.AttackWaves.elementAt((int)Stage-1);
GetNewObject(new Web3D(0,200,200,0,0,0));
GetNewObject(new Ship3D());
Camera.Reset();
KeyDownCode = 0;
KeyUpCode = 0;
Key_L = false;
Key_R = false;
Key_U = false;
Key_D = false;
GameFlag = GAME_ACTIVE;
}
static public boolean GetNewObject(Object3D NewObject)
{
for (int i=0; i<MAX_OBJECTS; i++)
{
if (MyObjects[i] == null)
{
MyObjects[i] = NewObject;
return true;
}
}
return false;
}
public void destroy()
{
}
public void start()
{
if (MyThread == null)
{
MyThread = new Thread(this);
MyThread.start();
}
}
public void stop()
{
if (MyThread != null)
{
MyThread.stop();
MyThread = null;
}
}
public void run()
{
try
{
repaint();
m_mediaTracker.waitForAll();
while (true)
{
switch (GameFlag)
{
case GAME_ACTIVE:
{
GameHandler();
for (int i=0; i<MAX_OBJECTS; i++)
{
if (MyObjects[i] != null)
if (MyObjects[i].Handler() == false) MyObjects[i] = null;
}
repaint();
Thread.sleep(DELAY);
break;
}
case INTRO_ACTIVE:
{
repaint();
for (int i=0; i<TextLength; i++)
{
MyText[i].Handler();
}
if (KeyDownCode == 32) InitGame();
Thread.sleep(DELAY);
break;
}
}
}
}
catch (InterruptedException e)
{
stop();
}
}
private AudioClip LoadAudioClip(String AudioClipFile)
{
AudioClip Temp;
Temp = getAudioClip(getDocumentBase(),AudioClipFile);
Temp.play();
Temp.stop();
return Temp;
}
private Image LoadImage(String ImageFile)
{
Image Temp;
Temp = getImage(getDocumentBase(),ImageFile);
m_mediaTracker.addImage(Temp,0);
return Temp;
}
private Image[] LoadFrames(String SpriteFile, int MaxFrames)
{
Image Frames[] = new Image[MaxFrames];
String FileName;
int ImageNr;
for (int i=0; i<MaxFrames; i++)
{
ImageNr = i+1;
FileName = SpriteFile + ((ImageNr < 10)?"0":"") + ImageNr + ".gif";
Frames[i] = getImage(getDocumentBase(),FileName);
m_mediaTracker.addImage(Frames[i],0);
}
return Frames;
}
public boolean keyDown(Event evt, int key)
{
KeyDownCode = key;
switch (key)
{
case Event.LEFT:
Key_L = true;
break;
case Event.RIGHT:
Key_R = true;
break;
case Event.UP:
Key_U = true;
break;
case Event.DOWN:
Key_D = true;
break;
}
return true;
}
public boolean keyUp(Event evt, int key)
{
KeyUpCode = key;
switch (key)
{
case Event.LEFT:
Key_L = false;
break;
case Event.RIGHT:
Key_R = false;
break;
case Event.UP:
Key_U = false;
break;
case Event.DOWN:
Key_D = false;
break;
}
return true;
}
static public boolean Collision(Object3D object)
{
for (int i=0; i<MAX_OBJECTS; i++)
{
if (MyObjects[i] != null)
if (MyObjects[i].Name.equals("Shot3D"))
{
if (object.XPos <= (MyObjects[i].XPos + 24))
if ((object.XPos + 24) >= MyObjects[i].XPos)
if (object.YPos <= (MyObjects[i].YPos + 24))
if ((object.YPos + 24) >= MyObjects[i].YPos)
if (object.ZPos <= (MyObjects[i].ZPos + 24))
if ((object.ZPos + 24) >= MyObjects[i].ZPos)
{
Ship3D.LaserCount--;
MyObjects[i] = null;
return true;
}
}
}
return false;
}
static public boolean Player_Collision(Object3D object)
{
for (int i=0; i<MAX_OBJECTS; i++)
{
if (MyObjects[i] != null)
if (MyObjects[i].Name.equals("Ship3D"))
if (Ship3D.Destroyed == 0)
{
if (object.XPos <= (MyObjects[i].XPos + 24))
if ((object.XPos + 24) >= MyObjects[i].XPos)
if (object.YPos <= (MyObjects[i].YPos + 24))
if ((object.YPos + 24) >= MyObjects[i].YPos)
if (object.ZPos <= (MyObjects[i].ZPos + 24))
if ((object.ZPos + 24) >= MyObjects[i].ZPos)
{
GetNewObject(new Explo3D(MyObjects[i].XPos,MyObjects[i].YPos,MyObjects[i].ZPos));
if (Lives-- > 1)
{
MyObjects[i].Visible = false;
Ship3D.Destroyed = 100;
return true;
}
else
{
MyObjects[i] = null;
OverCounter = 200;
GameOver = true;
OverSfx.play();
return true;
}
}
}
}
return false;
}
private void GameHandler()
{
if (GameCounter == AttackWave[WaveCounter*7+Waves.Wave_Counter])
{
if (AttackWave[WaveCounter*7+Waves.Wave_EnemyFlag] == Waves.NULL)
{
if (!GameOver)
{
GameCounter = 0;
WaveCounter = 0;
if (Stage++ == Waves.AttackWaves.size())
{
Stage = 1;
}
AttackWave = (int[])Waves.AttackWaves.elementAt((int)Stage-1);
}
return;
}
else
{
GetNewObject(new Enemy3D(AttackWave[WaveCounter*7+Waves.Wave_EnemyFlag],AttackWave[WaveCounter*7+Waves.Wave_XWinkel],AttackWave[WaveCounter*7+Waves.Wave_YWinkel],AttackWave[WaveCounter*7+Waves.Wave_XAdd],AttackWave[WaveCounter*7+Waves.Wave_YAdd],AttackWave[WaveCounter*7+Waves.Wave_ShootFlag]));
WaveCounter++;
}
}
if (GameCounter++ == 0) ReadySfx.play();;
GameCounter++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -