Created
July 31, 2012 01:31
-
-
Save jake7864/3212569 to your computer and use it in GitHub Desktop.
this is a barebones, stripped down video game snippet/demo with collision detection.
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 javax.swing.JFrame; | |
public class Game extends Canvas implements Runnable | |
{ | |
static Thread t; | |
public int width = 500, height = 300, playerSize = 10; | |
public InputHandler input; | |
public Player player = new Player(); | |
public Box box = new Box(); | |
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); | |
t.start(); | |
} | |
public Game() | |
{ | |
Dimension size = new Dimension(width, height); | |
setPreferredSize(size); | |
setMinimumSize(size); | |
setMaximumSize(size); | |
t = 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); | |
dir = 0; | |
} | |
if(input.keys[KeyEvent.VK_S]) | |
{ | |
player.setY(player.getY() + speed); | |
dir = 1; | |
} | |
if(input.keys[KeyEvent.VK_A]) | |
{ | |
player.setX(player.getX() - speed); | |
dir = 2; | |
} | |
if(input.keys[KeyEvent.VK_D]) | |
{ | |
player.setX(player.getX() + speed); | |
dir = 3; | |
} | |
player.setBounds((int)player.getX(), (int)player.getY(), playerSize, playerSize); | |
box.setBounds((int)box.getX(), (int)box.getY(), playerSize, playerSize); | |
if(player.intersects(box)) | |
{ | |
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; | |
} | |
} | |
} | |
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(), playerSize, playerSize); | |
g.fillRect((int)box.getX(), (int)box.getY(), playerSize, playerSize); | |
g.dispose(); | |
bs.show(); | |
} | |
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