贪吃蛇小游戏——java实现

package 贪吃蛇小游戏;

import java.awt.Color;

import javax.swing.*;

public class Snake主类 {
	
	public static void main(String [] args) {
		
		JFrame frame = new JFrame(); // 创建一个游戏界面的框架
         frame.setBounds(10, 10, 900, 720); // 设置框架的大小
         frame.setResizable(false); // 设置框架大小为不能改变
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         frame.setBackground(Color.blue);
         
         SnakePanel panel = new SnakePanel();  //添加画布
         frame.add(panel); // 刚添加时画布是空的看不到
         
         frame.setVisible(true); // 允许显示游戏界面
	}
}


package 贪吃蛇小游戏;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.*;
import javax.swing.*;
import java.util.Random;//导入随机数函数

import javax.swing.JPanel;

public class SnakePanel extends JPanel implements KeyListener,ActionListener{

	ImageIcon up=new ImageIcon("up.png");
	ImageIcon left=new ImageIcon("left.png");
	ImageIcon down=new ImageIcon("down.png");
	ImageIcon right=new ImageIcon("right.png");
	ImageIcon title=new ImageIcon("title.jpg");
	ImageIcon body=new ImageIcon("body.jpg");
	ImageIcon food=new ImageIcon("food.jpg");
	
	//snake
	int [] snakeX=new int[750];
	int [] snakeY=new int[750];
	
	//随机生成食物的位置
	Random rand=new Random();
	int foodX=rand.nextInt(34)*25+25;//根据游戏界面大小设置
	int foodY=rand.nextInt(34)*25+75;
	
	//设置游戏的初始值
	int len=3;//snake长度
	int score=0;//分数
	String direction = "R";//初始值蛇头向右
	
	//判断开始和结束
	boolean isStarted = false;
	boolean isFailed = false;
	
	//每100毫秒调用一次ActionPerformed
	Timer timer = new Timer(200,this);//移动速度
	
	//构造函数
	public SnakePanel() {
		this.setFocusable(true);//获取焦点
		this.addKeyListener(this);//添加监听器
		setup();
		timer.start();
	}
	
	public void paint(Graphics g) {//画笔
		
		this.setBackground(Color.black);//画布背景颜色
		title.paintIcon(this, g, 25, 11);//主题图片
		g.fillRect(25, 75 , 850, 650);//游戏界面
		
		//画蛇头
		if(direction.equals("R")) {
			right.paintIcon(this, g, snakeX[0], snakeY[0]);
		}
		else if(direction.equals("L")) {
			left.paintIcon(this, g, snakeX[0], snakeY[0]);
		}
		else if(direction.equals("U")) {
			up.paintIcon(this, g, snakeX[0], snakeY[0]);
		}
		else if(direction.equals("D")) {
			down.paintIcon(this, g, snakeX[0], snakeY[0]);
		}
		
		//画蛇身
		for(int i=1; i0;i--) {
				snakeX[i] = snakeX[i-1];
				snakeY[i] = snakeY[i-1];
			}
			
			//头部移动
			if(direction.equals("R")) {
				snakeX[0] = snakeX[0]+25;
				if(snakeX[0] > 850) {
					snakeX[0]= 25;//超过边界
				}
			}
			else if(direction.equals("L")) {
				snakeX[0]=snakeX[0]-25;
				if(snakeX[0]<25) {
					snakeX[0]=850;
				}
			}
			
			else if(direction.equals("U")) {
				snakeY[0]=snakeY[0]-25;
				if(snakeY[0]<75) {
					snakeY[0]=650;
				}
			}
			else if(direction.equals("D")) {
				snakeY[0]=snakeY[0]+25;
				if(snakeY[0]>650) {
					snakeY[0]=75;
				}
			}
			
			//吃食物
			if(snakeX[0] == foodX && snakeY[0]==foodY) {
				len++;
				score++;
				foodX=rand.nextInt(34)*25+25;//重置食物坐标
				foodY=rand.nextInt(24)*25+75;
			}
			
			//判断游戏结束,蛇头碰到身体
			for(int i=1;i

 

你可能感兴趣的:(贪吃蛇小游戏——java实现)