游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1288|回复: 1

游戏编程入门

[复制链接]

1

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2006-4-7 16:29:00 | 显示全部楼层 |阅读模式
      本人为了找工作,想做一个游戏DEMO,以三国为题材.但是水平不佳,想在此向各位高手学习一下,并希望与和我一样的游戏编程爱好者相互交流交流,共同学习.
      希望大家能支持我,并给我提出宝贵意见,谢谢!
      以下是我编写的游戏框架,希望高手指点一下:

---------------//-common.h-//---------------------------------------------------------------------------------------------

#pragma once

#define STRICT
//=================================================================
#include <windows.h>
#include <windowsx.h>
#include <mmsystem.h>
#include <stdio.h>
#include <process.h>
#include <stdlib.h>
#include <tchar.h>
#include <math.h>
//=================================================================
#pragma comment( lib, "winmm.lib")
#pragma comment( lib, "comctl32.lib")
//==================================================================
#include <d3d9.h>
#include <d3dx9.h>
#include <dsound.h>
#include <dinput.h>
#include <dxerr9.h>
//=================================================================
#pragma comment( lib, "d3d9.lib")
#pragma comment( lib, "d3dx9.lib")
#pragma comment( lib, "dinput8.lib")
#pragma comment( lib, "dxerr9.lib")
//==================================================================
#include <gl\gl.h>                // OpenGL32库的头文件
#include <gl\glu.h>                // GLu32库的头文件
#include <gl\glaux.h>        // GLaux库的头文件
//==================================================================
#pragma comment( lib, "opengl32.lib")        // OpenGL32连接库
#pragma comment( lib, "glu32.lib")                // GLu32连接库
#pragma comment( lib, "glaux.lib")                // GLaux连接库
//================SanGuo.h==================================================

BOOL RegisterWindowClass();
BOOL CreateGameWindow();
BOOL ReleaseGameWindow();
BOOL ResizeGameWindow();
BOOL GameRun();
BOOL GameInit();
LRESULT CALLBACK MessageManage(
                                                       HWND hWnd,
                                                       UINT message,
                                                       WPARAM wParam,
                                                       LPARAM lParam
                                                      );

//============SanGuo.cpp=================================================
#include "../code/common.h"
#include "../code/sanguo.h"
//===============================================================
#define DIRECT3D  0U//
#define OPENGL   1U//
#define SOFT     2U//
//==============================================================
#define MESSAGEBOX(MESSAGE)                   ( MessageBox (NULL, TEXT (MESSAGE), NULL, MB_ICONERROR) )

//==============================================================
HINSTANCE g_hInstance               ;//应用程序句柄

HWND      g_hWnd                    ;//窗口句柄

HDC       g_hDc                     ;//设备句柄

UINT      g_Width =200U             ;//窗口宽度

UINT      g_Height =200U            ;//窗口高度

BOOL      g_Active =TRUE            ;//程序是否是激活状态

BOOL      g_FullScreen = FALSE      ;//是否全屏

HGLRC    g_hGlrc                   ;//OPENGL设备句柄

CHAR      g_KeyDown[256] ={ FALSE } ;//按键状态

UINT      g_Mode                    ;//选择应用程序实现方式

LPCTSTR   g_WindowClassName="SanGuo";//类名字

