// 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; }