Windows 游戏编程大师技巧第四章第9个例子
来源:互联网 发布:数据采集卡 编辑:程序博客网 时间:2024/06/06 17:18
- // DEMO4_9.CPP - Starfield demo based on T3D console
- // INCLUDES ///////////////////////////////////////////////
- #define WIN32_LEAN_AND_MEAN // just say no to MFC
- #include <windows.h> // include important windows stuff
- #include <windowsx.h>
- #include <mmsystem.h>
- #include <iostream.h> // include important C/C++ stuff
- #include <conio.h>
- #include <stdlib.h>
- #include <malloc.h>
- #include <memory.h>
- #include <string.h>
- #include <stdarg.h>
- #include <stdio.h>
- #include <math.h>
- #include <io.h>
- #include <fcntl.h>
- // DEFINES ////////////////////////////////////////////////
- // defines for windows
- #define WINDOW_CLASS_NAME "WINCLASS1"
- #define WINDOW_WIDTH 400
- #define WINDOW_HEIGHT 300
- // starfield defines
- #define NUM_STARS 256
- // MACROS /////////////////////////////////////////////////
- #define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
- #define KEYUP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
- // TYPES //////////////////////////////////////////////////
- typedef struct STAR_TYP
- {
- int x,y; // position of star
- int vel; // horizontal velocity of star
- COLORREF col; // color of star
- } STAR, *STAR_PTR;
- // PROTOTYPES /////////////////////////////////////////////
- void Erase_Stars(void);
- void Draw_Stars(void);
- void Move_Stars(void);
- void Init_Stars(void);
- // GLOBALS ////////////////////////////////////////////////
- HWND main_window_handle = NULL; // globally track main window
- HINSTANCE hinstance_app = NULL; // globally track hinstance
- HDC global_dc = NULL; // tracks a global dc
- char buffer[80]; // general printing buffer
- STAR stars[256]; // holds the starfield
- // FUNCTIONS //////////////////////////////////////////////
- LRESULT CALLBACK WindowProc(HWND hwnd,
- UINT msg,
- WPARAM wparam,
- LPARAM lparam)
- {
- // this is the main message handler of the system
- PAINTSTRUCT ps; // used in WM_PAINT
- HDC hdc; // handle to a device context
- char buffer[80]; // used to print strings
- // what is the message
- switch(msg)
- {
- case WM_CREATE:
- {
- // do initialization stuff here
- // return success
- return(0);
- } break;
- case WM_PAINT:
- {
- // simply validate the window
- hdc = BeginPaint(hwnd,&ps);
- // end painting
- EndPaint(hwnd,&ps);
- // return success
- return(0);
- } break;
- case WM_DESTROY:
- {
- // kill the application, this sends a WM_QUIT message
- PostQuitMessage(0);
- // return success
- return(0);
- } break;
- default:break;
- } // end switch
- // process any messages that we didn't take care of
- return (DefWindowProc(hwnd, msg, wparam, lparam));
- } // end WinProc
- ///////////////////////////////////////////////////////////
- void Init_Stars(void)
- {
- // this function initializes all the stars
- for (int index=0; index < NUM_STARS; index++)
- {
- // select random position
- stars[index].x = rand()%WINDOW_WIDTH;
- stars[index].y = rand()%WINDOW_HEIGHT;
- // set random velocity
- stars[index].vel = 1 + rand()%16;
- // set intensity which is inversely prop to velocity for 3D effect
- // note, I am mixing equal amounts of RGB to make black -> bright white
- int intensity = 15*(17 - stars[index].vel);
- stars[index].col = RGB(intensity, intensity, intensity);
- } // end for index
- } // end Init_Stars
- ////////////////////////////////////////////////////////////
- void Erase_Stars(void)
- {
- // this function erases all the stars
- for (int index=0; index < NUM_STARS; index++)
- SetPixel(global_dc, stars[index].x, stars[index].y, RGB(0,0,0));
- } // end Erase_Stars
- ////////////////////////////////////////////////////////////
- void Draw_Stars()
- {
- // this function draws all the stars
- for (int index=0; index < NUM_STARS; index++)
- SetPixel(global_dc, stars[index].x, stars[index].y, stars[index].col);
- } // end Draw_Stars
- ////////////////////////////////////////////////////////////
- void Move_Stars(void)
- {
- // this function moves all the stars and wraps them around the
- // screen boundaries
- for (int index=0; index < NUM_STARS; index++)
- {
- // move the star and test for edge
- stars[index].x+=stars[index].vel;
- if (stars[index].x >= WINDOW_WIDTH)
- stars[index].x -= WINDOW_WIDTH;
- } // end for index
- } // end Move_Stars
- ////////////////////////////////////////////////////////////
- int Game_Main(void *parms = NULL, int num_parms = 0)
- {
- // this is the main loop of the game, do all your processing
- // here
- // get the time
- DWORD start_time = GetTickCount();
- // erase the stars
- Erase_Stars();
- // move the stars
- Move_Stars();
- // draw the stars
- Draw_Stars();
- // lock to 30 fps
- while((start_time - GetTickCount() < 33));
- // for now test if user is hitting ESC and send WM_CLOSE
- if (KEYDOWN(VK_ESCAPE))
- SendMessage(main_window_handle,WM_CLOSE,0,0);
- // return success or failure or your own return code here
- return(1);
- } // end Game_Main
- ////////////////////////////////////////////////////////////
- int Game_Init(void *parms = NULL, int num_parms = 0)
- {
- // this is called once after the initial window is created and
- // before the main event loop is entered, do all your initialization
- // here
- // first get the dc to the window
- global_dc = GetDC(main_window_handle);
- // initialize the star field here
- Init_Stars();
- // return success or failure or your own return code here
- return(1);
- } // end Game_Init
- /////////////////////////////////////////////////////////////
- int Game_Shutdown(void *parms = NULL, int num_parms = 0)
- {
- // this is called after the game is exited and the main event
- // loop while is exited, do all you cleanup and shutdown here
- // release the global dc
- ReleaseDC(main_window_handle, global_dc);
- // return success or failure or your own return code here
- return(1);
- } // end Game_Shutdown
- // WINMAIN ////////////////////////////////////////////////
- int WINAPI WinMain( HINSTANCE hinstance,
- HINSTANCE hprevinstance,
- LPSTR lpcmdline,
- int ncmdshow)
- {
- WNDCLASSEX winclass; // this will hold the class we create
- HWND hwnd; // generic window handle
- MSG msg; // generic message
- HDC hdc; // graphics device context
- // first fill in the window class stucture
- winclass.cbSize = sizeof(WNDCLASSEX);
- winclass.style = CS_DBLCLKS | CS_OWNDC |
- CS_HREDRAW | CS_VREDRAW;
- winclass.lpfnWndProc = WindowProc;
- winclass.cbClsExtra = 0;
- winclass.cbWndExtra = 0;
- winclass.hInstance = hinstance;
- winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
- winclass.hCursor = LoadCursor(NULL, IDC_ARROW);
- winclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
- winclass.lpszMenuName = NULL;
- winclass.lpszClassName = WINDOW_CLASS_NAME;
- winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
- // save hinstance in global
- hinstance_app = hinstance;
- // register the window class
- if (!RegisterClassEx(&winclass))
- return(0);
- // create the window
- if (!(hwnd = CreateWindowEx(NULL, // extended style
- WINDOW_CLASS_NAME, // class
- "T3D Game Console Star Demo", // title
- WS_OVERLAPPEDWINDOW | WS_VISIBLE,
- 0,0, // initial x,y
- 400,300, // initial width, height
- NULL, // handle to parent
- NULL, // handle to menu
- hinstance,// instance of this application
- NULL))) // extra creation parms
- return(0);
- // save main window handle
- main_window_handle = hwnd;
- // initialize game here
- Game_Init();
- // enter main event loop
- while(TRUE)
- {
- // test if there is a message in queue, if so get it
- if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
- {
- // test if this is a quit
- if (msg.message == WM_QUIT)
- break;
- // translate any accelerator keys
- TranslateMessage(&msg);
- // send the message to the window proc
- DispatchMessage(&msg);
- } // end if
- // main game processing goes here
- Game_Main();
- } // end while
- // closedown game here
- Game_Shutdown();
- // return to Windows like this
- return(msg.wParam);
- } // end WinMain
- ///////////////////////////////////////////////////////////
终于看见,类似游戏的界面了.令我激动不已.
- Windows 游戏编程大师技巧第四章第9个例子
- Windows 游戏编程大师技巧第四章第一个例子
- Windows 游戏编程大师技巧第四章第4个例子
- Windows 游戏编程大师技巧第四章第6个例子---定时器的使用
- windows游戏编程技巧大师第二章
- 游戏编程之路 -- 《Windows游戏编程大师技巧》第2,3,4章 笔记
- windows游戏编程大师技巧
- Windows游戏编程大师技巧(第2版)
- 《Windows游戏编程大师技巧》(第二版)第1章(上)
- 《Windows游戏编程大师技巧》(第二版)第1章(下)
- 《Windows游戏编程大师技巧》(第二版)第2章
- 《Windows游戏编程大师技巧》(第二版)第11章
- 《Windows游戏编程大师技巧》(第二版)第1章(上)
- 《Windows游戏编程大师技巧》(第二版)第1章(下)
- 《Windows游戏编程大师技巧》(第二版)第2章
- 《Windows游戏编程大师技巧》(第二版)第11章
- 《Windows游戏编程大师技巧》笔记 2017.1.9
- 《Windows游戏编程大师技巧》第七章 Deom 13
- SQL注入攻击的种类和防范手段
- IT技术纸介媒体走入历史:有感于Dr. Dobb's Journal停止发行
- 字符串string和内存流MemoryStream及比特数组byte[]互转比较
- STMT的测试
- (转)完全用Linux工作---作者:王垠(文章很长)
- Windows 游戏编程大师技巧第四章第9个例子
- CSDN 空间:“迷你博客”很迷人(1)
- MySQL的优化
- Tonix 2.0.0 性能参数(对象数据库存取系统)
- 全国十大暴力城市排名
- 教你如何认汽车标志(转)
- 《易经》 就是 那个古代中国的top conference 合集----听了the 7 habits of.....有感
- Apache CXF 简介
- 豪放派诗词