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

📄 mouse.cpp

📁 一个很好的游戏对初学者有很好的帮助
💻 CPP
字号:
#include "stdafx.h"
#include "resource.h"
#include "stdlib.h"
#include "time.h"
#include "stdio.h"
#include "mmsystem.h"
#include "shellapi.h"
#pragma comment(lib,"winmm.lib")
#define EACHNUM 20

BOOL flag;
int bmpposX[16];
int bmpposY[16];
HINSTANCE hInst;
static int only;
static UINT dead,grade,lost;
static BOOL blost,begin;
UINT raflag;
HWND hwnd;
static BOOL paush;

void initgame(HWND hw,UINT ra,HMENU hmenu);
BOOL APIENTRY ABOUT(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam);
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
void BeginCreate(UINT de,UINT gr);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
	MSG msg;
	HWND hwn;
	static TCHAR szAppName[]="MOUSE";

	WNDCLASS wndclass;
	wndclass.style =CS_HREDRAW|CS_VREDRAW;
	wndclass.lpfnWndProc =WndProc;
	wndclass.cbClsExtra =0;
	wndclass.cbWndExtra =DLGWINDOWEXTRA;
	wndclass.hInstance =hInstance;
	wndclass.hIcon =LoadIcon(hInstance,szAppName);
	wndclass.hCursor =LoadCursor(NULL,IDC_ARROW);
	wndclass.hbrBackground =(HBRUSH)(COLOR_BTNFACE+1);
	wndclass.lpszMenuName =MAKEINTRESOURCE(IDR_MENU1);
	wndclass.lpszClassName =szAppName;

	if(!RegisterClass(&wndclass))
	{
		MessageBox(NULL,"This programe can't requite in Windows NT\n",szAppName,MB_OK|MB_ICONERROR);
	}
	hInst=hInstance;
	hwn=CreateDialog(hInstance,szAppName,NULL,NULL); 
	if(hwn==NULL)
	{
		MessageBox(NULL,"Create window fail!","fail",MB_OK);
		return 0;
	}
	hwnd=hwn;
	ShowWindow(hwnd,iCmdShow);
	BeginCreate(0,1);
	while(GetMessage(&msg,NULL,0,0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return 0;
}

LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)
{
	int x,y,cx,cy;
	RECT rs;
	RECT rsbmp;
	HDC hdc;
	HBRUSH brush,oldbrush;
	int i,j;
	int k;
	UINT pos;
	LOGPEN pen;
	HPEN hpen,oldhpen;
	POINT point;
	POINT cursorpoint;
	UINT temp;
	static UINT timnum;
	static BOOL timeflag;
	static HMENU hmenu;
	static UINT level=IDC_ONE;
	switch(msg)
	{
	case WM_PAINT:
		PAINTSTRUCT ps;
		hdc=BeginPaint(hwnd,&ps);
		GetClientRect(hwnd,&rs);
		pen.lopnColor=RGB(0,0,0);
		pen.lopnStyle=PS_DOT;
		point.x=3;
		pen.lopnWidth=point;
		hpen=CreatePenIndirect(&pen);
		if(!hpen)
		{
			MessageBox(hwnd,"Create pen fail","fail",MB_OK);
			return false;
		}
		oldhpen=(HPEN)SelectObject(hdc,hpen);
		brush=(HBRUSH)GetStockObject(WHITE_BRUSH);
		oldbrush=(HBRUSH)SelectObject(hdc,brush);
		FillRect(hdc,&rs,brush);
		for(j=0;j<400;j=j+80)
		{
			MoveToEx(hdc,0,j,NULL);
			LineTo(hdc,320,j);
		}
		for(j=0;j<400;j=j+80)
		{
			MoveToEx(hdc,j,0,NULL);
			LineTo(hdc,j,320);
		}
		SelectObject(hdc,oldbrush);
		SelectObject(hdc,oldhpen);
	
		EndPaint(hwnd,&ps);
		break;
	case WM_CREATE:
		hmenu=GetMenu(hwnd);
		x=GetSystemMetrics(SM_CXSCREEN);
		y=GetSystemMetrics(SM_CYSCREEN);
		GetWindowRect(hwnd,&rs);
		cx=(x-(rs.right-rs.left))/2;
		cy=(y-(rs.bottom-rs.top))/2;
		SetWindowPos(hwnd,NULL,cx,cy,rs.right-rs.left,360,SWP_DRAWFRAME);
		srand((unsigned)time(NULL));		
		k=0;
		for(i=0;i<=240;i=i+80)
		{
			for(j=0;j<=240;j=j+80)
			{
				bmpposX[k]=j;
				bmpposY[k]=i;
				k++;
			}
		}
		timeflag=false;
		timnum=0;
		paush=true;
		break;
		return 0;
	case WM_TIMER:
		switch(LOWORD(wparam))
		{
		case 1:
			pos=(16*rand())/RAND_MAX;
			initgame(hwnd,pos,hmenu);
			break;
		case 2:
			if(!timeflag)
			{
				ShowWindow(GetDlgItem(hwnd,IDC_READY),SW_SHOW);
				PlaySound((LPCTSTR)IDR_WAVE1,GetModuleHandle(NULL),SND_ASYNC|SND_RESOURCE);
				timeflag=true;
			}
			else
			{
				ShowWindow(GetDlgItem(hwnd,IDC_READY),SW_HIDE);
				timeflag=false;
			}
			timnum++;
			if(timnum==6)
			{
				KillTimer(hwnd,2);
				timnum=0;
				timeflag=false;
				if(begin||only==7)
				{
					switch(grade)
					{
					case 1:
						temp=2000;
						break;
					case 2:
						temp=1500;
						break;
					case 3:
						temp=1000;
						break;
					case 4:
						temp=500;
						break;
					case 5:
						temp=400;
						break;
					case 6:
						temp=300;
						break;
					default:
						temp=300;
					}
					SetTimer(hwnd,1,temp,NULL);
				}
			}			
			break;
		}
		break;
	case WM_LBUTTONUP:
		if(begin)
		{
			SetCursor(LoadCursor(hInst,MAKEINTRESOURCE(IDC_CURSOR1)));
			GetCursorPos(&cursorpoint);
			ScreenToClient(hwnd,&cursorpoint);
			rsbmp.left=bmpposX[raflag]+12;
			rsbmp.right=bmpposX[raflag]+80-37;
			rsbmp.top=bmpposY[raflag]+7;
			rsbmp.bottom=bmpposY[raflag]+80-37;
			SetDlgItemInt(hwnd,IDC_TEST2,cursorpoint.x,FALSE);
			SetDlgItemInt(hwnd,IDC_TEST3,cursorpoint.y,FALSE);
			if(PtInRect(&rsbmp,cursorpoint))
			{
				blost=true;
				dead++;
				SetDlgItemInt(hwnd,IDC_DEAD,dead,FALSE);
				SetDlgItemInt(hwnd,IDC_NUM,dead*10,FALSE);
				flag=true;
				initgame(hwnd,raflag,hmenu);
				begin=false;
			}
		}
		return 0;
		break;
	case WM_LBUTTONDOWN:
		SetCursor(LoadCursor(hInst,MAKEINTRESOURCE(IDC_CURSOR2)));
		return 0;
		break;
	case WM_MOUSEMOVE:
		SetCursor(LoadCursor(hInst,MAKEINTRESOURCE(IDC_CURSOR1)));
		return 0;
		break;
	case WM_COMMAND:
		switch(LOWORD(wparam))
		{
		case IDC_ONE:
		case IDC_TWO:
		case IDC_THREE:
		case IDC_FOUR:
		case IDC_FIVE:
		case IDC_SIX:
			CheckMenuItem(hmenu,level,MF_UNCHECKED);
			level=LOWORD(wparam);
			grade=level-40006;
			SetDlgItemInt(hwnd,IDC_GRADE,grade,FALSE);
			CheckMenuItem(hmenu,level,MF_CHECKED);
			break;
		case IDC_BEGINGAME:
		case IDC_BUTTON1:
			EnableMenuItem(hmenu,IDC_PAUSHGAME,MF_ENABLED);
			EnableMenuItem(hmenu,IDC_CLOSEGAME,MF_ENABLED);
			EnableMenuItem(hmenu,IDC_BEGINGAME,MF_GRAYED);
			EnableMenuItem(hmenu,IDC_ONE,MF_GRAYED);
			EnableMenuItem(hmenu,IDC_TWO,MF_GRAYED);
			EnableMenuItem(hmenu,IDC_THREE,MF_GRAYED);
			EnableMenuItem(hmenu,IDC_FOUR,MF_GRAYED);
			EnableMenuItem(hmenu,IDC_FIVE,MF_GRAYED);
			EnableMenuItem(hmenu,IDC_SIX,MF_GRAYED);
			EnableMenuItem(hmenu,IDC_PAI,MF_GRAYED);			

			SetTimer(hwnd,2,400,NULL);
			pos=(16*rand())/RAND_MAX;
			BeginCreate(0,grade);
			EnableWindow(GetDlgItem(hwnd,IDC_BUTTON1),FALSE);
			EnableWindow(GetDlgItem(hwnd,IDC_BUTTON2),TRUE);
			EnableWindow(GetDlgItem(hwnd,IDC_BUTTON3),TRUE);
			begin=true;
			return 0;
			break;
		case IDC_CLOSEGAME:
		case IDC_BUTTON2:
			ModifyMenu(hmenu,IDC_COON,NULL,IDC_PAUSHGAME,"暂停游戏    F3");
			EnableMenuItem(hmenu,IDC_PAUSHGAME,MF_GRAYED);
			EnableMenuItem(hmenu,IDC_CLOSEGAME,MF_GRAYED);
			EnableMenuItem(hmenu,IDC_BEGINGAME,MF_ENABLED);

			EnableMenuItem(hmenu,IDC_ONE,MF_ENABLED);
			EnableMenuItem(hmenu,IDC_TWO,MF_ENABLED);
			EnableMenuItem(hmenu,IDC_THREE,MF_ENABLED);
			EnableMenuItem(hmenu,IDC_FOUR,MF_ENABLED);
			EnableMenuItem(hmenu,IDC_FIVE,MF_ENABLED);
			EnableMenuItem(hmenu,IDC_SIX,MF_ENABLED);
			EnableMenuItem(hmenu,IDC_PAI,MF_ENABLED);

			SetWindowText(GetDlgItem(hwnd,IDC_BUTTON3),"暂停");
			paush=true;		
			begin=false;
			KillTimer(hwnd,1);
			BeginCreate(0,1);
			return 0;
			break;
		case IDC_PAI:
			MessageBox(hwnd,"演示版无此功能,呵。。。","正在加紧制作",MB_OK);
			return 0;
			break;
		case IDC_ABOUT:
			if(paush)
				SendMessage(hwnd,WM_COMMAND,(WPARAM)IDC_BUTTON3,0);
			DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG1),hwnd,(DLGPROC)ABOUT);
			return 0;
			break;
		case IDC_EXITGAME:
			KillTimer(hwnd,1);
			PostQuitMessage(0);
			return 0;
			break;
		case IDC_PAUSHGAME:
		case IDC_COON:
		case IDC_BUTTON3:
			if(paush)
			{
				ModifyMenu(hmenu,IDC_PAUSHGAME,NULL,IDC_COON,"继续游戏    F3");
				KillTimer(hwnd,1);
				SetWindowText(GetDlgItem(hwnd,IDC_BUTTON3),"继续");
				paush=false;
				begin=false;
			}
			else
			{
				switch(grade)
				{
				case 1:
					temp=2000;
					break;
				case 2:
					temp=1500;
					break;
				case 3:
					temp=1000;
					break;
				case 4:
					temp=500;
					break;
				case 5:
					temp=400;
					break;
				case 6:
					temp=300;
					break;
				default:
					temp=300;
				}
				ModifyMenu(hmenu,IDC_COON,NULL,IDC_PAUSHGAME,"暂停游戏    F3");
				SetTimer(hwnd,1,temp,NULL);
				SetWindowText(GetDlgItem(hwnd,IDC_BUTTON3),"暂停");
				paush=true;
				begin=true;
			}
			return 0;
			break;
		}
		break;
	case WM_DESTROY:  
		KillTimer(hwnd,1);
		PostQuitMessage(0);
		return 0;
		break;
	}
	return DefWindowProc(hwnd,msg,wparam,lparam);
}

