⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 一个类似于街机的小游戏
💻 CPP
📖 第 1 页 / 共 4 页
字号:

#pragma comment(lib,"dxguid.lib")

#define WIN32_LEAN_AND_MEAN 
/////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////
#include <windows.h>   
#include <windowsx.h> 
#include <mmsystem.h>
#include <iostream.h> 
#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>  
#include "readyplayvideo.h"
/////////////////////////////////////////////////////////////
#include <dmksctrl.h>
#include <dinput.h>
#include "T3DLIB1.h"
#include "T3DLIB2.h"
#include "gameobject.h"

/////窗口类名
#define WINDOW_CLASS_NAME "WINCLASS"  
#define WINDOW_WIDTH    640            
#define WINDOW_HEIGHT   480
////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
//////最重要的飞机出现安排。。。函数
int Show_Enemy();
int Set_Blue_Show(int number);
int Set_Yellow_Show(int number,int mode);
int Show_Blue();
int Show_Yellow();
int Show_Enemy1();
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//控制兰色飞机和黄色飞机出现的变量 应该是最后的了.
int blue_pos_x1;
int blue_pos_x2;
int show_blue1=0;
int show_blue2=0;
int blue_number1;
int blue_number2;
int show_blue_time1;
int show_blue_time2;
int show_yellow1=0;
int show_yellow2=0;
int yellow_number1;
int yellow_number2;
int show_yellow_time1;
int show_yellow_time2;
int yellow_mode1;
int yellow_mode2;
char buffer[20];
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
HWND main_window_handle;
HINSTANCE main_instance;

////////////////函数
LRESULT CALLBACK WindowProc(HWND hwnd, 
						    UINT msg, 
                            WPARAM wparam, 
                            LPARAM lparam)
{

PAINTSTRUCT	ps;		  
HDC			hdc;	  

switch(msg)
	{	
	case WM_CREATE: 
        {

		return(0);
		} break;

    case WM_PAINT:
         {
      
          hdc = BeginPaint(hwnd,&ps);

          EndPaint(hwnd,&ps);
          return(0);
        } break;

/*
	 case WM_KEYDOWN:
		 {
          switch(toupper((int) wparam))
            {      
		   
                case 'X':
                    CloseClip();
                    break;
            }//end swith
		 }
            break;
   ///事件返回。。消息
        case WM_GRAPHNOTIFY:
            HandleGraphEvent();
            break;
*/

	case WM_DESTROY: 
		{
		
		PostQuitMessage(0);
		return(0);

		} break;

	default:break;

    } // end switch
    if (pVW)
        pVW->NotifyOwnerMessage((LONG_PTR) hwnd, msg, wparam, lparam);


return (DefWindowProc(hwnd, msg, wparam, lparam));

} // end WinProc
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
int WINAPI WinMain(	HINSTANCE hinstance,
					HINSTANCE hprevinstance,
					LPSTR lpcmdline,
					int ncmdshow)
{

WNDCLASS winclass;			
MSG		 msg;		
 HWND hwnd;


winclass.style			= CS_DBLCLKS | CS_OWNDC | 
                          CS_HREDRAW | CS_VREDRAW;
winclass.lpfnWndProc	= WindowProc;
winclass.cbClsExtra		= 0;
winclass.cbWndExtra		= 0;
winclass.hInstance		= hinstance;
winclass.hIcon			= NULL;
winclass.hCursor		= NULL;
winclass.hbrBackground	= (HBRUSH)GetStockObject(BLACK_BRUSH);
winclass.lpszMenuName	= NULL; 
winclass.lpszClassName	= WINDOW_CLASS_NAME;

if (!RegisterClass(&winclass))
	return(0);

if (!(hwnd = CreateWindow(WINDOW_CLASS_NAME, 
						  "穿越尼布尼滋",	 
						  WS_POPUP | WS_VISIBLE,
					 	  0,0,	  
						  WINDOW_WIDTH,  
                          WINDOW_HEIGHT, 
						  NULL,	   
						  NULL,	   
						  hinstance,
						  NULL)))
return(0);


main_window_handle = hwnd;
main_instance      = hinstance;

		 
             CoInitialize(NULL);
            OpenClip();
            ToggleFullScreen();
            CoUninitialize();
  		  
         
     Game_Init();
   
 
while(1)
	{
	if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
		{ 
		
                if (msg.message == WM_QUIT) break;	    
		
		        TranslateMessage(&msg);

		
		        DispatchMessage(&msg);
		} 
       
			  
				  Game_Main();
			  
			

	} 

		   Game_Shutdown();
	   
       return(msg.wParam);

} 

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

