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

📄 mainfrm.cpp

📁 2D即时战略游戏VC源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
                initFail("IDS_DPLOBBY_ERROR_C");
                goto FAIL;
            }
            // move on
            return FALSE;
        }
        else
        {
            initFail("IDS_DPLOBBY_ERROR_C");
            goto FAIL;
        }
    }

    // are we hosting or joining ?
    if (glpdplConnection->dwFlags & DPLCONNECTION_CREATESESSION)
    {
        gbIsHost = TRUE;
    }

    // set our session flags
    glpdplConnection->lpSessionDesc->dwFlags = DPSESSION_MIGRATEHOST | 
                                                 DPSESSION_KEEPALIVE;

    // let lobby know our connection flags
    hr = DPLobbySetConnectionSettings();
    if (FAILED(hr))
    {
        initFail("IDS_DPLOBBY_ERROR_C");
        goto FAIL;
    }

    if ( !gbIsHost ) 
    {
        // show splash screen and 
        // connection status if we are joining a game
       // UpdateWindow(ghWndMain);
        //hwndStatus = ShowConnectStatus();
    }
    else
    {
        // we are hosting, don't need connection status
        hwndStatus = NULL;
    }

    // connect to the lobby
    hr = DPLobbyConnect();

    if ( hwndStatus )
    {
        // get rid of the connectino status window
        DestroyWindow(hwndStatus);
    }

    if (FAILED(hr))
    {
        initFail("IDS_DPLOBBY_ERROR_C");
        goto FAIL;
    }

    // create our player
    hr = DPlayCreatePlayer(
                            &gOurID,
#ifdef UNICODE
                            glpdplConnection->lpPlayerName->lpszShortName,
#else
                            glpdplConnection->lpPlayerName->lpszShortNameA,
#endif
                            NULL,
                            NULL,
                            0
                          );

    if (FAILED(hr))
    {
        initFail("IDS_DPLOBBY_ERROR_C");
        goto FAIL;
    }


    // cleanup
    hr = DPLobbyRelease();
    if (FAILED(hr))
    {
        initFail("IDS_DPLOBBY_ERROR_C");
        goto FAIL;
    }

    // we were lobbied
    return TRUE;

FAIL:
    // cleanup and exit
    DPLobbyRelease();
    //ExitGame();
    return FALSE;
}



void InitMessageBuffers(void)
{gHostMsg.byType=MSG_HOST;
 gBuildMsg.byType=MSG_BUILD;
 gFireMsg.byType=MSG_FIRE;
 gMoveMsg.byType=MSG_MOVE;
 gCallFixMsg.byType=MSG_CALLFIX;
 gTalkMsg.byType=MSG_TALK;
}

void InitMudGame(void)
{  HRESULT hr;

	// were we launched by a lobby ?
    if (LaunchedByLobby())
    {
        // start game
        PostMessage(WinMain, UM_LAUNCH, 0, 0);
        bMud = TRUE;
    }


    
    // initialize global message buffers
    InitMessageBuffers();

    // update window title
//    UpdateTitle();

    // get current session description (glpdpSD is initialized in here)
    hr = DPlayGetSessionDesc();
    if ((FAILED(hr)) || (!glpdpSD))
    {
        initFail("IDS_DPLAY_ERROR_GSD");
        return;
    }


}

/*
 * updateFrame
 * 
 * Decide what needs to be blitted next, wait for flip to complete,
 * then flip the buffers.
 */

void UpdateFrame( void )
{  MCI_ANIM_STEP_PARMS sp;
   MCI_SET_PARMS Set;
//   MCI_STATUS_PARMS Status;
   RECT rect;
   DWORD Keys=NULL;
   DWORD time=0;
   
   
   
   rect.left=rect.top=0;
   rect.right=rect.bottom=480;
   if(ProgramState!=PLAYING)
   {switch(ProgramState)
      {case SPLASH:
         
   		  //InitInput
			
     
        if(animEscnum==0) 
		{
		 InitInput(ghinst,ghWndMain);  //init one time is important!!!
	
		 //FillColor(lpDDSPrimary,0);
		 wAviID=PlayAvi("avi\\start.avi",120,80,400,300,NULL,ghWndMain,1);
         NowTime=timeGetTime();
		 animEscnum=2;
		  if(wAviID==-1)NowTime=0;
	
		}
		else if(animEscnum==1) 
		{Keys=DI_ReadKeys(NULL);
			while(DI_ReadKeys(NULL));
		if((Keys & KEY_ESC)||((timeGetTime()-NowTime)>=40500)) 
		  {
		
		   mciSendCommand(wAviID,MCI_CLOSE,0,NULL);
			//FillColor(lpDDSPrimary,0);
		   //wAviID=PlayAvi("avi\\tank.avi",120,80,400,300,NULL,ghWndMain,1);
           NowTime=timeGetTime();
		   animEscnum=2;
		   //avitimer=540;
		   if(wAviID==-1)NowTime=0;
		   
		}                                                                       

		}

		else if(animEscnum==2) 
		{Keys=DI_ReadKeys(NULL);
			while(DI_ReadKeys(NULL));
			if((Keys & KEY_ESC)||((timeGetTime()-NowTime)>=40500)) 
		   { mciSendCommand(wAviID,MCI_CLOSE,0,NULL);
	
		     ProgramState=GETSELECT;
				return;
		   }
		  }

//		   mciSendCommand(wAviID,MCI_STEP,MCI_ANIM_STEP_FRAMES,(DWORD)(LPVOID)&sp);
  //         mciSendCommand(wAviID,MCI_PLAY,0,NULL);
     
		   
     
    
			
		 break;
       case GETSELECT:
		
		  
		   
		//	   PlayAvi("avi\\intr1.avi",120,80,400,300,NULL,ghWndMain,1);

		    
				  Guid=DoWizard(pv);
              //ProgramState=ALONE;
		    /*if(ProcessKeys()==MUD)
				ProgramState=MUD;
			else if(ProcessKeys()==ALONE)
				ProgramState=ALONE;*/
			//Flip();
			break;
       case ALONE:
		   // mciSendCommand(wAviID,MCI_CLOSE,0,NULL);
			POINT p;
			p.x=30;
			p.y=30;
			
          
			if(IntrPlay.bplay==FALSE)
				IntrPlay.InitIntro();
			if((!IntrPlay.Intro())||(DI_ReadKeys(NULL) & KEY_RETURN))
			  {
			   //while(DI_ReadKeys(NULL));//clear the kb buffer
				FillColor(lpDDSPrimary,0);		
                 
				IntrPlay.FreeIntro();
				//view start windows
				LPDIRECTDRAWSURFACE lpstart; 
	            lpstart=DDLoadBitmap(lpDD,"bmp\\start.bmp",0,0);
	            //JFBlt(lpGround,0,0,640,480,lpwin,0,0,DDBLTFAST_NOCOLORKEY);
                JFBlt(lpDDSPrimary,120,90,400,300,lpstart,0,0,DDBLTFAST_NOCOLORKEY);
	             time = timeGetTime();
	             while(1)
				 {if(((timeGetTime()-time)>5000)||(DI_ReadKeys(NULL) & KEY_RETURN))
				  break;
				  
				 }
	            if(lpstart!=NULL)
				{lpstart->Release();
				}

			    InitAloneGame();
				CleanupInput();
				ProgramState=PLAYING;
			    Sound(p,5,TRUE);
			    }
				
			break;
       
       case MUD:
		   InitMudGame();
		   ProgramState=GETCONNECT;
            break;
        }
   return;
   }
		   

  
   // Blit the stuff for the next frame
 
   
 // JFBlt(lpDDSPrimary, 0, 0, 480,480,lpShape,0,0,
 //           DDBLTFAST_SRCCOLORKEY );

 
//FillColor(lpDDSBack,RGB(100,255,100));
Blt(lpDDSBack, 0, 0, 640,480,lpGround,0,0);
//DDSPrimary->Flip(lpGround,NULL);

OnFight();
if(groupselect==TRUE)
	RT(lpDDSBack,grouprect,1);
if(panelview==TRUE)
  JFBlt(lpDDSBack, 480, 0, 160,480,lpDDPP,0,0,
           DDBLTFAST_NOCOLORKEY );
else JFBlt(lpDDSBack, 624, 0, 16,480,Others[5],0,0,
           DDBLTFAST_NOCOLORKEY );
// if(lpShape->UpdateOverlay(&rect,lpDDSBack,&rect,DDOVER_SHOW,NULL)!=DD_OK);  
  //  initFail("Overlay Fail");
  
 
 Flip();

} /* updateFrame */



/*
 * restoreAll
 *
 * restore all lost objects
 */
HRESULT restoreAll( void )
{int i;
    HRESULT     ddrval;

    ddrval = lpDDSPrimary->Restore();
    if( ddrval == DD_OK )
    {

		ddrval = lpDDSBack->Restore();
		if(ddrval!=DD_OK)return ddrval;

		ddrval=lpGround->Restore();
		if(ddrval!=DD_OK)return ddrval;

        for(i=0;i<FLOORNUM;i++)
		  {ddrval = Floor[i]->Restore();
			if(ddrval!=DD_OK)return ddrval;
		  }	
        for(i=0;i<BUILDNUM;i++)
		  {ddrval = Build[i]->Restore();
			if(ddrval!=DD_OK)return ddrval;
		  }	
        for(i=0;i<MYARMYNUM;i++)
		  {ddrval = Myarmy[i]->Restore();
			if(ddrval!=DD_OK)return ddrval;
		}	
		 for(i=0;i<ARMYNUM;i++)
		  {ddrval = Army[i]->Restore();
			if(ddrval!=DD_OK)return ddrval;
		}	
        for(i=0;i<ENEMYNUM;i++)
		  {ddrval = Enemy[i]->Restore();
			if(ddrval!=DD_OK)return ddrval;
		}	
        for(i=0;i<EXPNUM;i++)
		  {ddrval = PicExp[i]->Restore();
			if(ddrval!=DD_OK)return ddrval;
		}	
         
        for(i=0;i<BULLETNUM;i++)
		  {ddrval =PicBullet[i]->Restore();
			if(ddrval!=DD_OK)return ddrval;
		}	

        for(i=0;i<TREENUM;i++)
		  {ddrval =PicTree[i]->Restore();
			if(ddrval!=DD_OK)return ddrval;
		}	 
		for(i=0;i<HILLNUM;i++)
		  {ddrval =PicHill[i]->Restore();
			if(ddrval!=DD_OK)return ddrval;
		}	 
        ddrval = PicRect->Restore();
			if(ddrval!=DD_OK)return ddrval;
        //ddrval = PicShape->Restore();
		//	if(ddrval!=DD_OK)return ddrval;
        ddrval = PicWhite->Restore();
			if(ddrval!=DD_OK)return ddrval;
        ddrval = PicBlack->Restore();
			if(ddrval!=DD_OK)return ddrval;
//        InitSurfaces();
           
        
    }
    return ddrval;

} /* restoreAll */





/*----------------------------------------------------------------------------*\
| AppExit()                                                                    |
|                                                                              |
| Description:                                                                 |
|   App is just about to exit, cleanup.                                        |
|                                                                              |
\*----------------------------------------------------------------------------*/
void AppExit(HWND Window)
{// ReleaseCapture();
  
} 


       

static BOOL InitDib()
{int i;
 char File[32];
 for (i=0;i<FLOORNUM;i++)
 {sprintf(File,"bmp\\tileb%d.bmp",i);
    	
  Floor[i]=DDLoadBitmap(lpDD,File,0,0);
  DDSetColorKey(Floor[i],CLR_INVALID);
  if(Floor[i]==NULL)return initFail(NULL);
 }
 for (i=0;i<BUILDNUM;i++)
 {sprintf(File,"bmp\\build%d.bmp",i);
    	
  Build[i]=DDLoadBitmap(lpDD,File,0,0);
  DDSetColorKey(Build[i],CLR_INVALID);
  if(Build[i]==NULL)return initFail(NULL);
 }
  
 for (i=0;i<MYARMYNUM;i++)
 { sprintf(File,"bmp\\x-tt74%d.bmp",i);
    	
  Myarmy[i]=DDLoadBitmap(lpDD,File,0,0);
  DDSetColorKey(Myarmy[i],CLR_INVALID);
  if(Myarmy[i]==NULL)return initFail(NULL);
 }
 
 for (i=0;i<ARMYNUM;i++)
 { sprintf(File,"bmp\\army%d.bmp",i);
    	
  Army[i]=DDLoadBitmap(lpDD,File,0,0);
  DDSetColorKey(Army[i],CLR_INVALID);
  if(Army[i]==NULL)return initFail(NULL);
 }
 
 for (i=0;i<ENEMYNUM;i++)
 { sprintf(File,"bmp\\ene-tk%d.bmp",i);
    	
  Enemy[i]=DDLoadBitmap(lpDD,File,0,0);
   DDSetColorKey(Enemy[i],CLR_INVALID);
  if(Enemy[i]==NULL)return initFail(NULL);

 }
 for (i=0;i<EXPNUM;i++)
 { sprintf(File,"bmp\\x-exp%d.bmp",i);
    	
  PicExp[i]=DDLoadBitmap(lpDD,File,0,0);
   DDSetColorKey(PicExp[i],CLR_INVALID);
  if(PicExp[i]==NULL)return initFail(NULL);
 }
 for (i=0;i<BULLETNUM;i++)
 { sprintf(File,"bmp\\bullet%d.bmp",i);
    	
  PicBullet[i]=DDLoadBitmap(lpDD,File,0,0);
   DDSetColorKey(PicBullet[i],CLR_INVALID);
  if(PicBullet[i]==NULL)return initFail(NULL);
 }
 
  for (i=0;i<TREENUM;i++)
 { sprintf(File,"bmp\\X-tree%d.bmp",i);
    	
  PicTree[i]=DDLoadBitmap(lpDD,File,0,0);
   DDSetColorKey(PicTree[i],CLR_INVALID);
  if(PicTree[i]==NULL)return initFail(NULL);
 }

 for (i=0;i<HILLNUM;i++)
 { sprintf(File,"bmp\\hill%d.bmp",i);
    	
  PicHill[i]=DDLoadBitmap(lpDD,File,0,0);
   DDSetColorKey(PicHill[i],CLR_INVALID);
  if(PicHill[i]==NULL)return initFail(NULL);
 }
 for (i=0;i<OTHERSNUM;i++)
 { sprintf(File,"bmp\\others%d.bmp",i);
    	
  Others[i]=DDLoadBitmap(lpDD,File,0,0);
   DDSetColorKey(Others[i],CLR_INVALID);
  if(Others[i]==NULL)return initFail(NULL);
 }
 
  PicRect=DDLoadBitmap(lpDD,"bmp\\rect.bmp",0,0);
   DDSetColorKey(PicRect,CLR_INVALID);
  if(PicRect==NULL)return initFail(NULL);
/*
 PicShape=DDLoadBitmap(lpDD,"bmp\\shape.bmp",0,0);
   DDSetColorKey(PicShape,RGB(128,128,128));
  if(PicShape==NULL)return initFail(NULL);
  */

   PicWhite=DDLoadBitmap(lpDD,"bmp\\white.bmp",0,0);
   DDSetColorKey(PicWhite,CLR_INVALID);
  if(PicWhite==NULL)return initFail(NULL);

   PicBlack=DDLoadBitmap(lpDD,"bmp\\Black.bmp",0,0);
   DDSetColorKey(PicBlack,CLR_INVALID);
  if(PicBlack==NULL)return initFail(NULL);

return TRUE;
}


 

void InitBackground(int state)

⌨️ 快捷键说明

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