完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
#include #define uchar unsigned char #define SNAKE 22 //最大长度 #define TIME 40 //显示延时时间 #define SPEED 88 //速度控制 #define keyenable 1 ***it led = P0^0; ***it up=P3^2; ***it down=P3^4; ***it right=P3^3; ***it left=P3^1; uchar x[SNAKE+1]; uchar y[SNAKE+1]; uchar time,n,i,e; //延时时间,当前蛇长,通用循环变量,当前速度 char fx,fy; //位移偏移量 /*************************** 延时程序 ****************************/ void delay(char MS) { char us,usn; while(MS!=0) { usn = 0; while(usn!=0) { us=0xff; while (us!=0) {us--;}; usn--; } MS--; } } /**************************** 判断碰撞 *****************************/ bit knock() { bit k; k=0; if(x[1]>7||y[1]>7) k=1; //撞墙 for(i=2;i k=1; //撞自己 return k; } /***************************** 上下左右键位处理 ******************************/ void turnkey() { if(keyenable) { if(left) { fy=0; if(fx!=1) fx=-1; else fx=1; } if(right) { fy=0; if(fx!=-1) fx=1; else fx=-1; } if(up) { fx=0; if(fy!=-1) fy=1; else fy=-1; } if(down) { fx=0; if(fy!=1) fy=-1; else fy=1; } } } /******************************* 乘方程序 ********************************/ uchar mux(uchar temp) { if(temp==7) return 128; if(temp==6) return 64; if(temp==5) return 32; if(temp==4) return 16; if(temp==3) return 8; if(temp==2) return 4; if(temp==1) return 2; if(temp==0) return 1; return 0; } /******************************* 显示时钟 显示程序 *******************************/ void timer0(uchar k) { while(k--) { for(i=0;i P2=mux(x); P1=255-mux(y); turnkey(); //上下左右键位处理 delay(TIME); //显示延迟 P2=0x00; P1=0xff; } } } /******************************* 主程序 *******************************/ void main(void) { e=SPEED; P0=0x00; P1=0xff; P2=0x00; P3=0x00; while(1) { for(i=3;i for(i=3;i x[0]=4; y[0]=4; //设置食物 n=3; //贪吃蛇长 x[1]=1;y[1]=0; //贪吃蛇头 x[2]=0;y[2]=0; //贪吃蛇尾 fx=0; fy=0; //位移偏移 while(1) { if(keyenable) break; timer0(1); } while(1) { timer0(e); if(knock()) { e=SPEED; break; } //判断碰撞 if((x[0]==x[1]+fx)&(y[0]==y[1]+fy)) //是否吃东西 { n++; if(n==SNAKE+1) { n=3; e=e+10; for(i=3;i for(i=3;i } x[0]=x[n-2]; y[0]=y[n-2]; } for(i=n-1;i>1;i--) { x=x[i-1]; y=y[i-1]; } x[1]=x[2]+fx; y[1]=y[2]+fy; //移动 } } } 代码有少许缺陷,比如食物只会从蛇的尾部出来。 |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2955 浏览 16 评论
3455 浏览 1 评论
8987 浏览 16 评论
4050 浏览 18 评论
1102浏览 3评论
570浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
568浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2301浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1857浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 01:56 , Processed in 1.121280 second(s), Total 81, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号