找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1836|回复: 4
打印 上一主题 下一主题
收起左侧

51单片机有做贪吃蛇的方法吗? 求帮助

[复制链接]
跳转到指定楼层
楼主
ID:364551 发表于 2018-7-4 10:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机课程设计打算做贪吃蛇,不知有没有资源可以利用

评分

参与人数 1黑币 +5 收起 理由
啦啦啦嘟嘟 + 5 赞一个!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:371575 发表于 2018-7-14 16:50 | 只看该作者
论坛里有很多人分享的,我也在找资源,你搜一下就有了。大家讲得都挺详细的。
回复

使用道具 举报

板凳
ID:390239 发表于 2018-8-26 22:02 | 只看该作者
#include<reg51.h> #include<intrins.h> typedef unsigned int u16; typedef unsigned char u8; u8 code gwx[27]={1,1,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,6,6,6,6,7,7}; u8 code gwy[27]={6,5,5,6,7,4,3,4,5,6,7,3,5,6,2,4,3,4,5,6,7,5,6,7,4,5,6}; u8 code gx[47]={9,9,9,9,9,10,11,13,13,13,13,13,14,14,15,15,15,15,15,17,17,17,17,18,18,18,19,19,19,19,21,21,21,21,21,22,22,22,23,23,23}; u8 code gy[47]={7,6,5,4,3, 3, 3, 7, 6, 5, 4, 3, 7, 3, 7, 6, 5, 4, 3, 7, 6, 5, 3, 7, 5, 3, 7, 5, 4, 3, 7, 6, 5, 4, 3, 7, 5, 3, 7 ,5, 3}; u8 x[20];u8 y[20];u8 length;u8 direction; u8 tt1,tt2,tt3,tt4,dianx,diany; u8 p1,p0,sb,j; u8 panduan; u8 dix[20],diy[20]; sbit k1=P3^1; sbit k2=P3^0;  sbit k3=P3^2; sbit k4=P3^3; sbit yiwei=P3^6; sbit cunchu=P3^5; sbit chuanshu=P3^4; void delay(u16 t) { while(t--); } void chuanxing(u8 by) { u8 i; yiwei=0; cunchu=0; for(i=0;i<8;i++) { chuanshu=by>>7; by=by<<1; yiwei=1; _nop_(); _nop_(); yiwei=0; } cunchu=1; _nop_(); _nop_(); cunchu=0;  } void peizhi() { TMOD|=0x01; TH0=0xd8; TL0=0xf0; ET0=1; EA=1;  } void zouwei() { u8 i; for(i=0;i<length;i++) { dix[i]=x[i]; diy[i]=y[i]; } if(direction==1) x[0]=x[0]-1; if(direction==2) y[0]=y[0]+1; if(direction==3) x[0]=x[0]+1; if(direction==4) y[0]=y[0]-1; } void gen() { u8 i; for(i=1;i<length;i++) { x[i]=dix[i-1]; y[i]=diy[i-1]; } } void date() { u8 i; for(i=0;i<length;i++) { switch(x[i]) { case(1):p0=0x7f;break; case(2):p0=0xbf;break; case(3):p0=0xdf;break; case(4):p0=0xef;break; case(5):p0=0xf7;break; case(6):p0=0xfb;break; case(7):p0=0xfd;break; case(8):p0=0xfe;break; } switch(y[i]) { case(1):p1=0x01;break; case(2):p1=0x02;break; case(3):p1=0x04;break; case(4):p1=0x08;break; case(5):p1=0x10;break; case(6):p1=0x20;break; case(7):p1=0x40;break; case(8):p1=0x80;break; } P0=p0; chuanxing(p1); delay(25); chuanxing(0x00); switch(dianx) { case(1):p0=0x7f;break; case(2):p0=0xbf;break; case(3):p0=0xdf;break; case(4):p0=0xef;break; case(5):p0=0xf7;break; case(6):p0=0xfb;break; case(7):p0=0xfd;break; case(8):p0=0xfe;break; } switch(diany) { case(1):p1=0x01;break; case(2):p1=0x02;break; case(3):p1=0x04;break; case(4):p1=0x08;break; case(5):p1=0x10;break; case(6):p1=0x20;break; case(7):p1=0x40;break; case(8):p1=0x80;break; } P0=p0; chuanxing(p1); delay(25); chuanxing(0x00); } } void key() { if(k1==0) { delay(30); if(k1==0) { direction=1; TR0=1; panduan=1; tt2=tt2+5; while(!k1); } } if(k2==0) { delay(30); if(k2==0) { direction=2; tt2=tt2-2; while(!k2); } } if(k3==0) { delay(30); if(k3==0) { direction=3; tt2=tt2+3; while(!k3); } } if(k4==0) { delay(30); if(k4==0) { direction=4; tt2=tt2-1; while(!k4); } } } void winorlose() { u8 ii; u16 iii; for(ii=1;ii<length;ii++) { if((x[0]==x[ii])&&(y[0]==y[ii])) { panduan=2; while(iii<10000) { delay(10); iii++; for(ii=0;ii<41;ii++) { switch(gx[ii]-sb) { case(1):p0=0x7f;break; case(2):p0=0xbf;break; case(3):p0=0xdf;break; case(4):p0=0xef;break; case(5):p0=0xf7;break; case(6):p0=0xfb;break; case(7):p0=0xfd;break; case(8):p0=0xfe;break; default:p0=0xff;break; } switch(gy[ii]) { case(1):p1=0x01;break; case(2):p1=0x02;break; case(3):p1=0x04;break; case(4):p1=0x08;break; case(5):p1=0x10;break; case(6):p1=0x20;break; case(7):p1=0x40;break; case(8):p1=0x80;break; default:p1=0x00;break; } P0=p0; chuanxing(p1); delay(30); chuanxing(0x00); } } } } if((x[0]==0)||(x[0]>8)||(y[0]==0)||(y[0]>8)) { panduan=2; while(iii<10000) { delay(10); iii++; for(ii=0;ii<41;ii++) { switch(gx[ii]-sb) { case(1):p0=0x7f;break; case(2):p0=0xbf;break; case(3):p0=0xdf;break; case(4):p0=0xef;break; case(5):p0=0xf7;break; case(6):p0=0xfb;break; case(7):p0=0xfd;break; case(8):p0=0xfe;break; default:p0=0xff;break; } switch(gy[ii]) { case(1):p1=0x01;break; case(2):p1=0x02;break; case(3):p1=0x04;break; case(4):p1=0x08;break; case(5):p1=0x10;break; case(6):p1=0x20;break; case(7):p1=0x40;break; case(8):p1=0x80;break; default:p1=0x00;break; } P0=p0; chuanxing(p1); delay(30); chuanxing(0x00); } } } if(length==20) { TR0=0;  while(iii<10000) { delay(10); iii++; for(ii=0;ii<27;ii++) { switch(gwx[ii]) { case(1):p0=0x7f;break; case(2):p0=0xbf;break; case(3):p0=0xdf;break; case(4):p0=0xef;break; case(5):p0=0xf7;break; case(6):p0=0xfb;break; case(7):p0=0xfd;break; case(8):p0=0xfe;break; default:p0=0xff;break; } switch(gwy[ii]) { case(1):p1=0x01;break; case(2):p1=0x02;break; case(3):p1=0x04;break; case(4):p1=0x08;break; case(5):p1=0x10;break; case(6):p1=0x20;break; case(7):p1=0x40;break; case(8):p1=0x80;break; default:p1=0x00;break; } P0=p0; chuanxing(p1); delay(30); chuanxing(0x00); }  } } }  void main() { dianx=2; diany=6; x[0]=4; y[0]=4; x[1]=5; y[1]=4; x[2]=6; y[2]=4; length=3; direction=1; peizhi(); while(1) { date(); key(); winorlose(); } } void time0() interrupt 1 {  TH0=0xd8; TL0=0xf0; if(panduan==1) { tt1++; tt3++; if(tt3==17) { tt2=tt2+3; tt3=0; } if(tt1==50) {  tt1=0; zouwei(); gen(); if((tt2>8)&&(tt2%8)) tt2=tt2%8; else tt2=8; } if((x[0]==dianx)&&(y[0]==diany)) { dianx=tt2; diany=tt3%8; if(dianx>8) dianx=tt2%8; if(diany>8) { diany=tt2%8+3; if(diany>8) diany=diany-5; } if(dianx==0) dianx=4; if(diany==0) diany=4; length=length+1; } }  if(panduan==2) { j++; if(j==30) { sb++; if(sb>41) sb=0; j=0; } } }
回复

