import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class Snack extends JFrame {
int arr[][]=new int[20][20];
boolean isStart=true;
int headx=8;
int heady=8;
int tailx=6;
int taily=8;
int direction=0;//蛇头方向
int up=1,down=2,left=3,right=4;//移动方向
int foodx=0;
int foody=0;
int tail=0;//蛇尾方向
public Snack(){
setSize(500,500);
setTitle("贪吃蛇");
setVisible(true);//显示窗口
setLayout(null);
setResizable(false);//禁止改变窗体大小
setLocationRelativeTo(null);//居中显示
setDefaultCloseOperation(EXIT_ON_CLOSE);//设置默认关闭按钮
direction=right;//设置默认移动方向
for(int i=6;i<8;i++){
arr[i][heady]=right;
}
makeFood();//获取食物
addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}
public void keyPressed(KeyEvent e) {
int keyCode=e.getKeyCode();//获取按键
if(isStart){
switch(keyCode){
case KeyEvent.VK_UP:
if(direction != down){
direction=up;
}
break;
case KeyEvent.VK_DOWN:
if(direction != up){
direction=down;
}
break;
case KeyEvent.VK_LEFT:
if(direction != right){
direction=left;
}
break;
case KeyEvent.VK_RIGHT:
if(direction != left){
direction=right;
}
break;
}
}
}
});
while(isStart){
arr[headx][heady]=direction;
switch(direction){
case 1:
heady--;
break;
case 2:
heady++;
break;
case 3:
headx--;
break;
case 4:
headx++;
break;
}
if(headx>19 || headx<0 || heady>19 || heady<0 || arr[headx][heady] != 0){
isStart=false;
break;
}
arr[headx][heady]=direction;
try{
Thread.sleep(500);
}catch(Exception e){
}
if(headx==foodx && heady==foody){
makeFood();
}else{
tail=arr[tailx][taily];
arr[tailx][taily]=0;
switch(tail){
case 1:
taily--;
break;
case 2:
taily++;
break;
case 3:
tailx--;
break;
case 4:
tailx++;
break;
}
}
repaint();
}
if(!isStart){
JOptionPane.showMessageDialog(null, "Game Over !");
}
}
public void makeFood(){
Random ran=new Random();
foodx=ran.nextInt(19)+1;
foody=ran.nextInt(19)+1;
if(arr[foodx][foody] != 0){
makeFood();
}
}
public void paint(Graphics g){//绘制图形
g.setColor(Color.LIGHT_GRAY);
g.fill3DRect(0, 0,500,500,true);
g.setColor(Color.BLUE);//设置颜色为蓝色
for(int i=0;i<20;i++){
for(int j=0;j<20;j++){
if(arr[i][j] != 0){
g.fillRect(i*25,j*25, 24, 24);
}
}
}
g.setColor(Color.RED);
g.fillRect(foodx*25, foody*25, 24,24);
}
public static void main(String[] args) {
Snack s=new Snack();
}
}