电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
问答
16×16点阵的贪吃蛇程序源码分享一下
已解决
73482
个问题
已帮助
5993
位优秀工程师
16×16点阵的贪吃蛇程序源码分享一下
hangtao
2019-01-21
浏览量:941
16×16点阵的贪吃蛇程序源码分享一下
显示全部
单片机
关注问题
写回答
0
0
收起
我来回答
上传资料:
选择文件
文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
一指破宫
有点长哦
#include<reg52.h>
#include<display.h>
#include <stdlib.h>
#define up 0x01
#define down 0x02
#define left 0x03
#define right 0x04
unsigned char code tab[][16]={
0x000x000xE00x0F0x100x100x080x200x080x200x100x100xE00x0F0x000x00/*"0"0*/
0x000x000x100x200x100x200xF80x3F0x000x200x000x200x000x000x000x00/*"1"1*/
0x000x000x700x300x080x280x080x240x080x220x880x210x700x300x000x00/*"2"2*/
0x000x000x300x180x080x200x880x200x880x200x480x110x300x0E0x000x00/*"3"3*/
0x000x000x000x070xC00x040x200x240x100x240xF80x3F0x000x240x000x00/*"4"4*/
0x000x000xF80x190x080x210x880x200x880x200x080x110x080x0E0x000x00/*"5"5*/
0x000x000xE00x0F0x100x110x880x200x880x200x180x110x000x0E0x000x00/*"6"6*/
0x000x000x380x000x080x000x080x3F0xC80x000x380x000x080x000x000x00/*"7"7*/
0x000x000x700x1C0x880x220x080x210x080x210x880x220x700x1C0x000x00/*"8"8*/
0x000x000xE00x000x100x310x080x220x080x220x100x110xE00x0F0x000x00/*"9"9*/
};
sbit en=P0^0;
sbit K1=P2^4;
sbit K2=P2^5;
sbit K3=P2^6;
sbit K4=P2^7;
bit scan_key();
void proc_key()
;
unsigned char key_skey_vkey=0x04;
unsigned char idex=0;
unsigned char xp=8yp=7fxfy;
unsigned int ct=5000;
bit flag=0;
bit rest=0;
bit start=0;
void delay(int c)
{
int ij;
for(i=0;i<c;i++)
for(j=0;j<10;j++)
;
}
unsigned char n=3;
unsigned char i;
unsigned char idata man[80][2];
unsigned char idata food[2];
void bring_food()
{
unsigned char ik=0;
while(k==0)
{
srand(TL0);
k=1;
fx=rand()%15;
fy=rand()%15;
if(fx==0||fy==0||fy>14||fx>14)
{
k=0;
continue;
}
for(i=0;i<n;i++)
if((fx==man[i][0])&&(fy==man[i][1]))
{
k=0;
break;
}
}
food[0]=fx;
food[1]=fy;
drapoint(fxfy);
}
void fenshu()
{ unsigned char i;
for(i=0;i<16;i++)
{buf[i]=tab[(n-3)/10][i];
delay(100);
}
for(i=16;i<32;i++)
{
buf[i]=tab[(n-3)%10][i-16];
delay(100);
}
delay(10000);
delay(10000);
}
void restl()
{
start=0;
flag=0;
xp=8;
yp=7;
n=3;
key=0x04;
t=5000;
clear();
for(i=0;i<8;i++)
{ drapoint(i0);
drapoint(15-i0);
drapoint(i15);
drapoint(15-i15);
drapoint(0i);
drapoint(015-i);
drapoint(15i);
drapoint(1515-i);
delay(1000);
}
delay(10000);
bring_food();
man[0][0]=6;
man[0][1]=7;
man[1][0]=7;
man[1][1]=7;
man[2][0]=8;
man[2][1]=7;
for(i=0;i<n;i++)
drapoint(man[i][0]man[i][1]);
flag=1;
}
void end()
{ unsigned char ij;
for(i=0;i<16;i++)
for(j=0;j<16;j++)
{ drapoint(ij);
delay(100);
}
}
void pd()
{
unsigned char i;
for(i=0;i<n;i++)
{ if(man[i][0]==xp&&man[i][1]==yp)
{
rest=1;break;
}
}
}
void main()
{
en=1;
TMOD=0x11;
TH0=0xfc;
TL0=0x18;
TH1=0xb1;
TL1=0xe0;
TR0=1;
ET0=1;
TR1=1;
ET1=1;
EA=1;
restl();
while(1)
{ while(!start);
if(flag==1)
{ switch (key)
{ case up:
{
yp++;
if(yp==15)
{
rest=1;break;
}
pd();
if(xp==food[0]&&yp==food[1])
{ if(t>100)
t-=100;
n++;
man[n-1][0]=xp;
man[n-1][1]=yp;
bring_food(); break;
}
else {
clrpoint(man[0][0]man[0][1]);
for(i=0;i<n-1;i++)
{ man[i][0]=man[i+1][0];
man[i][1]=man[i+1][1];
}
man[n-1][0]=xp;
man[n-1][1]=yp;
for(i=0;i<16;i++)
{
drapoint(i15);
}
drapoint(fxfy);
for(i=0;i<n;i++)
drapoint(man[i][0]man[i][1]);
break;
}
}
case down:
{
yp--;
if(yp==0)
{
rest=1;break;
}
pd();
if(xp==food[0]&&yp==food[1])
{ if(t>100)
t-=100;
n++;
man[n-1][0]=xp;
man[n-1][1]=yp;
bring_food(); break;
}
else {
clrpoint(man[0][0]man[0][1]);
for(i=0;i<n-1;i++)
{ man[i][0]=man[i+1][0];
man[i][1]=man[i+1][1];
}
man[n-1][0]=xp;
man[n-1][1]=yp;
for(i=0;i<16;i++)
{
drapoint(i15);
}
drapoint(fxfy);
for(i=0;i<n;i++)
drapoint(man[i][0]man[i][1]);
break; } }
case left:
{
xp--;
if(xp==0)
{ rest=1;break;
}
pd();
if(xp==food[0]&&yp==food[1])
{ if(t>100)
t-=100;
n++;
man[n-1][0]=xp;
man[n-1][1]=yp;
bring_food(); break;
}
else {
clrpoint(man[0][0]man[0][1]);
for(i=0;i<n-1;i++)
{ man[i][0]=man[i+1][0];
man[i][1]=man[i+1][1];
}
man[n-1][0]=xp;
man[n-1][1]=yp;
for(i=0;i<16;i++)
{
drapoint(i15);
}
drapoint(fxfy);
for(i=0;i<n;i++)
drapoint(man[i][0]man[i][1]);
break;
} }
case right:
{
xp++;
pd();
if(xp==15)
{
rest=1;break;
}
if(xp==food[0]&&yp==food[1])
{ if(t>100)
t-=100;
n++;
man[n-1][0]=xp;
man[n-1][1]=yp;
bring_food(); break;
}
else {
clrpoint(man[0][0]man[0][1]);
for(i=0;i<n-1;i++)
{ man[i][0]=man[i+1][0];
man[i][1]=man[i+1][1];
}
man[n-1][0]=xp;
man[n-1][1]=yp;
for(i=0;i<16;i++)
{
drapoint(i15);
}
drapoint(fxfy);
for(i=0;i<n;i++)
drapoint(man[i][0]man[i][1]);
break; }
}
}
delay(t);
}
if(rest==1)
{
flag=0;
end();
fenshu();
restl();
rest=0;
}
}
}
bit scan_key()
{
key_s = 0x00;
key_s |= K1;
key_s <<= 1;
key_s |= K2;
key_s <<= 1;
key_s |= K3;
key_s <<= 1;
key_s |= K4;
return(key_s ^ key_v);
}
void proc_key()
//左
{
if((key_v & 0x01) == 0)
{
start=1;
if(key!=left)
key=right;
}
if((key_v & 0x02) == 0)
//右
{
start=1;
if(key!=right)
key=left;
}
if((key_v & 0x04) == 0)
// 上
{
start=1;
if(key!=down)
key=up;
}
if((key_v & 0x08) == 0)
// 下
{
start=1;
if(key!=up)
key=down;
}
}
void timer0(void) interrupt 1
{
TH0=0xfc;
//扫描显示1ms
TL0=0x18;
en=1;
P1=buf[2*idex];
P3=buf[2*idex+1];
P2=idex|0xf0;
en=0;
idex++;
if(idex==16)
idex=0;
}
void timer1(void) interrupt 3
{
TH1=0xb1;
TL1=0xe0;
if(scan_key())
{
delay(10);
if(scan_key())
{
key_v = key_s;
proc_key();
}
}
}
发布于
2019-01-21
举报
评论 0
0
0
其他答案
数量:
5
一指破宫
能看到不?
一直传不上去,如果还是看不到,你可以联系我 ,
发布于
2019-01-21
举报
评论 0
0
0
FEItwo
我看到有个帖子,基于51单片机的16×16点阵的贪吃蛇。 你可以看
发布于
2019-01-29
举报
评论 0
0
0
drepa
首先你得知道贪吃蛇是什么原理,其实就是根据你自己画的贪吃蛇算法去打点,一帧一帧打,你是参考不了别人的代码的,因为硬件连接不一定相同。
发布于
2019-01-30
举报
评论 0
0
0
yhj416606438
就是通过led移位算法实现的,可以在点阵屏例程上修改
发布于
2019-02-26
举报
评论 0
0
0
bigCQ
建议参考安富莱的教程,里面有一个贪吃蛇的demo程序可以参考
发布于
2019-02-27
举报
评论 0
0
0
相关问题
问题达人
换一批
文章
知识经验换现金
换一批
16×16点阵的贪吃蛇程序源码分享一下
写回答
关注问题
×
我要举报该内容,理由是:
内容质量差:
内容太水、伸手党
垃圾广告信息:
广告、招聘、推广、测试内容等
偏离问答主题:
与技术无关、讨论类
与社区已有内容重复:
违规内容:
色情、暴力、血腥、敏感信息等
不友善内容:
人事攻击、挑衅辱骂、恶意行为
以上选项都不是: