C语言编写的俄罗斯方块

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用C语言写的一个简单的俄罗斯方块!会用到graphics.h的库,需要自己准备,可以在网上下载EasyX 解决。下边是源代码(扩展名为.cpp):

#include

#include

#include

#define WIDTH 10 // 游戏区宽度

#define HEIGHT 22 // 游戏区高度

#define UNIT 20 // 每个游戏区单位的实际像素

// 定义操作类型

enum CMD

{

CMD_ROTATE, // 方块旋转

CMD_LEFT, CMD_RIGHT, CMD_DOWN, // 方块左、右、下移动

CMD_SINK, // 方块沉底

CMD_QUIT // 退出游戏};

// 定义绘制方块的方法

enum DRAW

{

SHOW, // 显示方块

CLEAR, // 擦除方块

FIX // 固定方块

};

// 定义七种俄罗斯方块

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;

// 定义游戏区

BYTE g_World[WIDTH][HEIGHT] = {0};

void Init(); // 初始化游戏

void Quit(); // 退出游戏

void NewGame(); //

开始新游戏

void GameOver(); //

结束游戏

CMD GetCmd(); //

获取控制命令

void DispatchCmd(CMD _cmd);

// 分发控制命令

void NewBlock(); //

生成新的方块

bool CheckBlock(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 main()

{

Init();//界面函数

CMD c;

while(true)

{

c = GetCmd();

DispatchCmd(c);

// 按退出时,显示对话框咨询用户是否退出

if (c == CMD_QUIT)

{

HWND wnd = GetHWnd();

if (MessageBox(wnd, _T("您要退出游戏吗?"), _T("提醒"), MB_OKCANCEL | MB_ICONQUESTION)

== IDOK)

Quit();

}

}

}

//界面

void Init()

{

initgraph(640, 480); //初始化文本框宽度、高度

srand((unsigned)time(NULL)); //产生随机数

setbkmode(TRANSPARENT); // 设置图案填充的背景色为透明

// 显示操作说明

settextstyle(14, 0, _T("宋体"));

outtextxy(20, 330, _T("操作说明"));

outtextxy(20, 350, _T("上:旋转"));

outtextxy(20, 370, _T("左:左移"));

outtextxy(20, 390, _T("右:右移"));

outtextxy(20, 410, _T("下:下移"));

outtextxy(20, 430, _T("空格:沉底"));

相关文档
最新文档