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

📄 game.cpp

📁 上面上传的autotools一文(也就是《使用GNU autotools 改造一个软件项目》)配套的示例程序源代码。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
         m_iCurGirl = 2;         UTIL_Delay(800);         break;      } else if (key == SDLK_d && !(m_iLevelClearFlag & (1 << 3))) {         gpGeneral->PlaySound(SND_DING);         gpGeneral->DrawGirl(340, 260, 280, 200, 3, 0);         gpGeneral->DrawText("D", 360, 270, 1, 250, 250, 0);         gpGeneral->UpdateScreen(340, 260, 280, 200);         m_iCurGirl = 3;         UTIL_Delay(800);         break;      }   }   GameInit();   gpGeneral->ScreenFade(200);}void CGame::GameInit(){   int scores[4] = {16000, 24000, 48000, 100000}, i, cleared = 0;   for (i = 0; i < 4; i++) {      if (m_iLevelClearFlag & (1 << i)) {         cleared++;      }   }   m_pPlayer->m_iScore = 1000;   m_pBot->m_iScore = scores[cleared];   m_iRound = TURN_EAST;   m_iNumDeal = 0;   m_iPendingPoint = 0;   if (RandomLong(1, 100) > 50) {      m_pPlayer->m_iTurn = TURN_EAST;      m_pBot->m_iTurn = TURN_SOUTH;   } else {      m_pBot->m_iTurn = TURN_EAST;      m_pPlayer->m_iTurn = TURN_SOUTH;   }   m_fTurned = false;}void CGame::PlayRound(){   CBasePlayer *pWinner = NULL, *pCurrent;   if (RandomLong(1, 100) < m_iFirstChancePercent && !m_fSanGenRush && !m_fBonusGame) {      m_pPlayer->FirstChance();   }   // This should be backward   if (m_pPlayer->m_iTurn == TURN_EAST) {      pCurrent = m_pBot;   } else {      pCurrent = m_pPlayer;   }   while (pWinner == NULL) {      pCurrent = pCurrent->m_pOpponent;      playeraction act;      pCurrent->DrawHand();      if (pCurrent->m_iNumDiscarded >= 20 || !CanDeclareKong()) {         if (pCurrent->Action(AS_DRAW) == PA_MAHJONG) {            pWinner = pCurrent;            break;         }         gpGeneral->PlayEndRoundMusic();         break;      }      while (1) {         act = pCurrent->Action(AS_DRAW);         if (act == PA_DRAW) {            gpGeneral->PlaySound(SND_DISCARD1);            break;         } else if (act == PA_KONG || act == PA_PUNG || act == PA_CHOW) {            gpGeneral->PlaySound(SND_SOUND3);            pCurrent->m_pOpponent->DrawDiscarded();            if (act == PA_KONG) {               KongDeclared();               continue;            }            break;         } else if (act == PA_MAHJONG) {            pWinner = pCurrent;            break;         }      }      if (pWinner != NULL) {         break; // someone won; don't continue the game      }      pCurrent->DrawHand();      while (1) {         act = pCurrent->Action(AS_DISCARD);         if (act == PA_DISCARD || act == PA_REACH) {            gpGeneral->PlaySound(SND_DISCARD2);            if (act == PA_REACH) {               if (pCurrent->IsBot()) {                  gpGeneral->PlayBGMusic(2);               } else {                  pCurrent->DrawHand();                  pCurrent->DrawDiscarded();                  gpGeneral->PlayBGMusic(-1);                  gpGeneral->Fire();                  gpGeneral->PlayBGMusic(3);               }               m_iPendingPoint += 1000;               pCurrent->m_iScore -= 1000;               DrawScore();               pCurrent->m_pOpponent->DrawHand();            }            break;         } else if (act == PA_KONG) {            KongDeclared();            gpGeneral->PlaySound(SND_SOUND3);            pCurrent->Action(AS_DRAW);            gpGeneral->PlaySound(SND_DISCARD1);            pCurrent->DrawHand();         } else if (act == PA_MAHJONG) {            pWinner = pCurrent;            break;         }      }      pCurrent->DrawHand();      pCurrent->DrawDiscarded();   }   if (pWinner == NULL && RandomLong(1, 100) < m_iLastChancePercent) {      if (m_pPlayer->LastChance()) {         pWinner = m_pPlayer;      }   }   if (pWinner == NULL) {      // This round is a draw      bool ready[2] = {false, false};      UTIL_Delay(1000);      m_pPlayer->DrawHand(true);      m_pBot->DrawHand(true);      gpGeneral->PlaySound(SND_DISCARD2);      ready[0] = m_pPlayer->m_Hand.IsReady();      ready[1] = m_pBot->m_Hand.IsReady();      gpGeneral->DrawUTF8Text(msg("round_draw"), 220, 190, 2, 255, 100, 255);      gpGeneral->UpdateScreen(220, 190, 420, 75);      UTIL_Delay(1000);      if (ready[1]) {         gpGeneral->DrawUTF8Text(msg("ready_hand"), 200, 105, 2, 255, 255, 0);      } else {         gpGeneral->DrawUTF8Text(msg("unready_hand"), 200, 105, 2, 0, 255, 255);      }      gpGeneral->UpdateScreen(200, 105, 440, 100);      if (ready[0]) {         gpGeneral->DrawUTF8Text(msg("ready_hand"), 200, 275, 2, 255, 255, 0);      } else {         gpGeneral->DrawUTF8Text(msg("unready_hand"), 200, 275, 2, 0, 255, 255);      }      gpGeneral->UpdateScreen(200, 275, 440, 100);      if (ready[0] != ready[1] && CanDeclareKong()) {         if (ready[0]) {            m_pPlayer->m_iScore += 1000;            m_pBot->m_iScore -= 1000;         } else {            m_pPlayer->m_iScore -= 1000;            m_pBot->m_iScore += 1000;         }         UTIL_Delay(1000);         gpGeneral->PlaySound(SND_SOUND3);         DrawScore();      }      if (m_pPlayer->m_iTurn == TURN_EAST && !ready[0]) {         m_pPlayer->m_iTurn = TURN_SOUTH;         m_pBot->m_iTurn = TURN_EAST;         if (m_fTurned) {            m_iRound ^= 1;            m_fTurned = false;         } else {            m_fTurned = true;         }      } else if (m_pBot->m_iTurn == TURN_EAST && !ready[1]) {         m_pPlayer->m_iTurn = TURN_EAST;         m_pBot->m_iTurn = TURN_SOUTH;         if (m_fTurned) {            m_iRound ^= 1;            m_fTurned = false;         } else {            m_fTurned = true;         }      }      m_iNumDeal++;      UTIL_Delay(3000);   } else {      // someone won the round      if (!pWinner->IsBot()) {         // Play the "win" music if player won         int i;         bool selfdrawn = pWinner->m_Result.selfdrawn;         CTile t = pWinner->m_Hand.m_Tiles[pWinner->m_Hand.m_iNumTiles - 1].tile;         if (selfdrawn) {            pWinner->m_Hand.m_iNumTiles--;            pWinner->DrawHand();            gpGeneral->AnimSelfDrawn(t);            pWinner->m_Hand.m_iNumTiles++;         } else {            gpGeneral->AnimOut(t);         }         gpGeneral->PlayBGMusic(-1);         UTIL_Delay(500);         gpGeneral->PlayWinMusic();         UTIL_Delay(300);      }      gpGeneral->PlaySound(SND_DISCARD2);      pWinner->DrawHand(true);      if (pWinner->m_fReach) {         gpGeneral->DrawTile(m_Dora[5], (int)(415 + TILE_WIDTH * 0.7 * 2),            235, WALL_SHOWN, 0);         gpGeneral->UpdateScreen((int)(415 + TILE_WIDTH * 0.7 * 2), 235,            (int)(TILE_WIDTH * 0.7), (int)(TILE_HEIGHT_SHOWN * 0.7));      }      UTIL_Delay(3500);      gpGeneral->DrawBG(m_iCurGirl, 1);      pWinner->DrawHand(true);      gpGeneral->UpdateScreen();      UTIL_Delay(500);      gpGeneral->PlaySound(SND_SOUND3);      pWinner->DrawResult();      UTIL_Delay(500);      DrawScore(435, 300);      UTIL_Delay(1500);      pWinner->m_iScore += pWinner->m_Result.score;      pWinner->m_pOpponent->m_iScore -= pWinner->m_Result.score;      gpGeneral->PlaySound(SND_SOUND1);      DrawScore(435, 300);      UTIL_Delay(1500);      if (m_iPendingPoint > 0) {         pWinner->m_iScore += m_iPendingPoint;         gpGeneral->PlaySound(SND_SOUND4);         DrawScore(435, 300);         m_iPendingPoint = 0;      }      UTIL_Delay(4000);      if (pWinner->m_iTurn != TURN_EAST) {         pWinner->m_iTurn = TURN_EAST;         pWinner->m_pOpponent->m_iTurn = TURN_SOUTH;         m_iNumDeal = 0;         if (m_fTurned) {            m_fTurned = false;            m_iRound ^= 1;         } else {            m_fTurned = true;         }      } else {         m_iNumDeal++;      }   }   gpGeneral->ScreenFade();}void CGame::StageClear(){   m_iLevelClearFlag |= (1 << m_iCurGirl);   HighScore();   m_iCurGirl = -1;}void CGame::HighScore(){   gpGeneral->DrawBGFade(m_iCurGirl, 2);   gpGeneral->PlayBGMusic(5);   gpGeneral->WaitForAnyKey();   // TODO: high score   gpGeneral->ScreenFade();}void CGame::KongDeclared(){   m_iKongs++;   if (m_iKongs > 4)      m_iKongs = 4;   gpGeneral->DrawTiles(m_Dora, m_iKongs + 1, (int)(415 + TILE_WIDTH * 0.7 * 2),      200, WALL_SHOWN, 0);   int n = (m_iKongs - 1)/ 2 + 1;   gpGeneral->EraseArea(415, 200, (int)(TILE_WIDTH * 0.7 * n), 60);   if (m_iKongs % 2) {      gpGeneral->DrawTile(CTile(0), (int)(415 + (n - 1) * TILE_WIDTH * 0.7), 215, WALL_CONCEALED, 0);   }   gpGeneral->UpdateScreen(415, 200, 225, 60);}void CGame::DrawScore(int x, int y){   gpGeneral->EraseArea(x, y, 155, 50);   gpGeneral->DrawUTF8Text(msg("computer"), x, y, 0, 255, 255, 0);   gpGeneral->DrawUTF8Text(va("%10d", m_pBot->m_iScore), x + 20, y);   y += 24;   gpGeneral->DrawUTF8Text(msg("player"), x, y, 0, 255, 255, 0);   gpGeneral->DrawUTF8Text(va("%10d", m_pPlayer->m_iScore), x + 20, y);   gpGeneral->UpdateScreen(x, y - 24, 155, 50);}void CGame::DrawDonDen(){   gpGeneral->EraseArea(450, 300, 160, 50);   if (m_iTotalDonDen - m_iDonDen <= 0) {      gpGeneral->UpdateScreen(470, 270, 160, 50);      return;   }   gpGeneral->DrawText("DON", 470, 270, 0, 255, 255, 0);   gpGeneral->DrawText("DEN", 480, 290, 0, 255, 255, 0);   gpGeneral->DrawText(va("%d", m_iTotalDonDen - m_iDonDen), 537, 275,      1, 255, 255, 255);   gpGeneral->DrawUTF8Text("TIMES", 560, 290, 0, 255, 255, 0);   gpGeneral->UpdateScreen(470, 270, 160, 50);}int CGame::IsDora(const CTile &t, bool reach){   int i, d = 0;   for (i = 0; i < m_iKongs + 1; i++) {      if (m_Dora[i].Dora() == t) {         d++;      }   }   if (reach && t == m_Dora[5].Dora()) {      d++;   }   return d;}

⌨️ 快捷键说明

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