贪吃蛇游戏设计报告Word格式.docx

上传人:b****1 文档编号:3304716 上传时间:2023-05-01 格式:DOCX 页数:18 大小:54.90KB
下载 相关 举报
贪吃蛇游戏设计报告Word格式.docx_第1页
第1页 / 共18页
贪吃蛇游戏设计报告Word格式.docx_第2页
第2页 / 共18页
贪吃蛇游戏设计报告Word格式.docx_第3页
第3页 / 共18页
贪吃蛇游戏设计报告Word格式.docx_第4页
第4页 / 共18页
贪吃蛇游戏设计报告Word格式.docx_第5页
第5页 / 共18页
贪吃蛇游戏设计报告Word格式.docx_第6页
第6页 / 共18页
贪吃蛇游戏设计报告Word格式.docx_第7页
第7页 / 共18页
贪吃蛇游戏设计报告Word格式.docx_第8页
第8页 / 共18页
贪吃蛇游戏设计报告Word格式.docx_第9页
第9页 / 共18页
贪吃蛇游戏设计报告Word格式.docx_第10页
第10页 / 共18页
贪吃蛇游戏设计报告Word格式.docx_第11页
第11页 / 共18页
贪吃蛇游戏设计报告Word格式.docx_第12页
第12页 / 共18页
贪吃蛇游戏设计报告Word格式.docx_第13页
第13页 / 共18页
贪吃蛇游戏设计报告Word格式.docx_第14页
第14页 / 共18页
贪吃蛇游戏设计报告Word格式.docx_第15页
第15页 / 共18页
贪吃蛇游戏设计报告Word格式.docx_第16页
第16页 / 共18页
贪吃蛇游戏设计报告Word格式.docx_第17页
第17页 / 共18页
贪吃蛇游戏设计报告Word格式.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

贪吃蛇游戏设计报告Word格式.docx

《贪吃蛇游戏设计报告Word格式.docx》由会员分享,可在线阅读,更多相关《贪吃蛇游戏设计报告Word格式.docx(18页珍藏版)》请在冰点文库上搜索。

贪吃蛇游戏设计报告Word格式.docx

不可屏蔽中断优先级最高,对应于第二敝中断信号。

最低优先级中断中断4−15对应INT4−INT15信号。

重置,敝中断,一些INT4−INT15信号映射到C6000设备上的别针。

一些INT4−INT15中断信号是内部使用的外设和一些可能不可用或在软件的控制下可以使用。

外中断区别于计时器等片内设备中断,它来源于DSP片外,属于硬件中断。

外中断信号通过DSP器件封装上的专用管脚输入DSP,属于可屏蔽中断。

TMS3206713DSP有三个外中断:

EXT_INT4~EXT_INT7,如果CPU允许,这四个信号线上的低脉冲信号会中断CPU。

中断是为使CPU具有对外界异步事件的处理能力而设置的。

通常DSP工作在包含多个外界异步事件环境中,当这些事件发生时,DSP应及时执行这些事件所要求的任务。

中断就是要求CPU暂停当前的工作,转而去处理这些事件,处理完成后,再回到原来被中断的地方继续原来的工作。

显然,服务一个中断包括保存当前处理现场,完成中断服务,恢复各寄存器和现场,然后返回继续执行被暂时中断的程序。

请求CPU中断的请求源称为中断源。

这些中断源可以是片内的,如定时器等,也可以是片外的,如A/D转换及其他片外装置。

片外中断请求连接到芯片的中断管脚,并且在这些管脚处的电平上升沿产生。

如果这个中断被使能,则CPU开始处理这个中断,将当前程序流程转向中断服务程序。

当几个中断源同时向CPU请求中断时,CPU会根据中断源的优先级别,优先响应级别最高的中断请求。

TMS320C6000有11个寄存器管理中断服务:

*控制状态寄存器CSR控制全局使能或禁止中断

*中断使能寄存器IER使能或禁止中断处理

*中断标志寄存器IFR指示有中断请求但未被响应的中断发生

*中断设置寄存器ISR手动设置IFR中的标志位

