张静茹作者
12年4个月前IP:未同步
714519
5楼
本帖最后由 张静茹 于 2014-8-21 12:51 编辑

三四天的时间 思路改了好几次,刚开始 写了一个10*10方块的函数,打算每个形状的 方框都写一个函数,然后检测屏幕哪一行满了就计分 ,后来发现不太好检测,原子自带的那个 检测屏幕颜色的函数也不大好用,而且左移右移之后怎样能不淹没已经固定的方块,最后改成了现在的程序 定义一个32个元素 的int数组,屏幕分辨率320*240,每个元素代表一行。每位对应一个10*10方块,在写一个专门刷屏的函数,只要计算好这个数组表就能实现 左移右移 计分的功能,
void left_shift(void); //左移函数
void right_shift(void); //右移函数
char down_shift(void); //下移
方块形状存到box_date[19][4]

box_xy[0]=0;box_xy[1]=10;   //复位xy标记
Calculation_Fraction(); //计分
KEY.n=rand()%0x13; //形成随即形状
box_date_temp[0]=box_date[KEY.n][0]; //放进临时缓存数组
box_date_temp[1]=box_date[KEY.n][1];
box_date_temp[2]=box_date[KEY.n][2];
box_date_temp[3]=box_date[KEY.n][3];
然后由down_shift函数 对准将 方块缓存box_date_temp[0]对准屏幕缓存box[],拷贝进准确的位置,由fresh_screen();更新到屏幕

然后再次用down_shift下降方块,并且判断 是否已经落到屏幕底部,或者 通过方块缓存box_date_temp与屏幕缓存box[]与运算,结果大于0说明落到落到别的方块上面了,

unsigned int box[32]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
const unsigned int box_date[19][4]={
0x2000, 0x2000, 0x2000, 0x2000, //垂直四块 0
0x0000, 0x0000, 0x0000, 0x7800, //水平四块 1
0x0000, 0x0000, 0x6000, 0x3000, //正Z水平 2
0x0000, 0x2000, 0x6000, 0x4000, //正Z垂直 3
0x0000, 0x0000, 0x3000, 0x6000, //反Z水平 4
0x0000, 0x4000, 0x6000, 0x2000, //反Z垂直 5
0x0000, 0x6000, 0x2000, 0x2000, //正7 +0 6
0x0000, 0x0000, 0x1000, 0x7000, //正7 +90 7
0x0000, 0x4000, 0x4000, 0x6000, //正7 +180 8
0x0000, 0x0000, 0x7000, 0x4000, //正7 +270 9
0x0000, 0x6000, 0x4000, 0x4000, //反7 +0 10 a
0x0000, 0x0000, 0x7000, 0x1000, //反7 +90 11 b
0x0000, 0x2000, 0x2000, 0x6000, //反7 +180 12 c
0x0000, 0x0000, 0x4000, 0x7000, //反7 +270 13 d
0x0000, 0x0000, 0x2000, 0x7000, //上土 14 e
0x0000, 0x0000, 0x7000, 0x2000, //下土 15 f
0x0000, 0x4000, 0x6000, 0x4000, //右土 16 10
0x0000, 0x2000, 0x6000, 0x2000, //左土 17 11
0x0000, 0x0000, 0x6000, 0x6000 //田 18 12
};

void box_delete(void); //删除当前方块
void box_change(void); //更改方块形状
//void box_xy(void); //取方框 在box数组中的位置
//char box_judge(void); //判断方块 落到底,碰到 别的方块
void refresh_screen(void);//刷屏函数
unsigned int Calculation_Fraction(void);//计算分数
void Row_Down(signed char); //整排下降

@科创论坛, 编译环境是keil5.1 psb.jpg
评论
文号 / 714519

千古风流
名片专栏发私信
学术分 1
总主题 146 帖总回复 1873 楼拥有证书:进士 学者 机友 笔友
注册于 2010/12/30 03:32:26最后登录 2026/06/20 19:33:53
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:0

个人简介

暂未填写
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的