天天看点

Win32游戏开发程序——第一个“游戏”程序

在中国大学慕课上面看到的一道题目,算得上是入门吧。

题目如下:

在“HelloWorldGame”游戏代码的基础上,试着进行如下的上机练习(能实现至少一个即可):

•  将文字修改为其他颜色

•  调整文字的显示位置

•   添加鼠标移动消息

•   将输出文字位置修改为鼠标位置,让字符串跟随鼠标移动

•  其他任何能增加游戏性,或你认为必要的功能

解:

1.先在VS上面创建一个Windows桌面向导项目

2.在全局变量处定义一个颜色变量,横坐标,纵坐标

COLORREF color;
int x = 450, y = 150;      

3.找到这个函数,这个就是程序入口

//这里是函数的入口
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    // TODO: 在此处放置代码。
    color = RGB(0,0,255); //定义最初的字符显示的颜色
    // 初始化全局字符串
    LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadStringW(hInstance, IDC_HELLOWORDGAME, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);      

4.最后找到处理主窗口消息的函数

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_COMMAND:
        {
            int wmId = LOWORD(wParam);
            // 分析菜单选择:
            switch (wmId)
            {
            case IDM_ABOUT:
                DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                break;
            case IDM_EXIT:
                DestroyWindow(hWnd);
                break;
            default:
                return DefWindowProc(hWnd, message, wParam, lParam);
            }
        }
        break;
    case WM_LBUTTONDOWN:                      //按下左边鼠标
        color = RGB(255, 0, 255);             //变色
        InvalidateRect(hWnd, NULL, true);     //立即显示,如果没有此语句,按下鼠标左键,字体颜色不会变化
        break;
    case WM_RBUTTONDOWN:                      //按下鼠标右键
        color = RGB(255, 255, 0);
        InvalidateRect(hWnd, NULL, true);
        break;
    case WM_MOUSEMOVE:                        //获取鼠标位置,并且赋给x,y      
        x = LOWORD(lParam);
        y = HIWORD(lParam);
        InvalidateRect(hWnd, NULL, true);
        break;
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            //HDC是指窗体,控件的句柄;唯一标识了一个对象,是Windows系统API定义的一个数据类型
            //系统用句柄来记载数据地址的变更。在程序设计中,句柄是一种特殊的智能指针
            //当一个应用程序要引用其他系统(如数据库、操作系统)所管理的内存块或对象时,就要使用句柄
            HDC hdc = BeginPaint(hWnd, &ps);
            // TODO: 在此处添加使用 hdc 的任何绘图代码...
            SetTextColor(hdc, color);
            TextOut(hdc, x, y, L"Hello World!", 12);  //字符跟随下x,y的位置显示
            EndPaint(hWnd, &ps);
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}