TC官方合作论坛

标题: 俄罗斯方块3.039版源码及核心算法详解。 [打印本页]

作者: kkkkkkk    时间: 2012-9-12 13:35
标题: 俄罗斯方块3.039版源码及核心算法详解。
源码请务必用3.039版TC打开,其它版本极有可能出错。项目资源里有算法说明,看不明白全部代码没关系,只要看懂部分对自己有所启发就行了。我也是看了前人的源码,才做出来的,但也只看懂了10%~20%不到。源码回复可免费下载!

因为是直接用TC按钮做的方砖,所以在不同的电脑主题里方砖的样子是不同的。
Ps:因为3.039版TC还没有 控件.销毁()这个api,所以这个3.039版的俄罗斯方块没有在预览区创建方块的功能(其实是也能现实的,方法要变一变,我懒得再做了!)。


作者: kkkkkkk    时间: 2012-9-12 13:41
砖型算法:只有一句
砖型="11211222101121222011211210111213101112221011120210111221"7种砖型数组集合
--------------------------------------------
原点
  ╲       0   1   2   3
         0  *   *   *   *   
         1  *  [1][2]  *     ←第一种方型
         2  *  [3][4]  *
         3  *   *   *   *

这是个方形砖型矩阵,如果我们把左上角那一点看作是x0y0,那么从上面可以看出点1的xy坐标是“11”(现在才发现这个错误!项目资源里的算法说明这里写的是“10”,这个要改改),四个点的坐标连起来就是“11211222”
就是上面砖型变量的前8位数,同理我们把其它6种砖型的点都加入砖型变量,7种砖型我们用0-6来表示,要用时再截取出来就行了。
[attach]5306[/attach]
例如我们要取Z 型的方砖,因为2代表这种砖型,所以我们把2代入:
整型 x,y,i
重复(4)
x=转换.字符型转整型(字符串.截取(砖型,2*8+0+i,2*8+1+i))//→按砖型取出方砖四个点的x,y坐标
y=转换.字符型转整型(字符串.截取(砖型,2*8+1+i,2*8+2+i))
i=i+2
重复结束
因为每8位代表一个砖型,所以2砖型是从16位开始,故2*8。
表示这排版很让我头痛,怎样都对不齐!
----------------------------------------------
旋转算法:核心算法也只有二句
旋x[yy]=3 - 砖y点[yy]
旋y[yy]=砖x点[yy]
虽然只有二句,但要我解析起来还有点难度,因为我都不知怎样表达自己的意思,套用以前老师的一句话“只能意会,不能言传”
[attach]5307[/attach]
这个算法的重点是我们已经知道x0y0旋转后的位置是在x3y0

如果我们以A点为原点,从上图我们可以发现,旋转后A点的位置虽然变化了,但它和各点间的距离是不会变的,
所以只要我们知道了旋转后A点的位置,我们就可以根据它和其它点固定的距离来推算出其它点旋转后的坐标。
而A点和各个点的距离刚好是各个点的坐标,如旋转前x轴上,A点和B点C点的距离分别是1、2,而刚好B点C点的
X坐标是X1、X2,所以,A点和各点的距离就是各点的坐标。明白以上二点就好推算了。
                           
但旋转后A点和其它点X轴的距离变成了Y轴的距离,A点和其它点Y轴的关系变成了X轴的距离,如A点和B点在原来
的X轴的距离是1,Y轴的距离是0。A点和B点旋转后变成了Y轴距离是1,x轴的距离是0.
而且旋转前A点无论x轴和y轴和其它点的距离都是递增关系,所以A点+距离就等于其它点的坐标。
旋转后y轴和各点的关系仍然是递增关系,但X轴和各点的关系变成了递减关系,所以A点的X坐标-距离才等于其它
点的X坐标

所以:旋转后B点的y坐标=旋转后A点的y坐标+旋转前B点的x坐标(就是A点和B点原本在x轴上的距离,现在变成了y轴距离)
      旋转后B点的X坐标=旋转后A点的X坐标-旋转前B点的y坐标(道理同上)