void initgame(HWND hw,UINT ra,HMENU hmenu)
{
	HBRUSH br,oldbr;
	HDC hdc,hdcbmp;
	HBITMAP hbmp,holdbmp;
	RECT rc;
	char str[MAX_PATH];
	char filename[MAX_PATH];
	hdc=GetDC(hw);
		
	SetDlgItemInt(hw,IDC_TEST,raflag,TRUE);
	br=(HBRUSH)GetStockObject(WHITE_BRUSH);
	oldbr=(HBRUSH)SelectObject(hdc,br);
	rc.left=bmpposX[raflag]+3;
	rc.right=bmpposX[raflag]+80-3;
	rc.top=bmpposY[raflag]+3;
	rc.bottom=bmpposY[raflag]+80-3;
	FillRect(hdc,&rc,br);
	SelectObject(hdc,oldbr);

	if(!flag)
	{
		only--;		
		if(only<0)
		{
			if(lost<5)
			{
				KillTimer(hw,1);
				grade++;								
				BeginCreate(dead,grade);		
				sprintf(str,"第%d局   准备。。。",grade);					
				SetWindowText(GetDlgItem(hw,IDC_READY),str);
				SetTimer(hw,2,400,NULL);
				EnableWindow(GetDlgItem(hwnd,IDC_BUTTON1),FALSE);
				EnableWindow(GetDlgItem(hwnd,IDC_BUTTON2),TRUE);
				EnableWindow(GetDlgItem(hwnd,IDC_BUTTON3),TRUE);
				begin=true;
				return;
			}
			else
			{
				KillTimer(hw,1);
				strcpy(str,"游  戏  结  束");
				SetWindowText(GetDlgItem(hw,IDC_READY),str);
				ShowWindow(GetDlgItem(hw,IDC_READY),SW_SHOW);
				begin=false;
				EnableMenuItem(hmenu,IDC_PAUSHGAME,MF_GRAYED);
				EnableMenuItem(hmenu,IDC_CLOSEGAME,MF_GRAYED);
				EnableMenuItem(hmenu,IDC_BEGINGAME,MF_ENABLED);
				EnableMenuItem(hmenu,IDC_ONE,MF_ENABLED);
				EnableMenuItem(hmenu,IDC_TWO,MF_ENABLED);
				EnableMenuItem(hmenu,IDC_THREE,MF_ENABLED);
				EnableMenuItem(hmenu,IDC_FOUR,MF_ENABLED);
				EnableMenuItem(hmenu,IDC_FIVE,MF_ENABLED);
				EnableMenuItem(hmenu,IDC_SIX,MF_ENABLED);
				EnableMenuItem(hmenu,IDC_PAI,MF_ENABLED);
				EnableWindow(GetDlgItem(hwnd,IDC_BUTTON1),TRUE);
				EnableWindow(GetDlgItem(hwnd,IDC_BUTTON2),FALSE);
				EnableWindow(GetDlgItem(hwnd,IDC_BUTTON3),FALSE);

				//GetCurrentDirectory(MAX_PATH,filename);
				//strcat(filename,"\\chimes.wav");
				//sndPlaySound(filename,SND_ASYNC);
				PlaySound((LPCTSTR)IDR_WAVE2,GetModuleHandle(NULL),SND_ASYNC|SND_RESOURCE);
				if(!blost)
				{
					lost++;
					SetDlgItemInt(hw,IDC_LOST,lost,FALSE);
					blost=false;
				}
				else
				{
					blost=false;
				}
				return;
			}
		}
		else
		{
			SetDlgItemInt(hw,IDC_ONLY,only,FALSE);
		}

		if(!blost)
		{
			lost++;
			SetDlgItemInt(hw,IDC_LOST,lost,FALSE);
			blost=false;
		}
		else
		{
			blost=false;
		}
		GetCurrentDirectory(MAX_PATH,filename);
		strcat(filename,"\\put.wav");
		//sndPlaySound(filename,SND_ASYNC);
		PlaySound("put",GetModuleHandle(NULL),SND_RESOURCE|SND_RESOURCE);
		hdcbmp=CreateCompatibleDC(hdc);
		hbmp=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP1));
		holdbmp=(HBITMAP)SelectObject(hdcbmp,hbmp);
		BitBlt(hdc,bmpposX[ra]+20,bmpposY[ra]+20,50,50,hdcbmp,0,0,SRCCOPY);
		DeleteObject(SelectObject(hdcbmp,holdbmp));
		DeleteObject(hdcbmp);
		begin=true;
	}
	else
	{
		//GetCurrentDirectory(MAX_PATH,filename);
		//strcat(filename,"\\send.wav");
		//sndPlaySound(filename,SND_ASYNC);
		PlaySound((LPCTSTR)IDR_WAVE3,GetModuleHandle(NULL),SND_ASYNC|SND_RESOURCE);
		hdcbmp=CreateCompatibleDC(hdc);
		hbmp=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP2));
		holdbmp=(HBITMAP)SelectObject(hdcbmp,hbmp);
		BitBlt(hdc,bmpposX[ra]+20,bmpposY[ra]+20,50,50,hdcbmp,0,0,SRCCOPY);
		DeleteObject(SelectObject(hdcbmp,holdbmp));
		DeleteObject(hdcbmp);
		
	}
	raflag=ra;
	flag=false;
}

void BeginCreate(UINT de,UINT gr)
{
	char temp[MAX_PATH];
	sprintf(temp,"第%u局   准备。。。",gr);
	flag=false;
	only=EACHNUM;
	lost=-1;
	dead=de;
	begin=false;
	blost=false;
	grade=gr;
	EnableWindow(GetDlgItem(hwnd,IDC_BUTTON1),TRUE);
	EnableWindow(GetDlgItem(hwnd,IDC_BUTTON2),FALSE);
	EnableWindow(GetDlgItem(hwnd,IDC_BUTTON3),FALSE);
	SetWindowText(GetDlgItem(hwnd,IDC_READY),temp);
	SetDlgItemInt(hwnd,IDC_GRADE,grade,FALSE);
	SetDlgItemInt(hwnd,IDC_NUM,de*10,FALSE);
	SetDlgItemInt(hwnd,IDC_DEAD,dead,FALSE);
	SetDlgItemInt(hwnd,IDC_LOST,lost+1,FALSE);
	SetDlgItemInt(hwnd,IDC_ONLY,only,FALSE);
	SetWindowText(GetDlgItem(hwnd,IDC_READY2),"当前级别:");
	SetWindowText(GetDlgItem(hwnd,IDC_READY3),"当前总分:");
	SetWindowText(GetDlgItem(hwnd,IDC_READY4),"打死:");
	SetWindowText(GetDlgItem(hwnd,IDC_READY5),"走脱:");
	SetWindowText(GetDlgItem(hwnd,IDC_READY6),"还剩:");
}

