**
基于51单片机的贪吃蛇小程序(8*8LED点阵实现)by_jy
**
一直很想写一个贪吃蛇的小程序,这两天终于抽空完成了,这里把我的思路分享给大家,仅供参考!
代码如下:
先放段主函数压压惊
void main()
{
x_s[0] = 2; //初始化三个点
y_s[0] = 3;
x_s[1] = 3;
y_s[1] = 3;
x_s[2] = 4;
y_s[2] = 3;
Timer0Init();
suijishu();
while(1)
{
appear();
if(flag_a) //蛇身移动位
{
if(!flag_s) //蛇身死亡位
{
auto_move();
HC_595(0x00); //消隐
P0 = 0xFF; //消隐
shensi();
chiguo();
delay(1000);
flag_a = 0;
}
}
}
}
/*
本程序核心程序:
appear函数,显示蛇身
auto_move函数,控制蛇身惯性移动 ,同时里面附了判断是否穿墙的一段代码
direction函数,控制蛇的移动方向
suijishu(随机数)函数,随机生成果子
chiguo(吃果)函数,判断是否吃到果子
shensi(身死)函数,碰到自己身体则死亡
*/
#include<reg51.h>
#include<intrins.h>
#include<stdlib.h>
#define M 12 //难度系数,12中等,越小越难
typedef unsigned char uchar;
typedef unsigned int uint;
sbit SRCLK = P3^6; //595芯片
sbit RCLK = P3^5;
sbit SER = P3^4;
sbit LSA=P2^2; //138译码器
sbit LSB=P2^3;
sbit LSC=P2^4;
uchar code smgduan[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值
//定义方向键
sbit K1 = P3^1; //上
sbit K2 = P3^0; //下
sbit K3 = P3^2; //左
sbit K4 = P3^3; //右
uchar m; //储存果子的X坐标
uchar n; //储存果子的Y坐标
uchar snakelong = 3; //初始化蛇长
char flag_x = 1; //初始化运动方向
char flag_y = 0; //初始化运动方向
uchar flag_gg = 0; //生成果子的重复性标志
uchar flag_c = 0, sheshen = 0; //吃果标志
uchar flag_a = 0; //移动标志
uchar flag_s = 0; //死亡标志
uchar x_s[32] = {
0},y_s[32] = {
0}; //定义蛇的最大长度
uchar code X_[8] = {
0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE};
uchar code Y_[8] = {
0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
/*
y1 //定义x,y坐标
y2 //如,我想让(4,2)亮,只需要P0 = X_[4];HC_595 = Y_[2];
y3
y3
y5
y6
y7
y8
x1 x2 x3 x4 x5 x6 7 x8
*/
一个小的延时函数:
void suijishu(); //提前定义随机数生成函数
void delay(uint i)