别踩白块小游戏

原创
2019/09/10 20:41
阅读数 26
#include <Windows.h>
#include <time.h>
#include <stdlib.h>
#define BLOCK 100

//HWND:窗口句柄类型
//窗口处理函数
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

//Win32项目下入口函数:WinMain	GUI窗口应用程序
//WINAPI:函数调用约定
//hInstance:当前应用程序的实例句柄
//hPreInstance:当前应用程序的前一个实例句柄
//lpCmdline:命令行参数
//nCmdShow:窗口的最大或最小化

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdline, int nCmdShow)
{
	//一.做一个游戏窗口
	//1.设计窗口类
	TCHAR szAppClassName[] = TEXT("WuMuGuiFoundation");
	WNDCLASS wc;
	wc.cbClsExtra = 0;												//窗口类扩展空间大小
	wc.cbWndExtra = 0;												//窗口的扩展空间大小
	wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);			//加载白色背景刷
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);						//加载光标
	wc.hIcon = NULL;												//加载图标
	wc.hInstance = hInstance;										//应用程序实例句柄
	wc.lpfnWndProc = WindowProc;									//窗口处理函数
	wc.lpszClassName = szAppClassName;								//窗口类型名
	wc.lpszMenuName = NULL;											//菜单名
	wc.style = CS_HREDRAW | CS_VREDRAW;								//窗口类风格

	//2.注册窗口类
	RegisterClass(&wc);

	//3.创建窗口
	HWND hWnd = CreateWindow(
		szAppClassName,					//窗口类型名
		TEXT("别踩白块游戏"),			//窗口的标题
		WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,		//窗口的风格
		200,100,										//窗口左上角坐标
		4*BLOCK+10,4*BLOCK+40,										//窗口的宽和高
		NULL,											//父窗口句柄
		NULL,											//菜单句柄
		hInstance,										//应用程序实例句柄(应该用程序的ID)
		NULL											//参数
	);
	//4.显示窗口
	ShowWindow(hWnd, SW_SHOW);
	//5.更新窗口
	UpdateWindow(hWnd);
	//6.消息循环
	MSG msg;		//消息机制驱动运行
	while (GetMessage(&msg,NULL,0,0))
	{
		//将虚拟键消息转换成字符消息
		TranslateMessage(&msg);
		//将消息分发给窗口处理函数
		DispatchMessage(&msg);
	}
	return 0;
}


//窗口处理函数
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	PAINTSTRUCT ps;
	HDC hDC;		//绘图句柄DC
	static int bw[4];	//每屏有四个黑块,从上往下数
	RECT rect;		//矩形区域
	HBRUSH hBrush;	//画刷句柄
	POINT point;	//鼠标点击的坐标
	//static int num = 0;	//游戏中成功踩的格子数
	//static int tm = 0;	//游戏用时


	switch (uMsg)
	{
	case WM_CREATE://窗口创建的时候
	{
		srand((unsigned)time(NULL));//随机数播种
		for (int i = 0; i < 4; i++)
		{
			bw[i] = rand() % 4;
		}
		//开启定时器
		//SetTimer(hWnd, 1, 10, NULL);
	}
		break;
	case WM_PAINT://窗口绘图消息
		hDC = BeginPaint(hWnd, &ps);
		//画图
		//Rectangle(hDC, 0, 0, 100, 100);
		
		for (int i = 0; i < 5; i++)
		{
			//水平
			MoveToEx(hDC, 0, i*BLOCK, NULL);
			LineTo(hDC, BLOCK*4, i*BLOCK);

			//竖直
			MoveToEx(hDC, i*BLOCK, 0, NULL);
			LineTo(hDC, i*BLOCK, BLOCK*4);

		}
		//画黑块
		for (int j = 0; j < 4; j++)
		{
			SetRect(&rect, bw[j]*BLOCK,j*BLOCK,bw[j]*BLOCK+BLOCK,j*BLOCK+BLOCK);
			hBrush = CreateSolidBrush(RGB(0, 0, 0));
			SelectObject(hDC, hBrush);
			Rectangle(hDC, rect.left, rect.top, rect.right, rect.bottom);
			//释放资源
			DeleteObject(hBrush);
		}

		EndPaint(hWnd, &ps);
		break;
	case WM_LBUTTONDOWN://鼠标左键点击消息
	{
		point.x = LOWORD(lParam);
		point.y = HIWORD(lParam);

		if (point.x/BLOCK != bw[3] || point.y/BLOCK != 3)
		{

			MessageBox(hWnd, L"游戏失败",L"提示",MB_OK);
			
		}
		
		for (int i = 3; i > 0; i--)
		{
			bw[i] = bw[i - 1];
		}
		bw[0] = rand() % 4;
		//num++;
		//滚动窗口
		ScrollWindow(hWnd, 0, 100, NULL, NULL);
	}
		break;
	case WM_CLOSE://窗口关闭消息
		DestroyWindow(hWnd);//销毁窗口
		break;
	case WM_DESTROY://窗口销毁消息
		PostQuitMessage(0);//退出进程
		break;
	}
	//没处理的的交给系统去处理
	return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部