*中断清除寄存器ICR手动清除IFR中的标志位

*中断服务表指针ISTP指向中断服务表的起始地址

*不可屏蔽中断返回指针NRP包含从不可屏蔽中断返回的地址,该中断返回通过BNRP指令完成

*可屏蔽中断返回地址IRP可屏蔽中断的返回地址

*中断选择寄存器IML可选择CPU中断10-15号对应的中断源

*中断选择寄存器IMH可选择CPU中断4-9号对应的中断源

*外中断极性选择寄存器EIP选择外中断(INT4-INT7)的触发极性

外设事件要引起CPU中断,必须保证:

CSR使能中断,IER相应位被使能(置1),ST1寄存器中的INTM使能(置0),中断服务表相应位置放置服务程序入口地址转移指令,相应中断源放入IML或IMH适当位置。

当CPU响应中断时,PC指针指向中断向量表中对应中断的地址,进入中断服务子程序。

中断向量表是DSP存放中断服务程序的一段内存区域,大小为80H。

在中断向量表中,每一个中断占用32个字的空间,一般情况是将一条跳转或延时跳转指令存放于此。

中断向量表的位置是可以改变的,修改ISTP寄存器中的中断向量表基地址可以实现这一点。

程序中应包含中断向量表。

向量表中每项为32个字,存放跳转指令,跳转指令中的地址为相应服务程序入口地址。

第一个向量表的首项为复位向量,即CPU复位操作完成后自动进入执行的程序入口。

程序中包含相应的中断服务程序,应将其入口地址加入相应中断向量表中。

在程序中重定位中断向量表到本程序的中断向量表地址;

设置中断源(IML,IMH)、中断屏蔽寄存器IER__·

定时器原理:

设备有32位通用定时器,可用于:

时间事件、计数事件、产生脉冲、中断cpu、dma发送同步事件

计时器有两个信号模式,由一个内部时钟或externl来源。

计时器有输入插口和输出插口。

输入和输出。

(tinpand兜售)可以作为定时器时钟时钟输入和输出。

也可以分别配置为通用的输入和输出。

监视定时器状态:

设置TOUT管脚功能:

0194000401980004定时器周期寄存器PRD设置定时器的计数周期

决定TSTAT信号的频率

0194000801980008定时器计数寄存器CNT定时器当前计数值

键盘使用:

ICETEK-C6713-EDU实验箱对TMS320C6713DSP存储空间的使用地址范围:

0901f0000h—0901fffffh数据宽度:

16位

0901f0000h:

ICETEK-CTR全局控制寄存器写地址

0901f0002h:

读取键盘扫描码地址,液晶命令写地址

0901f0004h:

清除键盘缓冲区读地址,液晶控制写地址

0901f0006h:

液晶左侧显示数据写地址

0901f0008h:

液晶右侧显示数据写地址

0901f000Ah:

发光二极管阵列数据写地址

0901f000Eh:

发光二极管阵列使能、交通灯状态、PWM状态写地址、直流电机使能位

其它地址:

保留

液晶显示器的显示控制原理:

ICETEK-C6713-A是一块以TMS320C6713DSP为核心的DSP扩展评估板,它通过扩展接口与实验箱的显示/控制模块连接,可以控制其各种外围设备。

液晶显示模块的访问、控制是由C6713DSP对CE1空间的特定地址的操作完成。

LCD控制寻址:

命令发送的地址为0901f0002H,数据发送的地址为0901f0006H和0901f0008H,辅助控制的地址为0901f0004H。

显示控制方法:

-液晶显示模块中有两片显示缓冲存储器,分别对应屏幕显示的象素,向其中写入数值将改变显示,写入“1”则显示一点,写入“0”则不显示。

在系统硬件上电复位后,软件根据用户的需要自动对各项控制器指令代码及其参数进行设置,从而完成对液晶模块的参数如液晶的行数、列数、扫描频率、光标的位置等。

以及显示方式等一系列的初始化过程。

在对系统进行正确的初始化以后,可以通过DSP将外部ROM中的数据直接送至SED1335显示缓冲区,控制器就可以控制液晶屏显示出用户所要的图画。

