📄 mainfrm.cpp
字号:
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 + -