Welcome, Guest. Please login or register.

Author Topic: [Java] Snake Game  (Read 2001 times)

0 Members and 1 Guest are viewing this topic.

Offline Blackllama

[Java] Snake Game
« on: March 07, 2013, 10:21:53 PM »
So I made a little snake game forever ago. Felt like posting this just because this board gets so few posts.

Use wasd to move.

Here's the jar:
http://www.mediafire.com/?fknij99oaz234vw

Here's the code:
Component.java
Code: [Select]
import java.applet.Applet;
import java.awt.*;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.Timer;

public class Component extends Applet implements Runnable{

static boolean isRunning = false;

public static Dimension size  = new Dimension(Game.BOARD_SIZE.width*Game.DOT_SIZE,Game.BOARD_SIZE.height*Game.DOT_SIZE);
public static Dimension realSize = new Dimension(0,0);

public static JFrame frame;
private static Image screen;

public static final Color BACKGROUND = new Color(153,231,255);

public static Game game;
public static Timer timer;
public static KeyListener listener = new Listening();


public Component(){
setPreferredSize(size);
addKeyListener(listener);
}


public static void main(String[] args){
Component component = new Component();

frame = new JFrame();
frame.add(component);
frame.pack();

realSize = new Dimension(frame.getWidth(), frame.getHeight());

frame.setTitle("Sexy Snake");
frame.setPreferredSize(size);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
component.start();

}

public void start(){
requestFocus();

game = new Game();


new Thread(this).start();
isRunning = true;
}

public void stop(){
isRunning = false;
}

public void tick(){
if(frame.getWidth() != realSize.width || frame.getHeight() != realSize.height){
frame.pack();
}
game.tick();
}

public void render(){
Graphics g = screen.getGraphics();
g.setColor(BACKGROUND);
g.fillRect(0, 0, size.width, size.height);
setBackground(BACKGROUND);

game.render(g);
g = getGraphics();
g.drawImage(screen, 0, 0, size.width, size.height, 0, 0, size.width, size.height, null);
g.dispose();
}

public void run(){
screen = createVolatileImage(size.width,size.height);
while(isRunning){
tick();
render();
try{
Thread.sleep(110);
}catch(Exception e){
System.out.println(e);
}
}
}
}
Game.java
Code: [Select]
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.util.Random;

