Created
August 3, 2012 17:14
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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