Rubik ha scritto:
Hai tralasciato il fatto che quando ritorni al gioco con b, il vettore x[] è ancora pieno, è sufficiente spostare l'inizializzazione:
for(int i=0;i<9;i++) x[i]=' ';
subito dopo il do
ciao di nuovo, avrei un problema:
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <windows.h>
using namespace std;
int difficolta;
char vincitore;
char x[9];
void tris();
bool combinazione();
bool full();
bool terna(int, int, int);
void legenda();
int main(){
system("color f0");
int posizione,pc;
char indietro, cambio;
cout<<"---------- TRIS [Work in progress] ----------"<<endl<<endl;
cout<<"- Inserisci '1' per giocare in modalita' facile"<<endl;
cout<<"- Inserisci '2' per giocare in modalita' media (work in progress)"<<endl;
cout<<"- Inserisci '3' per giocare in modalita' difficile (work in progress)"<<endl<<endl;
cin>>difficolta;
for(int i=0;i<9;i++) x[i]=' ';
switch(difficolta){
case 1:{
system("color 20");
do{
for(int i=0;i<9;i++) x[i]=' ';
system("cls");
cout<<"---------- TRIS [Work in progress] ----------"<<endl<<endl;
srand(time(0));
while(combinazione()==false and full()==false){
legenda();
tris();
cout<<"\n\nInserisci posizione da 1 a 9\n ";
cin>>posizione;
while(posizione<1 or posizione >9 or x[posizione-1]!=' '){
cout<<"Casella occupata\n"<<endl;
cout<<"Inserisci di nuovo la posizione: ";
cin>>posizione;
}
x[posizione-1]='x';
if (full()==false and combinazione()==false){
pc=rand()%9;
while(x[pc]!=' '){
pc=rand()%9;
}
x[pc]='o';
}
tris();
system("cls");
cout<<"---------- TRIS [Work in progress] ----------"<<endl<<endl;
}
tris();
cout<<endl;
if(vincitore=='x') cout<<" Hai vinto!\n";
else if(vincitore=='o') cout<<" Hai perso!\n";
if (combinazione()==false) cout<<" Pareggio!\n";
cout<<"Se vuoi giocare di nuovo in modalita' facile, premi b.\n";
cout<<"Premi qualsiasi altra lettera per uscire.\n";
cin>>indietro;
}while(indietro=='b');
break;
}
//-----------------------------------------------------------------------------------------------------------------------
case 2:{
cout<<"---------- TRIS [Work in progress] ----------"<<endl<<endl;
system("color 60");
system("cls");
cout<<"---------- TRIS [Work in progress] ----------"<<endl<<endl;
cout<<"Lavori in corso\n";
break;
}
case 3:{
cout<<"---------- TRIS [Work in progress] ----------"<<endl<<endl;
system("color c0");
system("cls");
cout<<"---------- TRIS [Work in progress] ----------"<<endl<<endl;
cout<<"Lavori in corso\n";
break;
}
}
}
void tris(){
cout<<" "<<x[0]<<" | "<<x[1]<<" | "<<x[2]<<endl;
cout<<" "<<"---------\n";
cout<<" "<<x[3]<<" | "<<x[4]<<" | "<<x[5]<<endl;
cout<<" "<<"---------\n";
cout<<" "<<x[6]<<" | "<<x[7]<<" | "<<x[8]<<endl;
}
bool full(){
for(int i=0;i<9;i++) if(x[i]==' ') return false;
return true;
}
bool combinazione(){
if(terna(0,1,2) or
terna(3,4,5) or
terna(6,7,8) or
terna(0,3,6) or
terna(1,4,7) or
terna(2,5,8) or
terna(0,4,8) or
terna(2,4,6)) return true;
return false;
}
bool terna(int a, int b, int c){
if(x[a]==x[b] && x[b]==x[c] && x[a]!=' '){
vincitore=x[a];
return true;
}
return false;
}
void legenda(){
cout<<"\n";
cout<<"\t\t\t\t\t\t\t\tSegui questo schema per l'inserimento:\n";
cout<<"\n";
cout<<"\t\t\t\t\t\t\t\t\t\t1 2 3"<<endl;
cout<<"\t\t\t\t\t\t\t\t\t\t4 5 6"<<endl;
cout<<"\t\t\t\t\t\t\t\t\t\t7 8 9"<<endl;
}
Volevo fare che, una volta completata la partita (nel mio caso del case 1), il programma, dopo aver ricevuto in input una lettera diversa da b, ritorni a chiedere con quale difficoltà si vuole giocare...
Per farlo avevo fatto un ciclo do while che partiva dalla scelta della difficoltà fino alla fine del case 1, ma la parentesi graffa che lo chiudeva, era come se andasse a "sovrapporsi" con le altre, come posso fare? Non so se mi spiego