同时用户也可以根据自己的需要在主程序运行的过程中改变图片显示的形式。

试验箱上与之相连对应的端口有端口8001.8002控制液晶显示开关以及行列显示,而端口8003和8004是控制显示左屏和右屏。

具体情况如下:

port8001=0x3f;

port8002=0;

打开显示屏

port8001=0x3e;

关闭显示屏

port8001=0x0c0;

从存储器第0行开始显示,依次增大行数也增大到8为止。

port8001=0x40;

控制0列

port8001=0x0b8;

控制0页

port8003=0x80;

控制左屏显示

port8003=0x01;

控制右屏显示

发送控制命令:

向液晶显示模块发送控制命令的方法是通过向命令控制地址写入命令控制字,然后再向辅助控制地址写入0。

由于液晶模块相对于DSP来讲是慢速设备,在命令之间可能需要增加延时语句,或将CE1空间的EMIF访问控制寄存器设置的访问延时加大。

写显示数据:

在使用命令控制字选择操作位置(页数、列数)之后,可以将待显示的数据写入液晶显示模块的缓存。

将数据发送到相应数据控制地址即可。

液晶显示程序:

voiddraw(intindex)

{

intpage;

//定义页

introw;

//定义列

page=index%8;

//页对8取模

row=index/8;

//列对8取整

LCDCMD(7-page+0x0b8);

//设置操作页

if(row<

64)

{

LCDCMD(row+LCDCMDVERADDRESS);

//起始列

LCDWriteLeft(Ground.LCDarray[index]);

}

else

{

LCDCMD(row-64+LCDCMDVERADDRESS);

LCDWriteRight(Ground.LCDarray[index]);

}

}

五、程序设计

本次设计是基于DSP芯片的贪吃蛇设计。

而显示则使用液晶显示器,设计关键在于表示蛇的图形及蛇的移动。

用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块。

移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。

食物的出现与消失也是画矩形块和覆盖矩形块。

当在一个关卡中蛇头撞到墙壁或者自己的身体,则刷屏,表示游戏结束。

其程序流程图如下:

 

在设计中,我们定义了一个共同体,把蛇身数据以及屏幕显示的数据放在一个类里面,这样既节省了空间,也方便我们在程序中的数据调用。

相关函数定义

函数定义是对各个基础函数的定义,并且设置需要运用的信息,便于调用

voidfood();

//产生食物的函数

voidInit();

//

voidmove();

//贪吃蛇的运动

voiddraw(intindex);

//显示

voidInitInterrupt(void);

//中断函数

函数main()程序流程图

主函数是程序的主流程,首先定义使用到的常数、全局变量及函数原型说明,然后初始化图形系统.

主函数模块主要是定义各个端口,调用各个程序,像清除屏幕显示内容.延时子程序.打开显示。

以及全局初始化。

同时还有控制显示的方式位。

Main程序

main()

init_emif();

//初始化emif

InitCTR();

//初始化ICETEK-CTR

TurnOnLCD();

//打开显示

LCDCLS();

//清除显示内存

Init();

InitInterrupt();

while

(1)

switch(GameStatus)

{

casewin:

Init();

break;

casefail:

caserunning:

move();

draw(BITSLOT(SnakeBody[SnakeHead]));

draw(BITSLOT(SnakeTailIndex));

Delay(500);

}

}

六、总结

1)函数定义是要做到顾名思义是很重要的,它对读程序的人正确认识程序

十分重要,在修改这个程序的过程中也能很快找到程序各模块的作用,大大增

加了程序的可读性。

2)分析函数先从main()函数入手。

Main()函数是C源程序编译时的开始,

从main()函数开始读函数可将其他函数的功能理解得更透彻。

3)在做程序的时候先列框架,将这个程序所要达到的目的(功能)分析出

来,选择正确的数据结构然后在将程序模块化,按照模块编写函数更加简单合理。

5)c语言是相对最简单的设计语言,用c语言表达我们的想法,这对我们将来的学习有了更多的要求。

贪吃蛇源程序:

#include"

#include<

limits.h>

/*forCHAR_BIT*/

#defineBITMASK(b)(128>

>

((b)%CHAR_BIT))

#defineBITSLOT(b)((b)/CHAR_BIT)

#defineBITSET(a,b)((a)[BITSLOT(b)]|=BITMASK(b))

#defineBITCLEAR(a,b)((a)[BITSLOT(b)]&

=~BITMASK(b))

#defineBITTEST(a,b)((a)[BITSLOT(b)]&

BITMASK(b))

#defineBITNSLOTS(nb)((nb+CHAR_BIT-1)/CHAR_BIT)

#definewin2

#definefail1

#definerunning0

#defineup1

#definedown2

#defineleft3

#defineright4

intSnakeFoodPosition,SnakeLong;

intSnakeBody[20],SnakeHead,SnakeTail,GameStatus,SnakeDirection,SnakeTailIndex;

union

{

charbitarray[BITNSLOTS(64*128)];

unsignedcharLCDarray[64*128/8];

}Ground;

intSnakeFoodPosition,SnakeLong;

voidInit()

inti;

for(i=0;

i<

64*128/8;

i++)

Ground.bitarray[i]=0;

//memset(Ground.LCDarray,0,4*16);

for(i=0;

64;

BITSET(Ground.bitarray,i);

//画上边界

BITSET(Ground.bitarray,127*64+i);

//画下边界

for(i=1;

127;

BITSET(Ground.bitarray,i*64);

//画左边界

BITSET(Ground.bitarray,i*63+63);

//画右边界

BITSET(Ground.bitarray,330);

BITSET(Ground.bitarray,331);

BITSET(Ground.bitarray,332);

SnakeBody[0]=330;

SnakeBody[1]=331;

SnakeBody[2]=332;

SnakeHead=2;

SnakeTail=0;

SnakeLong=3;

food();

SnakeDirection=up;

GameStatus=running;

draw(i);

voidfood()

{

srand((unsigned)time(0));

SnakeFoodPosition=rand()%(64*128-1);

while(BITTEST(Ground.bitarray,SnakeFoodPosition))

SnakeFoodPosition+=SnakeLong;

SnakeFoodPosition=SnakeFoodPosition%(64*128-1);

}

BITSET(Ground.bitarray,SnakeFoodPosition);

draw(BITSLOT(SnakeFoodPosition));

voidmove()

i=SnakeBody[SnakeHead];

//暂存蛇头上一位置

SnakeHead++;

SnakeHead=SnakeHead%20;

switch(SnakeDirection)

caseup:

SnakeBody[SnakeHead]=i+1;

break;

casedown:

SnakeBody[SnakeHead]=i-1;

caseleft:

SnakeBody[SnakeHead]=i-64;

caseright:

SnakeBody[SnakeHead]=i+64;

if(!

BITTEST(Ground.bitarray,SnakeBody[SnakeHead]))

BITSET(Ground.bitarray,SnakeBody[SnakeHead]);

BITCLEAR(Ground.bitarray,SnakeBody[SnakeTail]);

SnakeTailIndex=SnakeBody[SnakeTail];

SnakeTail++;

SnakeTail=SnakeTail%20;

elseif(SnakeBody[SnakeHead]==SnakeFoodPosition)

SnakeLong++;

food();

if(SnakeLong==20)GameStatus=win;

GameStatus=fail;

voidInitInterrupt(void)

//设置中断控制寄存器

CSR&

=0xfffffffe;

//关中断GIE=0

ISTP=0x00000c00;

//重置中断向量表到0C00h

IMH=0x0;

//指定xint5中断

IML=0x0a0;

ICR=0xff;

//清除等待的中断

IER=0x23;

//使能xint5中断

CSR=CSR|1;

//开中断

voidinterruptXINT5()//中断响应函数

intkey;

key=Getkey();

switch(key)

caseSCANCODE_2:

SnakeDirection=down;

caseSCANCODE_8:

SnakeDirection=up;

caseSCANCODE_4:

SnakeDirection=left;

caseSCANCODE_6:

SnakeDirection=right;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2