>_<:Only give you the code,try to understand it!

>_<:picture resource

 #include <windows.h>
// C 執行時標頭檔案
#include <stdlib.h>
#include <cstdio>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
#include <string> //定義結構,飛機子彈
struct BULLET{
int x,y;
bool exist;
}; // 全域性變數:
HINSTANCE hInst; // 當前例項 HBITMAP bg,ship,bullet;//背景圖,飛機圖,子彈圖
HDC hdc,mdc,bufdc;
HWND hWnd;
int x,y,nowX,nowY;//滑鼠座標,飛機座標(貼圖座標)
int w=,bcount;//滾動背景所要剪下的寬度,子彈數目
BULLET b[];//儲存飛機發出的子彈 // 此程式碼模組中包含的函式的前向宣告:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
void MyPaint(HDC hdc); int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow){ MSG msg;
MyRegisterClass(hInstance);
// 執行應用程式初始化:
if (!InitInstance (hInstance, nCmdShow)){
return FALSE;
}
// 主訊息迴圈:
while (GetMessage(&msg, NULL, , )){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int) msg.wParam;
} // 函式: MyRegisterClass()
//
// 目的: 註冊視窗類。
ATOM MyRegisterClass(HINSTANCE hInstance){
WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = ;
wcex.cbWndExtra = ;
wcex.hInstance = hInstance;
wcex.hIcon = NULL;
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+);
wcex.lpszMenuName = "Beautifulzzzz";
wcex.lpszClassName = "Beautifulzzzz";
wcex.hIconSm = NULL; return RegisterClassEx(&wcex);
} // 函式: InitInstance(HINSTANCE, int)
//
// 目的: 儲存例項控制代碼並建立主視窗
//
// 註釋:
//
// 在此函式中,我們在全域性變數中儲存例項控制代碼並
// 建立和顯示主程式視窗。
// 1.設定飛機的初始位置
// 2.設定滑鼠位置及隱藏
// 3.設定滑鼠游標移動區域
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow){ HBITMAP bmp;
POINT pt,lt,rb;
RECT rect; hInst = hInstance; // 將例項控制代碼儲存在全域性變數中 hWnd = CreateWindow("Beautifulzzzz","Beautifulzzzz", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, , CW_USEDEFAULT, , NULL, NULL, hInstance, NULL); if (!hWnd)
{
return FALSE;
} MoveWindow(hWnd,,,,,true);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd); hdc=GetDC(hWnd);
mdc=CreateCompatibleDC(hdc);
bufdc=CreateCompatibleDC(hdc); bmp=CreateCompatibleBitmap(hdc,,);
SelectObject(mdc,bmp); bg=(HBITMAP)LoadImageA(NULL,"bg.bmp",IMAGE_BITMAP,,,LR_LOADFROMFILE);
ship=(HBITMAP)LoadImageA(NULL,"ship.bmp",IMAGE_BITMAP,,,LR_LOADFROMFILE);
bullet=(HBITMAP)LoadImageA(NULL,"bullet.bmp",IMAGE_BITMAP,,,LR_LOADFROMFILE); x=;
y=;
nowX=;
nowY=; //設定滑鼠游標位置
pt.x=;
pt.y=;
ClientToScreen(hWnd,&pt);
SetCursorPos(pt.x,pt.y); ShowCursor(false);//隱藏滑鼠游標 //限制滑鼠游標移動區域
GetClientRect(hWnd,&rect);
lt.x=rect.left;
lt.y=rect.top;
rb.x=rect.right;
rb.y=rect.bottom;
ClientToScreen(hWnd,&lt);
ClientToScreen(hWnd,&rb);
rect.left=lt.x;
rect.top=lt.y;
rect.right=rb.x;
rect.bottom=rb.y;
ClipCursor(&rect); SetTimer(hWnd,,,NULL);
MyPaint(hdc); return TRUE;
} //
// 函式: WndProc(HWND, UINT, WPARAM, LPARAM)
//
// 目的: 處理主視窗的訊息。
//
// WM_COMMAND - 處理應用程式選單
// WM_PAINT - 繪製主視窗
// WM_DESTROY - 傳送退出訊息並返回
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
int i;
int wmId, wmEvent;
PAINTSTRUCT ps; switch (message)
{
case WM_KEYDOWN: //按下訊息
if(wParam==VK_ESCAPE) //按下[esc]
PostQuitMessage();
break;
case WM_LBUTTONDOWN: //單擊滑鼠左鍵訊息
for(i=;i<;i++)
{
if(!b[i].exist)
{
b[i].x=nowX;
b[i].y=nowY+;
b[i].exist=true;
bcount++;
break;
}
}
case WM_MOUSEMOVE:
x=LOWORD(lParam); //取得滑鼠x座標
if(x>)
x=;
else if(x<)
x=; y=HIWORD(lParam);
if(y>)
y=;
else if(y<)
y=; break;
case WM_TIMER:
A:MyPaint(hdc);
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 在此新增任意繪圖程式碼...
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
ClipCursor(NULL);//回覆滑鼠移動區域 DeleteDC(mdc);
DeleteDC(bufdc);
DeleteObject(bg);
DeleteObject(bullet);
DeleteObject(ship);
ReleaseDC(hWnd,hdc); PostQuitMessage();
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return ;
} //1.設定飛機座標並進行貼圖
//2.設定所有子彈座標並進行貼圖
//3.顯示真正的滑鼠座標所在的座標
void MyPaint(HDC hdc){
char str[]="";
int i; //貼上背景圖
SelectObject(bufdc,bg);
BitBlt(mdc,,,w,,bufdc,-w,,SRCCOPY);
BitBlt(mdc,w,,-w,,bufdc,,,SRCCOPY); //飛機座標向滑鼠座標位置靠近
if(nowX<x){
nowX+=;
if(nowX>x)
nowX=x;
}else{
nowX-=;
if(nowX<x)
nowX=x;
} if(nowY<y){
nowY-=;
if(nowY<y)
nowY=y;
}else{
nowY+=;
if(nowY>y)
nowY=y;
} //貼上飛機圖
SelectObject(bufdc,ship);
BitBlt(mdc,nowX,nowY,,,bufdc,,,SRCAND);
BitBlt(mdc,nowX,nowY,,,bufdc,,,SRCPAINT); SelectObject(bufdc,bullet);
if(bcount!=)
for(i=;i<;i++)
if(b[i].exist){
//貼上子彈圖
BitBlt(mdc,b[i].x,b[i].y,,,bufdc,,,SRCAND);
BitBlt(mdc,b[i].x,b[i].y,,,bufdc,,,SRCPAINT); b[i].x-=;
if(b[i].x<){
bcount--;
b[i].exist=false;
}
} //顯示滑鼠座標
sprintf(str,"x座標: %d ",x);
TextOutA(mdc,,,str,strlen(str));
sprintf(str,"y座標: %d ",y);
TextOutA(mdc,,,str,strlen(str)); BitBlt(hdc,,,,,mdc,,,SRCCOPY); w+=;
if(w==)
w=;
}