从上图我们可以看到,A点旋转后的坐标是x3y0,所以我们代入计算:
      旋转后B点的y坐标=0+1=1 因为0+任何数都等于任何数,所以我们可得
      旋转后B点的y坐标=旋转前B点的x坐标
      旋转后B点的X坐标=3-0=3    由此可得
      旋转后B点的X坐标=3-旋转前B点的Y坐标
---------------------------------------------------
碰撞区算法:就是源码里第一个创建函数里包含的功能,其实它只是一个做了标记的数组,实际上我们是看不见的!
碰撞区=整型[27][35]
整型  y
循环(y<35)//创建一块32行*21列的游戏区域和35*27大的逻辑碰撞区
整型 x
循环(x<27)        
如果(x<3||x>23||y>31)//把碰撞区的左右下三个方向的最外三行标记为碰撞点
碰撞区[x][y]=1//碰撞标记为1
如果结束
x=x+1
循环结束      
y=y+1
循环结束
下图是把这个逻辑碰撞区用砖块表示出来的情形:
[attach]5311[/attach]
从上面可以看出,标有“1”的地方就是不能移动过去的,而中间没有标任何内容的方砖,其实就是开始时的游戏区。为什么外面要留三行三列呢(其实留二行也够了),主要是防止像“1字型”这样方砖在靠边时旋转的话,它会有一个方块越界二行,这时如果只留一行的话,就会报数组越界。
-----------------------------------------------------
这个俄罗斯方块核心的算法大概就是这几个了,其实思路就是先创建好按钮,然后通过计算让它显示或隐藏。其它没什么
就是方砖下落和左右移动的算法我至今都想不出好的方法来。



作者: kk1304231990    时间: 2012-9-12 13:50
00000000000000000000000000000000000000000
作者: wang2596308    时间: 2012-9-12 13:57
gfdgdfgdfgdf
作者: kshz2164723    时间: 2012-9-12 14:17
求阅
作者: 舍我其谁    时间: 2012-9-12 16:08
看下
作者: feng123144    时间: 2012-9-12 16:38
看看一样不
作者: gssyf    时间: 2012-9-12 18:00
学习
作者: 专注小三四十年    时间: 2012-9-12 18:19
回复 1楼kkkkkkk的帖子

万恶的回复啊
作者: 九先生    时间: 2012-9-12 18:36
看看!!!!
作者: 陌上青衣。    时间: 2012-9-12 19:11
希望更多 像KK同学这样的大神 多多分享自己的经验和源码
作者: kkkkkkk    时间: 2012-9-12 19:41
像我这样写代码时还要看帮助文档才能写出来的新手,离大神还有非常遥远的距离,不知什么时候才能熬成熟手。
作者: TC小白菜    时间: 2012-9-12 19:45
回复 1楼kkkkkkk的帖子

kkkkkkk
作者: ltsi001    时间: 2012-9-12 19:45
x学习下
作者: x11kang    时间: 2012-9-12 20:39
学习
作者: 348625228    时间: 2012-9-12 20:42
学习中
作者: TC-y    时间: 2012-9-13 09:40
。。。。。。。。。。。。。。。。
作者: TC-y    时间: 2012-9-13 15:11

作者: z0230226    时间: 2012-9-15 00:33
看看
作者: yebochen    时间: 2012-9-15 07:21
回复 2楼kkkkkkk的帖子

终于公布出来了,QQ:2806148648,加完好友后顺便说一下是TC网友
作者: kevinqq    时间: 2012-9-15 09:13
支持下
作者: myismaln    时间: 2012-9-18 19:14
看看学习
作者: ttcc22    时间: 2012-9-18 22:26
回复可见
作者: TC兔子    时间: 2012-9-18 22:50
这么专业
作者: hwcjgs    时间: 2012-9-18 23:31
546456456546
作者: shanyishan    时间: 2012-9-23 17:23
噢 !加油!!

噢 !加油!!噢 !加油!!

