void Game::ShowFail()//显示失败信息 { static FullScrAni ani; static Button butcont(clientw*4/5-200,clienth*4/5); static Button butback(clientw/5,clienth*4/5); ani.SetAni(ANI_FAIL); ani.Draw(); butcont.SetAni(ANI_BUTTON,ANI_BUTTON_CONTINUE); butcont.Deal(); butcont.Draw(); butback.SetAni(ANI_BUTTON,ANI_BUTTON_BACK); butback.Deal(); butback.Draw(); if(butcont.MousePressed()) { butcont.Recover(); state=GAME_RESTART; ani.Ani()->Restart(); } else if(butback.MousePressed()) { butback.Recover(); level=1; Destroy(); state=GAME_SHOWMENU; } }
void Game::Run()//游戏运行 { //界面元素的创建 static FullScrAni outline; static Text texlevel(675,217,20,20); static Text texfood(675,300,20,20); static Text texscore(675,387,20,20); static Button butpause(628,500,100,50); static Button butret(740,40,50,50); //界面元素动画的设置 butpause.SetAni(ANI_BUTTON,pPanel->IsPause()?ANI_BUTTON_RECOVER:ANI_BUTTON_PAUSE); butret.SetAni(ANI_BUTTON,ANI_BUTTON_RETURN); outline.SetAni(ANI_OUTLINE); //响应 butpause.Deal(); butret.Deal(); if(butpause.MousePressed()) {//是否暂停 butpause.Recover(); pPanel->SetPause(!pPanel->IsPause()); } outline.Draw(); pPanel->DoFrame(); //绘制 butpause.Draw(); butret.Draw(); texlevel.SetText(level,RGB(255,255,255)); texscore.SetText(pPanel->Score(),RGB(255,255,255)); texfood.SetText(pPanel->RestFood(),RGB(255,255,255)); texlevel.Draw(); texscore.Draw(); texfood.Draw(); if(pPanel->Overed()) { if(pPanel->Won())state=GAME_WIN; else state=GAME_FAIL; manager.Stop(); } if(butret.MousePressed()) { butret.Recover(); Destroy(); state=GAME_SHOWMENU; } roundtime+=1000/FPS; if(roundtime%1000<1000/FPS)//每秒储存一次 SaveArchive(); }
void Game::ShowHelp()//显示帮助信息 { static FullScrAni helppage; static Button helpback(clientw*3/4-30,clienth*7/8,200,50); helppage.SetAni(ANI_HELP); helpback.SetAni(ANI_BUTTON,ANI_BUTTON_BACK); helpback.Deal(); helppage.Draw(); helpback.Draw(); if(helpback.MousePressed()) { helpback.Recover(); state=GAME_SHOWMENU; } }
void Game::ShowWin()//显示胜利信息 { static FullScrAni ani; static Button butcont(clientw/2-100,clienth*4/5); ani.SetAni(ANI_WIN); ani.Draw(); butcont.SetAni(ANI_BUTTON,ANI_BUTTON_CONTINUE); butcont.Deal(); butcont.Draw(); if(butcont.MousePressed()) { butcont.Recover(); state=GAME_RESTART; level++; ani.Ani()->Restart(); } }
void Game::ShowMenu()//显示菜单 { static bool firstrun=true; //创建界面元素 static FullScrAni menubk; static Button butnew(clientw/2,clienth/3+20); static Button butold(clientw/2,clienth/3+80); static Button butsel(clientw/2,clienth/3+140); static Button buthelp(clientw/2,clienth/3+200); static Button butquit(clientw/2,clienth/3+260); static SelBox sel(clientw/8+110,clienth*2/5+45,150,50); static Rect selbkground(clientw/8,clienth*2/5,clientw/3,clienth/3); static Button butok(clientw/8+20,clienth*2/5+120,100,50); static Button butcl(clientw/8+145,clienth*2/5+120,100,50); manager.Play(MID_MENUBKM); if(firstrun) { //设置动画 menubk.SetAni(ANI_MENUBK); butnew.SetAni(ANI_BUTTON,ANI_BUTTON_NEW); butold.SetAni(ANI_BUTTON,ANI_BUTTON_OLD); butsel.SetAni(ANI_BUTTON,ANI_BUTTON_SEL); buthelp.SetAni(ANI_BUTTON,ANI_BUTTON_HELP); butquit.SetAni(ANI_BUTTON,ANI_BUTTON_QUIT); butok.SetAni(ANI_BUTTON,ANI_BUTTON_OK); butcl.SetAni(ANI_BUTTON,ANI_BUTTON_CANCEL); sel.Add(1).Add(2).Add(3).Add(4).Add(5).Add(6).Add(7).Add(8).Add(9); sel.SetAni(-1,ANI_BUTTON,ANI_BUTTON,-1,ANI_BUTTON_LEFT,ANI_BUTTON_RIGHT); selbkground.SetAni(ANI_SELBKGROUND); } //界面元素的响应 butnew.Deal(); butold.Deal(); butsel.Deal(); buthelp.Deal(); butquit.Deal(); //界面元素的绘制 menubk.Draw(); butnew.Draw(); butold.Draw(); butsel.Draw(); buthelp.Draw(); butquit.Draw(); //检测界面元素的状态 if(butnew.MousePressed())//新的开始 { level=1; butnew.Recover(); state=GAME_CREATE; } if(butold.MousePressed())//旧的回忆 { ReadArchive(); butold.Recover(); state=GAME_RUN; } if(butsel.MousePressed())//选择关卡 { selbkground.Draw(); sel.Deal(); sel.Draw(); butok.Deal(); butcl.Deal(); butok.Draw(); butcl.Draw(); if(butok.MousePressed()) { butsel.Recover(); butok.Recover(); level=atoi(sel.str().c_str()); state=GAME_CREATE; } if(butcl.MousePressed()) { butcl.Recover(); butsel.Recover(); } } if(buthelp.MousePressed())//帮助 { buthelp.Recover(); state=GAME_SHOWHELP; } if(butquit.MousePressed()) { ::PostQuitMessage(0); } firstrun=false; }