Salve!
Mi sto cimentando nella creazione di un TRIS in C++ che avevo lasciato in sospeso per un po' causa influenza.
Il codice sorgente è questo:
#include <iostream>
#include <string>
using namespace std;
char t[9]={'0','1','2','3','4','5','6','7','8'};//tabella del tris
string g1, g2;
char sceltag1,sceltag2;
int c=0;
int null=0;
void mostra_tabella(){
cout<<"\t|"<<t[0]<<"|"<<t[1]<<"|"<<t[2]<<"|"<<endl;
cout<<"\t|"<<t[3]<<"|"<<t[4]<<"|"<<t[5]<<"|"<<endl;
cout<<"\t|"<<t[6]<<"|"<<t[7]<<"|"<<t[8]<<"|"<<endl;
}
int scelta(int s, int s1, int s2){
if(s<0 && s>8){
cout<<"Inserisci un numero compreso da 0 a 8!\n";
}
else{
for(int i=0; i<=8; i++) {
if(s1==t[i]){
t[i]='X';}
}//for per il primo giocatore
for(int i=0; i<=9; i++) {
if(s2==t[i]){
t[i]='O';}
}//for per il secondo giocatore
}//chiudo else
}
int controllo_vittoria(string win){//tutti i casi di vittoria
if(t[0]=='X' && t[1]=='X' && t[2]=='X'||t[0]=='O' && t[1]=='O' && t[2]=='O' ){
cout<<win<<" ha vinto!";
c=1;}
if(t[2]=='X' && t[5]=='X' && t[8]=='X'|| t[2]=='O' && t[5]=='O' && t[8]=='O'){
cout<<win<<" ha vinto!";
c=1;}
if(t[6]=='X' && t[7]=='X' && t[8]=='X'|| t[6]=='O' && t[7]=='O' && t[8]=='O'){
cout<<win<<" ha vinto!";
c=1;}
if(t[0]=='X' && t[3]=='X' && t[6]=='X'|| t[0]=='O' && t[3]=='O' && t[6]=='O'){
cout<<win<<" ha vinto!";
c=1;}
if(t[0]=='X' && t[4]=='X' && t[8]=='X'|| t[0]=='O' && t[4]=='O' && t[8]=='O'){
cout<<win<<" ha vinto!";
c=1;}
if(t[6]=='X' && t[4]=='X' && t[2]=='X'|| t[6]=='O' && t[4]=='O' && t[2]=='O'){
cout<<win<<" ha vinto!";
c=1;}
}
int pareggio(){
for(int i=0; i<9; i++){
if(t[0]!='0'){
if(t[1]!='1'){
if(t[2]!='2'){
if(t[3]!='3'){
if(t[4]!='4'){
if(t[5]!='5'){
if(t[6]!='6'){
if(t[7]!='7'){
if(t[8]!='8'){
cout<<"Pareggio! Nessuno ha vinto!";
c=1;
}}}}}}}}}//chiudo tutti gli IF incatenati
}
}
int main(){
cout<<"Ciao! Benvenuto al gioco TRIS"<<endl;
cout<<"Inserisci il nome del primo giocatore: ";
cin>>g1;
cout<<"Iinserisci il nome del secondo giocatore: ";
cin>>g2; cout<<endl;
cout<<g1<<" sara' la X"<<endl;
cout<<g2<<" sara' la O"<<endl;
cout<<"_____________________"<<endl<<endl;
mostra_tabella();
do{
cout<<"\nE' il turno di "<<g1<<": ";
cin>>sceltag1;
scelta(sceltag1, sceltag1, null);
mostra_tabella();
controllo_vittoria(g1);
pareggio();
if(c==1)
{break;}
//turno g1
cout<<"\nE' il turno di "<<g2<<": ";
cin>>sceltag2;
scelta(sceltag2, null, sceltag2);
mostra_tabella();
controllo_vittoria(g2);
pareggio();
//turno g2
}
while(c==0);
system("PAUSE");
}
Ora, il problema sale a galla quando inserisco un numero maggiore 8 o minore di 0.
Il controllo avviene nella funziona
scelta, e da come potrete notare se avviaste il programma,
nel caso in cui mettessimo un valore a più di una cifra (ES. 15), vengono calcolati i valori singoli come 1 e 5; saltando anche i turni.
Dove sbaglio? Ho bisogno di puntatori?
Grazie in anticipo ad eventuali risposte.