弹砖块游戏机的分析与设计设计论文Word文档下载推荐.docx

上传人:b****1 文档编号:3589043 上传时间:2023-05-02 格式:DOCX 页数:44 大小:74.83KB
下载 相关 举报
弹砖块游戏机的分析与设计设计论文Word文档下载推荐.docx_第1页
第1页 / 共44页
弹砖块游戏机的分析与设计设计论文Word文档下载推荐.docx_第2页
第2页 / 共44页
弹砖块游戏机的分析与设计设计论文Word文档下载推荐.docx_第3页
第3页 / 共44页
弹砖块游戏机的分析与设计设计论文Word文档下载推荐.docx_第4页
第4页 / 共44页
弹砖块游戏机的分析与设计设计论文Word文档下载推荐.docx_第5页
第5页 / 共44页
弹砖块游戏机的分析与设计设计论文Word文档下载推荐.docx_第6页
第6页 / 共44页
弹砖块游戏机的分析与设计设计论文Word文档下载推荐.docx_第7页
第7页 / 共44页
弹砖块游戏机的分析与设计设计论文Word文档下载推荐.docx_第8页
第8页 / 共44页
弹砖块游戏机的分析与设计设计论文Word文档下载推荐.docx_第9页
第9页 / 共44页
弹砖块游戏机的分析与设计设计论文Word文档下载推荐.docx_第10页
第10页 / 共44页
弹砖块游戏机的分析与设计设计论文Word文档下载推荐.docx_第11页
第11页 / 共44页
弹砖块游戏机的分析与设计设计论文Word文档下载推荐.docx_第12页
第12页 / 共44页
弹砖块游戏机的分析与设计设计论文Word文档下载推荐.docx_第13页
第13页 / 共44页
弹砖块游戏机的分析与设计设计论文Word文档下载推荐.docx_第14页
第14页 / 共44页
弹砖块游戏机的分析与设计设计论文Word文档下载推荐.docx_第15页
第15页 / 共44页
弹砖块游戏机的分析与设计设计论文Word文档下载推荐.docx_第16页
第16页 / 共44页
弹砖块游戏机的分析与设计设计论文Word文档下载推荐.docx_第17页
第17页 / 共44页
弹砖块游戏机的分析与设计设计论文Word文档下载推荐.docx_第18页
第18页 / 共44页
弹砖块游戏机的分析与设计设计论文Word文档下载推荐.docx_第19页
第19页 / 共44页
弹砖块游戏机的分析与设计设计论文Word文档下载推荐.docx_第20页
第20页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

弹砖块游戏机的分析与设计设计论文Word文档下载推荐.docx

《弹砖块游戏机的分析与设计设计论文Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《弹砖块游戏机的分析与设计设计论文Word文档下载推荐.docx(44页珍藏版)》请在冰点文库上搜索。

弹砖块游戏机的分析与设计设计论文Word文档下载推荐.docx

二、设计方案:

利用单片机最小板模块、加键盘模块和一个12864液晶既可以完成所需功能。

三、电路图:

四、相关程序设计:

程序设计包括四个方面:

液晶基础画点画线程序部分、游戏基础算法部分、键盘控制部分、其他显示部分。

主程序如下:

#include<

reg52.h>

#include<

MATH.H>

#defineucharunsignedchar

#defineuintunsignedint

sbitLCD_RS=P1^5;

sbitLCD_RW=P1^4;

sbitLCD_EN=P1^3;

sbitLCD_RES=P2^3;

sbitLCD_PSB=P2^7;

#definedataportP0

#defineset_incLCD_RS=0;

#defineset_dataLCD_RS=1;

#defineset_writeLCD_RW=0;

#defineset_readLCD_RW=1;

#defineset_enLCD_EN=1;

#defineclr_enLCD_EN=0;

ucharjx0,jy0,jx1,jy1,jy2,jx2;

//判断是否有图形接触的两个点的数值

//ucharbianxing;

//决定变形的数值

ucharjzx0,jzx1,jzx2,jyx0,jyx1,jyx2,jzy0,jzy1,jzy2,jyy0,jyy1,jyy2;

//用于横向判断,横向移位程序中使用

ucharxia;

//消影下坠的距离

ucharmo;

//消影的最后一行数

ucharkuaishu=0;

//表示消去的块数

ucharquan=0;

//表示全屏消去的次数

