图片如下:
(蓝色的是蛇,黄色的是食物)
代码如下:
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
public class SnakeGame extends JFrame{
String snake_dir="";
int snake_x=0;
int snake_y=0;
int bonus_x=10;
int bonus_y=10;
int score=1;
int index=0;
int snake[][]=new int[1024][2];
boolean started=false;
boolean lose=false;
boolean win=false;
public void resetsnake(){
snake_dir="";
score=1;
snake_x=0;
snake_y=0;
bonus_x=0;
bonus_y=0;
started=false;
lose=false;
index=0;
snake=new int[1024][2];
}
public Color color(int r,int g,int b){
Color col = new Color(r,g,b);
return col;
}
public SnakeGame(String title){
class DrawPanel extends JPanel{
public void update_screen(Graphics g){
super.paint(g);
g.setColor(color(0,0,0));
g.fillRect(0,0,900,600);
g.setColor(color(255,255,0));
g.fillRect(bonus_x*20, bonus_y*20, 20, 20);
g.setColor(color(0,0,255));
for(int i=0;i<=score;i++){
g.fillRect(snake[i][0]*20, snake[i][1]*20, 20, 20);
}
}
}
class MultiThread extends Thread{
public void run(){
while(started==true){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
switch(snake_dir){
case "up":
snake_y--;
break;
case "down":
snake_y++;
break;
case "left":
snake_x--;
break;
case "right":
snake_x++;
break;
}
if(snake_x<0){
snake_x=0;
snake_dir="";
}
if(snake_x>44){
snake_x=44;
snake_dir="";
}
if(snake_y<0){
snake_y=0;
snake_dir="";
}
if(snake_y>29){
snake_y=29;
snake_dir="";
}
for(int i=0;i<score-1;i++){
snake[i]=snake[i+1];
}
snake[score-1][0]=snake_x;
snake[score-1][1]=snake_y;
if(snake_x==bonus_x && snake_y==bonus_y){
bonus_x=(int)(Math.random()*45);
bonus_y=(int)(Math.random()*30);
score++;
if(score==1024){
started=false;
win=true;
}
}
new DrawPanel().update_screen(getGraphics());
}
}
}
addKeyListener(new KeyListener(){
public void keyPressed(KeyEvent e){
int keyCode=e.getKeyCode();
if(started==true){
switch(keyCode){
case KeyEvent.VK_UP:
snake_dir="up";
break;
case KeyEvent.VK_DOWN:
snake_dir="down";
break;
case KeyEvent.VK_LEFT:
snake_dir="left";
break;
case KeyEvent.VK_RIGHT:
snake_dir="right";
break;
}
}else if(started==false && lose==true){
lose=false;
}else if(started==false && lose==false){
started=true;
new MultiThread().start();
}
}
@Override
public void keyReleased(KeyEvent e) {}
@Override
public void keyTyped(KeyEvent e) {}
});
setTitle(title);
setSize(900,600);
setResizable(false);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args){
new SnakeGame("Java贪吃蛇");
}
}