别踩白块儿之禅模式 windows程序实现

代码如下

#include <Windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(	//程序入口,WINAPI是一种函数调用约定,用于表明如何生成在堆栈中放置调用参数的机器代码
	HINSTANCE hInstance  //实例句柄,标识该程序
	, HINSTANCE hPreInstance  //16位中用于标识该程序前一实例,32位中不再采用,参数为NULL
	, LPSTR szCmdLine  //调用时的命令行
	, int iCmdShow)   //窗口显示方式
{
	static TCHAR szName[] = TEXT("HIYUN");
	HWND hwnd;
	MSG msg;
	WNDCLASS wc;
	wc.style = CS_VREDRAW | CS_HREDRAW;
	wc.cbClsExtra = 0;
	wc.cbWndExtra = 0;
	wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
	wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	wc.hInstance = hInstance;
	wc.lpfnWndProc = WndProc;
	wc.lpszMenuName = NULL;
	wc.lpszClassName = szName;

	if (!RegisterClass(&wc))
	{
		MessageBox(NULL, TEXT("注册失败!"), TEXT("失败"), MB_OK | MB_ICONERROR);
	}

	hwnd = CreateWindow(szName, TEXT("别踩白块儿之禅模式 - 闲云野鹤制作,QQ群116920287"), WS_OVERLAPPEDWINDOW,
		400, 100, 400, 600,
		NULL, NULL, hInstance, NULL);

	ShowWindow(hwnd, iCmdShow);
	UpdateWindow(hwnd);

	while (GetMessage(&msg, NULL, 0, 0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	RECT rect;
	TCHAR szBuff[50];
	static HBRUSH brushPass = CreateSolidBrush(RGB(223, 223, 223));
	static int i, j, x, y, tx, ty;
	static int runing, cxChar, cyChar, cxClient, cyClient, cxSquare, cySquare;
	static TCHAR PlayName[] = TEXT("YUN");
	static ULONG score = 0, t;
	static int Loc[20];

	switch (message)
	{
	case WM_CREATE:
		runing = 0;
		hdc = GetDC(hwnd);
		TEXTMETRIC tm;
		GetTextMetrics(hdc, &tm);
		cxChar = tm.tmAveCharWidth;
		cyChar = tm.tmHeight + tm.tmExternalLeading;
		ReleaseDC(hwnd, hdc);
		return 0;

	case WM_SIZE:
		cxClient = LOWORD(lparam);
		cyClient = HIWORD(lparam);
		cxSquare = cxClient / 4;
		cySquare = (int)(cxSquare * 1.5);
		for (i = 0; i <= cyClient / cySquare + 2; ++i)
		{
			Loc[i] = rand() % 4;
		}
		return 0;
	case WM_LBUTTONDOWN:
		tx = x = LOWORD(lparam);
		ty = y = HIWORD(lparam);
		x /= cxSquare;
		y = (cyClient - y) / cySquare;
		if (Loc[0] == x && y == 0 && !runing)
		{
			runing = 1;
			InvalidateRect(hwnd, NULL, true);
		}
		else if (Loc[1] == x && y == 1 && runing)
		{
			score++;
			for (i = 0; i <= cyClient / cySquare + 1; ++i)
			{
				Loc[i] = Loc[i + 1];
			}
			Loc[i] = rand() % 4;
			InvalidateRect(hwnd, NULL, true);
		}

		return 0;
	case WM_PAINT:
		hdc = BeginPaint(hwnd, &ps);
		SetBkMode(hdc, TRANSPARENT);
		SetTextColor(hdc, RGB(255, 0, 0));

		for (i = 1; i < 4; ++i)
		{
			MoveToEx(hdc, cxSquare * i, 0, NULL);
			LineTo(hdc, cxSquare * i, cyClient);
		}
		for (i = 0; i <= cyClient / cySquare + 1; ++i)
		{
			MoveToEx(hdc, 0, cyClient - cySquare * i, NULL);
			LineTo(hdc, cxClient, cyClient - cySquare * i);
			j = Loc[i];
			if (i == 0 && runing)
				SelectObject(hdc, brushPass);
			else
				SelectObject(hdc, GetStockObject(BLACK_BRUSH));
			Rectangle(hdc, j * cxSquare, cyClient - cySquare * (i + 1),
				cxSquare * (j + 1) + 1, cyClient - cySquare * i + 1);
			if (!runing && i == 0)
			{
				TextOut(hdc, j * cxSquare + cxSquare / 2 - cxChar * 1.5, cyClient - cySquare / 2,
					szBuff, wsprintf(szBuff, TEXT("开始")));
			}
		}

		TextOut(hdc, cxChar, cyChar, szBuff,
			wsprintf(szBuff, TEXT("Player:%s"), PlayName));
		t = wsprintf(szBuff, TEXT("Score: %ld"), score);
		TextOut(hdc, cxClient - (t + 2) * cxChar, cyChar, szBuff, t);

		EndPaint(hwnd, &ps);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return DefWindowProc(hwnd, message, wparam, lparam);
}
时间: 09-15

别踩白块儿之禅模式 windows程序实现的相关文章

初学JS——利用JS制作的别踩白块儿(街机模式) 小游戏

初学JS--利用JS制作的别踩白块儿(街机模式) 小游戏 这个是上个星期5写的了,当时是突然想写个游戏,就想到了别踩白块儿,当时的想法是 可能普通模式的别踩白块儿因为他的"块儿"是滚动的向上这种,以我目前会的技术想不出怎么写, 但是如果是街机模式,通过你每按一次按键之后他像下跳一格这样的就非常好实现了. 通过我目前会的知识,实现的步骤大概是这样的: 建一个4X4的表格,制作2张150X100的图片,一张全白色,一张全黑色,命名为0.JPG,1.JPG 就是说当文件名为0的时候就是白色的

别踩白块儿游戏源码项目

这个项目有带说明文档,大家可以看看源码附件的说明文档吧,"别踩白块儿"是目前非常火的一款游戏,游戏非常简单刺激.关于具体怎么火法怎么玩我就不多说了,相信看到本文的朋友们都非常地清楚. 什么游戏火,我们都想知道自己能不能也弄一个玩玩,我也花了点时间弄了一个,游戏代码将会开源,利人利己,大家一起提高,希望各位多多支持. 下面介绍如何用OGEngine游戏引擎完成"别踩白块儿"游戏的经典模式. 一.最终实现的部分效果截图 1.刚开始时,最下面有一栏为***,紧接着上面每一

“别踩白块儿&quot;游戏源代码分析和下载(一)

本帖最后由 lch123go 于 2014-7-9 17:51 编辑 "别踩白块儿"是目前非常火的一款游戏,游戏非常简单刺激.关于具体怎么火法怎么玩我就不多说了,相信看到本文的朋友们都非常地清楚. 什么游戏火,我们都想知道自己能不能也弄一个玩玩,我也花了点时间弄了一个,游戏代码将会开源,利人利己,大家一起提高,希望各位多多支持. 下面介绍如何用OGEngine游戏引擎完成"别踩白块儿"游戏的经典模式. 源码下载地址 一.最终实现的部分效果截图 1.刚开始时,最下面有

别踩白块儿游戏源码Android版

这个项目有带说明文档,大家可以看看源码附件的说明文档吧,“别踩白块儿”是目前非常火的一款游戏,游戏非常简单刺激.关于具体怎么火法怎么玩我就不多说了,相信看到本文的朋友们都非常地清楚. 什么游戏火,我们都想知道自己能不能也弄一个玩玩,我也花了点时间弄了一个,游戏代码将会开源,利人利己,大家一起提高,希望各位多多支持. 下面介绍如何用OGEngine游戏引擎完成“别踩白块儿”游戏的经典模式. 一.最终实现的部分效果截图 1.刚开始时,最下面有一栏为黄色,紧接着上面每一行都是有一个黑色块,其余为白色块

别踩白块儿

相信大家对这个游戏并不陌生.这个游戏可玩性不错,就是有点闹心,一点小错误又得重新来过.可所谓一失足成千古恨啊! 不过我最近在和朋友争论这个游戏里的钢琴音效的问题.我认为那是一首首歌曲的调,他却不这么认为(可能有点笨吧).因为我玩的时候明明可以听到是歌曲的音调,还可以跟着哼出来.这里我搜集了一下这里面的歌曲,有我听出来的,也有我在网上搜的.这些音乐随机出现在一局游戏里,当你足够厉害弹完一首歌曲,它会在随机地出现一首(难道没有尽头?)笔者反正只连续听过两首歌曲.不过随着游戏的进行,节奏越来越快,有些

【cocos2d-x制作别踩白块儿】第一期:游戏介绍

这一系类文章.我们将来分析时下最火的一款游戏 -- 别踩白块儿. 无图无真相,先上图 这就是我们终于要完毕项目的效果图. 游戏刚開始的最以下有一栏为黄色,紧接着上面每一行都是有一个黑色块,其余为白色块 玩家假设按错了.按到了白色块.会出现游戏结束对话框 游戏进行到最后会出现绿色栏.而且在游戏过程中都有一个计时器,显示时间 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTGVnZW5kb2YxOTkx/font/5a6L5L2T/fontsize/400

【cocos2d-x制作别踩白块儿】第九期:游戏计时功能(附源代码)

游戏没有计时,不是坑爹吗? 这一期,我们将来加入游戏计时功能. 1. 定义变量和函数 我们先在HelloWorldScene.h中定义几个变量和函数 long startTime; bool timeRunning; startTime用来记录開始的时间,timeRunning用来推断游戏是否在进行中. //開始计时 void startTimer(); //结束计时 void stopTimer(); virtual void update(float dt); startTimer()函数时

&quot;别踩白块儿&quot;游戏源代码分析和下载(二)

四.游戏交互实现 1.前面已经介绍在 Block 类实现了每个block的触碰监听,block 实现触碰监听,当按下时,调起在GameScene中实现的touchBlock方法.下面来看改方法的实. /** * 点击到Block时进行的逻辑处理 * * @param pBlock *            所点击的block */ public void touchBlock(Block pBlock) { if (gameStatus == ConstantUtil.GAME_START) {

用Canvas写一个简单的游戏--别踩白块儿

第一次写博客也不知怎么写,反正就按照我自己的想法来吧!怎么说呢?还是不要扯那些多余的话了,直接上正题吧! 第一次用canvas写游戏,所以挑个简单实现点的来干:别踩白块儿,其他那些怎么操作的那些就不用再扯了,大家应该都懂,不懂的看到黑色的就点就是了,扯多了我打字手也累,大概.链接给你们:http://nowtd.cn/white/ 咱不是理论派,所以在这里不会扯多少理论. 首先看看html的结构吧 1 <header class="container"> 2 <art