C++编写简单的打靶游戏
首次自己写程序,很不完善,还有许多问题需要解决。。。见谅见谅
#defineGDIPVER0x0110
#defineWIN32_LEAN_AND_MEAN
#include<windows.h>
#include<ObjIdl.h>
#include<GdiPlus.h>
#include<windowsx.h>
#include<tchar.h>
#include<mmsystem.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include"resource.h"
#include<mmsystem.h>
#pragmacomment(lib,"winmm.lib")
#pragmacomment(lib,"GdiPlus.lib")
usingnamespaceGdiplus;
#defineWINDOW_WIDTH800
#defineWINDOW_HEIGHT600
staticintcxball,cyball;
VOIDOnPaint(HDChDC,intx,inty)
{
Graphics_g(hDC);
//构造画笔
Pen_p(
Color::Red,//颜色
2.0F);//笔宽(默认:1.0F)
_g.DrawEllipse(&_p,x,y,50,50);
//设置笔宽与颜色
_p.SetColor(Color(255,111,222,55));//设置颜色
_p.SetWidth(3.0F);//设置笔宽
//获得笔宽与颜色
Color_c;_p.GetColor(&_c);//获取颜色
REAL_r=_p.GetWidth();//获取笔宽
}
LRESULTCALLBACKWinProc(HWNDhWnd,
UINTmsg,
WPARAMwparam,
LPARAMlparam)
{
staticPMSGpmsg;
switch(msg)
{
PAINTSTRUCTps;
HDChDC;
staticintcxClient,cyClient;
staticintcxcreat,cycreat;
staticinttimes,score;
TCHARszText[256];
caseWM_CREATE:
{
hDC=GetDC(hWnd);
PlaySound(MAKEINTRESOURCE(IDR_WAVE1),hinstance_app,SND_RESOURCE|SND_ASYNC);
times=9;
score=0;
ReleaseDC(hWnd,hDC);
return(0);
}break;
caseWM_SIZE:
{
cxClient=LOWORD(lparam);
cyClient=HIWORD(lparam);
return0;
}
break;
caseWM_LBUTTONDOWN:
{
switch(wparam)
{
caseMK_LBUTTON:
hDC=GetDC(hWnd);
sprintf(szText,"得分为%d",score);
TextOut(hDC,900,240,szText,10);
times--;
sprintf(szText,"次数为%d",times);
TextOut(hDC,900,280,szText,8);
cxcreat=(int)LOWORD(lparam);//获取鼠标位置x坐标信息
cycreat=(int)HIWORD(lparam);//获取鼠标位置y坐标信息
SetBkMode(hDC,OPAQUE);
if(cxcreat>cxball-50&&cxcreat<cxball+50)
{
if(cycreat>cyball-50&&cycreat<cyball+50)
{
score+=100;
}
}
if(times<=0)
{
score=0;
times=0;
MessageBox(hWnd,TEXT("次数超过了"),TEXT("错误"),MB_ICONERROR);
}
ReleaseDC(hWnd,hDC);
break;
}
return0;
}
break;
caseWM_PAINT:
{
hDC=BeginPaint(hWnd,&ps);
MoveToEx(hDC,800,0,NULL);
LineTo(hDC,800,600);
MoveToEx(hDC,0,600,NULL);
LineTo(hDC,800,600);
EndPaint(hWnd,&ps);
return(0);
}break;
caseWM_DESTROY:
{
PlaySound(NULL,hinstance_app,SND_PURGE);
PostQuitMessage(0);
return(0);
}break;
default:break;
}
return(DefWindowProc(hWnd,msg,wparam,lparam));
}
INTWINAPIWinMain(HINSTANCEhInst,HINSTANCE,LPSTR,INT)
{
HWNDhwnd;
ULONG_PTRGdiplusToken;
GdiplusStartupInputGdiplusStartupInput;
StatussResult=GdiplusStartup(&GdiplusToken,&GdiplusStartupInput,NULL);
if(sResult!=Ok)return0;
WNDCLASSEXWndClassEx=
{
sizeof(WNDCLASSEX),
CS_HREDRAW|CS_VREDRAW,
WinProc,
0L,
0L,
GetModuleHandle(NULL),
LoadIcon(hInst,MAKEINTRESOURCE(IDI_ICON1)),
LoadCursor(hInst,MAKEINTRESOURCE(IDC_CURSOR1)),
(HBRUSH)GetStockObject(WHITE_BRUSH),
NULL,
_T("SimpleWindowClass"),
LoadIcon(hInst,MAKEINTRESOURCE(IDI_ICON1))
};
RegisterClassEx(&WndClassEx);
hwnd=CreateWindow(
_T("SimpleWindowClass"),
_T("pan'sgame~~"),
WS_OVERLAPPEDWINDOW|WS_VSCROLL,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
GetDesktopWindow(),
NULL,
WndClassEx.hInstance,
NULL);
ShowWindow(hwnd,SW_SHOWDEFAULT);
UpdateWindow(hwnd);
HDChdc;
hdc=GetDC(hwnd);
srand(GetTickCount());
cxball=WINDOW_WIDTH/2;
cyball=WINDOW_HEIGHT/2;
RECTrect;
rect.left=0;
rect.bottom=600;
rect.right=800;
rect.top=0;
intxv=-4+rand()%8;
intyv=-4+rand()%8;
MSGMsg;
do
{
GetMessage(&Msg,NULL,0U,0U);
TranslateMessage(&Msg);
DispatchMessage(&Msg);
OnPaint(hdc,cxball,cyball);
cxball+=xv;
cyball+=yv;
if(cxball<0||cxball>WINDOW_WIDTH-50)
{
xv=-xv;
cxball+=xv;
}
elseif(cyball<0||cyball>WINDOW_HEIGHT-50)
{
yv=-yv;
cyball+=yv;
}
OnPaint(hdc,cxball,cyball);
Sleep(10);
InvalidateRect(hwnd,&rect,TRUE);
}while(Msg.message!=WM_QUIT);
ReleaseDC(hwnd,hdc);
UnregisterClass(
_T("SimpleWindowClass"),
WndClassEx.hInstance);
GdiplusShutdown(GdiplusToken);
return0;
}
以上就是本文给大家分享的C++编写的打靶小游戏的代码了,希望大家能够喜欢。