// LAB SIX DOT COM SFCAVE LEET MIX
// www.lab6.com/sfcave/JavaCave.java
import java.applet.Applet;
import java.awt.*;
public class JavaCave extends Applet implements Runnable
{
public void start()
{
if(m_JavaCave == null)
{
m_JavaCave = new Thread(this);
m_JavaCave.start();
}
MainStart();
}
void MainStart()
{
setGameState(0);
}
public void stop()
{
if(m_JavaCave != null)
{
m_JavaCave.stop();
m_JavaCave = null;
}
}
public boolean keyUp(Event event, int i)
{
if(i == 32)
keyPushed = false;
return true;
}
public boolean mouseMove(Event event, int i, int j)
{
mouseX = i;
mouseY = j;
return true;
}
void setGameState(int i)
{
GameState = i;
GameCount = 0;
}
public boolean mouseDown(Event event, int i, int j)
{
mouseX = i;
mouseY = j;
mousePushed = true;
mouseClicked = true;
return true;
}
public boolean keyDown(Event event, int i)
{
if(i == 32)
keyPushed = true;
return true;
}
public String getAppletInfo()
{
return "Lab6 SFCave";
}
public boolean mouseUp(Event event, int i, int j)
{
mouseX = i;
mouseY = j;
mousePushed = false;
return true;
}
public void run()
{
do
try
{
Thread.sleep(100L);
repaint();
}
catch(InterruptedException _ex)
{
stop();
}
while(true);
}
public JavaCave()
{
map = new int[4][32];
}
private void OnPeriod()
{
GameCount++;
switch(GameState)
{
default:
break;
// MAIN SCREEN TURN ON
case 0: // '\0'
if(GameCount == 1)
{
flag1 = false;
if(HiScore < Score)
HiScore = Score;
}
// background
Canvas.setColor(new Color(255, 128, 0));
Canvas.fillRect(0, 0, 128, 160);
// hypnosis
Canvas.setColor(Color.black);
int i = (int)((Math.sin((double)GameCount / 10D) + 1.0D) * 20D) + 20;
Canvas.fillOval(64 - i, 64 - i, i * 2, i * 2);
// text
Canvas.setFont(new Font("Arial", 1, 14));
Canvas.setColor(Color.black); // black
Canvas.drawString("Lab6 SFCave", 25, 50);
Canvas.setColor(Color.white); //white
Canvas.drawString("Lab6 SFCave", 20, 45);
Canvas.setFont(new Font("Arial", 1, 12));
Canvas.setColor(Color.white); //white
Canvas.drawString("Click to scain!", 25, 80);
Canvas.setColor(Color.white); //white
Canvas.drawString("Score : " + Score, 30, 110);
if(!flag1 && !mousePushed)
{
flag1 = true;
mouseClicked = false;
}
if(flag1 && mouseClicked)
{
if(mouseX < 20 || mouseX > 108 || mouseY < 140 || mouseY > 155)
setGameState(1);
return;
}
break;
// MOVE ZIG
case 1: // '\001'
if(GameCount == 1)
{
Score = 0;
my = 10;
mh = 108;
mv = 0;
y = oy = 50;
vy = -5;
int j1 = 0;
do
{
int j = Math.abs(j1 % 16 - 8) * 16;
// start walls
Canvas.setColor(Color.black);
Canvas.fillRect(j1 * 4, 0, 4, 128);
// start background
Canvas.setColor(Color.white);
Canvas.fillRect(j1 * 4, my, 4, mh);
map[0][j1] = my;
map[1][j1] = my + mh;
map[2][j1] = -1;
}
while(++j1 < 32);
Canvas.setFont(new Font("Arial", 1, 16));
}
Score+=2;
if(mousePushed || keyPushed)
vy--;
else
vy++;
if(vy < -8)
vy = -8;
else
if(vy > 8)
vy = 8;
y = y + vy;
if(GameCount % 10 == 0)
mh--;
if(Math.random() < 0.10000000000000001D)
mv = (int)(Math.random() * 10D - 5D);
my = my + mv;
if(my < 1)
{
my = 1;
mv = Math.abs(mv);
}
if(my > 126 - mh)
{
my = 126 - mh;
mv = -Math.abs(mv);
}
// score background
Canvas.setColor(Color.black);
Canvas.fillRect(0, 128, 128, 32);
// score text
Canvas.setColor(Color.white);
Canvas.drawString("Score: " + Score, 30, 150);
Canvas.copyArea(2, 0, 126, 128, -4, 0);
int k1 = 0;
do
{
int l1 = 0;
do
map[l1][k1] = map[l1][k1 + 1];
while(++l1 < 4);
}
while(++k1 < 31);
// zig
Canvas.setColor(new Color(255, 128, 0));
Canvas.drawLine(30, oy - 1, 34, y - 1);
Canvas.drawLine(30, oy, 34, y);
Canvas.drawLine(30, oy + 1, 34, y + 1);
int k = Math.abs(GameCount % 16 - 8) * 16;
// moving walls
Canvas.setColor(Color.black);
Canvas.fillRect(124, 0, 4, 128);
// moving background
Canvas.setColor(Color.white);
Canvas.fillRect(124, my, 4, mh);
map[0][31] = my;
map[1][31] = my + mh;
if(GameCount % 10 == 0)
{
int l = (int)(Math.random() * (double)(mh - 16) + (double)my);
Canvas.setColor(new Color(255, 128, 0)); // blocks
Canvas.fillRect(124, l, 4, 16);
map[2][31] = l;
}
else
{
map[2][31] = -1;
}
oy = y;
if(y < map[0][8] || map[1][8] < y || map[2][8] != -1 && map[2][8] < y && y < map[2][8] + 16)
setGameState(2);
return;
// SOMEONE SET UP US THE BOMB
case 2: // '\002'
if(GameCount == 1)
flag1 = false;
if(GameCount < 20)
{
// b00m
Canvas.setColor(new Color(255, 128, 0));
int i1 = GameCount * 2;
Canvas.drawOval(32 - i1, y - i1, i1 * 2, i1 * 2);
}
if(GameCount == 20)
{
Canvas.setFont(new Font("Arial", 1, 24));
// gay
Canvas.setColor(Color.black);
Canvas.drawString("Bainer!", 20, 50);
// woo
if(HiScore < Score)
{
Canvas.setColor(new Color(255, 128, 0));
Canvas.drawString("Hi Score!", 13, 100);
}
}
if(GameCount == 100)
{
flag1 = true;
mouseClicked = true;
}
if(GameCount <= 20)
break;
if(!flag1 && !mousePushed)
{
flag1 = true;
mouseClicked = false;
}
if(flag1 && mouseClicked)
setGameState(0);
break;
}
}
public void destroy()
{
}
public void init()
{
resize(128, 160);
OffScreen = createImage(128, 160);
Canvas = OffScreen.getGraphics();
}
public void update(Graphics g)
{
OnPeriod();
g.drawImage(OffScreen, 0, 0, this);
}
Thread m_JavaCave;
Image OffScreen;
Graphics Canvas;
Dimension OffScreenSize;
int mouseX;
int mouseY;
boolean mousePushed;
boolean mouseClicked;
static final int SizeX = 128;
static final int SizeY = 160;
static final int SLeft = 0;
static final int STop = 0;
static final int TimeOut = 100;
boolean keyPushed;
static final int GS_TITLE = 0;
static final int GS_GAME = 1;
static final int GS_OVER = 2;
static final int GC_FIRST = 1;
int GameState;
int GameCount;
boolean flag1;
int HiScore;
int Score;
int map[][];
int my;
int mh;
int mv;
int oy;
int y;
int vy;
}