Windows游戏开发感想&&一个完整的Windows窗口程序

现在的互联网行业从事Windows游戏开发的人实在是太少了。一是因为门槛较高,游戏行业本来就是互联网行业最尖端的领域,要想从事游戏开发,不仅要掌握一门过硬的语言,尤其是对C++的精通,还要对算法非常精通,深刻掌握计算机图形学等知识。熟悉以后还得掌握一些重要的图形库(OpenGL和DirectX)以及一些强大游戏引擎(Unity3D,Cocos2d-X等)。这些书籍光是看完就要花很久的时间,更别说在项目中熟练运用了。这条路漫长而艰辛让许多想从事游戏开发的初学者们望而却步。并且市面上关于游戏开发的好的书籍实在是少之又少,绝大部分又都是外文书籍,这更加阻挡了许多人迈入游戏领域的大门。
但是我相信一定有很多同学和我一样对游戏开发领域无比向往。下面是网上的大神们推荐的一条游戏开发进阶之路,如果你可以将下面的东西全部掌握,想必你在游戏领域也算是登堂入室了。

编程语言类书籍类

1.《C++ Primer》

2.《Effective C++》

3.《More Effective C++》

4.《Exceptional C++》

5.《More Exceptional C++》

6.《Essentional C++》

7.《Advanced C++》

8.《STL 源码剖析》

10.《C# 从入门到精通》 (Unity 3D 需要用到)

11.《Lua》 强大的脚本语言

Windows游戏编程书籍

《Windows 游戏编程之从零开始》 适合初学者入门,我看的就是这本书

《DirectX 9.0 3D 游戏开发编程基础》 红龙书(游戏开发首选)

《Ultimate Game Programming With DirectX》

《Introduction to 3D Game Programming with DirectX9.0c A Shader Approach》

图形类书籍

《计算机图形学》 电子工业出版社

《3D游戏与计算机图形学中的数学方法》

网络书籍

《网络游戏服务器端编程》

《网络游戏客户端编程》

《网络游戏开发》

下面再介绍一下,你应该掌握的一些理论知识:

3.游戏服务器编程
3.1内存管理(游戏服务器24*7运行的,根本容不得内存泄漏)。
3.2对象池,线程池(提高服务器性能)。
3.3异常捕获,堆栈跟踪。(不要指望在VC的工程中一步一步debug来测试服务器程序)
3.4数据结构。(栈,队列等都必须自己实现,这是游戏编程的必须,否则无法做深入的跟踪和调试,以及无法捕获跟踪栈和队列中发生的错误)
3.5高效socket,完成端口的编程

游戏引擎

4.Unity3D,Cocos2d-x

5.对C++的模版的高级用法要了解的比较深入

6.对C++的内存管理的各种解决方案要非常熟悉并亲手实验过

7.对AI的各种算法要有了解:比如博弈论中的极大极小算法,A*算法的优化等等

8.对C++的装载链接过程和Lua的虚拟机的一些底层实现要有了解

9.对VS或者Xcode这两种IDE需要可以熟练的应用

10.对OpenGL或者是DirectX要有了解,做过一些Shader和Renderer

11.了解过一些游戏公司的后端框架,例如网易的Pomelo

哈哈哈,看完你要学的东西以后是不是觉得一阵头大,没关系,慢慢来。学习知识是一个漫长的过程。等你全部掌握以后,你会发现你的世界会与别人大不一样。

介绍完这些以后,下面贴个小程序激励一下大家。

在VS2012上面创建一个完整的窗口(代码来源于Windows游戏编程之从零开始)

#include<Windows.h>

#define WINDOW_WIDTH 800 //窗口宽度
#define WINDOW_HEIGHT 600 //窗口高度
#define WINDOW_TITLE L"[致我们永不熄灭的游戏开发梦想]程序核心框架"

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);//声明窗口过程函数

//WinMain函数,Windows应用程序的入口函数,我们程序从这里开始
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
    switch(message)
    {
    case WM_PAINT:
        ValidateRect(hwnd,NULL);
        break;
    case WM_KEYDOWN:
        if(wParam==VK_ESCAPE)
        {
            DestroyWindow(hwnd);
            break;
        }
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hwnd,message,wParam,lParam);
    }
    return 0;
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpCmdLine,int nShowCmd)
{
    //窗口创建四部曲之一:设计一个完整的窗口类
    WNDCLASSEX wndClass={0};
    wndClass.cbSize=sizeof(WNDCLASSEX);
    wndClass.style=CS_HREDRAW|CS_VREDRAW;
    wndClass.lpfnWndProc=WndProc;
    wndClass.cbClsExtra=0;
    wndClass.cbWndExtra=0;
    wndClass.hInstance=hInstance;
    wndClass.hIcon=(HICON)::LoadImage(NULL,L"icon.ico",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
    wndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
    wndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);
    wndClass.lpszMenuName=NULL;
    wndClass.lpszClassName=L"FortheDreamOfGameDevelop";
    //窗口创建四部曲之二:注册窗口类
    if(!RegisterClassEx(&wndClass))
    {
        return -1;
    }
    //窗口创建四部曲之三:创建窗口
    HWND hwnd=CreateWindow( L"FortheDreamOfGameDevelop",WINDOW_TITLE,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,WINDOW_WIDTH,WINDOW_HEIGHT,NULL,NULL,hInstance,NULL);
    //窗口创建四部曲之四:窗口的移动、显示与更新
    MoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);
    ShowWindow(hwnd,nShowCmd);//显示窗口
    UpdateWindow(hwnd);
    //消息循环过程
    MSG msg={0};
    while(msg.message!=WM_QUIT)
    {
        if(PeekMessage(&msg,0,0,0,PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }

    }
    //窗口类注销
    UnregisterClass(L"ForTheDreamOfGameDevelop",wndClass.hInstance);
    return 0;
}

这里写图片描述

很简单的程序,这就是我们后面学习GDI和DirectX游戏编程时用到的基本框架。

  • 12
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值