ucharball;

ucharlive=3;

ucharxb=0,si=0,jb=0;

//si=1表示没命玩了,jb是退出键脉冲检测数,键过于灵敏了

ucharxv,u=0,v=0,end=0;

//u为移动挡格的标志位,u==2时才移动一次,V同u,end为是否结束游戏

ucharyou=1,kai=0,sudu=50;

//,fu=0,sudu=26;

//fu为主界面箭头指示标志

//ucharv1=0,v2=0,v3=0,v4=0,v5=0,v6=0,v7=0,v8=0,v9=0,v10=0,v11=0,v12=0;

ucharrex,rey;

//碰撞点

ucharcodesuimage[]=//x:

y=24:

24字:

{0xFF,0xFF,0xFF,0xFF,0xEF,0xFF,0xFB,0xEF,0xDC,0xFB,0x6F,0x8C,0xFB,0x6F,0x08,0xFB,

0x6A,0x11,0xFB,0x62,0x33,0xFB,0x62,0x23,0xFB,0x63,0xA7,0xFB,0x69,0xB7,0xEB,0x69,

0x80,0xE0,0x04,0x80,0xE0,0x04,0x80,0xEB,0x64,0x3E,0xFB,0x60,0x36,0xFB,0x61,0x26,

0xFB,0x69,0x03,0xFB,0x69,0x13,0xFB,0x6D,0x99,0xFB,0x6D,0x98,0xFB,0x6D,0x9C,0xFB,

0xEF,0xBC,0xFF,0xEF,0xFD,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00};

ucharcodediimage[]=//x:

24,敵

{0xFF,0xFF,0xFF,0xFE,0xFF,0xFC,0xFE,0x0F,0xF8,0xFE,0x00,0x70,0xFE,0x00,0x01,0xFE,

0xFC,0x03,0xE6,0xFE,0x03,0xE0,0xF0,0x01,0xE0,0x10,0x78,0xFC,0x17,0xFC,0xFD,0x80,

0x00,0xFD,0xC0,0x00,0xFC,0x60,0x00,0xFC,0x0D,0x86,0xFC,0x0D,0x84,0xF1,0x80,0x34,

0xE1,0xE0,0x37,0xE5,0x80,0x07,0xED,0x0D,0x87,0xFD,0x2D,0x87,0xFD,0x60,0x00,0xFD,

0xE0,0x00,0xFD,0xE0,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00

};

ucharcodemiimage[]=//見

