Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.image.BufferStrategy;
- import java.awt.*;
- import java.awt.event.*;
- import javax.swing.*;
- import java.applet.Applet;
- import java.awt.Graphics2D;
- import java.util.ArrayList;
- import java.util.Random;
- public class SnakeGame extends JFrame implements KeyListener{
- final static int INGAME=1;
- final static int GAMEOVER=2;
- int currentState=INGAME;
- Canvas c;
- Button startButton, stopButton;
- boolean animationRunning = true;
- private BufferStrategy strategy;
- final static int CANVAS_WIDTH =950;
- final static int CANVAS_HEIGHT = 950;
- int speed, mouseX, mouseY;
- int fruitX, fruitY, fruitSize;
- int score = 0;
- int highscore =0;
- String playerwithhighscore = "";
- Random randomGen = new Random();
- ArrayList<Snake> snake = new ArrayList<Snake>();
- Snake player = new Snake();
- Fruit fruit = new Fruit();
- int FPS = 20 ;
- public SnakeGame(){
- c = new Canvas();
- c.setSize(950, 950);
- //restart();
- // Add a window listner for close button
- this.addWindowListener(new WindowAdapter() {
- public void windowClosing(WindowEvent e) {
- System.exit(0);
- }
- });
- c.addKeyListener(this);
- this.getContentPane().add(c, BorderLayout.CENTER);
- this.setTitle("Snake Game");
- this.pack();
- this.setVisible(true);
- c.createBufferStrategy(2);
- strategy = c.getBufferStrategy();
- do{
- try{
- FPS = Integer.parseInt(JOptionPane.showInputDialog(null, "Enter the speed of the snake between 10 and 30", "FPS"));
- }catch(NumberFormatException nfe){
- FPS=0;
- }
- }while(FPS<10 || FPS>30);
- restartGame();
- new AnimationThread(this);
- }
- public static void main(String s[]) {
- new SnakeGame();
- }
- public double getDistance(double sx, double sy, double ex, double ey){
- double xdiff = sx-ex;
- double ydiff = sy-ey;
- return Math.sqrt((xdiff*xdiff)+(ydiff*ydiff));
- }
- public int randomInteger(int min, int max){
- return min + (int)(Math.random() * ((max - min) + 1));
- }
- public void collisionDetection(){
- if(player.x <= 0 || player.x >= c.getWidth() || player.y <= 0 || player.y >= c.getHeight()){
- gameOver();
- }
- double distance = getDistance (fruit.x,fruit.y, player.x, player.y);
- if(distance < 10){
- fruit.x = randomInteger(10, c.getWidth()-10);
- fruit.x=(fruit.x/10)*10;
- fruit.y = randomInteger(10, c.getHeight()-10);
- fruit.y=(fruit.y/10)*10;
- score++;
- snake.add(new Snake());
- }
- for (int i = 0; i < snake.size(); i++) {
- if ((player.x == snake.get(i).x) && player.y == snake.get(i).y) {
- gameOver();
- }
- }
- //if(fruit.x == player.x && fruit.y == player.y){
- //}
- }
- public void gameOver(){
- if (score > highscore){
- highscore=score;
- playerwithhighscore = JOptionPane.showInputDialog(null, "You beat the highscore!", "Enter your name");
- }
- currentState=GAMEOVER;
- //score=0;
- }
- public void updateGame(){
- updateSnake();
- player.x += player.xdir;
- player.y += player.ydir;
- collisionDetection();
- }
- public void updateSnake(){
- int i=snake.size()-1;
- while (i > 0){
- snake.get(i).x = snake.get(i-1).x;
- snake.get(i).y = snake.get(i-1).y;
- i=i-1;
- }
- snake.get(0).x =player.x;
- snake.get(0).y =player.y;
- }
- public void keyTyped(KeyEvent e) { }
- public void keyReleased(KeyEvent e) { }
- public void keyPressed(KeyEvent e) {
- char key = e.getKeyChar();
- if((key == 'W' || key == 'w') && player.ydir == 0){
- player.ydir=-Snake.SIZE;
- player.xdir=0;
- }else if((key == 'S' || key == 's') && player.ydir == 0){
- player.ydir=Snake.SIZE;
- player.xdir=0;
- }else if((key == 'A' || key == 'a') && player.xdir == 0){
- player.xdir=-Snake.SIZE;
- player.ydir=0;
- }else if((key == 'D' || key == 'd') && player.xdir == 0){
- player.xdir=Snake.SIZE;
- player.ydir=0;
- }else if ((key == 'r' || key == 'R') && currentState == GAMEOVER){
- restartGame();
- }
- }
- public void restartGame(){
- player.x = c.getHeight()/2;
- player.y = c.getHeight()/2;
- score=0;
- snake.clear();
- snake.add(new Snake());
- snake.add(new Snake());
- snake.add(new Snake());
- snake.add(new Snake());
- player.xdir=Snake.SIZE;
- player.ydir=0;
- currentState= INGAME;
- }
- public void updateCanvas(){
- Graphics2D g2= (Graphics2D)strategy.getDrawGraphics();
- g2.setColor(Color.pink);
- g2.fillRect(0,0,c.getWidth(), c.getHeight());
- g2.setColor(Color.red);
- for(int i=0; i<snake.size(); i++){
- g2.fillOval((int)snake.get(i).x-(Snake.SIZE/2),(int)snake.get(i).y-(Snake.SIZE/2),Snake.SIZE,Snake.SIZE);
- }
- g2.setColor(Color.blue);
- g2.fillOval((int)player.x-(Snake.SIZE/2),(int)player.y-(Snake.SIZE/2),Snake.SIZE,Snake.SIZE);
- g2.setColor (Color.black);
- if (currentState == GAMEOVER){
- g2.setColor (Color.blue);
- g2.drawString("Gameover, press 'R' to restart", 405,475);
- g2.drawString("This game was made by Anon", 405,500);
- System.out.println(" ");
- System.out.println("SHAME, You Died");
- System.out.println("Need to code in snake hitting itself");
- }
- g2.setColor(Color.green);
- g2.fillOval((int)fruit.x-(Fruit.SIZE/2),(int)fruit.y-(Fruit.SIZE/2),Fruit.SIZE,Fruit.SIZE);
- g2.setColor(Color.red);
- g2.drawString("Score: " + score, 10,20);
- g2.setColor(Color.yellow);
- g2.drawString("Highscore: " + highscore , 100,20);
- g2.drawString("By: " + playerwithhighscore , 180,20);
- //}
- g2.dispose();
- strategy.show();
- Toolkit.getDefaultToolkit().sync();
- //}
- //}
- }
- class Snake{
- int x=-20,y=-20,xdir=0,ydir=0;
- final static int SIZE=20;
- }
- class Fruit{
- int x=50,y=50,xdir=0,ydir=0;
- final static int SIZE=20;
- }
- class AnimationThread extends Thread{
- SnakeGame at;
- public AnimationThread(SnakeGame _at){
- at=_at;
- start();
- }
- public void run(){
- int SKIP_TICKS = 1000 / FPS;
- long next_game_tick = System.currentTimeMillis();
- long sleep_time = 0;
- while(true){
- if(animationRunning){
- if(currentState == INGAME){
- updateGame();
- at.updateCanvas();
- next_game_tick += SKIP_TICKS;
- sleep_time = next_game_tick - System.currentTimeMillis();
- if(sleep_time >= 0 ) {
- try{
- sleep(sleep_time);
- }catch(InterruptedException ie){}
- if(player.x >= 950){
- currentState = GAMEOVER;
- player.x = 20;
- }
- System.out.print("Snake: ");
- System.out.print(player.x);
- System.out.print(", ");
- System.out.println(player.y);
- System.out.print("Fruit: ");
- System.out.print(fruit.x);
- System.out.print(", ");
- System.out.println(fruit.y);
- System.out.print("Score");
- System.out.println(score);
- }else{
- next_game_tick = System.currentTimeMillis();
- }
- }
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement