初夏小谈:经典游戏之别踩白块小游戏---小项目(C/C++打造)(1.0.01)

       对于一个酷玩游戏和更喜欢设计游戏的人来说,能够自己编写一款比较有意义的经典游戏是一件多么爽的事情,在编程的行业里,最大的成就感莫过于全球大部分人都超级热爱自己的团队设计的软件并且爱不释手。这个目标真是过于远大,但还是要有的,万一实现了呢呵呵。

      对于一个热爱玩游戏的我却更倾向于去打造一款具有创新性和健康积极的游戏。从小接触穿越火线就越发地认为游戏行业定会火爆与90后的年轻一代们以及后面的新生代。但还是说一句游戏只是生活的一种调味剂,切记不要过于沉溺,伤人伤己。

     别踩白块游戏相信大家都玩过吧,今天通过C语言来实现这个游戏。

在实现此游戏时需要定义和以往不一样的主函数即WinMian 这个函数即为GUI窗口应用程序函数,WINAPI则是此函数的调用约定。在这个函数中有四个参数分别是HINSTANCE hInstance 是当前应用程序的实力句柄,HINSTANCE hPreInstance 是当前应用程序的前一个实例也就会这个应用可能‘被打开多份,而这个实例就是当前打开的上一个。LPSTR lpDCmdLine 是命令行参数  int nCmdShow 是窗口显示方式,让其最大化还是最小化。

其次在这个主函数中需要实现一个窗口,通过调用相关接口来实现,接着就是注册这个窗口,就像你如果创业想开一家公司,那么就必须去工商局注册一样。注册完窗口后,就创建一个窗口实例,注意此时还不能显示出来,就必须调用显示的接口,由于在实现这个游戏时是要不断更新的所以要实现更新窗口,最后实现消息循环,来不断获取鼠标信息。

窗口处理函数如下:

//窗口处理函数
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	PAINTSTRUCT ps;

	//绘图句柄  DC 设备上下文---微软提供一套库,封装好与各种显示器兼容相关接口
	HDC hDC;
	//每个屏幕有四个黑色方块
	static int bw[4];
	//矩形区域
	RECT rect;

	//画刷句柄
	HBRUSH hBrush;

	//鼠标点击
	POINT point;

	//踩了的格子数
	static int n = 0;

	//所耗时间
	static int tm = 0;

	TCHAR szMsg[200];
	switch (uMsg)
	{
	case WM_CREATE:
	{
		srand((unsigned int)time(NULL));
		for (int i = 0; i < 4; i++)
		{
			bw[i] = rand() % 4;
		}
		//开启定时器
		SetTimer(hWnd, 1, 10, NULL);
	}
	break;

	//定时器
	case WM_TIMER:
		tm++;
		break;
		//窗口绘图消息
	case WM_PAINT:
		hDC = BeginPaint(hWnd, &ps);

		//画图
		for (int i = 0; i < 5; i++)
		{
			////水平
			//MoveToEx(hDC, 0, i*BLOCK, NULL);
			//LineTo(hDC, 4*BLOCK, i*BLOCK);

			////竖直
			//MoveToEx(hDC, i*BLOCK,0,NULL);
			//LineTo(hDC, i*BLOCK, 4 * BLOCK);
			//水平
			//起点
			MoveToEx(hDC, 0, 1.5 * i * BLOCK, NULL);
			//终点
			LineTo(hDC, 4 * BLOCK, 1.5 * i * BLOCK);

			//竖直
			MoveToEx(hDC, i * BLOCK, 0, NULL);
			LineTo(hDC, i * BLOCK, 6 * BLOCK);
		}
		//画黑色方块
		for (int i = 0; i < 4; i++)
		{
			SetRect(&rect, bw[i] * BLOCK, 1.5 * i * BLOCK, bw[i] * BLOCK + 100, 1.5 * i * BLOCK + 150);
			//设置黑刷子
			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.y / (BLOCK * 1.5) >= 3)
		{
			if (point.x / BLOCK != bw[3])
			{
				wsprintf(szMsg, (LPCSTR)"您输了!!!  用时:%d.%d 秒  块数:%d个", tm / 100, tm - (tm / 100) * 100, n);
				MessageBox(hWnd, szMsg, (LPCSTR)"温馨提示:", MB_OK);
				//退出
				PostQuitMessage(0);
			}
			//每按一次要往下走一个
			for (int i = 3; i > 0; i--)
			{
				bw[i] = bw[i - 1];
			}
			bw[0] = rand() % 4;
			n++;
			//滚动窗口
			ScrollWindow(hWnd, 0, 1.5 * BLOCK, NULL, NULL);
		}
	}
	break;
	//窗口关闭消息,关闭只是把窗口最小化,还可以恢复
	case WM_CLOSE:
		DestroyWindow(hWnd);//销毁窗口,不可以恢复了
		break;
		//窗口销毁消息
	case WM_DESTROY:
		PostQuitMessage(0);//退出进程
		break;
	}
	return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

该程序运行显示:

                                  

开始游戏:当踩错时显示:

                                

                                 

                                                                                                                                                  珍&源码

全部评论

相关推荐

我是985研究生,最近学校在组织开题,大家都在非常紧张地准备,但我一直进入不了状态,很想做但是心又很浮躁。但我的室友们感觉都非常认真,每天醒来就开始看论文,睡着前最后一件事还是在看论文,我非常焦虑。我感觉自己甚至有点把大家当做假想敌了。这种比较心态还存在于生活的各种方面:看到有钱的同学会非常羡慕,看到朋友圈里面环游世界的留学生同学也会羡慕,看到那些工作后有自己的钱而过上较为阔绰的生活的时候还是羡慕,就仿佛只有自己一个人在阴暗爬行。而且这些比较是每时每刻的,为了不比较,我已经关闭了朋友圈,但是每次偶尔刷一下还是会难受很久。我知道比较是偷走幸福的小偷,但我好像控制不了,感觉自己是一个偷窥别人生活的...
若怜君欢:担心开题搞砸了,幻想拥有别人的生活,本质上是因为自卑,楼主小时候大概率是留守儿童或者父母关系很紧张,导致楼主没有安全感、焦虑、内耗。 这样的情况最好的办法就是建立自信和降低期待,建立自信不是一蹴而就,而是循序渐进,比如告诉自己允许自己第一次没把事情做好,失败了能搞清楚其中缘由而不是全盘否定自己,失败不是终点,放弃才是;降低期待只要记住一句话即可,能伴随你一生的,只有经验和学识,所以你对事情的态度应该更多地去思考它是否能带来学识和经验的增长,而不是仅仅用短期的利益作为唯一期待。 人生不是一成不变的,它是可以迭代更新的,去归纳总结自身的不足并结合实际去改进,去尝试一些新的思路和方法,不要固执钻牛角尖,也不要反复横跳,为自己设立一个高度聚集的精神内核,内核之上可以去尝试一切有利于自己更好的方式 以上就是我个人对生活的理解,共勉
点赞 评论 收藏
分享
Yki_:以下条件优先录用: 喜欢去缅北当猪仔的
点赞 评论 收藏
分享
no_work_no_life:深圳,充电宝,盲猜anker
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务