- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
88行代码完成俄罗斯方块游戏(含讲解)
在正式阅读本文之前,请你记得你应该用娱乐的心态来看, 本代码所使用到的技巧,在工作了的人眼里会觉得很纠结,很蛋疼,很不可理喻,很丑, 注意,是你蛋疼,不关我的事 通常,写一个俄罗斯方块,往往动不动就几百行,甚至上千行,而这里只有88行 正所谓头脑风暴,打破常规。这里将使用很多不平常的手段来减少代码
但为了能更通用,一份控制台版本的代码,同样是88行,直接复制到VC即可编译:
#include windows.h #include stdio.h #include time.h #include conio.h #include stdlib.h char gcText[] = 1LJTSZ#; struct tetris { int _pool[16][32], (*pool)[32], tmap[8][4][16]; int x, y, s, st, t; }gt; void trsInit() { 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}}; int *p, i, j, b; for (p = sp[0]; *p = 0; ++p) if ( *p == 0 ) *p = p[-2]; gt.pool = gt._pool[4]; for (j = 0; j 7; ++j) for (i = 0; i 4; ++i) for (b = 0; b 16; ++b) gt.tmap[j+1][i][b] = (sp[j][i] 1) * (j + 1), sp[j][i] = 1; memset(gt._pool, -1, sizeof(gt._pool)); for (i = 0; i 10; ++i) memset(gt.pool[i], 0, sizeof(int[21])); return ; } int trsCopy(int sp[], int x, int y, int c) { int i, cx, cy; for (i = 0; i 16; ++i) if (sp[i]) { cx = x + (i 3), cy = y + (i 2); if (gt.pool[cx][cy]) if (c == 2) gt.pool[cx][cy] = 0; else return 0; if (c==1) gt.pool[cx][cy] = sp[i]; } return 1; } int trsScene() { int x, y = 0; COORD pos = {0}; gt.s = rand() % 7 + 1, gt.st = gt.t = 0; gt.x = 3, gt.y = 0; for (--gt.t; ; Sleep(1), --gt.t) { int k = 0; while (kbhit()) { k = getch(); if (k == 27) return 0; if (k == A || k == a) { if (trsCopy(gt.tmap[gt.s][gt.st], gt.x-1, gt.y, 0)) --gt.x; } else if (k == D || k == d) { if (trsCopy(gt.tmap[gt.s][gt.st], gt.x+1, gt.y, 0)) ++gt.x; } else if (k == W || k == w) { if (trsCopy(gt.tmap[gt.s][(gt.st+1) % 4], gt.x, gt.y, 0)) gt.st = (gt.st+1) % 4; } } if (k == S || k == s || gt.t 0) { if (trsCopy(gt.tmap[gt.s][gt.st], gt.x, gt.y+1, 0))++gt.y,gt.t=50; else { trsCopy(gt.tmap[gt.s][gt.st], gt.x, gt.y, 1); for (--y; y 0; --y) { for (x = 0; gt.pool[x][y] 0; ++x); if (gt.pool[x][y] 0) for (k = y++; k 0; --k) for (x = 0; gt.pool[x][0] = 0; ++x) gt.pool[x][k] = gt.po
文档评论(0)