BOOL APIENTRY ABOUT(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	static RECT rect,rect1;
	POINT point;
	static HFONT font,oldfont;
	static HBRUSH brush;
	LOGBRUSH logbrush;
	static BOOL flag;
	switch(message)
	{
	case WM_PAINT:
		PAINTSTRUCT ps;
		hdc=BeginPaint(hDlg,&ps);
		SetTextColor(hdc,RGB(0,0,0));
		SetBkMode(hdc,TRANSPARENT);
		TextOut(hdc,287,125,"jgr8224@sina.com",strlen("jgr8224@sina.com"));
		EndPaint(hDlg,&ps);
		return 0;
		break;
	case WM_INITDIALOG:
		logbrush.lbColor=RGB(191,191,191);
		brush=CreateBrushIndirect(&logbrush);
		rect.top=125;
		rect.left=287;
		rect.right=403;
		rect.bottom=135;
		rect1=rect;
		rect1.right+=20;
		rect1.bottom+=10;
		font=CreateFont(15,8,0,0,450,1,0,0,134,3,2,1,2,"黑体");
		flag=true;
		return 0;
		break;
	case WM_COMMAND:
		switch(LOWORD(wParam))
		{
		case IDOK:
			EndDialog(hDlg,TRUE);
			return true;
			break;
		}
		break;
	case WM_LBUTTONDOWN:
		if(!flag)
		{
			ShellExecute(0,NULL,"mailto:jgr8224@sina.com","hello","hello",SW_NORMAL);
		}

		return 0;
		break;
	case WM_MOUSEMOVE:		
		point.x=LOWORD(lParam);
		point.y=HIWORD(lParam);
		if(PtInRect(&rect,point))
		{
			hdc=GetDC(hDlg);
			SelectObject(hdc,brush);
			FillRect(hdc,&rect1,brush);
			SetTextColor(hdc,RGB(0,160,0));
			SetBkMode(hdc,TRANSPARENT);			
			oldfont=(HFONT)SelectObject(hdc,font);
			TextOut(hdc,287,125,"jgr8224@sina.com",strlen("jgr8224@sina.com"));
			SelectObject(hdc,oldfont);
			SetCursor(LoadCursor(hInst,MAKEINTRESOURCE(IDC_CURSOR3)));
			flag=false;
			ReleaseDC(hDlg,hdc);
		}
		else
		{
			if(!flag)
			{
				hdc=GetDC(hDlg);
				SelectObject(hdc,brush);
				FillRect(hdc,&rect1,brush);
				SetTextColor(hdc,RGB(0,0,0));
				SetBkMode(hdc,TRANSPARENT);
				TextOut(hdc,287,125,"jgr8224@sina.com",strlen("jgr8224@sina.com"));
				flag=true;
				ReleaseDC(hDlg,hdc);
			}
		}
		return 0;
		break;

	case WM_CLOSE:
		EndDialog(hDlg,true);
		return true;
		break;
	}
	return 0;
}

⌨️ 快捷键说明

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