俄罗斯方块

#include <windows.h>
#include <conio.h>
#include <stdio.h>
#define Get(C) for (C, i = n[T]; j = X + i % 4, k = Y + i / 4 % 4, i; i >>= 4)

int W = 10, H = 25, S, i, j, k, c, d = 9, X = 0, Y = 0, T = 0, * m;
int n[] = 
	{
		51264, 12816, 21520, 21520, 25872, 34113, 21537, 38208, 25921, 38481,
		38484, 38209, 25922, 43345, 34388, 38160, 25920, 38177, 42580, 38993 
	};
int move(int* v, int l) 
{
	Get(*v += l)(j < 0 || j >= W || k >= H || m[k * W + j]) && (c = 0);
	return c ? 1 : (*v -= l, v == &Y && (c = -1));
}
int main() 
{
	SetConsoleCursorInfo(GetStdHandle((DWORD)-11), &(CONSOLE_CURSOR_INFO) { 1 });
	for (srand(m = calloc(S = W * H, 4)), system("cls"); c - 27; Sleep(50))
	{
		Get(c = _kbhit() ? _getch() & 95 : 1) m[k * W + j] = 0;
		c ^ 65 || move(&X, -1), c ^ 68 || move(&X, 1), c ^ 83 || move(&Y, 1);
		c ^ 87 || (i = T < 8 ? 1 : 3, move(&T, T& i^ i ? 1 : -i));
		Get(--d || (d = 9, move(&Y, c = 1))) m[k * W + j] = T / 4 * 16 + 154;
		if (c == -1 && !(Y || (c = 27), T = rand() % 20, Y = X = 0))
		{
			for (j = W, i = S - 1; j -= !!m[i], i; i-- % W || (j = W))
				for (j || (k = i += W); !j && (--k >= W); m[k] = m[k - W]);
		}
		SetConsoleCursorPosition(GetStdHandle((DWORD)-11), (COORD) { 0 });
		for (; i < S; _cputs("  "), ++i % W || _cputs("\n"))
		{
			SetConsoleTextAttribute(GetStdHandle((DWORD)-11), m[i]);
		}
	}
}

俄罗斯方块代码,存在强制类型转换警告. 转载自b战up主.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值