刚刚运行了别人家的代码,惊艳到了,瞬间感觉自己之前写的小游戏的黑框框输出框low到爆,必须好好研究一下,哎
别人家的门牌号:https://blog.csdn.net/qq_35781950/article/details/71105627
#include
#include
#include
#define W 14 //游戏区域宽度
#define H 20 //游戏区域高度
#define W1 6 //右边状态栏宽度
#define BSIZE 25 //游戏方格边长
#define Y1 6 //放置照片的纵坐标
#define Y2 12 //分数显示栏顶端纵坐标
#define Y3 15 //等级显示栏顶端纵坐标
#define Y4 21 //帮助栏顶端纵坐标
#define Cur_x W/2-1 //游戏方块初始状态左上角横坐标
#define Cur_y 1 //初始状态左上角纵坐标
#define BgColor RGB(0xF5,0xF5,0xDC) //米色
#define FgColor RGB(255,153,204) //粉红
#define RED RGB(255,0,0)
#define ORANGE RGB(250,128,10)
#define YELLOW RGB(255,255,0)
#define GREEN RGB(0,255,0)
#define CYAN RGB(0,255,255)
#define LIGHT_BLUE RGB(0xA6,0xCA,0xF0) //天蓝色
#define PURPLE RGB(255,0,255)
#define MS_NEWBLOCK WM_USER+1 // 消息ID,产生新的【方块】
int score = 0, level = 0, level_step = 100; //分数等级以及每等级所需分数的定义及初始化
int top = H - 1; //最顶端的纵坐标
int x, y; //方块当前位置的横坐标及纵坐标
int cur_boxnum, next_boxnum; //cur_boxnum是当前方块编号,next_boxnum是下一个方块编号
struct BOARD
{
int var; //状态,1代表已被占用,0代表未被占用
int color; //颜色
}board[H][W]; //定义游戏主板,H行N列
struct BLOCK
{
int a[4][2]; //定义方块形状的数组
int color; //方块颜色
int next; //下一个方块的号码
};
struct BLOCK block[19] =
{ //初始化各个游戏方块
{ 1,1,1,2,1,3,2,3,RED,1 },
{ 0,2,1,2,2,2,0,3,RED,2 },
{ 0,1,1,1,1,2,1,3,RED,3 },
{ 2,1,0,2,1,2,2,2,RED,0 },
{ 1,1,1,2,0,3,1,3,ORANGE,5 },
{ 0,1,0,2,1,2,2,2,ORANGE,6 },
{ 1,1,2,1,1,2,1,3,ORANGE,7 },
{ 0,2,1,2,2,2,2,3,ORANGE,4 },
{ 1,1,0,2,1,2,2,2,YELLOW,9 },
{ 1,1,1,2,2,2,1,3,YELLOW,10 },
{ 0,2,1,2,2,2,1,3,YELLOW,11 },
{ 1,1,0,2,1,2,1,3,YELLOW,8 },
{ 1,1,1,2,2,2,2,3,GREEN,13 },
{ 1,2,2,2,0,3,1,3,GREEN,12 },
{ 2,1,1,2,2,2,1,3,CYAN,15 },
{ 0,2,1,2,1,3,2,3,CYAN,14 },
{ 1,0,1,1,1,2,1,3,LIGHT_BLUE,17 },
{ 0,2,1,2,2,2,3,2,LIGHT_BLUE,16 },
{ 1,1,2,1,1,2,2,2,PURPLE,18 },
};
void Paint(HDC hdc, HPEN hpen) //此函数用于初始化界面
{
int i, j;
HPEN hpen1; //定义画笔,用于绘制分隔线
HBRUSH hbrush = CreateSolidBrush(BgColor); //定义画刷并赋初值,画刷颜色采用背景色
hpen1 = CreatePen(PS_DASHDOTDOT, 3, FgColor); //给画笔赋初值,颜色为前景色,线宽为3,双点划线
SelectObject(hdc, hpen1); //选择画笔
MoveToEx(hdc, W*BSIZE, 0, NULL); //将光标移动到(W*BSIZE,0)处
LineTo(hdc, W*BSIZE, H*BSIZE); //从光标所在位置画线到(W*BSIZE,H*BSIZE)处
DeleteObject(hpen1); //删除之前所选用的画笔
SelectObject(hdc, hpen); //重新选择画笔
SelectObject(hdc, hbrush); //选择画刷
for (i = 1; i= H - 1) continue; //越界了,就跳出本次循环
for (j = 1; j= top; ii--) //重置游戏区域各个方格的状态,top为最顶端,i为找到的满行
for (j = 1; j= H - 1) continue; //越界了,就跳出本次循环
for (j = 1; jy + block[cur_boxnum].a[0][1])
top = y + block[cur_boxnum].a[0][1]; //确定最高点
ChangeVar(); //改变游戏主板状态
SetFullRow(hdc, hpen); //满行处理
cur_boxnum = next_boxnum;
x = Cur_x; //重置方块坐标
y = Cur_y;
hpen = CreatePen(PS_SOLID, 1, FgColor);
srand((unsigned)time(NULL)); //初始化随机数发生器
next_boxnum = rand() % 19;
EraseBox(hdc, hpen, W + 1, 1, cur_boxnum); //清除右边状态栏的方块
ShowBox(hdc, hpen, W + 1, 1, next_boxnum); //显示右边状态栏的方块
ShowBox(hdc, hpen, Cur_x, Cur_y, cur_boxnum); //显示游戏主板顶部方块
if (!CanMove()) //刚移开始就不能移动,则结束程序退出
{
KillTimer(hwnd, 1);
MessageBox(hwnd, " 退出游戏", "退出", MB_OK);
PostQuitMessage(0);
}
ReleaseDC(hwnd, hdc);
return 0;
case WM_DESTROY: //退出游戏
KillTimer(hwnd, 1);
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, iMsg, wParam, lParam); //窗口默认处理,当消息处理函数未处理消息时就调用该函数进行处理
}
效果图: