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

回到顶部