C++编写简单的打靶游戏
首次自己写程序,很不完善,还有许多问题需要解决。。。见谅见谅
#define GDIPVER 0x0110
#define WIN32_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>
#pragma comment(lib, "winmm.lib")
#pragma comment(lib,"GdiPlus.lib")
using namespace Gdiplus;
#define WINDOW_WIDTH 800
#define WINDOW_HEIGHT 600
static int cxball,cyball;
VOID OnPaint(HDC hDC,int x,int y)
{
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();//获取笔宽
}
LRESULT CALLBACK WinProc(HWND hWnd,
UINT msg,
WPARAM wparam,
LPARAM lparam)
{
static PMSG pmsg;
switch(msg)
{
PAINTSTRUCT ps ;
HDC hDC;
static int cxClient, cyClient ;
static int cxcreat,cycreat;
static int times,score;
TCHAR szText[256];
case WM_CREATE:
{
hDC = GetDC(hWnd);
PlaySound(MAKEINTRESOURCE(IDR_WAVE1), hinstance_app, SND_RESOURCE | SND_ASYNC);
times = 9;
score = 0;
ReleaseDC(hWnd,hDC);
return(0);
} break;
case WM_SIZE:
{
cxClient = LOWORD (lparam) ;
cyClient = HIWORD (lparam) ;
return 0 ;
}
break;
case WM_LBUTTONDOWN :
{
switch (wparam)
{
case MK_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;
}
return 0;
}
break;
case WM_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;
case WM_DESTROY:
{
PlaySound(NULL, hinstance_app, SND_PURGE);
PostQuitMessage(0);
return(0);
} break;
default:break;
}
return (DefWindowProc(hWnd, msg, wparam, lparam));
}
INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, INT)
{
HWND hwnd;
ULONG_PTR GdiplusToken;
GdiplusStartupInput GdiplusStartupInput;
Status sResult = GdiplusStartup(&GdiplusToken, &GdiplusStartupInput, NULL);
if(sResult != Ok)return 0;
WNDCLASSEX WndClassEx =
{
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's game ~~"),
WS_OVERLAPPEDWINDOW| WS_VSCROLL,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
GetDesktopWindow(),
NULL,
WndClassEx.hInstance,
NULL);
ShowWindow(hwnd, SW_SHOWDEFAULT);
UpdateWindow(hwnd);
HDC hdc;
hdc = GetDC(hwnd);
srand(GetTickCount());
cxball = WINDOW_WIDTH/2;
cyball = WINDOW_HEIGHT/2;
RECT rect;
rect.left=0;
rect.bottom=600;
rect.right=800;
rect.top=0;
int xv = -4+rand()%8;
int yv = -4+rand()%8;
MSG Msg;
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;
}
else if (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);
return 0;
}
以上是 C++编写简单的打靶游戏 的全部内容, 来源链接: utcz.com/z/315372.html