Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package Snake;
- import java.awt.Dimension;
- import javax.swing.JFrame;
- public class Snake {
- public static void main(String[] args) {
- JFrame frame=new JFrame("Snake");
- frame.setContentPane(new SnakePanel());
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- frame.setResizable(false);
- frame.pack();
- frame.setPreferredSize(new Dimension(SnakePanel.width,SnakePanel.height));
- frame.setLocationRelativeTo(null);
- frame.setVisible(true);
- }
- }
- //////////////////////////////////////////////////////////////////////////////////////////////////
- package Snake;
- import java.awt.Color;
- import java.awt.Dimension;
- import java.awt.Graphics;
- import java.awt.Graphics2D;
- import java.awt.event.KeyEvent;
- import java.awt.event.KeyListener;
- import java.awt.image.BufferedImage;
- import java.util.ArrayList;
- import javax.swing.JPanel;
- public class SnakePanel extends JPanel implements Runnable, KeyListener {
- public static final int width=400;
- public static final int height=400;
- private Graphics2D g2d;
- private BufferedImage image;
- private Thread thread;
- private boolean running;
- private long targetTime;
- private final int SIZE=10;
- Entity head,head1,apple;
- ArrayList<Entity>snake;
- private int score1,score2;
- private int level1, level2;
- private boolean gameOver;
- private int dx, dy;
- private boolean up,down, right,left,start;
- public SnakePanel() {
- setPreferredSize(new Dimension(width,height));
- setFocusable(true);
- requestFocus();
- addKeyListener(this);
- }
- public void addNotify() {
- super.addNotify();
- thread=new Thread(this);
- thread.start();
- }
- private void setFPS(int fps) {
- targetTime=1000/fps;
- }
- public void keyPressed(KeyEvent e) {
- int k=e.getKeyCode();
- if(k==KeyEvent.VK_UP) up=true;
- if(k==KeyEvent.VK_DOWN) down=true;
- if(k==KeyEvent.VK_LEFT) left=true;
- if(k==KeyEvent.VK_RIGHT) right=true;
- if(k==KeyEvent.VK_ENTER) start=true;
- }
- public void keyReleased(KeyEvent e) {
- int k=e.getKeyCode();
- if(k==KeyEvent.VK_UP) up=false;
- if(k==KeyEvent.VK_DOWN) down=false;
- if(k==KeyEvent.VK_LEFT) left=false;
- if(k==KeyEvent.VK_RIGHT) right=false;
- if(k==KeyEvent.VK_ENTER) start=false;
- }
- public void keyTyped(KeyEvent arg0) {
- }
- public void run() {
- if(running) return;
- init();
- long startTime;
- long elapsed;
- long wait;
- while(running) {
- startTime=System.nanoTime();
- update();
- requestRender();
- elapsed=System.nanoTime()-startTime;
- wait=targetTime-elapsed/10000000;
- if(wait>0) {
- try {
- Thread.sleep(wait);
- }catch(Exception e) {
- e.printStackTrace();
- }
- }
- }
- }
- private void init() {
- image=new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);
- g2d=image.createGraphics();
- running=true;
- setUplevel();
- gameOver=false;
- level1=1;
- level2=1;
- setFPS(level1*10);
- setFPS(level2*10);
- }
- private void setUplevel() {
- snake=new ArrayList<Entity>();
- head=new Entity(SIZE);
- head1=new Entity(SIZE);
- head.setPosition(width/2, height/2);
- head1.setPosition(width/4, height/4);
- snake.add(head);
- snake.add(head1);
- for(int i=1;i<3;i++) {
- Entity e=new Entity(SIZE);
- e.setPosition(head.getX()+(i*SIZE), head.getY());
- e.setPosition(head1.getX()+(i*SIZE), head.getY());
- snake.add(e);
- }
- apple=new Entity(SIZE);
- setApple();
- score1=0;
- score2=0;
- gameOver=false;
- level1=1;
- level2=1;
- dx=dy=0;
- setFPS(level1*10);
- setFPS(level2*10);
- }
- public void setApple() {
- int x=(int)(Math.random()*(width-SIZE));
- int y=(int)(Math.random()*(height-SIZE));
- x=x-(x%SIZE);
- y=y-(y%SIZE);
- apple.setPosition(x, y);
- }
- private void requestRender() {
- render1(g2d);
- Graphics g=getGraphics();
- g.drawImage(image,0,0,null);
- g.dispose();
- }
- private void requestRender2() {
- render2(g2d);
- Graphics g=getGraphics();
- g.drawImage(image,0,0,null);
- g.dispose();
- }
- private void update() {
- if(gameOver) {
- if(start) {
- setUplevel();
- }
- return;
- }
- if(up&&dy==0) {
- dy=-SIZE;
- dx=0;
- }
- if(down&&dy==0) {
- dy=SIZE;
- dx=0;
- }
- if(left&&dx==0) {
- dy=0;
- dx=-SIZE;
- }
- if(right&&dx==0 && dy!=0) {
- dy=0;
- dx=SIZE;
- }
- if(dx!=0 || dy!=0) {
- for(int i=snake.size()-1;i>0;i--) {
- snake.get(i).setPosition(
- snake.get(i-1).getX(),
- snake.get(i-1).getY());
- }
- head.move(dx, dy);
- }
- for(Entity e:snake) {
- if(e.isCollsion(head)) {
- gameOver=true;
- break;
- }
- }
- if(apple.isCollsion(head)) {
- score1++;
- score2++;
- setApple();
- Entity e=new Entity(SIZE);
- e.setPosition(-100,-100);
- snake.add(e);
- if(score1%10==0) {
- level1++;
- if(level1>10) level1=10;
- setFPS(level1*10);
- }
- else if(score2%10==0) {
- level2++;
- if(level2>10) level2=10;
- setFPS(level2*10);
- }
- }
- if(head.getX()<0)head.setX(width);
- if(head.getY()<0)head.setY(height);
- if(head.getX()>width)head.setX(0);
- if(head.getY()>width)head.setY(0);
- }
- public void render1(Graphics2D g2d) {
- g2d.clearRect(0, 0, width, height);
- g2d.setColor(Color.green);
- for(Entity e:snake) {
- e.render(g2d);
- }
- g2d.setColor(Color.RED);
- apple.render(g2d);
- if(gameOver) {
- g2d.drawString("Game Over!",150,200);
- }
- g2d.setColor(Color.white);
- g2d.drawString("Score: "+score1+" Level: "+level1,10,10);
- if(dx==0 && dy==0) {
- g2d.drawString("Ready!", 150, 200);
- }
- }
- public void render2(Graphics2D g2d) {
- g2d.clearRect(0, 0, width, height);
- g2d.setColor(Color.blue);
- for(Entity e:snake) {
- e.render(g2d);
- }
- g2d.setColor(Color.RED);
- apple.render(g2d);
- if(gameOver) {
- g2d.drawString("Game Over!",300,400);
- }
- g2d.setColor(Color.white);
- g2d.drawString("Score: "+score2+" Level: "+level2,10,10);
- if(dx==0 && dy==0) {
- g2d.drawString("Ready!", 300, 400);
- }
- }
- }
- ////////////////////////////////////////////////////////////////////////////////////////////
- package Snake;
- import java.awt.Graphics2D;
- import java.awt.Rectangle;
- public class Entity {
- private int x,y,size;
- public Entity(int size) {
- this.size=size;
- }
- public int getX() {
- return x;
- }
- public int getY() {
- return y;
- }
- public void setX(int x) {
- this.x=x;
- }
- public void setY(int y) {
- this.y=y;
- }
- public void setPosition(int x, int y) {
- this.x=x;
- this.y=y;
- }
- public void move(int dx, int dy) {
- x+=dx;
- y+=dy;
- }
- public Rectangle getBound() {
- return new Rectangle(x,y,size, size);
- }
- public boolean isCollsion(Entity o) {
- if(o==this)
- return false;
- return getBound().intersects(o.getBound());
- }
- public void render(Graphics2D g2d) {
- g2d.fillRect(x+1,y+1,size-2,size-2);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement