贪吃蛇实验

2018-12-05 21:44

实验:贪吃蛇

一、实验目的

1.运用所学过的单片机知识,编写简单的贪吃蛇游戏; 2.学会单片机大部分功能的运用。 二、实验原理 1. TFT 彩屏工作原理

TFT(Thin Film Transistor)LCD 即薄膜场效应晶体管LCD,是有源矩阵类型液晶显示器(AM-LCD)中的一种。和TN 技术不同的是,TFT 的显示采用“背透式”照射方式——假想的光源路径不是像TN 液晶那样从上至下,而是从下向上。这样的作法是在液晶的背部设置特殊光管,光源照射时通过下偏光板向上透出。由于上下夹层的电极改成FET 电极和共通电极,在FET 电极导通时,液晶分子的表现也会发生改变,可以通过遮光和透光来达到显示的目的,响应时间大大提高到80ms 左右。因其具有比TN LCD 更高的对比度和更丰富的色彩,荧屏更新频率也更快,故TFT 俗称“真彩”。

LCD 是由二层玻璃基板夹住液晶组成的,形成一个平行板电容器,通过嵌入在下玻璃基板上的TFT 对这个电容器和内置的存储电容充电,维持每幅图像所需要的电压直到下一幅画面更新。液晶的彩色都是透明的必须给LCD 衬以白色的背光板上才能将五颜六色表达出来,而要使白色的背光板有反射就需要在四周加上白色灯光。因此在TFT LCD 的底部都组合了灯具,如CCFL 或LED。

2.矩阵按钮

矩阵按键又称为行列式按键,他是用4 条I/O 线作为行线,4 条I/O 线作为列线组成的按键,在行线和列线的每一个交叉点上,设置一个按键。如图所示,

按键识别原理:

在某一时刻只让一条列线处于低电平,其余列线均处于高电平,则当这一列有键按下时,该键所在的行电平将会由高电平变为低电平,可判定该列相应的行

有键按下。当第0 列处于低电平时,逐行查找是否有行线变低,若有,则第0 列与该行的交叉点按键按下;若无,则表示第0 列无键按下,再让下一列处在低电平,依此循环,这种方式称为键盘扫描。

3.贪吃蛇操作原理

贪吃蛇本身是由好几个点连成的一条线段,只要通过延时函数使线段在时间前后往指定的方向进一步就行了,即将所有线段上的点往指定方向移动一段,就会出现贪吃蛇的基本运动。贪吃蛇的方向可以通过设置几个指定的按钮来控制。

贪吃蛇吃的食物那个点可以由随机函数rand()产生一个随机数组,再每次显示一个数组里的点就可以达到预计的随机点。

最后再通过判断边界,输赢条件,使程序更加完善,界面美观。 三、实验代码。

#include #include #include #include #include #include #include\ #include\ #include\ #include\ #include\ #include\ #include\ #include\ #include\ #include\ #include\ #include\ #include\ #include\ #include\

#include\ #include\ #include\ #include\

#include\

// Provide a definition for M_PI, if it was not provided by math.h. #ifndef M_PI

#define M_PI 3.14159265358979323846F #endif

uint16_t sc; //长度

unsignedint k=0,start=0,s=3000; //k按键数,start开始键 unsignedint sum=0;//吃到的食物数量

//********************************************************************* uint32_t g_ui32SysClock;

staticvolatileunsignedlong g_ulTickCount; #define SERIES_LENGTH 240

typedefstruct _snack {

uint32_tx; uint32_ty; }ssnack;

staticssnack snack[40],a[50];//a为随机数 staticssnack food;//食物

voidTFTLCD_DrawLine(ssnack sk1,ssnack sk2,uint32_t color) // 画蛇线段 {

uint32_t i=0,PointNum = 0; if(sk1.x==sk2.x) //沿Y方向画线 {PointNum = abs(sk1.y-sk2.y); if(sk1.y<=sk2.y) {

for(i=0;i

TFTLCD_DrawPoint(sk1.x,sk1.y+i,color);

} } Else

{

for(i=0;i

} }

{

TFTLCD_DrawPoint(sk1.x,sk2.y+i,color); }

elseif (sk1.y==sk2.y)//沿X方向画线 {PointNum = abs(sk1.x-sk2.x); if(sk1.x<=sk2.x) { } else { } } } void

SnackInit(void) //对蛇进行初始化 {

uint32_t i; snack[0].x=50; snack[0].y=50; for(i=1;i<=5;i++) {

snack[i].x=50; snack[i].y=50+10*i;

TFTLCD_DrawLine(snack[i-1],snack[i],GREEN); for(i=0;i

{

TFTLCD_DrawPoint(sk2.x+i,sk2.y,color); }

for(i=0;i

TFTLCD_DrawPoint(sk1.x+i,sk2.y,color);

}

TFTLCD_DrawHorizontalLine(0,240,340,GREEN); } void

SnackDown(void) // 往下走 { uint32_t n;

TFTLCD_DrawLine(snack[1],snack[0],BLACK); SysCtlDelay(500*(20000000/s));//2 for(n=0;n

snack[n]=snack[n+1]; }

snack[sc].y=snack[sc].y+10;

TFTLCD_DrawLine(snack[sc-1],snack[sc],GREEN); SysCtlDelay(500*(20000000/s));//2 } void

SnackRight(void)//往右走 { uint32_t n,j; j=sc-1;

TFTLCD_DrawLine(snack[1],snack[0],BLACK); SysCtlDelay(500*(20000000/s));//2 for(n=0;n<=j;n++) {

snack[n]=snack[n+1]; }

snack[sc].x=snack[sc].x+10;

TFTLCD_DrawLine(snack[j],snack[sc],GREEN); SysCtlDelay(500*(20000000/s));//2 } void

SnackLeft(void) //往左走 { uint32_t n,j; j=sc-1;


贪吃蛇实验.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:博雅汉语初级起步篇生词1-42

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: