Campo minato con array

di il
7 risposte

Campo minato con array

Buongiorno a tutti, sono disperato, mi sembra di essere vicino alla soluzione, ma non riesco in alcun modo a finire.. Sto cercando di sviluppare un programma simile al campo minato dove le bombe e le zone vicine sono dei numeri, 1 ad esempio è la bomba, 2 è la zona vicina alla bomba e 0 la zona neutra. Se l'utente seleziona il punto con valore 1 il conteggio dei punti ottenuti fin lì finisce e chiude la partita, mentre le altre due permettono di continuarla. Se l'utente seleziona un valore esterno all'array 10x10 la partita finisce. Potreste aiutarmi a capire dove sbaglio?

/*Programma in C++ variante del gioco "Campo minato" 
tramite l'uso di una matrice 10x10 dove si nascondono 8 mine*/

#include <iostream>
using namespace std;

int campo_minato[10][10]=
{
	{0, 0, 2, 2, 2, 1, 2, 2, 2, 2},
	{0, 0, 2, 1, 2, 2, 2, 2, 1, 2},
	{0, 0, 2, 2, 2, 2, 2, 2, 2, 2},
	{0, 0, 0, 0, 0, 2, 1, 2, 0, 0},
	{0, 0, 0, 0, 0, 2, 2, 2, 0, 0},
	{2, 2, 2, 0, 0, 0, 0, 0, 0, 0},
	{2, 1, 2, 0, 0, 0, 0, 0, 0, 0},
	{2, 2, 2, 0, 0, 0, 0, 2, 2, 2},
	{0, 0, 0, 2, 2, 2, 0, 2, 1, 2},
	{0, 0, 0, 2, 1, 2, 0, 2, 2, 1},
	};

int x;	   				    //valore colonne inserito dall'utente
int y;						//valore righe inserito dall'utente
int conteggio;				//valore dei punti ottenuti durante la partita dall'utente utilizzatore
int z;						//valore della cella di array
int cv;						//contatore verità

int main()
{
	conteggio= 0;
	cout << "Benvenuto nella variante del gioco 'Campo minato'!";
	cout << endl;

	while (cv=0){
	cout << "Inserire le coordinate: ";
	cin >> x; y;
	
	if (x < 0 || x > 9 || y <0 || x >9){
		cout << "Le coordinate non rispecchiano il campo di gioco";
		cout << "Game over";
		cout << conteggio;
		cv++;}
	else campo_minato[x] [y] = z;

	if (z=0)
	{
		cout << "OK";
		conteggio = conteggio +2;
		continue;
	}
	else if (z=2)
	{
		cout << "TIC TAC";
		conteggio--;
		continue;
	}
	else (z=1);
	{
		cout << "BOOM";
		conteggio = conteggio -5;
		break;
	}

	cout << "Il tuo punteggio vale: " << conteggio;
	cout << endl;
	return(0);
	}
}

7 Risposte

  • Re: Campo minato con array

    Dove sbagli ... a fare cosa?

    Non hai dato neanche una minima informazione del malfunzionamento/errore.
  • Re: Campo minato con array

    Intanto c'è un errore di sintassi. Dove scrivi:
    cin >> x; y;
    Devi mettere:
    cin >> x >> y;
    altrimenti dopo il primo ; il compilatore pensa che l'istruzione cin sia finita.
  • Re: Campo minato con array

    Hai ragione, scusa! Il fatto è che appena avvio il programma creato con la funzione debug, ad esempio, mi da solo la frase di benvenuto e finisce lì..mi ero dimenticato di inizializzare la variabile oltretutto..comunque l'ho rifatto inserendo un loop.
    
    /*Programma in C++ variante del gioco "Campo minato" 
    tramite l'uso di una matrice 10x10 dove si nascondono 8 mine*/
    
    #include <iostream>
    using namespace std;
    
    int campo_minato[10][10]=
    {
    	{0, 0, 2, 2, 2, 1, 2, 2, 2, 2},
    	{0, 0, 2, 1, 2, 2, 2, 2, 1, 2},
    	{0, 0, 2, 2, 2, 2, 2, 2, 2, 2},
    	{0, 0, 0, 0, 0, 2, 1, 2, 0, 0},
    	{0, 0, 0, 0, 0, 2, 2, 2, 0, 0},
    	{2, 2, 2, 0, 0, 0, 0, 0, 0, 0},
    	{2, 1, 2, 0, 0, 0, 0, 0, 0, 0},
    	{2, 2, 2, 0, 0, 0, 0, 2, 2, 2},
    	{0, 0, 0, 2, 2, 2, 0, 2, 1, 2},
    	{0, 0, 0, 2, 1, 2, 0, 2, 2, 1},
    };
    
    int x;	   				    //valore colonne inserito dall'utente
    int y;						//valore righe inserito dall'utente
    int conteggio;				//valore dei punti ottenuti durante la partita dall'utente utilizzatore
    int z;						//valore della cella di array
    
    int main()
    {
    	conteggio= 0;
    	cout << "Benvenuto nella variante del gioco 'Campo minato'!";
    	cout << endl;
    while (true)
    {
    	cout << "inserire le coordinate";
    	cin >> x;
    	cout << "inserire y";
    	cin >>y;
    
    	if ( x < 0 || x > 9 || y < 0 || y > 9){
    		cout << "Casella fuori campo";
    		break;
    campo_minato [x] [y] = z;
    	switch (z) {
    	case 0:
    		cout << "OK";
    		conteggio = conteggio +2;
    		continue;
    	case 2:
    		cout << "TIC TAC";
    		conteggio--;
    		continue;
    	case 1:
    		cout << "BOOM";
    		conteggio = conteggio -5;
    		break;
    	}
    	cout << "Il punteggio ottenuto è pari a: " << conteggio;
    	}
    	return(0);
    }
    }
    se inserisco valori fuori dall'array mi da solo casella fuori campo e non mi mette il punteggio, mentre se metto valori interni all'array, li inserisco e si chiude inaspettatamente, qualche idea? PS: ho inserito la x e la y differenti solo per provare, poi modifico come suggerito sopra!
  • Re: Campo minato con array

    Qui mancano le basi. ad esempio:
    campo_minato [x] [y] = z;
    è come se stessi facendo l'assegnazione al contrario

    Il punteggio non esce perché lo stampi all'interno del ciclo while (se sistemi l'indentatura te ne accorgi), per cui quando fai break salti anche quello.
  • Re: Campo minato con array

    Sono un po' duro in queste cose, in che senso se sistemassi l'indentatura? E l'assegnazione come dovrei farla? Scusa, ma sono davvero alle prime armi!
  • Re: Campo minato con array

    Ok, adesso ho cambiato l'assegnazione e mi escono i valori giusti. Per il resto mi sembra funzionare, anche i punteggi!
  • Re: Campo minato con array

    Sistemare l'indentatura vuol dire che l'if e lo switch devono essere spostati più a destra per capire che sono contenuti all'interno del while, e lo stesso per tutte le altre istruzioni e le parentesi graffe di chiusura dei blocchi.

    Inoltre ora ho visto un altro errore: hai messo return 0 all'interno del while, per cui il programma terminerà sempre alla fine del primo ciclo (tranne quando lo salti con break).

    per assegnare il valore della cella a z, devi fare:
    z=campo_minato [x] [y];
    ciao
Devi accedere o registrarti per scrivere nel forum
7 risposte