//==============================================================
BOOL RegisterWindowClass()
{
        WNDCLASS wc ;
        {
            wc.style                        = CS_HREDRAW | CS_VREDRAW ; //类风格

        wc.lpfnWndProc   = (WNDPROC)MessageManage     ; //窗口过程

        wc.cbClsExtra    = 0                          ; //额外类空间

        wc.cbWndExtra    = 0                          ; //额外窗口空间

        wc.hInstance     = g_hInstance                ; //实例句柄

        wc.hIcon         = NULL                       ; //图标

        wc.hCursor       = LoadCursor(NULL, IDC_ARROW); //光标

        wc.hbrBackground = (HBRUSH)( COLOR_WINDOW +1) ; //背景画刷

        wc.lpszMenuName  = NULL                       ; //菜单

        wc.lpszClassName = g_WindowClassName          ; //类名称
        }

        if (!RegisterClass (&wc))
                {
                   MESSAGEBOX("REGISTER WIDOW ERR!");
                   return FALSE ;
                }

        return TRUE;
}
//===============================================================
BOOL CreateGameWindow()//建立程序主窗口
{
        if ( g_Mode==DIRECT3D )
        {
                if (!g_FullScreen)
                        {
                g_hWnd = CreateWindow(
                               g_WindowClassName,   //
                               "",                  //
                               WS_OVERLAPPEDWINDOW, //
                           CW_USEDEFAULT,       //
                               0,                   //
                               CW_USEDEFAULT,       //
                               0,                   //
                               NULL,                //
                               NULL,                //
                               g_hInstance,         //
                               NULL                 //
                                                   );       
                                if ( !g_hWnd )
                                {       
                                        MESSAGEBOX("CREATE WINDOW ERR!");
                                        return FALSE;
                                }
                        }
                else
                        {
                        }
        }

        if ( g_Mode==OPENGL )
        {
                if (!g_FullScreen)
                        {
                        }
                else
                        {
                        }
        }

        if ( g_Mode==SOFT )
        {
                if (!g_FullScreen)
                        {
                        }
                else
                        {
                        }
        }
   ShowWindow(g_hWnd, SW_SHOW);
   UpdateWindow(g_hWnd);

   return TRUE;

}
//==============================================================
BOOL ReleaseGameWindow()
{
        return TRUE;
}
//===============================================================
BOOL ResizeGameWindow()
{
        return TRUE;
}
//================================================================
BOOL GameInit()
{
        return TRUE;
}
//================================================================


BOOL GameRun()
{
        return TRUE;
}
//================================================================
WPARAM GameLoop(void)//游戏循环
{
        MSG msg;
        int m_message;

    while(msg.message != WM_QUIT)
    {   
                m_message = PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE);
        if( m_message )                       
                        { TranslateMessage(&msg);
              DispatchMessage(&msg);
                        }
        else  
                        {
            GameRun();//
                        }
    }
        return msg.wParam;
}
//================================================================
BOOL GameExit()
{
        return TRUE;
}
//================================================================
LRESULT CALLBACK MessageManage(
                                                       HWND hWnd,
                                                       UINT message,
                                                       WPARAM wParam,
                                                       LPARAM lParam
                                                      )//回调函数
{       
        int wmId, wmEvent;

        switch (message)
        {
                case WM_COMMAND:
                        wmId    = LOWORD(wParam);
                        wmEvent = HIWORD(wParam);

                case WM_CREATE:
                        g_hDc=GetDC(hWnd);
                        GameInit();
                        break;
                case WM_KEYDOWN:                                                 
                        g_KeyDown[wParam] = TRUE;                         
                        return 0;                                                         
                }

                case WM_KEYUP:                                                                 
                {
                        g_KeyDown[wParam] = FALSE;                                         
                        return 0;                                                         
                }
                case WM_CLOSE:                                               
                        GameExit();                                   
                        PostQuitMessage(0);
                        return 0;               
                        break;
                case WM_SIZE:                                       
                        g_Height = HIWORD(lParam);       
                        g_Width  = LOWORD(lParam);       
                        if (g_Height==0)        g_Height=1;       
                        ResizeGameWindow();
                        return 0;               
                        break;
                case WM_DESTROY:
            GameExit();
                        PostQuitMessage(0);
                        break;
                default:
                        return DefWindowProc(hWnd, message, wParam, lParam);
   }
   return 0;
}

//================================================================
int APIENTRY WinMain(
                                         HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow
                                         )
{
        g_hInstance = hInstance ;                  //设置全局句柄

        if ( !RegisterWindowClass ( ) ) return 0 ; //注册窗口

    if ( !CreateGameWindow ( ) )  return 0  ;  //建立窗口
   
    return GameLoop( ) ;                       //游戏循环
}

33

主题

669

帖子

669

积分

高级会员

Rank: 4

积分
669
QQ
发表于 2006-4-9 12:56:00 | 显示全部楼层

Re:游戏编程入门

框架不是重点,自己作游戏,普普通通的一个循环就够了,最多加上点定时器功能,重点考虑一下算法,多媒体引擎用DX就足够了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-24 04:08

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表