⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gameloop.cpp

📁 我自己写的一个游戏主循环程序
💻 CPP
字号:
// GameLoop.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "stdlib.h"
#include "resource.h"
#include "time.h"

//全局变量
BOOL bRunning,bActive,bCaution;
int x,y;
RECT rect;

LRESULT CALLBACK WinProc(HWND,UINT,WPARAM,LPARAM);
void DrawScience(HWND hWnd);
void ShowPuase(HWND hWnd,HINSTANCE hInstance);
void ShowCaution(HWND hWnd,HINSTANCE hInstance);

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
	//初始化
	bRunning=TRUE;
	bActive=TRUE;
	bCaution=TRUE;
	x=y=0;
	srand(5);

	WNDCLASS wndclass;
	wndclass.cbClsExtra =0;
	wndclass.cbWndExtra =0;
	wndclass.hbrBackground =(HBRUSH)GetStockObject(4);
	wndclass.hCursor =LoadCursor(hInstance,MAKEINTRESOURCE(IDC_CURSOR2));
	wndclass.hIcon =NULL;
	wndclass.hInstance =hInstance;
	wndclass.lpfnWndProc =WinProc;
	wndclass.lpszClassName="NewWin";
	wndclass.lpszMenuName=(LPSTR)IDR_MENU1;
	wndclass.style =CS_HREDRAW|CS_VREDRAW;
	RegisterClass(&wndclass);
	HWND hWnd=CreateWindow(TEXT("NewWin"),TEXT("GameLoop"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,600,480,NULL,NULL,hInstance,NULL);
	ShowWindow(hWnd,SW_SHOW);
	MSG msg;
	while(bRunning)
	{
		if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
		{
			if(!GetMessage(&msg,NULL,0,0))    
					return   msg.wParam;  
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
		else if(!bActive)
		{
		 DrawScience(hWnd);
		}
		else
		{
		WaitMessage();
		}
	}
	return 0;
}

LRESULT CALLBACK WinProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{

		static HINSTANCE hInstance;
		switch(msg)
		{
		case WM_CREATE:
			hInstance=((LPCREATESTRUCT)lParam)->hInstance;
			SetTimer(hWnd,1,300,NULL);
			break;
		case WM_TIMER:
			if(bCaution) 
			{bCaution=FALSE;
				
				ShowCaution(hWnd,hInstance);
			}
			else
			{bCaution=TRUE;
			
				InvalidateRect(hWnd,NULL,true);
			}
			break;
		case WM_COMMAND:
			switch(LOWORD(wParam))
			{
			case ID_MENU_ITEM:
				PostQuitMessage(0);
				break;
			}
			break;
		case WM_KEYDOWN:
			switch(LOWORD(wParam))
			{
			case VK_UP:
				y-=5;
				break;
			case VK_LEFT:
				x-=5;
				break;
			case VK_RIGHT:
				x+=5;
				break;
			case VK_DOWN:
				y+=5;
				break;
			}
			InvalidateRect(hWnd,NULL,true);
			break;
		case WM_ACTIVATE:
			if(!bActive)	
			{
				KillTimer(hWnd,1);
				bActive=TRUE;
				ShowPuase(hWnd,hInstance);
				::SetWindowText (hWnd,TEXT("程序已暂停!"));
			}
			else
			{
				SetTimer(hWnd,1,300,NULL);
				InvalidateRect(hWnd,NULL,true);
				bActive=FALSE;
				::SetWindowText (hWnd,TEXT("程序运行中"));
			}
			
			break;
		case WM_DESTROY:
			PostQuitMessage(0);
			bRunning=FALSE;
			break;
		default:
			return DefWindowProc(hWnd,msg,wParam,lParam);
		}
return 0;
}
void DrawScience(HWND hWnd)
{
	rect.left =x;
	rect.right =120+x;

	rect.top =y;
	rect.bottom =120+y;
	HDC hdc=::GetDC (hWnd);
	HBRUSH brush=CreateSolidBrush(RGB(rand()%255,rand()%255,rand()%255));
	HBRUSH oldBrush=(HBRUSH)SelectObject(hdc,brush);
	::Ellipse (hdc,x,y,120+x,120+y );

	::DeleteObject (brush);
	DeleteDC(hdc);
	ReleaseDC(hWnd,hdc);
}
void ShowPuase(HWND hWnd,HINSTANCE hInstance)
{
	HDC hdc=::GetDC(hWnd);
	::SelectObject (hdc,GetStockObject(4));
	::Rectangle (hdc,150,130,500,280);
	HDC memDC;
	
	HBITMAP hBitmap;
	hBitmap=(HBITMAP)::LoadImage (hInstance,TEXT("C:\\Documents and Settings\\Administrator\\桌面\\temp\\pause.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
	memDC=::CreateCompatibleDC(hdc);
	SelectObject(memDC,hBitmap);
	
	BitBlt(hdc,200,150,238,57,memDC,0,0,SRCCOPY);
	ReleaseDC(hWnd,hdc);
	ReleaseDC(hWnd,hdc);
}
void ShowCaution(HWND hWnd,HINSTANCE hInstance)
{
	HDC hdc=::GetDC(hWnd);
	HDC memDC;
	
	HBITMAP hBitmap;
	hBitmap=(HBITMAP)::LoadImage (hInstance,TEXT("C:\\Documents and Settings\\Administrator\\桌面\\temp\\caution.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
	memDC=::CreateCompatibleDC(hdc);
	SelectObject(memDC,hBitmap);
	BitBlt(hdc,150,120,355,112,memDC,0,0,SRCCOPY);
	ReleaseDC(hWnd,hdc);
	ReleaseDC(hWnd,hdc);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -