文号
t66743
阅读
23539
回复
27
收藏
21
吐血巨献stm32 DIY俄罗斯方块 断断续续写了四天中间还有一天补牙 调了一下午
2014/08/20
IP:北京
本帖最后由 张静茹 于 2014-8-20 21:02 编辑

点击此处查看视频

贪吃蛇的帖子https://www.kechuang.org/t/66641

俄罗斯方块.jpg

先上程序


+500
科创币
科创网
2014/08/20
编译和运行环境。
+50
科创币
yanli12321
2014/08/20
超高节操发帖
+1
科创币
布布卡
2014/08/21
感谢分享
+1
科创币
wangrui555
2014/08/21
身为计算机专业的我,自叹不如啊~
+1
学术分
1211
2014/09/14
赞扬
12年4个月前IP:未同步
714451
1楼
哈哈,看的捉急啊,,玩的不错加油~[s:12][s:12]
引用
评论
12年4个月前IP:未同步
714459
2楼
仰望高端玩家玩STM32,还是彩色TFT屏。
另外那个BGM是什么?一直好想要
引用
评论
张静茹作者
12年4个月前IP:未同步
714466
3楼
点点_ 发表于 2014-8-20 20:45
仰望高端玩家玩STM32,还是彩色TFT屏。
另外那个BGM是什么?一直好想要


River Flows In You  百度
引用
评论
12年4个月前IP:未同步
714499
4楼
被stm32的i2c玩死的默默点赞
引用
评论
张静茹作者
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
引用
评论
12年4个月前IP:未同步
714547
6楼
不得不说很不错,赞一个
引用
评论
12年4个月前IP:未同步
715599
7楼
很不错,stm32玩的很好啊
引用
评论
12年4个月前IP:未同步
715600
8楼
有魅力的女人[s:12]     正在学DSP的飘过
引用
评论
12年3个月前IP:未同步
719535
9楼
求好友
引用
评论
12年3个月前IP:未同步
719536
10楼
求好友
引用
评论
12年3个月前IP:未同步
719557
11楼
代码写的真工整,大赞一下。
引用
评论
张静茹作者
12年3个月前IP:未同步
719624
12楼
myname_360 发表于 2014-9-11 21:33
代码写的真工整,大赞一下。


格式强迫症, 格式错了感觉会报错似的,传上来的格式就乱了
引用
评论
12年3个月前IP:江西
720971
13楼
ST竟然为它的I2C写了1000多行的库……
引用
评论
12年3个月前IP:湖南
722439
14楼
毅力十足
引用
评论
11年11个月前IP:江苏
738780
15楼
为何现在看不见程序包了。。
引用
评论
11年11个月前IP:江苏
738783
16楼
跪求美女楼主看到了能把程序包发我。急用!!邮箱736651942@qq.com。好人一生平安,谢谢!!
引用
评论
11年11个月前IP:湖北
739959
17楼
[s::lol]赞
引用
评论
11年11个月前IP:浙江
739979
18楼
改下程序让掉下来的全是长条呗[s::lol]
引用
评论
11年10个月前IP:广东
753030
19楼
[s::lol]女孩子居然会玩这些,太神了,
引用
评论
11年10个月前IP:广东
753031
20楼
我[s::$]可惜,楼主把我Q删除了
引用
评论
11年10个月前IP:广东
753057
21楼
做这个开发板的人好像是我读书的时候比我大一个年级的一个师兄,网名叫正点原子什么的
引用
评论
11年10个月前IP:德国
753073
22楼
my dream girl 是要会写程序的!求交往
引用
评论
11年9个月前IP:广东
755937
23楼
引用 张静茹:
River Flows In You  百度
https://www.kechuang.org/t/70472
这个怎么搞
引用
评论
11年9个月前IP:山东
755945
24楼
这么年轻,牙居然坏了?!!!!!!
引用
评论
张静茹作者
11年9个月前IP:北京
755957
25楼
引用 samsun185:
这么年轻,牙居然坏了?!!!!!!
[s:30]
引用
评论
11年3个月前IP:广东
789972
26楼
STM32 初学
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的