{0xFF,0xFF,0xFF,0xFF,0xFF,0xF9,0xFF,0xFF,0xF0,0xFF,0xFF,0xF0,0xF0,0x00,0x7E,0xF0,

0x00,0x7E,0xF0,0x00,0x7E,0xF7,0x77,0x7E,0xF7,0x77,0x00,0xF7,0x77,0x00,0xF7,0x77,

0x01,0xF7,0x77,0x7F,0xF7,0x77,0x7F,0xF7,0x77,0x1F,0xF7,0x77,0x07,0xF7,0x77,0x03,

0xF7,0x77,0x61,0xF0,0x00,0x78,0xF0,0x00,0x7C,0xF0,0x00,0x7C,0xFF,0xFF,0xFE,0xFF,

0xFF,0xFE,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00

ucharcodekoimage[]=//事

{0xFF,0xFF,0xBF,0xFB,0xFF,0xBF,0xFB,0xFF,0xBF,0xFB,0xFC,0x03,0xFB,0x0C,0x03,0xFB,

0x0C,0x03,0xFB,0x0D,0xB7,0xFB,0x6D,0xB7,0xFB,0x6D,0xB7,0xFB,0x6D,0xB7,0xEB,0x6D,

0xB7,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xFB,0x6D,0xB6,0xFB,0x6D,0xB6,

0xFB,0x6D,0xB4,0xFB,0x6D,0xB7,0xFB,0x0D,0xB7,0xFB,0x0D,0xB7,0xFB,0x0D,0xB7,0xFB,

0xFD,0xB7,0xFB,0xFF,0xBF,0xFF,0xFF,0xBF,0x00,0x00,0x00,0x00,0x00,0x00

ucharcodebaimage[]=//晴

{0xFF,0xFF,0xFF,0xFF,0xEF,0xFF,0xFB,0xEF,0xFF,0xFB,0x6C,0x00,0xFB,0x6C,0x00,0xFB,

0x6C,0x00,0xFB,0x6D,0xB6,0xE0,0x0D,0xB6,0xE0,0x0D,0xB7,0xE0,0x0D,0xB7,0xFB,0x6D,

0xB7,0xFB,0x6D,0xB7,0xFB,0x6C,0x00,0xFB,0x6C,0x00,0xFB,0x6C,0x00,0xF8,0x00,0x03,

0xF8,0x00,0x03,0xF8,0x00,0x03,0xFB,0xF7,0xEF,0xFB,0xF7,0xEF,0xF8,0x00,0x03,0xF8,

0x00,0x03,0xF8,0x00,0x03,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00

ucharcodeshiimage[]=//x:

y=16:

16字:

{0xFE,0x7F,0xFC,0x40,0xF0,0x00,0xD2,0xC0,0xCE,0xDD,0xC6,0xDD,0xE0,0x40,0xF8,0x00,

0xFC,0x00,0xF8,0x19,0xD8,0x01,0xC0,0xE3,0xC0,0x00,0xFC,0x04,0xFD,0xFE,0xFF,0xFF,

0x00,0x00,0x00,0x00};

ucharcodekaiimage[]=//x:

{0xFE,0x7F,0xCE,0x7F,0xCE,0x7F,0xEF,0x7F,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xEF,0x7F,

0xEF,0x7F,0xE0,0x1F,0xE0,0x03,0xE0,0x01,0xEF,0x78,0xEF,0x7C,0xEF,0x7E,0xFF,0x7F,

ucharcodenanimage[]=//x:

{0xF7,0xFD,0xE4,0x99,0xE4,0x99,0xE6,0xDD,0xC0,0x01,0x80,0x01,0x96,0xDD,0xC0,0x00,

0xC0,0x00,0xF8,0x00,0xE0,0x61,0xE0,0x01,0xF6,0x0F,0xF4,0x03,0xF4,0xF0,0xF7,0xFC,

ucharcodeduimage[]=//x:

{0xF6,0xFE,0xE4,0xFE,0xE4,0xFE,0xF2,0xDE,0xF0,0x0C,0xF0,0x40,0xC6,0x51,0xC6,0x59,

0xD0,0x00,0xF0,0x06,0xF6,0xDE,0xF6,0xDF,0xE0,0x03,0xE0,0x00,0xFF,0xF8,0xFF,0xFE,

0x88,0x71,0xDD,0x01};

ucharcodeshengimage[]=//x:

{0xFE,0xFE,0xFC,0xEC,0xFC,0xCC,0xFC,0xCC,0xFE,0xCE,0xEE,0xEE,0xE0,0x00,0xE0,0x00,

0xE0,0x00,0xF6,0xEE,0xF0,0xEE,0xF0,0x2E,0xF0,0x0E,0xFF,0x0E,0xFF,0xEE,0xFF,0xFF,

0x00,0x00,0x00,0x00,0x00,0x00};

ucharcodemingimage[]=//x:

{0xFE,0xFF,0xFE,0x7F,0xFE,0x01,0xFC,0x00,0xFC,0x00,0xF8,0xBD,0xF0,0x00,0xE0,0x00,

0xC6,0x81,0xC2,0x01,0xF0,0x01,0xF8,0x81,0xFC,0x01,0xFE,0x01,0xFF,0x3F,0xFF,0xBF,

ucharcodexinimage[]=//x:

y=8:

8字:

心形

{0xFF,0xDF,0xAF,0x77,0xBB,0x77,0xAF,0xDF};

voidint_INT0()//INT0初始化函数

{

//TCON=0X01;

//负边沿触发

IT0=1;

EX0=1;

//开INT0中断

EA=1;

//开总中断

}

voidint_INT1()//INT1初始化函数

//TCON=0X04;

IT1=1;

EX1=1;

//开INT01中断

voidint_timerT0()//T0初始化函数

TMOD=0X05;

//定时方式1,计数器模式C/T=1

ET0=1;

//开T0中断

TH0=(65536-1)/256;

TL0=(65536-1)%256;

TR0=1;

//开始计时

voiddelayms(uintums)

{

uinti,j;

for(i=ums;

i>

0;

i--)

for(j=110;

j>

j--);

}

voiddelay7us(uchart)

while(--t);

voidbusycheck()

dataport=0xff;

set_inc;

set_read;

set_en;

while((dataport&

0x80)==0x80);

clr_en;

//LCD_RS=0;

//LCD_RW=0;

voidsendcom(ucharcommand)//写命令

busycheck();

set_write;

//clr_en;

dataport=command;

//delayms

(1);

//LCD_RS=0;

//LCD_RW=0;

voidsenddata(uchardisplay)//送数据

set_data;

P0=display;

//delayms

(1);

ucharreaddata()//读数据

ucharredata;

redata=dataport;

delay7us(5);

returnredata;

//LCD_RS=0;

voidlcdclear()

sendcom(0x01);

delayms(15);

voidprinf(ucharx,uchary,bitcolor)//画点程序

ucharrow,lie,liebit;

uchardatah,datal;

x&

=0x7f;

y&

=0x3f;

lie=x/16;

//将点所在的16位区所在区号移入低四位

liebit=x%16;

//将所在区中的具体位置移入低四位

if(y<

32)

row=y;

else

row=y-32;

lie+=8;

sendcom(0x34);

sendcom(0x80+row);

sendcom(0x80+lie);

readdata();

datah=readdata();

datal=readdata();

if(liebit<

8)

if(color)

senddata(datah|(0x01<

<

(7-liebit)));

senddata(datal);

senddata(datah&

(~(0x01<

(7-liebit))));

senddata(datah);

senddata(datal|(0x01<

(15-liebit)));

senddata(datal&

(15-liebit))));

sendcom(0x36);

voidinit()//初始化程序

{

delayms(40);

//大于40MS的延时程序

LCD_PSB=1;

//设置为8BIT并口工作模式

delayms

(1);

//延时

LCD_RES=0;

//复位

LCD_RES=1;

//复位置高

delayms(10);

//Write_Cmd(0x30);

//选择基本指令集

//DelayUs2x(50);

//延时大于100us

sendcom(0x30);

//选择8bit数据流

delay7us(25);

//延时大于37us

sendcom(0x0c);

//开显示(无游标、不反白)

delay7us(50);

//清除显示,并且设定地址指针为00H

//延时大于10ms

sendcom(0x06);

//指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位,光标从右向左加1位移动

voidLCD_Clear_GDRAM()//绘图区清除程序

uchari,j;

for(j=0;

j<

32;

j++)

sendcom(0x80+j);

sendcom(0x80);

//基本指令集,绘图关

for(i=0;

i<

i++)

{senddata(0x00);

}//写入0x00

voiddrawliney(ucharx0,ucharx1,uchary,bitcolor)//Y为一常值,X为一变量

uchartemp;

if(x0>

x1)

temp=x1;

x1=x0;

x0=temp;

}

for(;

x0<

=x1;

x0++)

{

prinf(x0,y,color);

}

voiddrawlinex(unsignedcharY0,unsignedcharY1,unsignedcharX,unsignedcharColor)

unsignedcharTemp;

if(Y0>

Y1)

Temp=Y1;

Y1=Y0;

Y0=Temp;

Y0<

=Y1;

Y0++)

prinf(X,Y0,Color);

voidkuai(ucharx,uchary)//此x,y代表该块的标志起点

drawlinex(y,y+14,x,1);

drawlinex(y,y+14,x+4,1);

drawliney(x,x+4,y,1);

drawliney(x,x+4,y+14,1);

ucharrekuai(ucharx,uchary)//对需要消去的块的标志数进行判断,此为碰到x轴线的情况

ucharnum;

if(x>

=1&

&

x<

=5)

if(y>

=2&

y<

=16)

num=1;

=17&

=31)

num=2;

=32&

=46)

num=3;

=47&

=62)

num=4;

elseif(x>

=6&

=10)

num=5;

num=6;

num=7;

num=8;

=11&

num=9;

num=10;

num=11;

num=12;

returnnum;

voidxiaokuai(ucharz)//消块程序,z为块的名称代数

ucharx,y,v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12;

if(kuaishu==0)

v1=0;

v2=0;

v3=0;

v4=0;

v5=0;

v6=0;

v7=0;

v8=0;

v9=0;

v10=0;

v11=0;

v12=0;

switch(z)

case1:

x=1;

y=2;

v1=1;

break;

case2:

y=17;

v2=1;

case

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

当前位置:首页 > 解决方案 > 学习计划

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

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