基于MSP430F5529俄罗斯方块游戏程序文件.docx

上传人:b****5 文档编号:11979738 上传时间:2023-04-16 格式:DOCX 页数:17 大小:18.71KB
下载 相关 举报
基于MSP430F5529俄罗斯方块游戏程序文件.docx_第1页
第1页 / 共17页
基于MSP430F5529俄罗斯方块游戏程序文件.docx_第2页
第2页 / 共17页
基于MSP430F5529俄罗斯方块游戏程序文件.docx_第3页
第3页 / 共17页
基于MSP430F5529俄罗斯方块游戏程序文件.docx_第4页
第4页 / 共17页
基于MSP430F5529俄罗斯方块游戏程序文件.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

基于MSP430F5529俄罗斯方块游戏程序文件.docx

《基于MSP430F5529俄罗斯方块游戏程序文件.docx》由会员分享,可在线阅读,更多相关《基于MSP430F5529俄罗斯方块游戏程序文件.docx(17页珍藏版)》请在冰豆网上搜索。

基于MSP430F5529俄罗斯方块游戏程序文件.docx

基于MSP430F5529俄罗斯方块游戏程序文件

/*基于MSP430F5529俄罗斯方块游戏程序*/

//作者:

    詹磊

//功能:

    基于MSP430F5529俄罗斯方块游戏程序

//说明:

    运行环境:

TI官方MSP-EXP5529开发板(外接4个带上拉电阻独立按键)

//        非原创,思路是从51单片机上移植过来的

//        底层液晶驱动是TI官方提供的LCDAPI

//        游戏算法部分的底层程序多处已经修改,与原版会有较大的差别

//版本:

    测试版V1.0(基本能流畅运行,但需要进一步的美化和优化)

#include"MSP430F5529.h"

#include"LCD_102x64.h"

#include"main.h"

#include"Key.h"

#defineMAXHANG20                        //游戏显示行数

#defineMAXLIE  16                        //游戏显示列数

#defineMapWide    48                        //地图宽

#defineMapHigh    60                        //地图高

#defineON        0

#defineOFF        1

#defineBIT(n)        (1<<(n))

volatileuintcubeMap[MAXHANG];              //地图显示存存

typedefstruct{

          ucharconst*box;          //方块图形字模数据指针

              ucharcube:

4;              //方块形态(占用4个位域)

              ucharstate:

4;              //方块状态(占用4个位域)

              charrow;                  //方块所在行

              charcolumn;                  //方块所在列

              }block;

blockthis;

ucharliang=11;

ucharSpeed=1,Score=0;

uinttimeA=0;

uchardownflag=0;

ucharrandomNumber=0;

constucharcube[]=

{

/*■

  ■■■

*/

0,4,0xe,0,  0,2,6,2,    0,7,2,0,    4,6,4,0,

/*■

  ■■■

*/

0,8,0xe,0,  0,4,4,0xc,  0,0,0xe,2,  0,6,4,4,

/*■■■

  ■

*/

0,0xe,8,0,  0,4,4,6,    0,1,7,0,    6,2,2,0,

/*■■

  ■■

*/

0,0xc,6,0,  0,2,6,4,    0,6,3,0,    2,6,4,0,

/*  ■■

  ■■

*/

0,6,0xc,0,  0,4,6,2,    0,3,6,0,    4,6,2,0,

/*■■■■

*/

0,0xf,0,0,  4,4,4,4,    0,0,0xf,0,  2,2,2,2,

/*■■

  ■■

*/

0,6,6,0,  0,6,6,0,    0,6,6,0,    0,6,6,0

};

voiddelay_ms(uintz)//毫秒级延时函数

{

    uinti,m;

    for(i=z;i>0;i--)

        for(m=4500;m>0;m--)

        {

            _NOP();

        }

}

//-------------------------------------------//

//函数名:

八位LED灯控制函数

//入口:

Number:

Number哪位为一则哪位LED点亮

//出口:

Void

//功能:

//-------------------------------------------//

voidDigitalLedControl(ucharNumber)

