Java做一个贪吃蛇小游戏

包名snakegame
第一个类 Snake

package snakegame;
import javax.swing.JFrame;

public class Snake {

	/**
	 * @param args
	 */
	/*运行框大小900*720,沙盘大小850*600*/
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		JFrame frame = new JFrame();
		frame.setBounds(200, 80, 900, 720);//设置边框坐标
		frame.setResizable(false);//设置边框为不可改变的大小
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );//设置默认退出时自动关闭程序,没有设置的话,默认点关闭时只是隐藏窗体,在后台进程中还可以看到
		
		
		Snake_Panel panel1 = new Snake_Panel();
		frame.add(panel1);//将panel视图添加到边框上
		frame.setVisible(true);//使视图可见
	}

}

第二个类 Snake_Panel

package snakegame;

import javax.swing.JPanel;
import javax.swing.Timer;
import javax.swing.ImageIcon;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;

public class Snake_Panel extends JPanel implements KeyListener,ActionListener {//KeyListener监听键盘,
	//ActionListener监听事件
		
	//创建图像对象
	ImageIcon title = new ImageIcon("pic/title.jpg");
	ImageIcon body = new ImageIcon("pic/body.png");
	ImageIcon food = new ImageIcon("pic/food.png");
	ImageIcon up = new ImageIcon("pic/up.png");
	ImageIcon down = new ImageIcon("pic/down.png");
	ImageIcon left = new ImageIcon("pic/left.png");
	ImageIcon right = new ImageIcon("pic/right.png");
	
	int snake_x[] = new int[100];//存放蛇的横坐标
	int snake_y[] = new int[100];//存放蛇的纵坐标
	int snake_lenth;//存放蛇的长度
	String direction = "right";//存放蛇头的方向
	boolean isStarted = false; //记录游戏的暂停开始状态
	Timer timer = new Timer(200,this);//每当过Nms,触发监听事件
	
	Random r = new Random();
	int food_x = r.nextInt(34)*25+25;
	int food_y = r.nextInt(24)*25+75;
	
	public Snake_Panel()
	{
		this.setFocusable(true);//使画布可被选中,因为需要输入上下左右
		initSnake();//初始化蛇,即放置一个静态蛇
		this.addKeyListener(this);//添加键盘监听接口
		timer.start();
	}
	
	public void initSnake()//初始化蛇
	{
		snake_lenth=3;
		direction = "right";
		snake_x[0]=100;//数组的第一个代表蛇头,蛇身每+1,数组长度+1
		snake_y[0]=100;
		snake_x[1]=75;
		snake_y[1]=100;
		snake_x[2]=50;
		snake_y[2]=100; 
	}
	
	
	
	public void paint(Graphics g)
	{
		
		this.setBackground(Color.black);//设置背景颜色
		g.fillRect(25,75, 850, 600);//填充颜色区域,沙盘的大小为850*600
		
		title.paintIcon(this, g, 25,21);
//		body.paintIcon(this, g, 75, 100);
//		body.paintIcon(this, g, 50, 100);
//		right.paintIcon(this, g, 100, 100);	
		//画蛇头
		if(direction.equals("right"))
		{
			right.paintIcon(this, g, snake_x[0],snake_y[0]);
		}
		else if(direction.equals("left"))
		{
			left.paintIcon(this, g, snake_x[0],snake_y[0]);
		}
		else if(direction.equals("up"))
		{
			up.paintIcon(this, g, snake_x[0],snake_y[0]);
		}
		else if(direction.equals("down"))
		{
			down.paintIcon(this, g, snake_x[0],snake_y[0]);
		}
		//画蛇身
		for(int i=1;i<snake_lenth;i++)
		{
			body.paintIcon(this, g, snake_x[i], snake_y[i]);
		}
		
		
		if(!isStarted)
		{
			//当按下暂停键后,使屏幕上显示一行提示文字
			g.setColor(Color.white);
			g.setFont(new Font("arial",Font.BOLD,30));
			g.drawString("Press Space to Start/Pause", 250, 300);
		}
		//画食物
		
		food.paintIcon(this, g,food_x,food_y);
	}

	@Override
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void keyPressed(KeyEvent e) {
		// TODO Auto-generated method stub
		int keyCode = e.getKeyCode(); //获取从键盘输入的值
		if(keyCode == KeyEvent.VK_SPACE)
		{
			 isStarted = !isStarted;
			 repaint();//每当状态改变时,都应该repaint一下,根据此时的状态进行paint,实现动态视觉效果
		}
		else if(keyCode == KeyEvent.VK_UP&&direction!="down")
		{
			direction ="up";
		}
		else if(keyCode == KeyEvent.VK_DOWN&&direction!="up")
		{
			direction ="down";
		}
		else if(keyCode == KeyEvent.VK_LEFT&&direction!="right")
		{
			direction ="left";
		}
		else if(keyCode == KeyEvent.VK_RIGHT&&direction!="left")
		{
			direction ="right";
		}
		
	}

	@Override
	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		//对应监听事件的方法,每过Nms(自己设置的,执行一次该方法)
		
		if(isStarted)
		{
			for(int i=snake_lenth-1;i>0;i--)
			{
				snake_x[i]=snake_x[i-1];
				snake_y[i]=snake_y[i-1];
			}
			if(direction.equals("right"))
			{
				snake_x[0]+=25;
				if (snake_x[0]>850)
				{
					snake_x[0]=25;
				}
			}
			else if(direction.equals("left"))
			{
				snake_x[0]-=25;
				if(snake_x[0]<25)
				{
					snake_x[0]=850;
				}
			}
			else if(direction.equals("up"))
			{
				snake_y[0]-=25;
				if (snake_y[0]<75)
				{
					snake_y[0]=650;
				}
				
			}
			else if(direction.equals("down"))
			{
				snake_y[0]+=25;
				if (snake_y[0]>650)
				{
					snake_y[0]=75;
				}
			}
			repaint();
		}
		//实现吃食物的逻辑
		if(snake_x[0]== food_x&&snake_y[0]== food_y)
		{
			snake_lenth++;
			food_x = r.nextInt(34)*25+25;
			food_y = r.nextInt(24)*25+75;
		}

	}

	
}

IDE为Eclipse
Java做一个贪吃蛇小游戏

素材:
Java做一个贪吃蛇小游戏
Java做一个贪吃蛇小游戏
Java做一个贪吃蛇小游戏
Java做一个贪吃蛇小游戏
Java做一个贪吃蛇小游戏
Java做一个贪吃蛇小游戏
Java做一个贪吃蛇小游戏
运行后效果图:
Java做一个贪吃蛇小游戏