#include<stdio.h>
#include<easyx.h>
#include<conio.h>
#include<Windows.h>
#include<time.h>
#include<iostream>
#include"resource.h"
using namespace std;
#pragma comment(lib,"winmm.lib")
#define WIDTH 10
#define HEIGHT 22
#define UNIT 20//没个单位的实际像素
BYTE g_World[WIDTH][HEIGHT] = { 0 };//定义游戏区域
int grades;//得分数
TCHAR s[50];//更新分数用
enum CMD //方块状态枚举
{
CMD_ROTATE, // 方块旋转
CMD_LEFT,
CMD_RIGHT,
CMD_DOWN, // 方块左、右、下移动
CMD_SINK, // 方块沉底
CMD_QUIT // 退出游戏
};
/*16进制数必须以 0x开头。比如 0x1表示一个16进制数。而1则表示一个十进制。
另外如:0xff,0xFF,0X102A,等等。其中的x也不区分大小写。
(注意:0x中的0是数字0,而不是字母O)
以下是一些用法示例:
int a = 0x100F;
int b = 0x70 + a;*/
struct BLOCK
{
WORD dir[4];
COLORREF color;//方块颜色
}g_Blocks[7] = { { 0x0F00, 0x4444, 0x0F00, 0x4444, RED }, // I
{ 0x0660, 0x0660, 0x0660, 0x0660, BLUE }, // 口
{ 0x4460, 0x02E0, 0x0622, 0x0740, MAGENTA }, // L
{ 0x2260, 0x0E20, 0x0644, 0x0470, YELLOW }, // 反L
{ 0x0C60, 0x2640, 0x0C60, 0x2640, CYAN }, // Z
{ 0x0360, 0x4620, 0x0360, 0x4620, GREEN }, // 反Z
{ 0x4E00, 0x4C40, 0x0E40, 0x4640, BROWN } }; // T
struct BLOCKINFO
{
byte id; // 方块 ID
char x, y; // 方块在游戏区中的坐标
byte dir : 2; // 方向
} g_CurBlock, g_NextBlock;//当前方块
enum DRAW
{
SHOW, //显示方块
CLEAR, //擦除方块
FIX //固定方块
};
//获取控制命令
DWORD m_oldtime;
/*DWORD 就是 Double Word, 每个word为2个字节的长度,
DWORD 双字即为4个字节,每个字节是8位,共32位*/
void Quit(); //退出游戏
void NewGame(); //开始游戏
void GameOver(); //结束游戏
CMD GetCmd(); //获取命令
void DispatchCmd(CMD _cmd); //分发控制命令
void CreateNewBlock(); //创建新方块
bool CheckBlockIsPut(BLOCKINFO _block);//检测当前方块是否可以被放下
void DrawUnit(int x, int y, COLORREF c, DRAW _draw); //画单元方块
void DrawBlock(BLOCKINFO _block, DRAW _draw = SHOW); //画方块
void OnRotate(); //旋转方块
void OnLeft(); //左移方块
void OnRight(); //右移方块
void OnDown(); //下移方块
void OnSink(); //沉底方块
void init()