使用道具 举报

地板
ID:390239 发表于 2018-8-26 22:03 | 只看该作者
刚刚做的,虽然有点拖沓,但不少篇幅都是用来显示游戏赢了或者输了后的图案。。。
回复

使用道具 举报

5#
ID:390239 发表于 2018-8-26 22:05 | 只看该作者
#include<reg51.h>
#include<intrins.h>
typedef unsigned int u16;
typedef unsigned char u8;
u8 code gwx[27]={1,1,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,6,6,6,6,7,7};
u8 code gwy[27]={6,5,5,6,7,4,3,4,5,6,7,3,5,6,2,4,3,4,5,6,7,5,6,7,4,5,6};
u8 code gx[47]={9,9,9,9,9,10,11,13,13,13,13,13,14,14,15,15,15,15,15,17,17,17,17,18,18,18,19,19,19,19,21,21,21,21,21,22,22,22,23,23,23};
u8 code gy[47]={7,6,5,4,3, 3, 3, 7, 6, 5, 4, 3, 7, 3, 7, 6, 5, 4, 3, 7, 6, 5, 3, 7, 5, 3, 7, 5, 4, 3, 7, 6, 5, 4, 3, 7, 5, 3, 7 ,5, 3};
u8 x[20];u8 y[20];u8 length;u8 direction;
u8 tt1,tt2,tt3,tt4,dianx,diany;
u8 p1,p0,sb,j;
u8 panduan;
u8 dix[20],diy[20];
sbit k1=P3^1;
sbit k2=P3^0;

