Démineur c++
Résolu
Pipette
-
Pipette -
Pipette -
Bonjour, pour un tp je dois concevoir un jeu démineur, le problème vient quand je dois déterminer pour chaque case les mines alentours, impossible de faire fonctionner correctement la fonction si quelqu'un avec un oeil neuf peut regarder afin de voir si il trouve d'ou peut venir le problème car la je ne comprends vraiment pas la méthode me semblant correct...
Merci à vous pour votre aide
Merci à vous pour votre aide
#include <iostream> #include <cstdlib> #include<ctime> using namespace std; //Permet de réaliser un tableau a 2D int * *creer_tab2D(int n, int m){ int * *p=new int *[n] ; for(int i=0;i<n;i++) p[i]=new int[m] ; return (p); } //Structure de la matrice struct matrice { int nbl; int nbc ; int * *T ; }; //Création de la matrice matrice *Creer_matrice(int n, int m){ matrice *p=new matrice; (*p).nbl=n; (*p).nbc=m; (*p).T=creer_tab2D(n,m); return (p); } //Initilisation de la matrice a zéro void initZero_mat(matrice &J){ for(int i=0;i<J.nbl;i++){ for(int j=0;j<J.nbc;j++){ J.T[i][j]=0; } } } //Création du tableau avec les mines int Int_jeu(matrice & J, int Mines, int n){ srand(time(NULL)); int i,j; for(int cpt=0;cpt<Mines;cpt++){ i = rand()%n; j = rand()%n; if (J.T[i][j]==2){ while(J.T[i][j]==2){ i = rand()%n; j = rand()%n; } J.T[i][j]=2; } else{ J.T[i][j]=2; } } return(0); } bool possible(int z, int e, int n){ if((z==-1 or z>=n) and(e==-1 or e>=n)) return(false); else return(true); } //Determine les mines a coter de chaque case void mines_autour(matrice &J, matrice &M, int n){ for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ int cpt=0; if(J.T[i][j]!=2){ for(int a=-1; a!=1; a++){ for(int b=-1; b!=1; b++){ if(a!=0 and b!=0){ if(possible(a+i,b+j,n)){ if(J.T[a+i][b+j]==2){ cpt++; } } } } } } M.T[i][j]=cpt; } } } //fonction d'affichage du tableau de mines // Affichage_TM(*J,n); void Affichage_TM(matrice & J, int n){ for(int i=0; i<n; i++){ for(int j=0;j<n;j++){ cout<<J.T[i][j]<<" "; } cout<<endl; } } int main(){ int n=5; int m=5; int Mines=5; matrice *J=Creer_matrice(n,m); initZero_mat(*J); Int_jeu(*J,Mines,n); matrice *M=Creer_matrice(n,m); initZero_mat(*M); Affichage_TM(*J,n); cout<<endl; Affichage_TM(*M,n); return(0); }
A voir également:
- Démineur c++
- Démineur google - Accueil - Services en ligne
- Accéder aux jeux cachés de Google - Guide
- Démineur sur MSN - Forum Jeux vidéo
- Bloquer démineur/solitaire GPO - Forum Réseau
- Démineur/Minesweeper sur Windows 8 - Forum Windows 8 / 8.1
2 réponses
Bonjour,
Le code que tu écris est à 95% du C. Seul
Les erreurs que j'ai vues
-
Ces 3 lignes ont une chacune une erreur:
- on veut aller de -1 à +1, et tu indiques de quitter la boucle quand
- la 3ième, tu confonds encore ET et OU. Il suffit que qu'un seul parmi
Le code que tu écris est à 95% du C. Seul
using namespace std(qui est une très vielle commande à oublier), l'utilisation de
std::cout,
std::cin, l'utilisation de
new(qui est à ne JAMAIS utiliser) et les références sont du C++. Le langage que tu apprends n'est donc pas vraiment le C++!
Les erreurs que j'ai vues
-
if((z==-1 or z>=n) and(e==-1 or e>=n)) return(false);. Non: une erreur sur z OU BIEN une erreur sur e font une position non valide!
for(int a=-1; a!=1; a++){ for(int b=-1; b!=1; b++){ if(a!=0 and b!=0){
Ces 3 lignes ont une chacune une erreur:
- on veut aller de -1 à +1, et tu indiques de quitter la boucle quand
avaudra 1!
- la 3ième, tu confonds encore ET et OU. Il suffit que qu'un seul parmi
aOU BIEN
bsoit non nul.
Merci de ton aide, en corrigeant tout marche parfaitement merci beaucoup!
Je ne voyais pas les erreurs a force de me prendre la tète dessus.
Normalement je suis censé apprendre le c++ mais bon je te crois si c'est que du c principalement, je ne fais que reprendre mes cours.
Merci encore de ton aide!!
Je ne voyais pas les erreurs a force de me prendre la tète dessus.
Normalement je suis censé apprendre le c++ mais bon je te crois si c'est que du c principalement, je ne fais que reprendre mes cours.
Merci encore de ton aide!!