public class Game{

public static final Dimension BOARD_SIZE = new Dimension(25, 25);
public static final int DOT_SIZE = 10;
public static final int TOTAL_DOTS = BOARD_SIZE.width * BOARD_SIZE.height;

public static final int RIGHT = 0;
public static final int UP = 1;
public static final int LEFT = 2;
public static final int DOWN = 3;

public static Random r = new Random();

public static final Color HEAD_COLOR = new Color(0, 0, 0);
public static final Color SEGMENT_COLOR = new Color(255, 255, 255);
public static final Color FOOD_COLOR = new Color(100, 100, 100);

public static int dir = UP;
public static int prevDir;

public int[] xSegmentCords = new int[TOTAL_DOTS];
public int[] ySegmentCords = new int[TOTAL_DOTS];
public static int snakeSize = 5;
public Point foodCords = new Point(0, 0);

public Game(){
xSegmentCords[0] = (int) Math.round(BOARD_SIZE.width*.75);
ySegmentCords[0] = (int) Math.round(BOARD_SIZE.height*.75);
spawnFood();
}

public void spawnFood(){
boolean xSame = false;
boolean ySame = false;
int x = r.nextInt(BOARD_SIZE.width);
int y = r.nextInt(BOARD_SIZE.height);

for(int xCord: xSegmentCords){
if(xCord == x){
xSame = true;
}
}
for(int yCord: ySegmentCords){
if(yCord == y){
ySame = true;
}
}
if(!(ySame && xSame)){
foodCords.x = x;
foodCords.y = y;
}else{
spawnFood();
}
}

public void gameOver(){
Component.isRunning = false;
}

public boolean isCollidingWithFruit(Point p1, Point p2){
if(p1.x == p2.x && p1.y == p2.y){
return true;
}else{
return false;
}
}

public void isCollidingWithTail(){

for(int i = snakeSize; i > 0; i--){

if((xSegmentCords[0] == xSegmentCords[i]) && (ySegmentCords[0] == ySegmentCords[i])){
gameOver();
}
}

switch(dir){
case RIGHT:
if(!(xSegmentCords[0] + 1 < BOARD_SIZE.width)){
gameOver();
}
break;
case UP:
if(!(ySegmentCords[0] - 1 < BOARD_SIZE.height)){
gameOver();
}
break;
case LEFT:
if(!(xSegmentCords[0] - 1 < BOARD_SIZE.width)){
gameOver();
}
break;
case DOWN:
if(!(ySegmentCords[0] + 1 < BOARD_SIZE.height)){
gameOver();
}
break;
}
}

public void tick(){
isCollidingWithTail();
// moves segments
for(int i = snakeSize; i > 0; i--){
xSegmentCords[i] = xSegmentCords[(i - 1)];
ySegmentCords[i] = ySegmentCords[(i - 1)];
}
// moves head
switch(dir){
case RIGHT:
if(xSegmentCords[0] + 1 < BOARD_SIZE.width){
for(int i = 1; i < snakeSize; i++){
if(isCollidingWithFruit(new Point(xSegmentCords[0] + 1, ySegmentCords[0]), new Point(xSegmentCords[i], ySegmentCords[i]))){
gameOver();
break;
}
}
xSegmentCords[0]++;
}else{
gameOver();
}
break;
case UP:
if(ySegmentCords[0] - 1 >= 0){
for(int i = 1; i < snakeSize; i++){
if(isCollidingWithFruit(new Point(xSegmentCords[0], ySegmentCords[0] - 1), new Point(xSegmentCords[i], ySegmentCords[i]))){
gameOver();
break;
}
}
ySegmentCords[0]--;
}else{
gameOver();
}
break;
case LEFT:
if(xSegmentCords[0] - 1 >= 0){
for(int i = 1; i < snakeSize; i++){
if(isCollidingWithFruit(new Point(xSegmentCords[0] - 1, ySegmentCords[0]), new Point(xSegmentCords[i], ySegmentCords[i]))){
gameOver();
break;
}
}
xSegmentCords[0]--;
}else{
gameOver();
}
break;
case DOWN:
if(ySegmentCords[0] + 1 < BOARD_SIZE.height){
for(int i = 1; i < snakeSize; i++){
if(isCollidingWithFruit(new Point(xSegmentCords[0], ySegmentCords[0] + 1), new Point(xSegmentCords[i], ySegmentCords[i]))){
gameOver();
break;
}
}
ySegmentCords[0]++;
}else{
gameOver();
}
break;
}
if(isCollidingWithFruit(new Point(xSegmentCords[0], ySegmentCords[0]), foodCords)){
spawnFood();
snakeSize++;
}
}

public void render(Graphics g){
// head
g.setColor(HEAD_COLOR);
g.fillRect(xSegmentCords[0] * DOT_SIZE, ySegmentCords[0] * DOT_SIZE, DOT_SIZE, DOT_SIZE);
// segments
g.setColor(SEGMENT_COLOR);
for(int i = 1; i < snakeSize; i++){
g.fillRect(xSegmentCords[i] * DOT_SIZE, ySegmentCords[i] * DOT_SIZE, DOT_SIZE, DOT_SIZE);
}
// food
g.setColor(FOOD_COLOR);
g.fillRect(foodCords.x * DOT_SIZE, foodCords.y * DOT_SIZE, DOT_SIZE, DOT_SIZE);

}
}
Listening.java
Code: [Select]
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class Listening implements KeyListener{

public static final int RIGHT = 0;
public static final int UP = 1;
public static final int LEFT = 2;
public static final int DOWN = 3;

public void keyPressed(KeyEvent e){
int key = e.getKeyCode();

switch(key){
case KeyEvent.VK_W:
Game.prevDir = Game.dir;
Game.dir = UP;
break;
case KeyEvent.VK_A:
Game.prevDir = Game.dir;
Game.dir = LEFT;
break;
case KeyEvent.VK_S:
Game.prevDir = Game.dir;
Game.dir = DOWN;
break;
case KeyEvent.VK_D:
Game.prevDir = Game.dir;
Game.dir = RIGHT;
break;
}
}
public void keyReleased(KeyEvent e){}
public void keyTyped(KeyEvent e){}
}

Conjoint Gaming [Game On]

[Java] Snake Game
« on: March 07, 2013, 10:21:53 PM »

 


* ShoutBox!

Refresh History

SimplePortal 2.3.5 © 2008-2012, SimplePortal