亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? move pic.cpp

?? 真是一款用VC++編寫的小游戲
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*==========================================================
		Move Pic.cpp -- A move-picture game with SDK
			Soft Zealot (R) Robin Hood, 2001						
	  SoftZealot@china.com		Soft_Zealot@china.com

	====================================================
	我正在學習SDK編程,嘗試編寫了一個小游戲,因為我討厭
	一些無聊的編程問題,我喜歡有意思的編程工作 :)

	這個游戲完全是用SDK編寫的,沒有涉及MFC,其中打開圖片
	的函數是Charles Petzold的《Windows程序設計》一書中的
	源代碼,我只不過加上了注釋,看懂了意思而已。其他的代
	碼是我自己編寫的,你可以任意使用其中的代碼。

	歡迎大家和我討論編程的問題,你可以在www.csdn.net的專
	家門診的vc部分找到我,我的id是Soft_Zealot或者
	SoftZealot, :),不好意思,水平不夠只好多注冊幾個。

	如果你發現了bug或者找到了任何能夠改進程序性能或者任何
	能夠使code更精煉的方法,請你通知我,我會很高興能夠更
	加完善這個游戲。

	====================================================
	有待完成:
	1.勝利時通知游戲者游戲時間
	3.可不可以找到尋找最佳解的算法
	4.如何加入預覽功能,可不可以采用類似Splash方法

	====================================================
	bugs :
	1.顯示圖片后每個Static控件排列不整齊
	2.由于對圖像處理和windows底層工作原理還不是很清楚,所
	以有可能會有內存泄漏
==========================================================*/

#include <windows.h>
#include <commdlg.h>
#include <time.h>

#include "Move Pic.h"
#include "resource.h"

/*==========================================================
					應用程序入口函數
==========================================================*/
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
					PSTR szCmdLine, int iCmdShow)
{
	static TCHAR szMenuName[] = TEXT ("MainMenu") ;
	HWND         hwnd ;
	MSG          msg ;
	WNDCLASS     wndclass ;
	
	// save the application's HINSTANCE
	hInst = hInstance ;

	wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
	wndclass.lpfnWndProc   = WndProc ;		// WndProc !!! here
	wndclass.cbClsExtra    = 0 ;
	wndclass.cbWndExtra    = 0 ;
	wndclass.hInstance     = hInstance ;
	wndclass.hIcon         = LoadIcon (hInstance, "AppIcon") ;	// how to load self-cus icon
	wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
	wndclass.hbrBackground = (HBRUSH) GetStockObject (LTGRAY_BRUSH) ;
	wndclass.lpszMenuName  = szMenuName ;
	wndclass.lpszClassName = szAppName ;
	
	if (!RegisterClass (&wndclass))
	{
		MessageBox (NULL, TEXT ("This program requires Windows NT!"), 
					szAppName, MB_ICONERROR) ;
		return 0 ;
	}
	
	// Caculate the window's size and position, I don't like huge_window :-)
	int cxWindow, cyWindow;
	cxWindow = GetSystemMetrics (SM_CXSCREEN) / 3;
	cyWindow = GetSystemMetrics (SM_CYSCREEN) / 3;
	
	hwnd = CreateWindow (szAppName,						// window class name
						TEXT ("奇幻拼圖  Soft Zealot"),	// window caption
						WS_OVERLAPPEDWINDOW,			// window style
						cxWindow,						// initial x position
						cyWindow,						// initial y position
						cxWindow,						// initial x size
						cyWindow,						// initial y size
						NULL,							// parent window handle
						NULL,							// window menu handle
						hInstance,						// program instance handle
						NULL) ;							// creation parameters
	
	ShowWindow (hwnd, iCmdShow) ;
	UpdateWindow (hwnd) ;
	
	// message WM_QUIT cause function GetMessage return 0
	while (GetMessage (&msg, NULL, 0, 0))
	{
		TranslateMessage (&msg) ;
		DispatchMessage (&msg) ;
	}
	
	return msg.wParam ;
}