{

    if(Number&BIT7)

        P1OUT|=BIT0;

    else

        P1OUT&=~BIT0;

    if(Number&BIT6)

        P8OUT|=BIT1;

    else

        P8OUT&=~BIT1;

    if(Number&BIT5)

        P8OUT|=BIT2;

    else

        P8OUT&=~BIT2;

    if(Number&BIT4)

        P1OUT|=BIT1;

    else

        P1OUT&=~BIT1;

    if(Number&BIT3)

        P1OUT|=BIT2;

    else

        P1OUT&=~BIT2;

    if(Number&BIT2)

        P1OUT|=BIT3;

    else

        P1OUT&=~BIT3;

    if(Number&BIT1)

        P1OUT|=BIT4;

    else

        P1OUT&=~BIT4;

    if(Number&BIT0)

        P1OUT|=BIT5;

    else

        P1OUT&=~BIT5;

}

//-------------------------------------------//

//函数名:

显存清空函数

//入口:

Void

//出口:

Void

//功能:

清空显存

//-------------------------------------------//

voidDisplayRamClear()

{

    uchari;

    for(i=0;i<20;i++)

    {

        cubeMap[i]=0x0;

    }

}

//-------------------------------------------//

//函数名:

两位十进制数字显示函数

//入口:

    Row:

显示的行数

//        Column:

显示的列数

//        Number:

需要显示的数字<100&&>=0

//出口:

Void

//功能:

//-------------------------------------------//

voidNumber2BitDisplay(ucharRow,ucharColumn,ucharNumber)

{

    uchartempShi,tempGe;

    tempShi=Number/10;

    tempGe=Number%10;

    Dogs102x6_charDraw(Row,Column,tempShi+'0',ON);

    Dogs102x6_charDraw(Row,Column+6,tempGe+'0',ON);

}

//-------------------------------------------//

//函数名:

游戏背景函数

//入口:

Void

//出口:

Void

//功能:

绘制游戏背景地图

//-------------------------------------------//

voidGameBackground()

