亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? demo9_3a.cpp

?? 一本外國人寫的關于3D游戲編程的書的源碼
?? CPP
字號:
// DEMO9_3a.CPP - DirectInput Joystick Demo Library version

// INCLUDES ///////////////////////////////////////////////

#define WIN32_LEAN_AND_MEAN  

#define INITGUID // if not done elsewhere

#include <windows.h>   // include important windows stuff
#include <windowsx.h> 
#include <mmsystem.h>
#include <objbase.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>


#include <ddraw.h>     // directX includes
#include <dinput.h>
#include "T3DLIB1.H"
#include "T3DLIB2.H"

// DEFINES ////////////////////////////////////////////////

// defines for windows 
#define WINDOW_CLASS_NAME "WINCLASS1"

// default screen size
#define SCREEN_WIDTH    640  // size of screen
#define SCREEN_HEIGHT   480
#define SCREEN_BPP      8    // bits per pixel

#define BITMAP_ID            0x4D42 // universal id for a bitmap
#define MAX_COLORS_PALETTE   256

#define BUTTON_SPRAY    0    // defines for each button
#define BUTTON_PENCIL   1
#define BUTTON_ERASE    2
#define BUTTON_EXIT     3


// TYPES ///////////////////////////////////////////////////


// PROTOTYPES /////////////////////////////////////////////

// game console
int Game_Init(void *parms=NULL, int num_parms = 0);
int Game_Shutdown(void *parms=NULL, int num_parms = 0);
int Game_Main(void *parms=NULL,  int num_parms = 0);

// GLOBALS ////////////////////////////////////////////////

// windows vars
HWND      main_window_handle = NULL; // globally track main window
int       window_closed      = 0;    // tracks if window is closed
HINSTANCE main_instance      = NULL; // globally track hinstance

char buffer[80];                // used to print text

// demo globals

BITMAP_IMAGE playfield;       // used to hold playfield
BITMAP_IMAGE mushrooms[4];    // holds mushrooms
BOB          blaster;         // holds bug blaster

int blaster_anim[5] = {0,1,2,1,0};  // blinking animation

// lets use a line segment for the missle
int missile_x,              // position of missle
    missile_y,            
    missile_state;          // state of missle 0 off, 1 on

// PROTOTYPES //////////////////////////////////////////////

int Start_Missile(void);
int Move_Missile(void);
int Draw_Missile(void);

// 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

// 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
main_instance = hinstance;

// register the window class
if (!RegisterClassEx(&winclass))
	return(0);

