- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《嵌入式系统》设计报告
学院:电气与自动化工程学院
班级:自动化2班
年级:2010级
学号:3010203109
姓名:叶林奇
作品名称:贪吃蛇游戏
设计思路
贪吃蛇由一节一节的方块组成,初始长度为3,按下启动按钮(‘1’键),贪吃蛇前进。玩家通过方向键(‘2’上‘4’左‘5’下‘6’右)控制贪吃蛇的转弯。按下暂停键(‘1’),游戏暂停,再次按下暂停键继续游戏。游戏过程中若贪吃蛇撞到边界或自己,则游戏失败。贪吃蛇每吃一个食物,节数加1。玩家如果成功将节数增加到20,则获得胜利。胜利后播放音乐,按下重启键(‘3’)重新开始。
流程图:
主要代码:
char stop=0,restart=0,win1=0;
/* 标志位,stop:暂停键按下置1;restart:重启键按下1;win1:获胜置1 */
char length; /* 贪吃蛇长度 */
char snake[20][2]={0};
/* 贪吃蛇各节位置坐标;snake[0]为头部;snake[i][0]:x坐标(0~39);snake[i][1]:y坐标(0~29) */
void Refresh_Snake() /* 刷新贪吃蛇所有节 */
{
unsigned char i;
for(i=0;ilength;i++)
MX1_LCDC_DrawSquare(snake[i][0]*8,snake[i][1]*8, 8, 29, 50, LS_SOLID, FS_SOLID );
}
void Init() /* 初始化程序 */
{
restart=0; /* restart标志位初始状态置0 */
win1=0; /* win1标志位初始状态置0 */
stop=1; /* stop标志位初始状态置1 */
length=3; /* 初始长度设为3 */
snake[0][0]=20;snake[0][1]=14; /* 头部初始位置 */
snake[1][0]=20;snake[1][1]=15; /* 第二节初始位置 */
snake[2][0]=20;snake[2][1]=16; /* 第三节初始位置 */
MX1_LCDC_DrawRect( 0, 0, 319, 239, 15, 15, LS_SOLID, FS_SOLID );
/* 全屏用红色盖住 */
Refresh_Snake(); /* 在屏幕上显示贪吃蛇 */
Generate_food(); /* 生成食物 */
Turn_up();
}
char food[2]={0}; /* 食物坐标;food[0]:x坐标,food[1]y坐标 */
long w=0; /* 随机数种子变量 */
void Generate_food() /* 食物生成子程序 */
{
char x,y,i,ok=0;
srand(w); /* 随机数发生器的初始化函数 */
w++; /* 该子程序每执行一次随机数种子变量加1,保证随机数可以正常产生 */
while(ok==0)
{ x=rand()%40; /* 随机生成x(0~39) */
y=rand()%30; /* 随机生成y(0~29) */
for(i=0;ilength;i++)
{
if(x==snake[i][0]y==snake[i][1])break; /* 检验(x,y)是否与贪吃蛇的节重合 */
}
if(i==length)ok=1; /* 不重合时ok置1,退出循环 */
}
food[0]=x;food[1]=y; /* 用之前产生的坐标给food赋值 */
Refresh(food); /* 在屏幕上刷新食物位置 */
}
void Restart() /* 游戏失败时的重启操作,执行初始化程序 */
{
Init();
}
void win() /* 获胜子程序 */
{
win1=1; /* 胜利标志位置1 */
while( restart==0 )
{
WAVE_Play( ); /* 播放声音,直到重启键按下 */
}
Restart(); /* 重新开始游戏 */
}
char Get_direction() /* 获取当前前进方向;返回值0123分别代表下上左右 */
{
char i;
if(snake[0][0]==snake[1][0])
{
if(snake[0][1]snake[1][1]){i=0;}
else i=1;
}
文档评论(0)