0
#include <iostream>
#include <stdlib.h>
#include <ctime>

class Minesweeper {
   public:
       void buildBoards();
       void printTopLvlBoard();
       void printBottomLvlBoard();
       void userEntry(int x, int y);
       void gameOver();
       bool stateGood();
   private:
       static const int CLMN_MAX_SIZE = 5;
       static const int ROW_MAX_SIZE = 5;
       char topLvlBoard[ROW_MAX_SIZE][CLMN_MAX_SIZE];
       char bottomLvlBoard[ROW_MAX_SIZE][CLMN_MAX_SIZE];
       bool gameState;
   };

void Minesweeper::printTopLvlBoard(){
    std:: cout << "Board" << std:: endl;
    for(int i = 0; i < ROW_MAX_SIZE; i++) {
       for(int j = 0; j < CLMN_MAX_SIZE; j++) {
          std::cout << topLvlBoard[i][j];
       }
    std::cout << std::endl;
    }
}

void Minesweeper::buildBoards(){
   for(int i = 0; i < ROW_MAX_SIZE; i++){
       for(int j = 0; j < CLMN_MAX_SIZE; j++){
           bottomLvlBoard[i][j] = 'O';
           topLvlBoard[i][j] = 'x';
       }
   }
   for(int k = 0; k < 5; k++) {
       bottomLvlBoard[**rand()%5**][**rand()%5**] = 'B';
   }
   gameState = true;
}

void Minesweeper::printBottomLvlBoard(){
   for(int i = 0; i < CLMN_MAX_SIZE; i++){
      for(int j = 0; j < ROW_MAX_SIZE; j++){
        std::cout << bottomLvlBoard[i][j];
      }
      std::cout << std:: endl;
   }
}  

void Minesweeper::userEntry(int x,int y){
   char bottomTmp = bottomLvlBoard[x-1][y-1];

   if(bottomTmp == 'O'){
      topLvlBoard[x-1][y-1] = '*';
      bottomLvlBoard[x-1][y-1] = 'C';
   }
   else if(bottomTmp == 'B'){
      gameOver();
   }
}
void Minesweeper::gameOver() {

  std::cout << std:: endl;
  std::cout << "**********************" << std:: endl;
  std::cout << "**********************" << std:: endl;
  std::cout << "*** BOMB BOMB BOMB ***" << std:: endl;
  std::cout << "*** BOMB BOMB BOMB ***" << std:: endl;
  std::cout << "*** BOMB BOMB BOMB ***" << std:: endl;
  std::cout << "*** BOMB BOMB BOMB ***" << std:: endl;
  std::cout << "**********************" << std:: endl;
  std::cout << "**********************" << std:: endl;
  std::cout << std:: endl;

  std::cout << "You have landed on a bomb!" << std:: endl;
  std::cout << std:: endl;

  printBottomLvlBoard();
  gameState = false;
}

bool Minesweeper::stateGood(){
   bool tmpYesNo = (gameState == true) ? true : false;
   return tmpYesNo;
}

rand() 関数を介して明示的なランダム性を強制する方法はありますか? このプログラムを実行するたびに、グリッド全体で同じ予測可能なパターンの爆弾が得られます。main() でシードを変更しても、約 3 パターンのバリエーションしか得られません。

4

3 に答える 3