{

    uchari;

    for(i=0;i

    {

        Dogs102x6_pixelDraw(0,i,ON);

        Dogs102x6_pixelDraw(MapWide+1,i,ON);

    }

    for(i=0;i

    {

        Dogs102x6_pixelDraw(i,0,ON);

        Dogs102x6_pixelDraw(i,MapHigh+1,ON);

    }

    DisplayRamClear();

    Dogs102x6_stringDraw(3,10,"START",ON);

    Dogs102x6_stringDraw(1,51,"NEXT:

",ON);

    Dogs102x6_stringDraw(3,51,"SPEED:

--",ON);

    Dogs102x6_stringDraw(5,51,"SCORE:

--",ON);

    Number2BitDisplay(3,87,Speed);

    Number2BitDisplay(5,87,Score);

}

//-------------------------------------------//

//函数名:

游戏Map清空

//入口:

Void

//出口:

Void

//功能:

清空游戏背景地图(不清空显存)

//-------------------------------------------//

voidGameMapClear()

{

    uchari,j;

    for(i=0;i

    {

        for(j=0;j

        {

            Dogs102x6_pixelDraw(j+1,i+1,OFF);

        }

    }

}

//-------------------------------------------//

//函数名:

系统初始化

//入口:

Void

//出口:

Void

//功能:

//-------------------------------------------//

voidSystemInit()

{

    WDTCTL=WDTPW+WDTHOLD;

    P8DIR|=BIT1+BIT2;

    P8OUT|=BIT1+BIT2;

    P1DIR|=BIT0+BIT1+BIT2+BIT3+BIT4+BIT5;

    P1OUT|=BIT0+BIT1+BIT2+BIT3+BIT4+BIT5;

    InitKey();

    UCSCTL3=SELREF_2;                //SetDCOFLLreference=REFO

    UCSCTL4|=SELA_2;                //SetACLK=REFO

    __bis_SR_register(SCG0);            //DisabletheFLLcontrolloop

    UCSCTL0=0x0000;                //SetlowestpossibleDCOx,MODx

    UCSCTL1=DCORSEL_7;              //SelectDCOrange50MHzoperation

    UCSCTL2=FLLD_1+609;            //SetDCOMultiplierfor25MHz(这里设置为20MHz适应液晶的SPI通信)

                                //(N+1)*FLLRef=Fdco

                                //(762+1)*32768=25MHz

                                //SetFLLDiv=fDCOCLK/2

    __bic_SR_register(SCG0);            //EnabletheFLLcontrolloop

    TA1CCTL0=CCIE;                  //CCR0interruptenabled

    TA1CCR0=328-1;

    TA1CTL=TASSEL_1+MC_1+TACLR;      //ACLK,upmode,clearTAR

    _BIS_SR(GIE);

    Dogs102x6_init();

    Dogs102x6_clearScreen();

    Dogs102x6_backlightInit();

    Dogs102x6_setContrast(11);

    Dogs102x6_setBacklight(liang);

}

//-------------------------------------------//

//函数名:

3x3点显示函数

//入口:

    x:

x轴坐标

//        y:

y轴坐标

//        mode:

ON打点;OFF消点

//出口:

Void

//功能:

//-------------------------------------------//

voidDisplay3x3Pixels(ucharx,uchary,ucharmode)

{

    x=3*x+1;

    y=3*y+1;

    Dogs102x6_pixelDraw(x,y,mode);

    Dogs102x6_pixelDraw(x+1,y,mode);

    Dogs102x6_pixelDraw(x+2,y,mode);

    Dogs102x6_pixelDraw(x,y+1,mode);

    Dogs102x6_pixelDraw(x+1,y+1,mode);

    Dogs102x6_pixelDraw(x+2,y+1,mode);

    Dogs102x6_pixelDraw(x,y+2,mode);

    Dogs102x6_pixelDraw(x+1,y+2,mode);

    Dogs102x6_pixelDraw(x+2,y+2,mode);

}

//-------------------------------------------//

//函数名:

显示像素点更改函数

//入口:

    Row:

行数

//        Column:

列数

//        mode:

ON打点;OFF消点

//出口:

Void

//功能:

//-------------------------------------------//

voidChangeRamBit(ucharRow,ucharColumn,ucharmode)

{

    uinttempData;

    tempData=(0x8000>>(Column%16));

    if(mode==ON)

        cubeMap[Row]|=tempData;

    else

        cubeMap[Row]&=~tempData;

}

//-------------------------------------------//

//函数名:

读取某个显示像素点位值函数

//入口:

    Row:

行数

//        Column:

列数

//出口:

uchar1:

所选点位1,0:

所选的点位0

//功能:

//-------------------------------------------//

ucharReadDisplayRamBit(ucharRow,ucharColumn)

{

    uinttempData;

    tempData=(0x8000>>(Column%16));

    if(cubeMap[Row]&tempData)

        return1;

    else

        return0;

}

//-------------------------------------------//

//函数名:

下一个方块显示函数

//入口:

    x:

x轴坐标

//        y:

y轴坐标

//        *p:

图形字模数据指针

//出口:

Void

//功能:

//-------------------------------------------//

voidshowNextCube(ucharconst*p,ucharx,uchary)

#defineNexPoinX    27                            //下一个图形显示的X坐标

#defineNexPoinY    2                            //下一个图形显示的Y坐标

{

uchari,j,temp;

  for(i=0;i<4;i++)

  {

    temp=0x08;

    for(j=0;j<4;j++)

    {

      if(p[i]&temp)

          Display3x3Pixels(x+j,y+i,ON);

      else

          Display3x3Pixels(x+j,y+i,OFF);

      temp>>=1;

    }

  }

}

//-------------------------------------------//

//函数名:

显示函数

//入口:

Void

//出口:

Void

//功能:

将显存的内容写入显示器显示

//-------------------------------------------//

voidshowCubeMap(void)

{

ucharhang,lie;

for(hang=0;hang

  {

  if(cubeMap[hang]!

=0)                            //跳过某行全为零的地方

  for(lie=0;lie

  {

      if(cubeMap[hang]&(0x8000>>(lie%16)))

          Display3x3Pixels(lie,hang,ON);

  }

  }

}

//-------------------------------------------//

//函数名:

产生新方块函数

//入口:

Void

//出口:

Void

//功能:

//-------------------------------------------//

voidcreateCube(void)

{

  staticucharnext=0;

  this.cube=next;

  next=randomNumber%7;                              //产生随机数

  this.row=0;                                      //初始行为0

  this.column=6;                         

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

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1