color:rgb(51,51,51); font-family:Tahoma,Verdana,STHeiTi,simsun,sans-serif; font-size:14px"> color:rgb(51,51,51); font-family:Tahoma,Verdana,STHeiTi,simsun,sans-serif; font-size:14px; line-height:19px">在正式阅读本文之前c;请你记得你应该用娱乐的心态来看c;
color:rgb(51,51,51); font-family:Tahoma,Verdana,STHeiTi,simsun,sans-serif; font-size:14px"> 本代码所使用到的技巧c;在工作了的人眼里会觉得很纠结c;很蛋疼c;很不可理喻c;很丑c;
注意c;是你蛋疼c;不关我的事
通常c;写一个俄罗斯方块c;往往动不动就几百行c;甚至上千行c;而这里只有88行
正所谓头脑风暴c;打破常规。这里将使用很多不平常的手段来减少代码
color:rgb(51,51,51); font-family:Tahoma,Verdana,STHeiTi,simsun,sans-serif; font-size:14px"> 但为了能更通用c;一份控制台版本的代码c;同样是88行c;直接复制到VC即可编译:
color:rgb(51,51,51); font-family:Tahoma,Verdana,STHeiTi,simsun,sans-serif; font-size:14px"> color:rgb(0,0,255)">#include color:rgb(128,0,0)"><windows.h>
color:rgb(0,0,255)">#include color:rgb(128,0,0)"><stdio.h>
color:rgb(0,0,255)">#include color:rgb(128,0,0)"><time.h>
color:rgb(0,0,255)">#include color:rgb(128,0,0)"><conio.h>
color:rgb(0,0,255)">#include color:rgb(128,0,0)"><stdlib.h>
color:rgb(0,0,255)">char gcText[] = color:rgb(128,0,0)">"color:rgb(128,0,0)"> 1LJTSZ#color:rgb(128,0,0)">";
color:rgb(0,0,255)">struct tetris {
color:rgb(0,0,255)">int _pool[color:rgb(128,0,128)">16][color:rgb(128,0,128)">32], (*pool)[color:rgb(128,0,128)">32], tmap[color:rgb(128,0,128)">8][color:rgb(128,0,128)">4][color:rgb(128,0,128)">16];
color:rgb(0,0,255)">int x, y, s, st, t;
}gt;
color:rgb(0,0,255)">void trsInit() {
color:rgb(0,0,255)">int sp[color:rgb(128,0,128)">8][color:rgb(128,0,128)">4] = {{color:rgb(128,0,128)">15,color:rgb(128,0,128)">4369},{color:rgb(128,0,128)">23,color:rgb(128,0,128)">785,color:rgb(128,0,128)">116,color:rgb(128,0,128)">547},{color:rgb(128,0,128)">71,color:rgb(128,0,128)">275,color:rgb(128,0,128)">113,color:rgb(128,0,128)">802},
{color:rgb(128,0,128)">39,color:rgb(128,0,128)">305,color:rgb(128,0,128)">114,color:rgb(128,0,128)">562},{color:rgb(128,0,128)">54,color:rgb(128,0,128)">561},{color:rgb(128,0,128)">99,color:rgb(128,0,128)">306},{color:rgb(128,0,128)">51,color:rgb(128,0,128)">51},{-color:rgb(128,0,128)">1}};
color:rgb(0,0,255)">int *p, i, j, b;
color:rgb(0,0,255)">for (p = sp[color:rgb(128,0,128)">0]; *p >= color:rgb(128,0,128)">0; ++p) color:rgb(0,0,255)">if ( *p == color:rgb(128,0,128)">0 ) *p = p[-color:rgb(128,0,128)">2];
gt.pool = >._pool[color:rgb(128,0,128)">4];
color:rgb(0,0,255)">for (j = color:rgb(128,0,128)">0; j < color:rgb(128,0,128)">7; ++j)
color:rgb(0,0,255)">for (i = color:rgb(128,0,128)">0; i < color:rgb(128,0,128)">4; ++i)
color:rgb(0,0,255)">for (b = color:rgb(128,0,128)">0; b < color:rgb(128,0,128)">16; ++b)
gt.tmap[j+color:rgb(128,0,128)">1][i][b] = (sp[j][i] & color:rgb(128,0,128)">1) * (j + color:rgb(128,0,128)">1),
sp[j][i] >>= color:rgb(128,0,128)">1;
memset(gt._pool, -color:rgb(128,0,128)">1, color:rgb(0,0,255)">sizeof(gt._pool));
color:rgb(0,0,255)">for (i = color:rgb(128,0,128)">0; i < color:rgb(128,0,128)">10; ++i)
memset(>.pool[i], color:rgb(128,0,128)">0, color:rgb(0,0,255)">sizeof(color:rgb(0,0,255)">int[color:rgb(128,0,128)">21]));
color:rgb(0,0,255)">return ;
}
color:rgb(0,0,255)">int trsCopy(color:rgb(0,0,255)">int sp[], color:rgb(0,0,255)">int x, color:rgb(0,0,255)">int y, color:rgb(0,0,255)">int c) {
color:rgb(0,0,255)">int i, cx, cy;
color:rgb(0,0,255)">for (i = color:rgb(128,0,128)">0; i < color:rgb(128,0,128)">16; ++i) color:rgb(0,0,255)">if (sp[i]) {
cx = x + (i & color:rgb(128,0,128)">3), cy = y + (i >> color:rgb(128,0,128)">2);
color:rgb(0,0,255)">if (gt.pool[cx][cy])
color:rgb(0,0,255)">if (c == color:rgb(128,0,128)">2) gt.pool[cx][cy] = color:rgb(128,0,128)">0; color:rgb(0,0,255)">else color:rgb(0,0,255)">return color:rgb(128,0,128)">0;
color:rgb(0,0,255)">if (c==color:rgb(128,0,128)">1) gt.pool[cx][cy] = sp[i];
}
color:rgb(0,0,255)">return color:rgb(128,0,128)">1;
}
color:rgb(0,0,255)">int trsScene() {
color:rgb(0,0,255)">int x, y = color:rgb(128,0,128)">0;
COORD pos = {color:rgb(128,0,128)">0};
gt.s = rand() % color:rgb(128,0,128)">7 + color:rgb(128,0,128)">1, gt.st = gt.t = color:rgb(128,0,128)">0;
gt.x = color:rgb(128,0,128)">3, gt.y = color:rgb(128,0,128)">0;
color:rgb(0,0,255)">for (--gt.t; ; Sleep(color:rgb(128,0,128)">1), --gt.t) {
color:rgb(0,0,255)">int k = color:rgb(128,0,128)">0;
color:rgb(0,0,255)">while (kbhit()) {
k = getch();
color:rgb(0,0,255)">if (k == color:rgb(128,0,128)">27) color:rgb(0,0,255)">return color:rgb(128,0,128)">0;
color:rgb(0,0,255)">if (k == color:rgb(128,0,0)">'color:rgb(128,0,0)">Acolor:rgb(128,0,0)">' || k == color:rgb(128,0,0)">'color:rgb(128,0,0)">acolor:rgb(128,0,0)">') {
color:rgb(0,0,255)">if (trsCopy(gt.tmap[gt.s][gt.st], gt.x-color:rgb(128,0,128)">1, gt.y, color:rgb(128,0,128)">0)) --gt.x;
} color:rgb(0,0,255)">else color:rgb(0,0,255)">if (k == color:rgb(128,0,0)">'color:rgb(128,0,0)">Dcolor:rgb(128,0,0)">' || k == color:rgb(128,0,0)">'color:rgb(128,0,0)">dcolor:rgb(128,0,0)">') {
color:rgb(0,0,255)">if (trsCopy(gt.tmap[gt.s][gt.st], gt.x+color:rgb(128,0,128)">1, gt.y, color:rgb(128,0,128)">0)) ++gt.x;
} color:rgb(0,0,255)">else color:rgb(0,0,255)">if (k == color:rgb(128,0,0)">'color:rgb(128,0,0)">Wcolor:rgb(128,0,0)">' || k == color:rgb(128,0,0)">'color:rgb(128,0,0)">wcolor:rgb(128,0,0)">') {
color:rgb(0,0,255)">if (trsCopy(gt.tmap[gt.s][(gt.st+color:rgb(128,0,128)">1) % color:rgb(128,0,128)">4], gt.x, gt.y, color:rgb(128,0,128)">0))
gt.st = (gt.st+color:rgb(128,0,128)">1) % color:rgb(128,0,128)">4;
}
}
color:rgb(0,0,255)">if (k == color:rgb(128,0,0)">'color:rgb(128,0,0)">Scolor:rgb(128,0,0)">' || k == color:rgb(128,0,0)">'color:rgb(128,0,0)">scolor:rgb(128,0,0)">' || gt.t < color:rgb(128,0,128)">0) {
color:rgb(0,0,255)">if (trsCopy(gt.tmap[gt.s][gt.st], gt.x, gt.y+color:rgb(128,0,128)">1, color:rgb(128,0,128)">0))++gt.y,gt.t=color:rgb(128,0,128)">50;
color:rgb(0,0,255)">else {
trsCopy(gt.tmap[gt.s][gt.st], gt.x, gt.y, color:rgb(128,0,128)">1);
color:rgb(0,0,255)">for (--y; y > color:rgb(128,0,128)">0; --y) {
color:rgb(0,0,255)">for (x = color:rgb(128,0,128)">0; gt.pool[x][y] > color:rgb(128,0,128)">0; ++x);
color:rgb(0,0,255)">if (gt.pool[x][y] < color:rgb(128,0,128)">0)
color:rgb(0,0,255)">for (k = y++; k > color:rgb(128,0,128)">0; --k)
color:rgb(0,0,255)">for (x = color:rgb(128,0,128)">0; gt.pool[x][color:rgb(128,0,128)">0] >= color:rgb(128,0,128)">0; ++x)
gt.pool[x][k] = gt.pool[x][k-color:rgb(128,0,128)">1];
}
color:rgb(0,0,255)">return color:rgb(128,0,128)">1;
}
}
trsCopy(gt.tmap[gt.s][gt.st], gt.x, gt.y, color:rgb(128,0,128)">1);
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
color:rgb(0,0,255)">for (y = color:rgb(128,0,128)">1; gt.pool[color:rgb(128,0,128)">0][y] >= color:rgb(128,0,128)">0; ++y,putchar(color:rgb(128,0,128)">10)) {
color:rgb(0,0,255)">for (x = color:rgb(128,0,128)">0; gt.pool[x][color:rgb(128,0,128)">0] >= color:rgb(128,0,128)">0; ++x) {
putchar(gcText[gt.pool[x][y]]);
}
}
trsCopy(gt.tmap[gt.s][gt.st], gt.x, gt.y, color:rgb(128,0,128)">2);
}
}
color:rgb(0,0,255)">int main() {
srand((color:rgb(0,0,255)">unsigned)time(NULL));
color:rgb(0,0,255)">for (trsInit(); trsScene(); );
color:rgb(0,0,255)">return color:rgb(128,0,128)">0;
}
color:rgb(51,51,51); font-family:Tahoma,Verdana,STHeiTi,simsun,sans-serif; font-size:14px"> ---------------------------------------------------
color:rgb(51,51,51); font-family:Tahoma,Verdana,STHeiTi,simsun,sans-serif; font-size:14px"> ======================================华丽的分割线========================================
以下是对代码的压缩方法进行分析
首先c;通常我们需要准备7种方块c;4个方向的形状表c;相当多的俄罗斯方块程序就是在开头写了这样一个很长的数组定义c;
有的光这个定义就直接超100行了c;这个程序是怎么实现的呢?
其实这个程序c;同样是使用一个7*4*16的数组来保存这个形状表c;但是c;它没有直接初始化c;见这个数组的定义:
int sp[8][4] = {{15,4369},{23,785,116,547},{71,275,113,802},
{39,305,114,562},{54,561},{99,306},{51,51},{-1}};
这个莫名其妙的数组的值是什么意思呢?其实很好猜的c;我们尝试把这些数化为二进制:
15 = 1111
4369 = 1000100010001
合理地四位四位拆开c;从低位到高位c;从左到右c;从上到下排列一下:
1111
0000
0000
0000
1000
1000
1000
1000
你终于发现c;这就是长条方块的两个形状
后面类似
然后你会发现c;这个数组并不完整c;有的只定义了两个形状c;有的是四个形状c;没定义的数会默认置0的c;这个怎么解释?
看这个数组定义的下面第二行:
for (p = sp[0]; *p >= 0; ++p) if ( *p == 0 ) *p = p[-2];
意思是找出这个数组为0的元素c;用它前面的元素值填上即*p = p[-2]
而数组中最后一个元素值-1起监督头的作用c;用于让这个循环跳出
虽然可以把这些常数全直接写在数组里c;但常数太多显得不太好c;就这样写了
之后你看到这行代码:
gt.pool = >._pool[4];
为什么定义两个pool呢?因为我们需要在原来的pool的界外用-1值填充c;以便后面做碰撞检测减少不必要的代码
但如果直接用原来的_poolc;那每次访问都要加上一个偏移常数c;不美观且显得代码长c;就用另一个指针直接指向开始的位置
然后c;后面的三重循环就是解开那个位压缩数组以初始化gt.tmap数组c;这个数组就是记录7*4种形状的数组
再下面三行c;就是初始化poolc;class="tags" href="/tags/YouXi.html" title=游戏>游戏区为0c;界外为-1
而其中c;i < 10决定了class="tags" href="/tags/YouXi.html" title=游戏>游戏池的宽度为10c;sizeof(int[21])决定了class="tags" href="/tags/YouXi.html" title=游戏>游戏池的高度是20 (0我们不使用c;这一行有特殊作用c;后文会讲)
用memset也是为了免写二重循环而已。整个初始化流程就到这里了
然后c;是一个trsCopy函数c;这个函数综合了碰撞检测c;复制到class="tags" href="/tags/YouXi.html" title=游戏>游戏池和反复制c;行为由参数c (是control缩写字母)控制
c为0就单纯的碰撞检测c;c为1是复制c;c为2就是反复制c;细心分析一下c;这个函数功能就清楚了c;这里不详细展开
好了c;到了trsScene函数c;整个class="tags" href="/tags/YouXi.html" title=游戏>游戏的主逻辑流程就在这里了
我们先看第75行的那个二重循环c;只有那个地方是根据pool保存的值来输出
所以c;这个时候c;你应该明白为什么trsCopy函数还要复制和反复制了c;
它把你正在控制的方块c;复制到pool里c;统一输出c;这样就不需要另加一个函数来绘画你的控制块了
而绘图之前c;就是键盘处理等的逻辑控制c;这里就没有什么复杂难懂的代码了c;
唯一要讲讲的是c;if (k == 'S' || k == 's' || gt.t < 0)
这一段是判断下落键的按下c;和是否到时间强制下落
里面for (--y; y > 0; --y)开始是消行计算
你可能会奇怪这个y没有明显的初始值c;直接就来一个 --yc;初始从哪里来?
其实就在之前讲的输出绘画那个循环里c;循环结束后c;y的值一定是最后一行+1
所以我们只要--y就得到最底下一行c;因为消行计算c;从下往上c;只要一次就解决了c;代码较少
好了c;现在解释之前说的c;为什么不是从0c;而是从1开始
消行计算这里c;每消除一行c;最顶的一行就应该用0填充c;但如果你因为这个多写一个for循环就不值得了
我们改成从1开始c;那么把第0行的内容复制到第一行c;就完成0填充了c;就可以少写一个for
好了c;差不多接近尾声了c;最后说说trsScene的返回值
trsScene返回值的意思很简单c;如果是1就继续循环c;如果是0就退出
所以你可以在代码里看到c;当按下ESC(值为27)的时候才返回0
而方块落下一个的时候c;返回1c;让主函数重新调用它c;就能再次初始化当前控制块的位置和形状了c;
达到免除状态管理的代码的作用
最后c;在主循环除了初始化c;只要华丽的一行for (trsInit(); trsScene(); ); 就可以玩这个class="tags" href="/tags/YouXi.html" title=游戏>游戏了
看不懂?说明你也是个正常人
看得懂?说明你已经脑殘了。。。c="http://bbs.bccn.net/images/smilies/tk/tk03.gif" border="0" alt="" style="border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; vertical-align:middle; max-width:550px; float:none; margin-top:0px; margin-right:10px; margin-bottom:10px; margin-left:0px" />
PS: 成年人不要乱学未成年人的东西。。。
color:rgb(51,51,51); font-family:Tahoma,Verdana,STHeiTi,simsun,sans-serif; font-size:14px"> 以下是Win-TC可以成功编译并执行的代码(代码保证单行长度不超过80字符c;如果你是Win7系统c;那请看后文):
color:rgb(51,51,51); font-family:Tahoma,Verdana,STHeiTi,simsun,sans-serif; font-size:14px"> color:rgb(0,0,255)">#include color:rgb(128,0,0)">"color:rgb(128,0,0)">graphics.hcolor:rgb(128,0,0)">"
color:rgb(0,0,255)">#include color:rgb(128,0,0)"><conio.h>
color:rgb(0,0,255)">#include color:rgb(128,0,0)"><stdlib.h>
color:rgb(0,0,255)">int gcW = color:rgb(128,0,128)">20, gcColor[] = {DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN,
LIGHTRED, LIGHTMAGENTA,MAGENTA, YELLOW};
color:rgb(0,0,255)">struct tetris {
color:rgb(0,0,255)">int _pool[color:rgb(128,0,128)">16][color:rgb(128,0,128)">32], (*pool)[color:rgb(128,0,128)">32], tmap[color:rgb(128,0,128)">8][color:rgb(128,0,128)">4][color:rgb(128,0,128)">16];
color:rgb(0,0,255)">int x, y, s, st, t;
}gt;
color:rgb(0,0,255)">void trsInit() {
color:rgb(0,0,255)">int sp[color:rgb(128,0,128)">8][color:rgb(128,0,128)">4] = {{color:rgb(128,0,128)">15,color:rgb(128,0,128)">4369},{color:rgb(128,0,128)">23,color:rgb(128,0,128)">785,color:rgb(128,0,128)">116,color:rgb(128,0,128)">547},{color:rgb(128,0,128)">71,color:rgb(128,0,128)">275,color:rgb(128,0,128)">113,color:rgb(128,0,128)">802},
{color:rgb(128,0,128)">39,color:rgb(128,0,128)">305,color:rgb(128,0,128)">114,color:rgb(128,0,128)">562},{color:rgb(128,0,128)">54,color:rgb(128,0,128)">561},{color:rgb(128,0,128)">99,color:rgb(128,0,128)">306},{color:rgb(128,0,128)">51,color:rgb(128,0,128)">51},{-color:rgb(128,0,128)">1}};
color:rgb(0,0,255)">int *p, i, j, b;
color:rgb(0,0,255)">for (p = sp[color:rgb(128,0,128)">0]; *p >= color:rgb(128,0,128)">0; ++p) color:rgb(0,0,255)">if ( *p == color:rgb(128,0,128)">0 ) *p = p[-color:rgb(128,0,128)">2];
gt.pool = >._pool[color:rgb(128,0,128)">4];
color:rgb(0,0,255)">for (j = color:rgb(128,0,128)">0; j < color:rgb(128,0,128)">7; ++j)
color:rgb(0,0,255)">for (i = color:rgb(128,0,128)">0; i < color:rgb(128,0,128)">4; ++i)
color:rgb(0,0,255)">for (b = color:rgb(128,0,128)">0; b < color:rgb(128,0,128)">16; ++b)
gt.tmap[j+color:rgb(128,0,128)">1][i][b] = (sp[j][i] & color:rgb(128,0,128)">1) * (j + color:rgb(128,0,128)">1),
sp[j][i] >>= color:rgb(128,0,128)">1;
memset(gt._pool, -color:rgb(128,0,128)">1, color:rgb(0,0,255)">sizeof(gt._pool));
color:rgb(0,0,255)">for (i = color:rgb(128,0,128)">0; i < color:rgb(128,0,128)">10; ++i)
memset(>.pool[i], color:rgb(128,0,128)">0, color:rgb(0,0,255)">sizeof(color:rgb(0,0,255)">int[color:rgb(128,0,128)">21]));
color:rgb(0,0,255)">return ;
}
color:rgb(0,0,255)">int trsCopy(color:rgb(0,0,255)">int sp[], color:rgb(0,0,255)">int x, color:rgb(0,0,255)">int y, color:rgb(0,0,255)">int c) {
color:rgb(0,0,255)">int m[] = {color:rgb(128,0,128)">0,color:rgb(128,0,128)">32,color:rgb(128,0,128)">64,color:rgb(128,0,128)">96,color:rgb(128,0,128)">1,color:rgb(128,0,128)">33,color:rgb(128,0,128)">65,color:rgb(128,0,128)">97,color:rgb(128,0,128)">2,color:rgb(128,0,128)">34,color:rgb(128,0,128)">66,color:rgb(128,0,128)">98,color:rgb(128,0,128)">3,color:rgb(128,0,128)">35,color:rgb(128,0,128)">67,color:rgb(128,0,128)">99}, i, cx, cy;
color:rgb(0,0,255)">for (i = color:rgb(128,0,128)">0; i < color:rgb(128,0,128)">16; ++i) color:rgb(0,0,255)">if (sp[i]) {
cx = x + (m[i] >> color:rgb(128,0,128)">5), cy = y + (m[i] & color:rgb(128,0,128)">31);
color:rgb(0,0,255)">if (gt.pool[cx][cy]) color:rgb(0,0,255)">if (c == color:rgb(128,0,128)">2) gt.pool[cx][cy] = color:rgb(128,0,128)">0; color:rgb(0,0,255)">else color:rgb(0,0,255)">return color:rgb(128,0,128)">0;
color:rgb(0,0,255)">if (c==color:rgb(128,0,128)">1) gt.pool[cx][cy] = sp[i];
}
color:rgb(0,0,255)">return color:rgb(128,0,128)">1;
}
color:rgb(0,0,255)">int trsScene() {
color:rgb(0,0,255)">int x, y = color:rgb(128,0,128)">0;
gt.s = class="tags" href="/tags/RANDOM.html" title=random>random(color:rgb(128,0,128)">7) + color:rgb(128,0,128)">1, gt.st = gt.t = color:rgb(128,0,128)">0;
gt.x = color:rgb(128,0,128)">4, gt.y = color:rgb(128,0,128)">0;
color:rgb(0,0,255)">for (--gt.t ; ; class="tags" href="/tags/DELAY.html" title=delay>delay(color:rgb(128,0,128)">10), --gt.t) {
color:rgb(0,0,255)">int k = color:rgb(128,0,128)">0;
color:rgb(0,0,255)">while (kbhit()) {
k = getch();
color:rgb(0,0,255)">if (k == color:rgb(128,0,128)">27) color:rgb(0,0,255)">return color:rgb(128,0,128)">0;
color:rgb(0,0,255)">if (k == color:rgb(128,0,0)">'color:rgb(128,0,0)">Acolor:rgb(128,0,0)">' || k == color:rgb(128,0,0)">'color:rgb(128,0,0)">acolor:rgb(128,0,0)">') {
color:rgb(0,0,255)">if (trsCopy(gt.tmap[gt.s][gt.st], gt.x-color:rgb(128,0,128)">1, gt.y, color:rgb(128,0,128)">0)) --gt.x;
} color:rgb(0,0,255)">else color:rgb(0,0,255)">if (k == color:rgb(128,0,0)">'color:rgb(128,0,0)">Dcolor:rgb(128,0,0)">' || k == color:rgb(128,0,0)">'color:rgb(128,0,0)">dcolor:rgb(128,0,0)">') {
color:rgb(0,0,255)">if (trsCopy(gt.tmap[gt.s][gt.st], gt.x+color:rgb(128,0,128)">1, gt.y, color:rgb(128,0,128)">0)) ++gt.x;
} color:rgb(0,0,255)">else color:rgb(0,0,255)">if (k == color:rgb(128,0,0)">'color:rgb(128,0,0)">Wcolor:rgb(128,0,0)">' || k == color:rgb(128,0,0)">'color:rgb(128,0,0)">wcolor:rgb(128,0,0)">') {
color:rgb(0,0,255)">if (trsCopy(gt.tmap[gt.s][(gt.st+color:rgb(128,0,128)">1) % color:rgb(128,0,128)">4], gt.x, gt.y, color:rgb(128,0,128)">0))
gt.st = (gt.st+color:rgb(128,0,128)">1) % color:rgb(128,0,128)">4;
}
}
color:rgb(0,0,255)">if (k == color:rgb(128,0,0)">'color:rgb(128,0,0)">Scolor:rgb(128,0,0)">' || k == color:rgb(128,0,0)">'color:rgb(128,0,0)">scolor:rgb(128,0,0)">' || gt.t < color:rgb(128,0,128)">0) {
color:rgb(0,0,255)">if (trsCopy(gt.tmap[gt.s][gt.st], gt.x, gt.y+color:rgb(128,0,128)">1, color:rgb(128,0,128)">0))++gt.y,gt.t=color:rgb(128,0,128)">50;
color:rgb(0,0,255)">else {
trsCopy(gt.tmap[gt.s][gt.st], gt.x, gt.y, color:rgb(128,0,128)">1);
color:rgb(0,0,255)">for (--y; y > color:rgb(128,0,128)">0; --y) {
color:rgb(0,0,255)">for (x = color:rgb(128,0,128)">0; gt.pool[x][y] > color:rgb(128,0,128)">0; ++x);
color:rgb(0,0,255)">if (gt.pool[x][y] < color:rgb(128,0,128)">0)
color:rgb(0,0,255)">for (k = y++; k > color:rgb(128,0,128)">0; --k)
color:rgb(0,0,255)">for (x = color:rgb(128,0,128)">0; gt.pool[x][color:rgb(128,0,128)">0] >= color:rgb(128,0,128)">0; ++x)
gt.pool[x][k] = gt.pool[x][k-color:rgb(128,0,128)">1];
}
color:rgb(0,0,255)">return color:rgb(128,0,128)">1;
}
}
trsCopy(gt.tmap[gt.s][gt.st], gt.x, gt.y, color:rgb(128,0,128)">1);
color:rgb(0,0,255)">for (x = color:rgb(128,0,128)">0; gt.pool[x][color:rgb(128,0,128)">0] >= color:rgb(128,0,128)">0; ++x) {
color:rgb(0,0,255)">for (y = color:rgb(128,0,128)">1; gt.pool[x][y] >= color:rgb(128,0,128)">0; ++y) {
setfillstyle(color:rgb(128,0,128)">1, gcColor[gt.pool[x][y]]);
bar(color:rgb(128,0,128)">201 + x*gcW, color:rgb(128,0,128)">1 + y*gcW, color:rgb(128,0,128)">200 + gcW + x*gcW, gcW + y*gcW);
}
}
trsCopy(gt.tmap[gt.s][gt.st], gt.x, gt.y, color:rgb(128,0,128)">2);
}
}
color:rgb(0,0,255)">int main() {
color:rgb(0,0,255)">int g = DETECT, m = color:rgb(128,0,128)">0;
initgraph(&g, &m, color:rgb(128,0,0)">"");
class="tags" href="/tags/RANDOM.html" title=random>randomize();
trsInit();
color:rgb(0,0,255)">while (trsScene());
color:rgb(0,0,255)">return color:rgb(128,0,128)">0;
}
color:rgb(51,51,51); font-family:Tahoma,Verdana,STHeiTi,simsun,sans-serif; font-size:14px"> 如果你没有Win-TCc;或者你是Win7系统c;可以用这个能用VC6编译的工程包:
以上是图形界面版本c;显示看起来好看一些
color:rgb(51,51,51); font-family:Tahoma,Verdana,STHeiTi,simsun,sans-serif; font-size:14px"> 一样都是88行