/*==========================================================
						窗口函數
==========================================================*/
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	static HMENU			hMenu ;
	static HWND				hwndPic_Button[4][4] ;
	static int				iStcPos[4][4], iStcPosSave[4][4] ;
	static HBITMAP			hBitmap, hBmpStc ;
	static int				cxClient, cyClient ;
	static int				i, j ;
	static int				idStcClk, idStcBlank ;
	static OPENFILENAME		ofn ;
	static bool				bWinFlag ;
	BITMAP					bitmap ;
	HDC						hdc, hdcMem, hdcStc ;
	PAINTSTRUCT				ps ;
	RECT					rcClient, rcWin ;
	int						iStcClkPos, iStcBlankPos ;
	int						cxScr, cyScr ;
	float					fcxDiv, fcyDiv, fDiv ;

	switch (message)
	{
	case WM_CREATE:
		InitOfnStruct (ofn, hwnd) ;
		// create statics who hold pic
		for (i = 0; i < 4; i++)
			for (j = 0; j < 4; j++)
			{
				hwndPic_Button[i][j] = 
					CreateWindow (TEXT ("Static"), NULL,
								WS_CHILD | WS_VISIBLE | SS_NOTIFY | SS_BITMAP | SS_SUNKEN,
								0, 0, 0, 0,
								hwnd, (HMENU) (4 * i + j), hInst, NULL) ;
				iStcPos[i][j] = 4 * i + j ;
			}

		// 使static控件不能接收mouse點擊消息
		bWinFlag = true ;

		// 開始使reset菜單無效
		hMenu = GetMenu (hwnd) ;
		EnableMenuItem (hMenu, IDM_GAME_RESET, MF_GRAYED) ;
		
		return 0 ;

	case WM_SIZE:
		// get client area size
		cxClient = LOWORD (lParam);
		cyClient = HIWORD (lParam);

		// move the statics to the new center
		for (i = 0; i < 4; i++)
			for (j = 0; j < 4; j++)
			{
				MoveWindow (hwndPic_Button[i][j], 
							(iStcPos[i][j] % 4) * cxClient / 4,
							(iStcPos[i][j] / 4) * cyClient / 4,
							cxClient / 4, cyClient / 4, TRUE);
			}
	
	case WM_PAINT:
		hdc = BeginPaint (hwnd, &ps) ;
		
		EndPaint (hwnd, &ps) ;		
		return 0 ;

	// 處理菜單命令
	case WM_COMMAND:
		switch (LOWORD (wParam))
		{	
		case IDM_GAME_RESET:
			/*==================================================
			游戲復位:因為Static已經加載圖像,窗口也得到調整,所
			以我們需要打開圖像時,每個Static的位置,在這里恢復
			Static的位置就行了。如果以后加入計時功能,就需要復位
			開始時間。
			==================================================*/
			// 恢復初始Static位置信息
			for (i = 0; i < 4; i++)
				for (j = 0; j < 4; j++)
				{
					iStcPos[i][j] = iStcPosSave[i][j] ;
					// 移動Static控件回到初始位置
					MoveWindow (hwndPic_Button[i][j], 
							(iStcPos[i][j] % 4) * cxClient / 4,
							(iStcPos[i][j] / 4) * cyClient / 4,
							cxClient / 4, cyClient / 4, TRUE);
				}

			bWinFlag = false ;

			return 0 ;

        case IDM_PIC_OPEN:
			// 顯示打開文件對話框
			if (!GetOpenFileName (&ofn))
				return 0 ;
			
			// 如果已經有一個DIB,刪除它
			if (hBitmap)
			{
				DeleteObject (hBitmap) ;
				hBitmap = NULL ;
			}
			
			// 從DIB創建DDB
			SetCursor (LoadCursor (NULL, IDC_WAIT)) ;	// 使用漏斗指針
			ShowCursor (TRUE) ;
			
			hdc = GetDC (hwnd) ;
			hBitmap = CreateBitmapObjectFromDibFile (hdc, szFileName) ;
			ReleaseDC (hwnd, hdc) ;
			
			ShowCursor (FALSE) ;
			SetCursor (LoadCursor (NULL, IDC_ARROW)) ;	// 恢復箭頭指針
			
			// 使客戶區無效以便稍后重繪
			InvalidateRect (hwnd, NULL, TRUE) ;
			
			if (hBitmap == NULL)
			{
				// 如果不能載入DIB文件,顯示錯誤消息
				MessageBox (hwnd, TEXT ("Cannot load DIB file"), 
							szAppName, MB_OK | MB_ICONEXCLAMATION) ;
			}
			else
			{
				/*==================================================
				在調整窗口大小之前隨機安排Static控件的位置,以便調整
				窗口的時候也隨機產生了Static的布局。注意分割后的圖像
				仍然是按照順序(id)分配給Static的,隨機的只是位置。
				==================================================*/
				srand ( (unsigned int) time (NULL));	// for random seed

				int iRanA, iRanB ;
				for (i = 0; i < 32; i++)
				{
					// 得到 0 -- 16 之間的兩個隨機數
					iRanA = rand( ) % 16 ;
					do
					{
						iRanB = rand( ) % 16 ;
					}
					while (iRanA == iRanB);

					// 隨機調整 Note: index = id   XXX[index] = pos
					iStcBlankPos = iStcPos[iRanA / 4][iRanA % 4] ;
					iStcPos[iRanA / 4][iRanA % 4] = iStcPos[iRanB / 4][iRanB % 4] ;
					iStcPos[iRanB / 4][iRanB % 4] = iStcBlankPos ;
				}

				// 保存開始狀態
				for (i = 0; i < 4; i++)
					for (j = 0; j < 4; j++)
					{
						iStcPosSave[i][j] = iStcPos[i][j] ;

						MoveWindow (hwndPic_Button[i][j], 
							(iStcPos[i][j] % 4) * cxClient / 4,
							(iStcPos[i][j] / 4) * cyClient / 4,
							cxClient / 4, cyClient / 4, TRUE);
					}


				/*==================================================
								調整窗口大小以適應圖像
				==================================================*/
				GetWindowRect (hwnd, &rcWin);
				GetClientRect (hwnd, &rcClient);

				GetObject (hBitmap, sizeof (BITMAP), &bitmap) ;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜桃av噜噜一区| 国产精品1区二区.| 久久er99精品| 在线观看免费视频综合| 精品国产乱码91久久久久久网站| 亚洲国产精品国自产拍av| 日本色综合中文字幕| 91一区二区在线观看| 精品免费国产二区三区| 亚洲午夜国产一区99re久久| 成人黄页在线观看| 日韩一区二区三区电影| 亚洲制服丝袜在线| 99综合电影在线视频| wwwwww.欧美系列| 日韩国产欧美在线播放| 欧美亚洲国产一区二区三区va| 国产日产欧美一区| 国内精品久久久久影院薰衣草| 91精品欧美福利在线观看| 亚洲精品欧美二区三区中文字幕| 成人性色生活片| 久久精品人人做人人综合| 麻豆精品一区二区三区| 日韩三级免费观看| 天天综合网天天综合色| 欧美午夜一区二区三区免费大片| 中文字幕日本乱码精品影院| 国产成人精品网址| 国产人伦精品一区二区| 国内久久精品视频| 久久综合资源网| 狠狠色丁香婷综合久久| 欧美精品一区二区三区蜜桃视频 | 另类小说色综合网站| 欧美伦理电影网| 午夜视频在线观看一区二区| 欧美日韩在线亚洲一区蜜芽| 午夜亚洲福利老司机| 欧美日韩国产高清一区二区三区| 亚洲一区二区三区在线| 欧美丰满嫩嫩电影| 日韩不卡一区二区| 日韩欧美电影在线| 国产一区二区导航在线播放| 国产日韩欧美电影| 99久久精品免费精品国产| 亚洲伊人伊色伊影伊综合网| 欧美日韩精品一区视频| 麻豆精品视频在线观看视频| 久久亚洲综合色| 国产精品亚洲综合一区在线观看| 日韩精品中文字幕在线一区| 国产suv精品一区二区6| 国产精品久久久久久久久图文区 | 欧美日韩一区二区在线观看 | 欧美哺乳videos| 精品国产免费久久| 亚洲国产精品久久人人爱| 日本aⅴ亚洲精品中文乱码| 91免费视频大全| 91精品国产91久久久久久一区二区 | 在线观看91av| 91精品国产高清一区二区三区| 一个色综合av| 亚洲视频在线观看一区| 成人av在线一区二区| 色视频欧美一区二区三区| 欧美一区二区精品| 日本一区二区三区在线不卡| 一区二区在线免费| 亚洲成国产人片在线观看| 日韩中文字幕亚洲一区二区va在线| 人人精品人人爱| 国产不卡在线一区| 欧美区在线观看| 欧美猛男男办公室激情| 欧美日韩一区二区三区不卡| 国产精品传媒在线| 日韩和欧美一区二区三区| 国产1区2区3区精品美女| 91论坛在线播放| 欧美亚洲国产一区在线观看网站 | 亚洲免费观看在线观看| 琪琪一区二区三区| 久久久亚洲欧洲日产国码αv| 丝袜亚洲另类丝袜在线| 337p亚洲精品色噜噜噜| 久久综合色婷婷| 国产女主播在线一区二区| 亚洲乱码国产乱码精品精小说| 亚洲国产一区二区三区青草影视| 秋霞电影网一区二区| 欧美色成人综合| 综合激情网...| 亚洲欧美视频在线观看视频| 一本色道a无线码一区v| 国产成人在线免费| 爽好多水快深点欧美视频| 国产精品久久久久影院亚瑟| 精品国产三级电影在线观看| 欧美视频中文字幕| 94-欧美-setu| 国产成人精品一区二区三区四区 | 色悠悠亚洲一区二区| 精品系列免费在线观看| 日韩av电影天堂| 一区二区三区在线免费观看| 国产精品美女久久福利网站| 欧美精品一区二区三区四区 | 亚洲高清免费观看高清完整版在线观看| 亚洲精品在线免费观看视频| 欧美一区二区三区小说| 91精品久久久久久久99蜜桃| 欧美精品九九99久久| 欧美日韩www| 欧美午夜一区二区三区| 精品视频色一区| 色偷偷久久人人79超碰人人澡| 成人激情文学综合网| 成人av综合在线| 99久久精品免费看国产| 91免费国产在线观看| 色偷偷一区二区三区| 欧美午夜电影网| 欧美日韩一区二区在线观看视频 | 久久久亚洲精华液精华液精华液| 国产黄色成人av| 精品欧美久久久| 国产精品卡一卡二| 毛片不卡一区二区| 偷拍亚洲欧洲综合| 夜色激情一区二区| 亚洲精品五月天| 欧美一级片在线观看| 欧美人成免费网站| 欧美成人精品二区三区99精品| 欧美日韩电影一区| a级精品国产片在线观看| 国产成人综合精品三级| 国产日本欧洲亚洲| 欧美精选一区二区| 日韩女优av电影在线观看| 26uuu国产电影一区二区| 国产日韩欧美制服另类| 综合久久久久久久| 日本在线不卡一区| 国产精品69毛片高清亚洲| 成人激情免费视频| 欧美亚州韩日在线看免费版国语版| 欧美精品一卡两卡| 久久综合九色综合欧美亚洲| 国产精品欧美极品| 亚洲午夜久久久久久久久电影院| 久久99国产精品久久| 不卡av在线网| 国产一本一道久久香蕉| 欧美第一区第二区| 丝袜亚洲另类欧美| 丁香婷婷综合激情五月色| 欧美群妇大交群的观看方式| 中文字幕制服丝袜成人av| 国产精品一级黄| 欧美综合在线视频| 久久久久亚洲蜜桃| 国产成人午夜精品影院观看视频| 日韩一区二区免费在线观看| 日本系列欧美系列| 日韩一区二区精品在线观看| 日韩不卡手机在线v区| 亚洲精品一线二线三线无人区| 国产九色精品成人porny | 国产精品久久久久久久浪潮网站| 粉嫩一区二区三区在线看 | 亚洲一区在线视频| 777久久久精品| proumb性欧美在线观看| 国内精品伊人久久久久av影院| 国产欧美一区二区精品性色超碰| 国产麻豆91精品| 中文字幕国产一区| 国产91精品久久久久久久网曝门 | 免费xxxx性欧美18vr| 色综合天天视频在线观看| 久久影院视频免费| 偷偷要91色婷婷| 在线观看欧美日本| 国产精品久久毛片a| 加勒比av一区二区| 在线成人小视频| 一区二区三区四区亚洲| 国产成人av一区二区三区在线| 精品视频在线免费看| 国产精品麻豆久久久| 亚洲天堂2014| 色视频欧美一区二区三区| 欧美视频完全免费看| 91亚洲精品一区二区乱码| 精品午夜一区二区三区在线观看 | 91精品国产手机|