sbit k3=P3^2;
sbit k4=P3^3;
sbit yiwei=P3^6;
sbit cunchu=P3^5;
sbit chuanshu=P3^4;
void delay(u16 t)
{
while(t--);
}
void chuanxing(u8 by)
{
u8 i;
yiwei=0;
cunchu=0;
for(i=0;i<8;i++)
{
chuanshu=by>>7;
by=by<<1;
yiwei=1;
_nop_();
_nop_();
yiwei=0;
}
cunchu=1;
_nop_();
_nop_();
cunchu=0;

}
void peizhi()
{
TMOD|=0x01;
TH0=0xd8;
TL0=0xf0;
ET0=1;
EA=1;

}
void zouwei()
{
u8 i;
for(i=0;i<length;i++)
{
dix[i]=x[i];
diy[i]=y[i];
}
if(direction==1)
x[0]=x[0]-1;
if(direction==2)
y[0]=y[0]+1;
if(direction==3)
x[0]=x[0]+1;
if(direction==4)
y[0]=y[0]-1;
}
void gen()
{
u8 i;
for(i=1;i<length;i++)
{
x[i]=dix[i-1];
y[i]=diy[i-1];
}
}
void date()
{
u8 i;
for(i=0;i<length;i++)
{
switch(x[i])
{
case(1):p0=0x7f;break;
case(2):p0=0xbf;break;
case(3):p0=0xdf;break;
case(4):p0=0xef;break;
case(5):p0=0xf7;break;
case(6):p0=0xfb;break;
case(7):p0=0xfd;break;
case(8):p0=0xfe;break;
}
switch(y[i])
{
case(1):p1=0x01;break;
case(2):p1=0x02;break;
case(3):p1=0x04;break;
case(4):p1=0x08;break;
case(5):p1=0x10;break;
case(6):p1=0x20;break;
case(7):p1=0x40;break;
case(8):p1=0x80;break;
}
P0=p0;
chuanxing(p1);
delay(25);
chuanxing(0x00);
switch(dianx)
{
case(1):p0=0x7f;break;
case(2):p0=0xbf;break;
case(3):p0=0xdf;break;
case(4):p0=0xef;break;
case(5):p0=0xf7;break;
case(6):p0=0xfb;break;
case(7):p0=0xfd;break;
case(8):p0=0xfe;break;
}
switch(diany)
{
case(1):p1=0x01;break;
case(2):p1=0x02;break;
case(3):p1=0x04;break;
case(4):p1=0x08;break;
case(5):p1=0x10;break;
case(6):p1=0x20;break;
case(7):p1=0x40;break;
case(8):p1=0x80;break;
}
P0=p0;
chuanxing(p1);
delay(25);
chuanxing(0x00);
}
}
void key()
{
if(k1==0)
{
delay(30);
if(k1==0)
{
direction=1;
TR0=1;
panduan=1;
tt2=tt2+5;
while(!k1);
}
}
if(k2==0)
{
delay(30);
if(k2==0)
{
direction=2;
tt2=tt2-2;
while(!k2);
}
}
if(k3==0)
{
delay(30);
if(k3==0)
{
direction=3;
tt2=tt2+3;
while(!k3);
}
}
if(k4==0)
{
delay(30);
if(k4==0)
{
direction=4;
tt2=tt2-1;
while(!k4);
}
}
}
void winorlose()
{
u8 ii;
u16 iii;
for(ii=1;ii<length;ii++)
{
if((x[0]==x[ii])&&(y[0]==y[ii]))
{
panduan=2;
while(iii<10000)
{
delay(10);
iii++;
for(ii=0;ii<41;ii++)
{
switch(gx[ii]-sb)
{
case(1):p0=0x7f;break;
case(2):p0=0xbf;break;
case(3):p0=0xdf;break;
case(4):p0=0xef;break;
case(5):p0=0xf7;break;
case(6):p0=0xfb;break;
case(7):p0=0xfd;break;
case(8):p0=0xfe;break;
default:p0=0xff;break;
}
switch(gy[ii])
{
case(1):p1=0x01;break;
case(2):p1=0x02;break;
case(3):p1=0x04;break;
case(4):p1=0x08;break;
case(5):p1=0x10;break;
case(6):p1=0x20;break;
case(7):p1=0x40;break;
case(8):p1=0x80;break;
default:p1=0x00;break;
}
P0=p0;
chuanxing(p1);
delay(30);
chuanxing(0x00);
}
}
}
}
if((x[0]==0)||(x[0]>8)||(y[0]==0)||(y[0]>8))
{
panduan=2;
while(iii<10000)
{
delay(10);
iii++;
for(ii=0;ii<41;ii++)
{
switch(gx[ii]-sb)
{
case(1):p0=0x7f;break;
case(2):p0=0xbf;break;
case(3):p0=0xdf;break;
case(4):p0=0xef;break;
case(5):p0=0xf7;break;
case(6):p0=0xfb;break;
case(7):p0=0xfd;break;
case(8):p0=0xfe;break;
default:p0=0xff;break;
}
switch(gy[ii])
{
case(1):p1=0x01;break;
case(2):p1=0x02;break;
case(3):p1=0x04;break;
case(4):p1=0x08;break;
case(5):p1=0x10;break;
case(6):p1=0x20;break;
case(7):p1=0x40;break;
case(8):p1=0x80;break;
default:p1=0x00;break;
}
P0=p0;
chuanxing(p1);
delay(30);
chuanxing(0x00);
}
}
}
if(length==20)
{
TR0=0;

while(iii<10000)
{
delay(10);
iii++;
for(ii=0;ii<27;ii++)
{
switch(gwx[ii])
{
case(1):p0=0x7f;break;
case(2):p0=0xbf;break;
case(3):p0=0xdf;break;
case(4):p0=0xef;break;
case(5):p0=0xf7;break;
case(6):p0=0xfb;break;
case(7):p0=0xfd;break;
case(8):p0=0xfe;break;
default:p0=0xff;break;
}
switch(gwy[ii])
{
case(1):p1=0x01;break;
case(2):p1=0x02;break;
case(3):p1=0x04;break;
case(4):p1=0x08;break;
case(5):p1=0x10;break;
case(6):p1=0x20;break;
case(7):p1=0x40;break;
case(8):p1=0x80;break;
default:p1=0x00;break;
}
P0=p0;
chuanxing(p1);
delay(30);
chuanxing(0x00);
}

}
}
}

void main()
{
dianx=2;
diany=6;
x[0]=4;
y[0]=4;
x[1]=5;
y[1]=4;
x[2]=6;
y[2]=4;
length=3;
direction=1;
peizhi();
while(1)
{
date();
key();
winorlose();
}
}
void time0() interrupt 1
{

TH0=0xd8;
TL0=0xf0;
if(panduan==1)
{
tt1++;
tt3++;
if(tt3==17)
{
tt2=tt2+3;
tt3=0;
}
if(tt1==50)
{

tt1=0;
zouwei();
gen();
if((tt2>8)&&(tt2%8))
tt2=tt2%8;
else
tt2=8;
}
if((x[0]==dianx)&&(y[0]==diany))
{
dianx=tt2;
diany=tt3%8;
if(dianx>8)
dianx=tt2%8;
if(diany>8)
{
diany=tt2%8+3;
if(diany>8)
diany=diany-5;
}
if(dianx==0)
dianx=4;
if(diany==0)
diany=4;
length=length+1;
}
}

if(panduan==2)
{
j++;
if(j==30)
{
sb++;
if(sb>41)
sb=0;
j=0;
}
}
}
刚刚做的 不少篇幅都用来表示输了或者赢了之后的图案了。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表