没有合适的资源?快使用搜索试试~ 我知道了~
贪吃蛇.docx
需积分: 0 0 下载量 43 浏览量
2024-01-04
14:43:40
上传
评论
收藏 8KB DOCX 举报
温馨提示
试读
2页
贪吃蛇.docx
资源推荐
资源详情
资源评论
贪吃蛇
#include <reg52.h>#include <stdlib.h>#define uint unsigned int#define uchar unsigned char#include
<intrins.h> sbit DIO = P3 ^ 4;sbit S_CLK = P3 ^ 5;sbit R_CLK = P3 ^ 6;sbit key_s2 = P3 ^ 0;sbit
key_s3 = P3 ^ 1;sbit key_s4 = P3 ^ 2;sbit key_s5 = P3 ^ 3; uchar coorx[8] = {
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe };uchar coory[8] = {
0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80 };uchar snakex[20];uchar snakey[20];uchar m = 0;uchar
len = 1;uchar foodx, foody;uchar d, xx, yy; char key = 0; void delay(uint z){ uint x, y; for (x = z; x >
0; x--) for (y = 114; y > 0; y--);} void keyscan(){ if (key_s2 == 0) { delay(10); if (key_s2 == 0)
{ if (key != 4) key = 1; } } if (key_s3 == 0) { delay(10); if (key_s3 == 0) { if (key !=
3) key = 2; } } if (key_s4 == 0) { delay(10); if (key_s4 == 0) { if (key != 2) key =
3; } } if (key_s5 == 0) { delay(10); if (key_s5 == 0) { if (key != 1) key = 4; } }}
void SendByte(uchar x, uchar y)//用来接收行列值,这里 x 和 y 是坐标,点阵屏左下角为坐标原
点{ uchar i, j, dat1, dat2; dat1 = coorx[x - 1];//这里通过前面定义的两个数组将坐标转化为了行列
的十六进制数 dat2 = coory[y - 1]; for (i = 0; i < 8; i++) { if (dat1 & 0x01) DIO = 1; else
DIO = 0; S_CLK = 1;//穿行输入 S_CLK = 0; dat1 >>= 1; } for (j = 0; j < 8; j++) { if (dat2 &
0x01) DIO = 1; else DIO = 0; S_CLK = 1;//串行输入 S_CLK = 0; dat2 >>= 1; }
R_CLK = 1;//并行输出 R_CLK = 0;} uchar CheckFood()//检验食物有没有和蛇体重合{ uchar i;
for (i = 0; i < len; i++) { if (foodx == snakex[i] && foody == snakey[i]) { return 1; } } return
0;} void creat_food(){ do { foodx = (uchar)(rand() % 8 + 1); foody = (uchar)(rand() % 8 + 1); }
while (CheckFood() != 0);} void FoodAnd()//检验食物有没有被吃掉{ if (foodx == snakex[0] &&
foody == snakey[0]) { if (len < 20) { snakex[len] = snakex[len - 1];//和之前一样,把上一个
结点的状态赋给下一个结点,用来增加长度 snakey[len] = snakey[len - 1]; len++; }
creat_food();//被吃掉重新生成食物 }} void left()//上下左右都是一个道理{ uchar i, x1, x2, y1, y2;
x1 = snakex[0];//保留上一结点的 x 轴状态 snakex[0]--;//坐标减 1 if (snakex[0] == 0)//这里是判定
是否碰到边界了,这里设定的是可以从另一边出来,当然也可以设定为碰到就死 snakex[0] =
8; y1 = snakey[0];//保留上一结点的 y 轴状态 for (i = 1; i < len; i++) { y2 = snakey[i];//进行各个
结点的状态移动,形成蛇运动的效果 snakey[i] = y1; y1 = y2; x2 = snakex[i]; snakex[i] =
x1; x1 = x2; }} void up(){ uchar i, x1, x2, y1, y2; y1 = snakey[0]; snakey[0]--; if (snakey[0] == 0)
snakey[0] = 8; x1 = snakex[0]; for (i = 1; i < len; i++) { x2 = snakex[i]; snakex[i] = x1; x1 = x2;
y2 = snakey[i]; snakey[i] = y1; y1 = y2; }} void down(){ uchar i, x1, x2, y1, y2; y1 = snakey[0];
snakey[0]++; if (snakey[0] == 9) snakey[0] = 1; x1 = snakex[0]; for (i = 1; i < len; i++) { y2 =
snakey[i]; snakey[i] = y1; y1 = y2; x2 = snakex[i]; snakex[i] = x1; x1 = x2; }} void right(){
uchar i, x1, x2, y1, y2; x1 = snakex[0]; snakex[0]++; if (snakex[0] == 9) snakex[0] = 1; y1 =
资源评论
2401_82412950
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功