- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[计算机软件及应用]贪吃蛇c程序设计报告含c代码
贪吃蛇
一 实验目的
1、 了解AVR ATmega128试验箱的基本构成
2、熟悉键盘的工作原理和设置
3、熟悉点阵的工作原理和设置
4、熟悉液晶显示器的工作原理和设置
5、熟悉语音播放的工作原理和设置
6、熟悉AVR ATmega128的中断功能
7、初步掌握用C语言编程的能力
二 实验内容:
1、设计题目:
根据液晶显示器中的提示,通过对4*4键盘的按键输入,选择游戏的难度,继而控制点阵中点列的移动、长度的增加,只有在规定的时间(30秒、20秒、10秒)内完成任务(吃10个),就可游戏胜利,否则失败。同时在游戏的开始、胜利、失败时都将伴随着声音的输出。
三 硬件原理
1、AVR ATmega128单片机及片外选址电路
2、LDM点阵显示电路
3、LCD液晶显示电路
4、键盘连接电路及语音输出连接电路
四 程序流程图
(1)、主函数
只有在规定的时间内完成“吃下”10个点,游戏才能成功,除了上图中的当第一点碰触到自身点导致失败情况下,在规定的时间内没有完成任务,将会导致中断相应,推出程序运行,最终游戏失败。
(2)、随机点产生函数 void _rand(void)
函数中应用了产生随机点的函数rand(),其头文件必须包括“#includestdlib.h”
(3)、第一点的操作函数 void operate(unsigned char in)
产生第一点运动后的在点阵中显示的码值(数组change[])
Leader_i,leader_j分别为第一点相对于点阵中左上角上的点的绝对坐标值,其中每一个点的直径长设为1。
(4)、擦除函数void _eraser(void)
产生被擦除点的码值的反(eraser[])
由于最后一个点的位置可以由第一个点根据先前操作逆走N步得到,所以eraser_i=leader_i+n1-n2和eraser_j=leader_j+n3-n4得到被擦除点相对于点阵左上点的绝对坐标。由于eraser_i、eraser_j可能为负值,因而为求得最后一个点在点阵中的位置,使其任意加一足够大的能被8整除的正整数(设为800),再与8除求余。即:eraser_i=(eraser_i+800)%8,eraser_j=(eraser_j+800)%8。后经eraser[eraser_i]=~(1eraser_j)求得被擦除点在点阵中显示码值的反码。
(5)、状态保存函数 void status_save(void)
将前一状态与第一点移动后产生的第一点新码值(change[])进行或运算,再与产生的被擦除点显示码值的反(eraser[])进行与运算,得到新的显示状态(除随机点)的码值。
(6)、第一点的操作过程记录函数 void renew(unsigned char in)
根据需要记录第一个点的N个运行过程(设为20)
(7)、吃点函数 void eat(unsigned char in)
将记录的随机点显示码值的数组font[]清零,让第一个点再向前操作一步,但不擦除最后一个点,用来实现吃点效果。最后调用产生随机点函数重新产生一随机点。
(8)、结合函数 void join(void)
用于产生要显示的码值。将表示状态的数组status[]与表示随机点的数组font[]进行或运算就可以实现。
(9)、测试函数 unsigned char test(unsigned char *tester)
这个函数在程序中用于两个地方,一是在产生随机点的函数中,如果产生的随机点在“蛇”身上(返回值为2),则重新产生随机点;二是在第一个操作完一步后,判断此时第一点的位置,如果在“蛇”身上(返回值为2),则游戏失败。
(10)、液晶显示器显示函数 void print_message(char *message)
用于显示字符串message。
(11)、函数 void start(void)、void _win(void)、void lose(void) 用于在游戏开始时、胜利时、失败时的液晶显示、语音输出以及LED点阵输出。
(12)、难度选择函数 void choose(void)
根据液晶显示的提示,选择游戏难度等级。在按确认键后开中断。程序流程图如下:
(13)、中断程序 SIGNAL(SIG_OVERFLOW3)
用于限制游戏进行的时间,在规定时间内完成游戏任务,则关中断,中断程序不在执行,如果在规定时间没有完成,则调用失败函数(lose()),游戏失败。程序流程图如下:
c程序代码:
/****************************************************
DOS 游戏,贪吃蛇。编辑器Win-TC,编译器TC 2内核。
作者:樊毅。
时间
文档评论(0)