C + + implémente une carte de distribution de 8 * 8 mines générée au hasard par un jeu de déminage de console en utilisant class

Questions et réponses du rseoc 2021-12-30 06:30:29 阅读数:310

impl mente une carte distribution

Terminer un jeu de déminage de console.Chaque zone adjacente au maillage ne contient qu'une seule ligne et une seule colonne 4 Mailles.
Les règles:
(1)Production aléatoire 8*8 Répartition des mines;
(2)Utilisateurs“y”Représenter le jeu,“q”Quitter le jeu;
(3)Laissez l'utilisateur entrer le numéro de ligne,Avec le clavier“m”Tag ray,“k”Ouvre.;
(4)La zone ouverte est tonnerre ou toute la zone est retournée,Et game over.

Comme suit: CGame Code d'achèvement de la définition de la classe.

class CGame {public:CGame(); //Initialisationvirtual ~CGame(); void Print(); //Imprimer le diagramme actuelbool DoStep(); void FlgMine(int x,int y); //Marque Ray.void Open(int x,int y); //Ouvrir le noeudbool Judge(); //Décider si c'est finivoid Run(); //Jeu en cours}



Adopter les réponses:

La réponse est la suivante::

#include <iostream>#include <stdlib.h>#include <time.h>using namespace std;class CGame {public: CGame(); //Initialisation virtual ~CGame(); void Print(); //Imprimer le diagramme actuel bool DoStep(); void FlgMine(int x,int y); //Marque Ray. void Open(int x,int y); //Ouvrir le noeud bool Judge(); //Décider si c'est fini void Run(); //Jeu en coursprivate: int grid[8][8]; // Générer un diagramme de Ray ,0Indique qu'il n'y a pas de tonnerre,1Ça veut dire qu'il y a ray int state[8][8]; //Statut,0 Indique qu'il n'est pas ouvert ,1 Indique le tonnerre standard ,2 Indique que le  bool mflag; // S'il y a un tonnerre  bool bover; //Si le jeu est terminé};CGame::CGame(){ int i,j; mflag = false; bover = false; for (i=0;i<8;i++) { for (j=0;j<8;j++) { grid[i][j] = rand()%2; //Générer0-1Nombre aléatoire de state[i][j] = 0; } }}void CGame::Print(){ int i,j; system("cls"); for (i=0;i<8;i++) { for (j=0;j<8;j++) { if (state[i][j] == 0) cout << "□"; else if(state[i][j] == 1) cout << "m"; else cout << grid[i][j]<<" "; //Ouvre. } cout << endl; }}//bool CGame::DoStep(){ int x,y,op; cout << " Veuillez entrer le nombre de lignes :"; cin >>x>>y; cout << "Veuillez sélectionner:1.Tag ray 2.Ouvre."; while(1) { cin >> op; if(op==1) { FlgMine(x,y); break; } else { Open(x,y); if(mflag) return false; break; } } fflush(stdin); cout << "Continuer ou non(Appuyez.yContinue./Appuyez.qSortie):"; char ch = getchar(); getchar(); if(ch == 'Y' || ch == 'y') return true; return false;}//Marque Ray.void CGame::FlgMine(int x,int y){ state[x-1][y-1] = 1; //Marque Ray. Print(); // Rafraîchir le diagramme }//Ouvrir le noeudvoid CGame::Open(int x,int y){ state[x-1][y-1] = 2;//Ouvre. Print();// Rafraîchir le diagramme  if(grid[x-1][y-1] == 1)//C'est Ray. { mflag = true; //Fin du jeu cout << " Il est tombé dans le tonnerre "; }}//Décider si c'est finibool CGame::Judge() { if(mflag) return true; // Pour déterminer si tout est sorti  for (int i=0;i<8;i++) { for (int j=0;j<8;j++) { if (state[i] == 0) { return false; } } } return true;}//Jeu en coursvoid CGame::Run(){ Print(); while(!bover) { if( DoStep() ) Judge(); else break; }}CGame::~CGame(){}int main(){ srand((unsigned int)time(NULL)); CGame game; game.Run(); cout << " Fin du jeu "<<endl; system("pause"); return 0;}


Autres réponses2:

Combien de mines allez - vous déployer ?


Autres réponses3:

Autres réponses4:
#include<iostream>#include<cstdlib>#include<ctime>#include<vector>#include<iomanip>using namespace std;class CGame{public: void Print(); //Imprimer le diagramme actuel void DoStep(); void FlgMine(int x, int y); //Marque Ray. void Open(int x, int y); //Ouvrir le noeud bool Judge(); //Décider si c'est fini void Run(); //Jeu en coursprivate: char map[8][8];};bool CGame::Judge(){ return 0;}void CGame::Open(int x, int y){ if (map[x][y] == '*') { cout << "game over" << endl; exit(0); } else { for (int i = 0; i < 8; ++i) { for (int j = 0; j < 8; ++j) { //cout << map[i][j] << " "; cout << "#" << " "; } cout << endl; } }}void CGame::Print(){ srand(time(0)); //constexpr int sz = 8; //char map[sz][sz]; for (auto& row : map) { for (auto& col : row) { int num = rand() % 100; if (num <= 40) col = '*'; else col = '0'; } } for (int i = 0; i < 8; ++i) { for (int j = 0; j < 8; j++) { if (map[i][j] != '*') continue; if (i + 1 < 8 && map[i + 1][j] != '*')map[i + 1][j] += 1; if (i - 1 >= 0 && map[i - 1][j] != '*')map[i - 1][j] += 1; if (j + 1 < 8 && map[i][j + 1] != '*')map[i][j + 1] += 1; if (j + 1 >= 0 && map[i][j - 1] != '*')map[i][j - 1] += 1; } } for (int i = 0; i < 8; ++i) { for (int j = 0; j < 8; ++j) { //cout << map[i][j] << " "; cout << "#" << " "; } cout << endl; }}void CGame::DoStep(){ char dostep; cin >> dostep; if (dostep == 'y') { cout << "Commencez le jeu" << endl; } else if(dostep == 'q') { cout << "Quitter le jeu" << endl; exit(0); } else { cout << "Erreur d'entrée" << endl; exit(0); }}void CGame::FlgMine(int x, int y){ if (map[x][y] == '*') { cout << map[x][y] << endl; } else { cout << map[x][y] << endl; }}void CGame::Run(){ cout << "Appuyez.Y Commencez le jeu en appuyant sur QQuitter le jeu" << endl; DoStep(); Print(); cout << " Veuillez entrer le numéro de ligne (X,Y):" << endl; int x; int y; cin >> x; cin >> y; cout << "Appuyez.MMarque Ray.,Appuyez.KOuvre Ray" << endl; char o; cin >> o; if (o == 'm') { FlgMine(x, y); } else if (o == 'k') { Open(x, y); } else { cout << "Erreur d'entrée"; exit(0); }}void main(){ CGame game; game.Run(); }

J'ai écrit une partie , Et il s'est coincé

版权声明:本文为[Questions et réponses du rseoc]所创,转载请带上原文链接,感谢。 https://primo.wiki/2021/12/202112281524093899.html