// create the window
if (!(hwnd = CreateWindowEx(NULL,                  // extended style
                            WINDOW_CLASS_NAME,     // class
						    "DirectInput Joystick Demo", // title
						    WS_POPUP | WS_VISIBLE,
					 	    0,0,	  // initial x,y
						    SCREEN_WIDTH,SCREEN_HEIGHT,  // 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

////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////

int Start_Missile(void)
{
// this function starts the missle, if it is currently off

if (missile_state==0)
    {
    // enable missile
    missile_state = 1;

    // computer position of missile
    missile_x = blaster.x + 16;
    missile_y = blaster.y-4;

    // return success
    return(1);
    } // end if

// couldn't start missile
return(0);

} // end Start_Missile

///////////////////////////////////////////////////////////

int Move_Missile(void)
{
// this function moves the missle 

// test if missile is alive
if (missile_state==1)
   {
   // move the missile upward
   if ((missile_y-=10) < 0)
      {
      missile_state = 0;
      return(1);
      } // end if

   // lock secondary buffer
   DDraw_Lock_Back_Surface();

   // add missile collision here


   // unlock surface
   DDraw_Unlock_Back_Surface();

   // return success
   return(1);

   } // end if

// return failure
return(0);

} // end Move_Missle

///////////////////////////////////////////////////////////

int Draw_Missile(void)
{
// this function draws the missile 

// test if missile is alive
if (missile_state==1)
   {
   // lock secondary buffer
   DDraw_Lock_Back_Surface();

   // draw the missile in green
   Draw_Clip_Line(missile_x, missile_y, 
                  missile_x, missile_y+6,
                  250,back_buffer, back_lpitch);

   // unlock surface
   DDraw_Unlock_Back_Surface();

   // return success
   return(1);

   } // end if

// return failure
return(0);

} // end Draw_Missle

///////////////////////////////////////////////////////////

// GAME PROGRAMMING CONSOLE FUNCTIONS ////////////////

int Game_Init(void *parms,  int num_parms)
{
// this function is where you do all the initialization 
// for your game

int index;         // looping var
char filename[80]; // used to build up files names

// initialize directdraw
DDraw_Init(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP);

// start up DirectInput
DInput_Init();

// initialize the joystick
DInput_Init_Joystick(-24,24,-24,24);

// load the background
Load_Bitmap_File(&bitmap8bit, "MUSH.BMP");

// set the palette to background image palette
Set_Palette(bitmap8bit.palette);

// load in the four frames of the mushroom
for (index=0; index<4; index++)
    {
    // create mushroom bitmaps
    Create_Bitmap(&mushrooms[index],0,0,32,32);
    Load_Image_Bitmap(&mushrooms[index],&bitmap8bit,index,0,BITMAP_EXTRACT_MODE_CELL);  
    } // end for index

// now create the bug blaster bob
Create_BOB(&blaster,0,0,32,32,3,
           BOB_ATTR_VISIBLE | BOB_ATTR_MULTI_ANIM | BOB_ATTR_ANIM_ONE_SHOT,
           DDSCAPS_SYSTEMMEMORY);

// load in the four frames of the mushroom
for (index=0; index<3; index++)
     Load_Frame_BOB(&blaster,&bitmap8bit,index,index,1,BITMAP_EXTRACT_MODE_CELL);  

// unload the bitmap file
Unload_Bitmap_File(&bitmap8bit);

// set the animation sequences for bug blaster
Load_Animation_BOB(&blaster,0,5,blaster_anim);

// set up stating state of bug blaster
Set_Pos_BOB(&blaster,320, 400);
Set_Anim_Speed_BOB(&blaster,3);

// set clipping rectangle to screen extents so objects dont
// mess up at edges
RECT screen_rect = {0,0,screen_width,screen_height};
lpddclipper = DDraw_Attach_Clipper(lpddsback,1,&screen_rect);

// create mushroom playfield bitmap
Create_Bitmap(&playfield,0,0,SCREEN_WIDTH,SCREEN_HEIGHT);
playfield.attr |= BITMAP_ATTR_LOADED;

// fill in the background
Load_Bitmap_File(&bitmap8bit, "GRASS.BMP");

// load the grass bitmap image
Load_Image_Bitmap(&playfield,&bitmap8bit,0,0,BITMAP_EXTRACT_MODE_ABS);
Unload_Bitmap_File(&bitmap8bit);

// seed random number generator
srand(Start_Clock());

// create the random mushroom patch
for (index=0; index<50; index++)
    {
    // select a mushroom
    int mush = rand()%4;

    // set mushroom to random position
    mushrooms[mush].x = rand()%(SCREEN_WIDTH-32);
    mushrooms[mush].y = rand()%(SCREEN_HEIGHT-128);

    // now draw the mushroom into playfield
    Draw_Bitmap(&mushrooms[mush], playfield.buffer, playfield.width,1);

    } // end for

// hide the mouse
ShowCursor(FALSE);

// return success
return(1);

} // end Game_Init

///////////////////////////////////////////////////////////

int Game_Shutdown(void *parms,  int num_parms)
{
// this function is where you shutdown your game and
// release all resources that you allocated

// kill the bug blaster
Destroy_BOB(&blaster);

// kill the mushroom maker
for (int index=0; index<4; index++)
    Destroy_Bitmap(&mushrooms[index]);

// kill the playfield bitmap
Destroy_Bitmap(&playfield);

// release joystick
DInput_Release_Joystick();

// shutdown DirectInput
DInput_Shutdown();

// shutdonw directdraw
DDraw_Shutdown();

// return success
return(1);
} // end Game_Shutdown

///////////////////////////////////////////////////////////

int Game_Main(void *parms, int num_parms)
{
// this is the workhorse of your game it will be called
// continuously in real-time this is like main() in C
// all the calls for you game go here!

int          index;             // looping var
int          dx,dy;             // general deltas used in collision detection


// check of user is trying to exit
if (KEY_DOWN(VK_ESCAPE) || KEY_DOWN(VK_SPACE))
    PostMessage(main_window_handle, WM_DESTROY,0,0);

// start the timing clock
Start_Clock();

// clear the drawing surface
DDraw_Fill_Surface(lpddsback, 0);

// get the joystick data
DInput_Read_Joystick();

// lock the back buffer
DDraw_Lock_Back_Surface();

// draw the background reactor image
Draw_Bitmap(&playfield, back_buffer, back_lpitch, 0);

// unlock the back buffer
DDraw_Unlock_Back_Surface();

// is the player moving?
blaster.x+=joy_state.lX;
blaster.y+=joy_state.lY;

// test bounds
if (blaster.x > SCREEN_WIDTH-32)
    blaster.x = SCREEN_WIDTH-32;
else
if (blaster.x < 0)
    blaster.x = 0;

if (blaster.y > SCREEN_HEIGHT-32)
    blaster.y = SCREEN_HEIGHT-32;
else
if (blaster.y < SCREEN_HEIGHT-128)
    blaster.y = SCREEN_HEIGHT-128;

// is player firing?
if (joy_state.rgbButtons[0])
   Start_Missile();

// move and draw missle
Move_Missile();
Draw_Missile();

// is it time to blink eyes
if ((rand()%100)==50)
   Set_Animation_BOB(&blaster,0);

// draw blaster
Animate_BOB(&blaster);
Draw_BOB(&blaster,lpddsback);

// draw some text
Draw_Text_GDI("Make My Centipede!",0,0,RGB(255,255,255),lpddsback);

// display joystick and buttons 0-7
sprintf(buffer,"Joystick Stats: X-Axis=%d, Y-Axis=%d, buttons(%d,%d,%d,%d,%d,%d,%d,%d)",
                                                                      joy_state.lX,joy_state.lY,
                                                                      joy_state.rgbButtons[0],
                                                                      joy_state.rgbButtons[1],
                                                                      joy_state.rgbButtons[2],
                                                                      joy_state.rgbButtons[3],
                                                                      joy_state.rgbButtons[4],
                                                                      joy_state.rgbButtons[5],
                                                                      joy_state.rgbButtons[6],
                                                                      joy_state.rgbButtons[7]);

Draw_Text_GDI(buffer,0,SCREEN_HEIGHT-20,RGB(255,255,50),lpddsback);

// print out name of joystick
sprintf(buffer, "Joystick Name & Vendor: %s",joyname);
Draw_Text_GDI(buffer,0,SCREEN_HEIGHT-40,RGB(255,255,50),lpddsback);


// flip the surfaces
DDraw_Flip();

// sync to 30 fps
Wait_Clock(30);

// return success
return(1);

} // end Game_Main

//////////////////////////////////////////////////////////

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区成人在线观看| 欧美老肥妇做.爰bbww| 中文字幕国产一区| 成人一区二区三区中文字幕| 国产精品久久久久aaaa樱花 | 日韩中文字幕一区二区三区| 欧美精品久久久久久久久老牛影院| 亚洲成在线观看| 欧美一区二区三区人| 美国三级日本三级久久99| 欧美成人一区二区三区片免费| 国产一区二区三区最好精华液| 国产精品每日更新在线播放网址| 99国产精品久久久久久久久久 | 日韩欧美成人一区| 粉嫩绯色av一区二区在线观看| 国产精品理论片| 欧美福利一区二区| 国产精品一区二区黑丝| 亚洲日本成人在线观看| 日韩一区二区视频在线观看| 成人性生交大片| 亚洲成va人在线观看| 久久精品视频网| 欧美视频中文字幕| 国产一级精品在线| 一区av在线播放| 欧美精品一区二区高清在线观看| 波多野结衣欧美| 日韩国产一区二| 亚洲欧洲av一区二区三区久久| 91精品免费观看| 波多野结衣精品在线| 麻豆精品在线视频| 亚洲丝袜精品丝袜在线| 日韩免费在线观看| 欧美中文字幕一区| 成人午夜电影小说| 另类小说一区二区三区| 亚洲女爱视频在线| 久久久五月婷婷| 欧美另类videos死尸| aaa欧美日韩| 国内精品久久久久影院薰衣草| 亚洲一区精品在线| 日韩一区在线看| 久久久美女艺术照精彩视频福利播放| 欧美三级日韩在线| hitomi一区二区三区精品| 久久精品国产精品亚洲综合| 亚洲一二三四区不卡| 国产精品欧美一区二区三区| 欧美va亚洲va香蕉在线| 欧美精品第一页| 色狠狠综合天天综合综合| 国产精品1024久久| 精品系列免费在线观看| 五月天激情综合| 亚洲国产一二三| 亚洲另类一区二区| 亚洲欧美偷拍卡通变态| 国产精品美女一区二区| 久久久亚洲欧洲日产国码αv| 日韩三级电影网址| 91麻豆精品国产91久久久资源速度 | 久久久久久日产精品| 欧美videos大乳护士334| 日韩视频一区二区三区| 91精品国产欧美日韩| 欧美性xxxxxx少妇| 欧美日韩午夜影院| 欧美午夜一区二区| 欧美日韩在线播| 在线视频一区二区免费| 在线观看网站黄不卡| 欧美羞羞免费网站| 欧美日韩午夜在线| 欧美一区二区三区啪啪| 777xxx欧美| 精品福利一二区| 久久综合99re88久久爱| 久久在线观看免费| 久久精品人人做| 国产精品美日韩| 亚洲欧美日韩国产中文在线| 一区二区成人在线视频| 亚洲午夜久久久久久久久久久| 亚洲国产一区二区三区青草影视| 亚洲国产va精品久久久不卡综合| 亚洲成人av一区二区三区| 日本怡春院一区二区| 卡一卡二国产精品| 国产成人综合在线观看| 成人av综合在线| 在线观看亚洲专区| 欧美一级高清片| 久久精品夜色噜噜亚洲a∨| 国产欧美va欧美不卡在线 | 亚洲欧美日韩成人高清在线一区| 亚洲精品成人精品456| 亚洲mv在线观看| 精品亚洲成av人在线观看| 成人av网站在线观看免费| 色婷婷一区二区三区四区| 欧美日韩另类一区| 欧美精品一区二| 亚洲欧美经典视频| 日韩国产欧美在线观看| 国产69精品久久久久777| 91亚洲国产成人精品一区二三| 欧美特级限制片免费在线观看| 精品欧美一区二区久久| 国产精品激情偷乱一区二区∴| 亚洲一卡二卡三卡四卡无卡久久| 免费成人美女在线观看| 成人h动漫精品一区二区| 精品视频一区二区不卡| 久久一区二区视频| 亚洲综合久久av| 国产精品一区二区久久不卡| 在线观看亚洲a| 欧美激情一区二区三区| 日韩不卡一区二区三区| 99久久99久久精品免费观看 | 欧美日韩精品一区二区三区四区| 久久青草欧美一区二区三区| 亚洲欧美成人一区二区三区| 激情小说亚洲一区| 在线视频你懂得一区二区三区| 久久蜜桃香蕉精品一区二区三区| 亚洲最大色网站| 国产成人精品一区二| 日韩一区二区三区精品视频| 亚洲色图欧美在线| 国产精品一区二区久久不卡| 欧美精品在线观看播放| 国产精品久久久久婷婷二区次| 美女精品一区二区| 欧美精品色综合| 亚洲一区二区三区四区中文字幕| 成人性视频免费网站| 久久综合五月天婷婷伊人| 视频一区视频二区中文| 色天天综合色天天久久| 国产欧美精品一区二区三区四区| 蜜桃91丨九色丨蝌蚪91桃色| 欧美视频精品在线| 亚洲免费大片在线观看| 粉嫩av一区二区三区在线播放 | 在线中文字幕一区| 国产精品丝袜久久久久久app| 国内精品第一页| 精品久久人人做人人爱| 日韩高清中文字幕一区| 欧美日本视频在线| 亚洲国产一区二区三区| 欧美色视频在线观看| 一级中文字幕一区二区| 91麻豆免费在线观看| 亚洲天堂2016| 91色九色蝌蚪| 亚洲欧洲av在线| 91蝌蚪porny| 亚洲精品国产品国语在线app| aaa亚洲精品| 亚洲精品高清在线观看| 在线看不卡av| 污片在线观看一区二区| 欧美高清视频不卡网| 七七婷婷婷婷精品国产| 欧美一区二区三区在线视频| 日韩国产在线观看| 精品少妇一区二区三区视频免付费 | 国产精品久久国产精麻豆99网站| 国产91在线|亚洲| 国产精品免费观看视频| 99视频超级精品| 一区二区三区欧美视频| 欧美在线999| 免费人成网站在线观看欧美高清| 欧美成人精品1314www| 国产九九视频一区二区三区| 中文成人av在线| 91国产免费观看| 秋霞电影网一区二区| 久久伊人中文字幕| 97久久超碰国产精品电影| 亚洲靠逼com| 日韩一区二区免费在线电影| 国产乱码字幕精品高清av | 丁香啪啪综合成人亚洲小说| 中文一区一区三区高中清不卡| 91美女在线视频| 日韩中文字幕不卡| 久久精品视频一区二区| 91精品福利视频| 九九九久久久精品| 中文字幕综合网| 欧美一级欧美一级在线播放| 国产乱码一区二区三区|