噢 !加油!!噢 !加油!!噢 !加油!!
作者: tclhs    时间: 2012-9-26 16:53
好强大的样子
作者: ro897321    时间: 2012-9-26 23:29
俄罗斯方块
作者: wangker111    时间: 2012-10-4 15:20
支持支持支持支持支持
作者: 1051785287    时间: 2012-10-5 21:11
邪恶的观念!!!!!!!!
作者: pest    时间: 2012-10-8 05:02
围观
作者: lindesxc    时间: 2012-10-11 14:41
看看哦
作者: 我爱    时间: 2012-10-16 16:49
回复 1楼kkkkkkk的帖子


作者: zhangopg    时间: 2012-11-1 17:01
学习
作者: liuqqle    时间: 2012-11-19 18:14
asdfasdfsadf
作者: 302853    时间: 2012-11-19 22:16
看看看
作者: wudongdonghehe    时间: 2012-11-19 22:46
学习一下
作者: 964430272    时间: 2013-1-2 13:33
看看
作者: lryruirui    时间: 2013-1-2 17:27
mmmmmmmmmmmmmm
作者: 简单勿爱    时间: 2013-1-2 21:19
恢复学习之
作者: tc9999    时间: 2013-1-9 11:05
ffffffffffffffffffffffffffffffffffffff
作者: a735311619    时间: 2013-1-16 19:54
牛人啊!!!!!!!
作者: qq910950471    时间: 2013-1-16 20:15
好东西
作者: aaa1351055    时间: 2013-1-16 21:45
dingl.
作者: gdlwolf    时间: 2013-2-1 08:33
zzzzzz
作者: sea    时间: 2013-2-17 19:05
学习学习
作者: asd13033214568    时间: 2013-2-17 19:14
据说能在几个小时敲出俄罗斯方块是非常牛B的人。
作者: htzliubin    时间: 2013-3-17 21:05
都很给力
作者: 天天如讲    时间: 2013-3-17 22:43
学习学习~!··
作者: Borawon    时间: 2013-3-18 08:40
let me see see
作者: eve123    时间: 2013-4-8 19:07
俺看看
作者: wdxdjk    时间: 2013-6-10 14:33
看一下内容
作者: 896503835    时间: 2013-6-11 12:34
好啊
作者: liyuncen    时间: 2013-6-20 15:15
看下
作者: s5440536    时间: 2013-7-7 20:11
来学习的
作者: XINAIXIU    时间: 2013-7-8 00:15
好复杂啊
作者: sunshuwei1613    时间: 2013-8-2 14:49
看看
作者: 1035349924    时间: 2013-8-2 15:54
看看
作者: sunjie0632    时间: 2013-8-31 02:31
dddddddddddddddddddd
作者: renie2013    时间: 2013-8-31 13:18
打酱油的
作者: baby杰杰    时间: 2013-9-1 16:37
ddddddddddddddddddddddddddddddddddddd
作者: aiyan99    时间: 2014-2-15 21:50

作者: lihongyin    时间: 2014-2-16 00:51
QQ的么
作者: kim1971    时间: 2014-3-10 19:00
我要学习
作者: djzlove129    时间: 2014-3-10 20:06
看看!@
作者: 130524    时间: 2014-3-12 23:01
古典风格和
作者: 逸杭希伯来    时间: 2014-3-12 23:15
Jtatjma
作者: sgr12oo7    时间: 2014-3-13 00:42
看看
作者: zxl19891030    时间: 2014-3-13 09:47
344444444444444
作者: 蔚蓝深海    时间: 2014-3-13 13:43
俄罗斯方块的代码,很有兴趣
作者: 梦之魂    时间: 2014-4-14 10:34
???  
作者: q17827810    时间: 2014-7-8 03:27
看看
作者: iookk2012    时间: 2014-7-27 11:28
悄悄
作者: jb147k    时间: 2014-7-27 11:32
看看!!!!
作者: ronneil789    时间: 2014-7-28 01:06
学习下
作者: laowantong    时间: 2015-3-17 21:25

作者: tbmbx2017    时间: 2016-9-12 12:14
请让本宝宝看下吧。
作者: 498518599    时间: 2017-6-15 00:20
饿1额2额额
作者: jiahao5477    时间: 2018-7-26 01:33
看看




欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1