int Game_Main()
{
	         
           // 游戏处于什么状态?
     if (Game_state == GAME_STATE_INIT)
	 {
         Game_state = GAME_STATE_MENU;
	 } 
     else
     if (Game_state == GAME_STATE_MENU)
	 {
       
	   
		 while(control_menu==1)
		 {
               
	         DInput_Read_Keyboard();

			 lpddsback->Blt(NULL,lpddmainmenu,NULL,DDBLT_WAIT,NULL);

             DDraw_Flip();
			 
			 if(keyboard_state[DIK_RETURN])
			 {

					///////这里搞定飞行的背景///////////////////////////////////////////////////////////////////////
		     
			  int index=0,surface_lpitch;	
			  UCHAR * source_buffer=NULL,* dest_buffer=NULL;
			 lpddbackground=DDraw_Create_Surface(480,1200,DDSCAPS_VIDEOMEMORY,-1);
								
			 Load_Bitmap_File(&bitmap8bit,"beijing.bmp");
								
             memcpy(mainpalette,bitmap8bit.palette,256);

			 lpddpal->SetEntries(0,0,256,bitmap8bit.palette);
																	
			 DDRAW_INIT_STRUCT(ddsd);
								
		 	 lpddbackground->Lock(NULL,&ddsd,DDLOCK_WAIT | DDLOCK_SURFACEMEMORYPTR,NULL);
								
			 dest=(UCHAR *)ddsd.lpSurface;
								
			surface_lpitch=(int)ddsd.lPitch;
								
			 dest_buffer=dest;
								
			source_buffer=bitmap8bit.buffer;
								
			 for(index=0;index<1200;index++)
			 {
				 memcpy((void *)dest_buffer,(void *)source_buffer,480);
								
				 dest_buffer+=surface_lpitch;
								
					 source_buffer+=480;
			}
								
			 Unload_Bitmap_File(&bitmap8bit);
								
			 lpddbackground->Unlock(NULL);
				
///////////位图加载完毕/////////////////////////////////////////////////////////////////////////////

				 Game_state=GAME_STATE_RESTART;
				 
				 break;
			 }
			 else if(keyboard_state[DIK_DOWN] || keyboard_state[DIK_S])
			 {
				 control_menu=2;
				 Sleep(300);
				 break;
			 }
			 else if(keyboard_state[DIK_ESCAPE])
			 {
				 SendMessage(main_window_handle,WM_DESTROY,0,0);         
				 break;
			 }
		 };
		 while(control_menu==2)
		 {
			  
	         DInput_Read_Keyboard();

			 if(keyboard_state[DIK_RETURN] )
			 {
                 show_instraction=1;
				 break;
			 }
             if(!show_instraction)
			 {
			    lpddsback->Blt(NULL,lpddmenuinst,NULL,DDBLT_WAIT,NULL);
			    DDraw_Flip();
			 }
			 else 
			 {
	
				 lpddsback->Blt(NULL,lpddinstraction,NULL,DDBLT_WAIT,NULL);	
				  DDraw_Flip();
				 Sleep(10000);
				 show_instraction=0;
				 DDraw_Fill_Surface(lpddsback,0,NULL);
		
				break;
			 }
	  

			 if(keyboard_state[DIK_UP] || keyboard_state[DIK_W])
			 {
				 control_menu=1;
				  Sleep(300);
				 break;
			 }
			 else if(keyboard_state[DIK_DOWN] || keyboard_state[DIK_S])
			 {
				 control_menu=3;
				  Sleep(300);
				 break;
			 }
			 else if(keyboard_state[DIK_ESCAPE])
			 {
				 SendMessage(main_window_handle,WM_DESTROY,0,0);
				 break;
			 }			 

		 };
		 while(control_menu==3)
		 {
			  
	         DInput_Read_Keyboard();

			 lpddsback->Blt(NULL,lpddmenuexit,NULL,DDBLT_WAIT,NULL);

			 DDraw_Flip();

			 if(keyboard_state[DIK_UP] || keyboard_state[DIK_W])
			 {
				 control_menu=2;
				 Sleep(300);
				 break;
			 }
			 if(keyboard_state[DIK_RETURN])
			 {
                 SendMessage(main_window_handle,WM_DESTROY,0,0);
				 break;
			 }
			 
			 if(keyboard_state[DIK_ESCAPE])
			 {
				 SendMessage(main_window_handle,WM_DESTROY,0,0);
				 break;
			 }
          
		 };

	 } 
     else 
     if (Game_state == GAME_STATE_RESTART)
	 {
       //游戏参数重新设为默认初值。
		  DDraw_Fill_Surface(lpddsprimary,0,NULL);
		  
		  Reset_Player();

		  Player_ship=3;
		  
		  Reset_Game();

          Sleep(1000);
          
          Game_state = GAME_STATE_RUNNING;
           
	 } 
     else
     if (Game_state == GAME_STATE_RUNNING)
	 {  
		 // int index;
       //记时器开始记时  
             Start_Clock();
      //清空后备缓冲表面   
			 
             DDraw_Fill_Surface(lpddsback, 0);
       //获取键盘输入的格式化数据	 
			 DInput_Read_Keyboard();
		   
		
		    if (keyboard_state[DIK_T] && !control_stop1)
			{
                 control_stop1 = 1;

                  control_stop2 = (control_stop2) ? 0 : 1;

			} // end if

            if (!keyboard_state[DIK_T]) control_stop1 = 0;

   if(!control_stop2)
   {
          //左边的帮助信息和循环的背景。。
			 Move_And_Draw_Background();

		     lpddsback->Blt(&dest_rect,lpddhelp,NULL,DDBLT_WAIT,NULL);
         if(part==1)
		 {
			if(control_show_enemy < 130)
			{
			  
			  if(control_show_enemy > 2)
			  {
				  Draw_Text_GDI("射",265,220,0,lpddsback);
			  }
			  if(control_show_enemy > 4)
			  {
				  Draw_Text_GDI("击",280,220,0,lpddsback);
			  }
			  if(control_show_enemy > 6)
			  {
				  Draw_Text_GDI("小",295,220,0,lpddsback);
			  }
			  if(control_show_enemy > 8)
			  {
				  Draw_Text_GDI("小",310,220,0,lpddsback);
			  }
			  if(control_show_enemy > 10)
			  {
				  Draw_Text_GDI("小",325,220,0,lpddsback);
			  }
			  if(control_show_enemy > 12)
			  {
				  Draw_Text_GDI("游",340,220,0,lpddsback);
			  }
			  if(control_show_enemy > 14)
			  {
				  Draw_Text_GDI("戏.",355,220,0,lpddsback);
			  }
			  if(control_show_enemy > 16)
			  {
				  Draw_Text_GDI("川",375,220,0,lpddsback);
			  }
			  if(control_show_enemy > 18)
			  {
				  Draw_Text_GDI("师",390,220,0,lpddsback);
			  }
			  if(control_show_enemy > 20)
			  {
				  Draw_Text_GDI("版.",405,220,0,lpddsback);
			  }
			  if(control_show_enemy > 22)
			  {
				  Draw_Text_GDI("谢",425,220,0,lpddsback);
			  }
			  if(control_show_enemy > 24)
			  {
				  Draw_Text_GDI("谢",440,220,0,lpddsback);
			  }
			  if(control_show_enemy > 26)
			  {
				  Draw_Text_GDI("试",455,220,0,lpddsback);
			  }
			  if(control_show_enemy > 28)
			  {
				  Draw_Text_GDI("玩",470,220,0,lpddsback);
			  }
			  if(control_show_enemy > 30)
			  {
				  Draw_Text_GDI(": )",490,220,0,lpddsback);
			  }
			  if(control_show_enemy > 32)
			  {
				  Draw_Text_GDI("制",300,250,0,lpddsback);
			  }
			  if(control_show_enemy > 34)
			  {
				  Draw_Text_GDI("作",320,250,0,lpddsback);
			  }
			  if(control_show_enemy > 36)
			  {
				  Draw_Text_GDI("者:",340,250,0,lpddsback);
			  }
			  if(control_show_enemy > 38)
			  {
				  Draw_Text_GDI("叉",365,250,0,lpddsback);
			  }
			  if(control_show_enemy > 40)
			  {
				  Draw_Text_GDI("叉",385,250,0,lpddsback);
			  }
			  if(control_show_enemy > 42)
			  {
				  Draw_Text_GDI("叉.",405,250,0,lpddsback);
			  }
			  if(control_show_enemy > 44)
			  {
				  Draw_Text_GDI("参:",290,280,0,lpddsback);
			  }
			  if(control_show_enemy > 46)
			  {
				  Draw_Text_GDI("赛",315,280,0,lpddsback);
			  }
			  if(control_show_enemy > 48)
			  {
				  Draw_Text_GDI("号:",340,280,0,lpddsback);
			  }
			  if(control_show_enemy > 50)
			  {
				  Draw_Text_GDI("C-",360,280,0,lpddsback);
			  }
			  if(control_show_enemy > 52)
			  {
				  Draw_Text_GDI("03",375,280,0,lpddsback);
			  }
			  if(control_show_enemy > 54)
			  {
				  Draw_Text_GDI("3.",390,280,0,lpddsback);
			  }
			  if(control_show_enemy > 56)
			  {
				  Draw_Text_GDI("OK了",425,280,0,lpddsback);
			  }
			  if(control_show_enemy > 58)
			  {
				  Draw_Text_GDI(": )",460,280,0,lpddsback);
			  }
			}
		}//end part==1
		else if(part==2)
		{
				if(control_show_enemy < 130)
			{
			  
			  if(control_show_enemy > 2)
			  {
				  Draw_Text_GDI("进",265,220,0,lpddsback);
			  }
			  if(control_show_enemy > 4)
			  {
				  Draw_Text_GDI("入",280,220,0,lpddsback);
			  }
			  if(control_show_enemy > 6)
			  {
				  Draw_Text_GDI("第",295,220,0,lpddsback);
			  }
			  if(control_show_enemy > 8)
			  {
				  Draw_Text_GDI("二",310,220,0,lpddsback);
			  }
			  if(control_show_enemy > 10)
			  {
				  Draw_Text_GDI("关",325,220,0,lpddsback);
			  }
			  if(control_show_enemy > 12)
			  {
				  Draw_Text_GDI("了",340,220,0,lpddsback);
			  }
			  if(control_show_enemy > 14)
			  {
				  Draw_Text_GDI("啊.",355,220,0,lpddsback);
			  }
			  if(control_show_enemy > 16)
			  {
				  Draw_Text_GDI("加",375,220,0,lpddsback);
			  }
			  if(control_show_enemy > 18)
			  {
				  Draw_Text_GDI("油",390,220,0,lpddsback);
			  }
			  if(control_show_enemy > 20)
			  {
				  Draw_Text_GDI("啊.",405,220,0,lpddsback);
			  }
			  if(control_show_enemy > 22)
			  {
				  Draw_Text_GDI("GO!",425,220,0,lpddsback);
			  }

			}
		}//end part==2
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
       if(!player_win)
	   {
		   	

		 if(Player_state==ALIVE)             //玩家活着才检测它的行为和事件
		 {
          //玩家同时按下右和上,或者右和下
                  if ((keyboard_state[DIK_RIGHT] && (keyboard_state[DIK_UP])) || (keyboard_state[DIK_D] && (keyboard_state[DIK_W])))
			 {
     	                 //这里将DDraw_BOB中的那个动画序列改成向右的模式动画。
                         //并将x,y坐标加上速度。
		          Set_Animation_BOB(&Player,0); //左倾
		          Player.x+=Player.xv;
		          Player.y-=Player.yv;
			 } 
                  else
                  if ((keyboard_state[DIK_LEFT] && (keyboard_state[DIK_UP]))|| (keyboard_state[DIK_A] && keyboard_state[DIK_W]))
			 {
                 //这里将DDraw_BOB中的那个动画序列改成向左的模式动画。
                 //并将x,y坐标减去速度。
		         Set_Animation_BOB(&Player,1);
		         Player.x-=Player.xv;
		         Player.y-=Player.yv;
			 } 
                 else
	         if((keyboard_state[DIK_RIGHT] && (keyboard_state[DIK_DOWN])) || (keyboard_state[DIK_D] && keyboard_state[DIK_S]))
			 {
		          Set_Animation_BOB(&Player,0);
		          Player.x+=Player.xv;
		          Player.y+=Player.yv;
			 }
	         else
	         if((keyboard_state[DIK_LEFT] && (keyboard_state[DIK_DOWN])) || (keyboard_state[DIK_A] && keyboard_state[DIK_S]))
			 {
		       Set_Animation_BOB(&Player,1);
		       Player.x-=Player.xv;
		       Player.y+=Player.yv;
			 }
                 else
                 if (keyboard_state[DIK_UP] || keyboard_state[DIK_W])
			 {
                 //这里将DDraw_BOB中的那个动画序列改成单张的。
                  //将y 坐标减去速度。
		      Player.y-=Player.yv;
			 } 
                else
                if (keyboard_state[DIK_DOWN] || keyboard_state[DIK_S])
			 {
             //这里将DDraw_BOB中的那个动画序列改成单张的
             //将y坐标加上速度。
		        Player.y+=Player.yv;
			 } 
	         else
	         if(keyboard_state[DIK_LEFT] || keyboard_state[DIK_A])
			 {
				 Set_Animation_BOB(&Player,1);

		         Player.x-=Player.xv;
			 }
	         else
	         if (keyboard_state[DIK_RIGHT] || keyboard_state[DIK_D])
			 {
				 Set_Animation_BOB(&Player,0);

	             Player.x+=Player.xv;
			 }
			
			 
				if (keyboard_state[DIK_V] && !Scanner_time)
			{
                 Scanner_time = 1;

                  Scanner_show = (Scanner_show) ? 0 : 1;

			} // end if

            if (!keyboard_state[DIK_V])

                  Scanner_time = 0;

            if(!Scanner_show)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -