#include<windows.h>
#include<stdio.h>
#include<time.h>
#include"function.h"
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,UINT wparam,UINT lparam);
int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hpre,LPSTR lPstring,int ncmd)
{
MSG msg;
WNDCLASS wnd;
wnd.hIcon=LoadIcon(hinstance,"DICO");
wnd.hCursor=LoadCursor(NULL,IDC_ARROW);
wnd.cbClsExtra=0;
wnd.cbWndExtra=0;
wnd.hbrBackground=NULL;
wnd.hInstance=hinstance;
wnd.lpfnWndProc=(WNDPROC)WndProc;
wnd.lpszClassName="Game";
wnd.lpszMenuName=NULL;
wnd.style=CS_HREDRAW|CS_VREDRAW;
if(!RegisterClass(&wnd))
return FALSE;
hwnd=CreateWindow("Game","鸭子跳跃",WS_OVERLAPPED|WS_MINIMIZEBOX|WS_SYSMENU,400,50,500,580,NULL,NULL,hinstance,NULL);
ShowWindow(hwnd,ncmd);
UpdateWindow(hwnd);
srand((unsigned)time(NULL));
hdc=GetDC(hwnd);
hdcmem=CreateCompatibleDC(hdc);
hdcm=CreateCompatibleDC(hdc);
bufdc=CreateCompatibleDC(hdc);
Loadmap(hinstance);
SelectObject(hdcmem,hBm);
SelectObject(bufdc,hbk);
fp=fopen("Record","rb");
if(fp)
{
fread(mode,sizeof(int),4,fp);//读取记录
fclose(fp);
}
Menu=1;
Tn=1;
BTn=0;
t1=GetTickCount();
int i,k,high;
high=40;
do
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
t2=GetTickCount();
if(t2-t1>=50)
{
if(Menu)
{
SelectObject(hdcmem,hf);
SelectObject(hdcm,Bkg[Tn].hbm);
BitBlt(hdcmem,0,0,Bkg[Tn].bm.bmWidth,Bkg[Tn].bm.bmHeight,hdcm,0,0,SRCCOPY);
for(i=0,k=0;i<18;i++)
{
if(U[i].TestShow())
{
U[i].SetPoint(high+k*60);
U[i].PaintUI();
k++;
}
}
if(help||record)
{
HPEN hp;
HBRUSH hbr;
hp=CreatePen(PS_SOLID,0,RGB(0,0,0));
hbr=CreateSolidBrush(RGB(160,215,100));
SelectObject(hdcmem,hp);
SelectObject(hdcmem,hbr);
RoundRect(hdcmem,100,100,400,360,10,10);
DeleteObject(hp);
DeleteObject(hbr);
SetBkMode(hdcmem,TRANSPARENT);
SetTextColor(hdcmem,RGB(0,0,0));
SelectObject(hdcmem,hftxt);
if(help)
for(i=0;i<6;i++)
TextOut(hdcmem,110,120+i*30,helptxt[i],strlen(helptxt[i]));
else
{
char txt[40];
for(i=0;i<4;i++)
{
sprintf(txt,"%s%d",scoretxt[i],mode[i]);
TextOut(hdcmem,130,140+i*35,txt,strlen(txt));
}
}
SelectObject(hdcmem,hf);
U[18].PaintUI();
}
SelectObject(hdcm,Duck[0][1].chm);
BitBlt(hdcmem,70,320,Duck[0][1].bm.bmWidth,Duck[0][1].bm.bmHeight,hdcm,0,0,SRCAND);
SelectObject(hdcm,Duck[0][1].hbm);
BitBlt(hdcmem,70,320,Duck[0][1].bm.bmWidth,Duck[0][1].bm.bmHeight,hdcm,0,0,SRCPAINT);
BitBlt(hdc,0,0,500,1000,hdcmem,0,0,SRCCOPY);
}
else
{
Move();
Paint();
}
t1=t2;
}
}
}while(msg.message!=WM_QUIT);
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,UINT wparam,UINT lparam)
{
int i,j;
POINT p;
switch(msg)
{
case WM_MOUSEMOVE:
p.x=LOWORD(lparam);
p.y=HIWORD(lparam);
i=19;
if(record||help)
{
i--;
if(U[i].MouseInUI(p))
U[i].SetColor(1);
else
U[i].SetColor(0);
}
else
{
for(i--;i>=0;i--)
{
if(U[i].TestShow()&&U[i].MouseInUI(p))
{
U[i].SetColor(1);
if(i<=2)
Tn=i;
else if(i<=9)
BTn=i;
break;
}
else
U[i].SetColor(0);
}
}
for(i--;i>=0;i--)
U[i].SetColor(0);
return 0;
case WM_LBUTTONDOWN:
for(i=18;i>=0;i--)
{
if(U[i].TestShow()&&U[i].TestColor())
{
U[i].Respond();
U[i].SetColor(0);
break;
}
}
return 0;
case WM_KEYDOWN:
switch(wparam)
{
case VK_LEFT:
duck.Dn=0;
duck.a1=-3;
break;
case VK_RIGHT:
duck.Dn=1;
duck.a1=3;
break;
case VK_SPACE:
atk=1;
break;
}
return 0;
case WM_KEYUP:
switch(wparam)
{
case VK_LEFT:
duck.v1=0;
duck.a1=0;
break;
case VK_RIGHT:
duck.v1=0;
duck.a1=0;
break;
}
return 0;
case WM_DESTROY:
DeleteObject(hf);
DeleteObject(hftxt);
DeleteObject(hBm);
DeleteObject(hpr);
DeleteObject(Chpr);
DeleteObject(hbk);
DeleteObject(Green.hbm);
DeleteObject(Green.chm);
DeleteObject(Blue.hbm);
DeleteObject(Blue.chm);
DeleteObject(Gray.hbm);
DeleteObject(Gray.chm);
DeleteObject(White.hbm);
DeleteObject(White.chm);
DeleteObject(Bullet.hbm);
DeleteObject(Bullet.chm);
DeleteObject(Attack.hbm);
DeleteObject(Attack.chm);
for(i=0;i<10;i++)
{
if(i<2)
{
for(j=0;j<2;j++)
{
DeleteObject(Prop_help[i][j].hbm);
DeleteObject(Prop_help[i][j].chm);
}
}
if(i<3)
{
DeleteObject(Bkg[i].hbm);
DeleteObject(Bkg[i].chm);
}
if(i<4)
{
DeleteObject(Brown[i].hbm);
DeleteObject(Brown[i].chm);
}
if(i<8)
{
DeleteObject(Time[i].hbm);
DeleteObject(Time[i].chm);
}
if(i<5)
{
DeleteObject(Prop_take[i].hbm);
DeleteObject(Prop_take[i].chm);
for(j=0;j<2;j++)
{
DeleteObject(Duck[i][j].hbm);
DeleteObject(Duck[i][j].chm);
}
}
if(i<7)
{
DeleteObject(Monster[i].hbm);
DeleteObject(Monster[i].chm);
}
DeleteObject(Number[i].hbm);
DeleteObject(Number[i].chm);
}
DeleteDC(hdcmem);
DeleteDC(hdcm);
DeleteDC(bufdc);
ReleaseDC(hwnd,hdc);
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hwnd,msg,wparam,lparam);
}
}
使用VC++进行可视化编程,调用了操作系统提供的API,VC6.0编译通过,在Windows系统上运行。