Skip to content

Instantly share code, notes, and snippets.

@jake7864
Created August 3, 2012 17:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jake7864/3249674 to your computer and use it in GitHub Desktop.
Save jake7864/3249674 to your computer and use it in GitHub Desktop.
3rd version of my collision detection game now the other box randomly wanders also bounces off walls & the player
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferStrategy;
import java.util.Random;
import javax.swing.JFrame;
/*
this is Version 3 of a little video game template thingy.
now the other box wanders about
the box now bounces off walls & the player
if the other box stops you can hit it to get it going again
W,A,S,D for the movement of the player
*/
public class Game extends Canvas implements Runnable
{
static Thread thread;
public int width = 500, height = 300, boxSize = 10;
public InputHandler input;
public Player player = new Player();
public Box box = new Box();
int boxDir = 0;
public static void main(String args[])
{
JFrame frame = new JFrame();
Game game = new Game();
frame.setResizable(false);
frame.setTitle("Game");
frame.add(game);
frame.pack();
frame.setDefaultCloseOperation(3);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
thread.start();
}
public Game()
{
Dimension size = new Dimension(width, height);
setPreferredSize(size);
setMinimumSize(size);
setMaximumSize(size);
thread = new Thread(this, "Game");
input = new InputHandler();
addKeyListener(input);
}
public void run()
{
long lastLoopTime = System.nanoTime();
final long second = 1000000000;
final int fps = 150;
while(true)
{
long now = System.nanoTime();
long updateLength = now - lastLoopTime;
lastLoopTime = now;
double delta = updateLength / ((double)second/fps);
update(delta);
render();
try{Thread.sleep((lastLoopTime-System.nanoTime())/1000000+10);}
catch(Exception ex){}
}
}
public void update(double delta)
{
double speed = delta;
int dir = 0;
if(input.keys[KeyEvent.VK_W])
{
player.setY(player.getY() - speed);
if(player.getY() < 0)player.setY(player.getY() + speed);
dir = 0;
}
if(input.keys[KeyEvent.VK_S])
{
player.setY(player.getY() + speed);
if(player.getY() > height-boxSize)player.setY(player.getY() - speed);
dir = 1;
}
if(input.keys[KeyEvent.VK_A])
{
player.setX(player.getX() - speed);
if(player.getX() < 0)player.setX(player.getX() + speed);
dir = 2;
}
if(input.keys[KeyEvent.VK_D])
{
player.setX(player.getX() + speed);
if(player.getX() > width-boxSize)player.setX(player.getX() - speed);
dir = 3;
}
if(input.keys[KeyEvent.VK_W] && input.keys[KeyEvent.VK_A]) dir = 4;
if(input.keys[KeyEvent.VK_W] && input.keys[KeyEvent.VK_D]) dir = 5;
if(input.keys[KeyEvent.VK_S] && input.keys[KeyEvent.VK_A]) dir = 6;
if(input.keys[KeyEvent.VK_S] && input.keys[KeyEvent.VK_D]) dir = 7;
player.setBounds((int)player.getX(), (int)player.getY(), boxSize, boxSize);
box.setBounds((int)box.getX(), (int)box.getY(), boxSize, boxSize);
if(box.intersects(player))
{
switch(dir)
{
case 0: box.setY(box.getY() - 2);
break;
case 1: box.setY(box.getY() + 2);
break;
case 2: box.setX(box.getX() - 2);
break;
case 3: box.setX(box.getX() + 2);
break;
case 4: box.setY(box.getY() - 2);
box.setX(box.getX() - 2);
break;
case 5: box.setY(box.getY() - 2);
box.setX(box.getX() + 2);
break;
case 6: box.setY(box.getY() + 2);
box.setX(box.getX() - 2);
break;
case 7: box.setY(box.getY() + 2);
box.setX(box.getX() + 2);
break;
}
}
boxDir = wander(boxDir);
switch(boxDir)
{
case 0: box.setY(box.getY() - 1);
break;
case 1: box.setY(box.getY() + 1);
break;
case 2: box.setX(box.getX() - 1);
break;
case 3: box.setX(box.getX() + 1);
break;
case 4: box.setY(box.getY() - 1);
box.setX(box.getX() - 1);
break;
case 5: box.setY(box.getY() - 1);
box.setX(box.getX() + 1);
break;
case 6: box.setY(box.getY() + 1);
box.setX(box.getX() - 1);
break;
case 7: box.setY(box.getY() + 1);
box.setX(box.getX() + 1);
break;
}
if(box.intersects(player))boxDir = reverse();
if(box.getY() < 1||box.getY() > height-1-boxSize||box.getX() < 1||box.getX() > width-1-boxSize) boxDir = reverse();
if(box.getY() < 0)box.setY(box.getY() + speed);
if(box.getY() > height-boxSize)box.setY(box.getY() - speed);
if(box.getX() < 0)box.setX(box.getX() + speed);
if(box.getX() > width-boxSize)box.setX(box.getX() - speed);
}
public void render()
{
BufferStrategy bs = this.getBufferStrategy();
if(bs == null)
{
createBufferStrategy(2);
return;
}
Graphics g = bs.getDrawGraphics();
g.clearRect(0, 0, width, height);
g.setColor(Color.black);
g.fillRect((int)player.getX(), (int)player.getY(), boxSize, boxSize);
g.fillRect((int)box.getX(), (int)box.getY(), boxSize, boxSize);
g.dispose();
bs.show();
}
public int wander(int dir)
{
Random rnd = new Random();
int chance = rnd.nextInt(250);
int direction = rnd.nextInt(15);
if(chance!=0) direction = dir;
return direction;
}
public int reverse()
{
Random rnd = new Random();
if(boxDir==0)return 1;
if(boxDir==1)return 0;
if(boxDir==2)return 3;
if(boxDir==3)return 2;
if(boxDir==4)return 7;
if(boxDir==5)return 6;
if(boxDir==6)return 5;
if(boxDir==7)return 4;
return rnd.nextInt(8);
}
class Player extends Rectangle
{
private double x = 50;
private double y = 50;
public double getX(){return x;}
public double getY(){return y;}
public void setX(double x){this.x = x;}
public void setY(double y){this.y = y;}
}
class Box extends Rectangle
{
private double x = 100;
private double y = 100;
public double getX(){return x;}
public double getY(){return y;}
public void setX(double x){this.x = x;}
public void setY(double y){this.y = y;}
}
class InputHandler implements KeyListener
{
public boolean[] keys = new boolean[65536];
public void keyPressed(KeyEvent e)
{
int keyCode = e.getKeyCode();
keys[keyCode] = true;
}
public void keyReleased(KeyEvent e)
{
int keyCode = e.getKeyCode();
keys[keyCode] = false;
}
public void keyTyped(KeyEvent e)
{
int keyCode = e.getKeyCode();
keys[keyCode] = true;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment