Turnos en C++

Iniciado por BrendiisFox, 27 Septiembre 2015, 04:00 AM

0 Miembros y 1 Visitante están viendo este tema.

BrendiisFox

Buenas Noches,
Estoy realizando en xo o tic tac toe en c++. Mi programa funciona bien hasta ahora pero mi unico problema es al intercambiar los jugadores. Si alguien me puede señalar el error se los agradeceria mucho

les dejo el codigo:


Código (cpp) [Seleccionar]

#include <iostream>
#include <cstdlib>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <windows.h>


using namespace std;


int auxiliar;
bool turno ;
class Nodo{
public:
char valor;
    int Index;
    Nodo *sigPtr;
    Nodo *antrPtr;
    Nodo *arrPtr;
    Nodo *abaPtr;

Nodo(char val){
valor=' ';
        //indice a -1
        Index = val;
        //se le mandara al nodo el numero de indice
        sigPtr = 0;
        antrPtr = 0;
        arrPtr = 0;
        abaPtr = 0;
    }
};

class Lista{
private:

public:
    Nodo *PrimeroPtr;
    Nodo *UltimoPtr;
    int tamano;

Lista(){
PrimeroPtr=UltimoPtr=0;
        tamano=0;
    }

bool IsEmpty(){
        return PrimeroPtr==0;
    }

void InsertAtEndDbl(int val){
Nodo *nuevoPtr=new Nodo(val);

if (IsEmpty()){
PrimeroPtr = UltimoPtr = nuevoPtr;
}else{
UltimoPtr->sigPtr = nuevoPtr;
      nuevoPtr->antrPtr = UltimoPtr;
      UltimoPtr = nuevoPtr;
      tamano++;
}
}

void createListX0(){
for(int i=1; i<=9; i++){
InsertAtEndDbl(i);
}

Nodo * anttemp = PrimeroPtr;
    Nodo *actual = PrimeroPtr;

for(int j=1; j<=9; j++){
actual = actual->sigPtr;

if(j>2&&j<9){
anttemp->abaPtr = actual;
            actual->arrPtr = anttemp;
            anttemp = anttemp->sigPtr;         
        }               
    } 
}
   
void Imprimir(){
cout<<" "<<endl;
if(IsEmpty()){
        cout<<"Vacio"<<endl;
    }else{
Nodo *Actual=PrimeroPtr;
        cout<<"["<<Actual->valor<<"] ";
        while(Actual->sigPtr!=0){
            Actual=Actual->sigPtr;
            cout<<"["<<Actual->valor<<"] ";
            if(Actual->Index==3 && Actual->Index<=9 || Actual->Index==6 && Actual->Index<=9){
                cout<<endl;
            }
        }
    }
}

void LlenarJugador1(int posicion){
char simbolo = 'X';
Nodo *actual=PrimeroPtr;
int auxiliar = 0;

if(posicion == 1){
actual->valor = simbolo;
auxiliar++;
}
else if(posicion == 2){
actual->sigPtr->valor = simbolo;
auxiliar++;
}
else if(posicion == 3){
actual->sigPtr->sigPtr->valor = simbolo;
auxiliar++;
}
else if(posicion == 4){
actual->sigPtr->sigPtr->sigPtr->valor = simbolo;
auxiliar++;
}
else if(posicion == 5){
actual->sigPtr->sigPtr->sigPtr->sigPtr->valor = simbolo;
auxiliar++;
}
else if(posicion == 6){
actual->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->valor = simbolo;
auxiliar++;
}
else if(posicion == 7){
actual->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->valor = simbolo;
auxiliar++;
}
else if(posicion == 8){
actual->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->valor = simbolo;
auxiliar++;
}
else{
actual->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->valor = simbolo;
auxiliar++;
}
turno == false;


void LlenarJugador2(int posicion){
char simbolo = '0';
Nodo *actual=PrimeroPtr;
int auxiliar = 0;

if(posicion == 1){
actual->valor = simbolo;
auxiliar++;
}
else if(posicion == 2){
actual->sigPtr->valor = simbolo;
auxiliar++;
}
else if(posicion == 3){
actual->sigPtr->sigPtr->valor = simbolo;
auxiliar++;
}
else if(posicion == 4){
actual->sigPtr->sigPtr->sigPtr->valor = simbolo;
auxiliar++;
}
else if(posicion == 5){
actual->sigPtr->sigPtr->sigPtr->sigPtr->valor = simbolo;
auxiliar++;
}
else if(posicion == 6){
actual->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->valor = simbolo;
auxiliar++;
}
else if(posicion == 7){
actual->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->valor = simbolo;
auxiliar++;
}
else if(posicion == 8){
actual->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->valor = simbolo;
auxiliar++;
}
else{
actual->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->valor = simbolo;
auxiliar++;
}
turno == true;


void Gane(){
Nodo *actual=PrimeroPtr;

//GANE HORIZONTAL
if (actual->valor == 'X' && actual->sigPtr->valor == 'X' && actual->sigPtr->sigPtr->valor == 'X') {
cout<<"Gano de manera Horizontal"<<endl;
auxiliar =9;
system("PAUSE");
}
if(actual->valor=='0' && actual->sigPtr->valor == '0' && actual->sigPtr->sigPtr->valor=='0')
{
cout<<"Gano de manera Horizontal"<<endl;
auxiliar =9;
system("PAUSE");
}
if(actual->sigPtr->sigPtr->sigPtr->valor == 'X' && actual->sigPtr->sigPtr->sigPtr->sigPtr->valor == 'X' && actual->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->valor == 'X'){
cout<<"Gano de manera Horizontal"<<endl;
}
if(actual->sigPtr->sigPtr->sigPtr->valor == '0' && actual->sigPtr->sigPtr->sigPtr->sigPtr->valor == '0' && actual->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->valor == '0'){
cout<<"Gano de manera Horizontal"<<endl;
auxiliar =9;
system("PAUSE");
}
if(actual->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr-> valor == 'X' && actual->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->valor == 'X' &&  actual->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->valor =='X'){
cout<<"Gano de manera Horizontal"<<endl;
auxiliar =9;
system("PAUSE");
}
if(actual->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr-> valor == '0' && actual->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->valor == '0' &&  actual->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->valor =='0'){
cout<<"Gano de manera Horizontal"<<endl;
auxiliar =9;
system("PAUSE");
}


//GANE DIAGONAL
if(actual->valor == 'X' && actual->sigPtr->sigPtr->sigPtr->sigPtr->valor == 'X' && actual->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->valor =='X'){
cout<<"Gano de manera Diagonal"<<endl;
auxiliar =9;
system("PAUSE");
}
if(actual->valor == '0' && actual->sigPtr->sigPtr->sigPtr->sigPtr->valor == '0' && actual->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->valor =='0'){
cout<<"Gano de manera Diagonal"<<endl;
system("PAUSE");
}
if(actual->sigPtr->sigPtr->valor == 'X' && actual->sigPtr->sigPtr->sigPtr->sigPtr->valor == 'X' && actual->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->valor == 'X'){
cout<<"Gano de manera Diagonal";
auxiliar = 9;
system("PAUSE");
}
if(actual->sigPtr->sigPtr->valor == '0' && actual->sigPtr->sigPtr->sigPtr->sigPtr->valor == '0' && actual->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->valor == '0'){
cout<<"Gano de manera Diagonal"<<endl;
auxiliar =9;
system("PAUSE");
}

//GANE VERTICAL
if(actual->valor == 'X' && actual->sigPtr->sigPtr->sigPtr->valor == 'X' && actual->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr-> valor == 'X'){
cout<<"Gano de manera vertical"<<endl;
auxiliar =9;
system("PAUSE");
}
if(actual->valor == '0' && actual->sigPtr->sigPtr->sigPtr->valor == '0' && actual->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr-> valor == '0'){
cout<<"Gano de manera vertical"<<endl;
auxiliar =9;
system("PAUSE");
}
if(actual->sigPtr->valor == 'X' && actual->sigPtr->sigPtr->sigPtr->sigPtr->valor == 'X' && actual->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr-> valor == 'X'){
cout<<"Gano de manera vertical"<<endl;
auxiliar =9;
system("PAUSE");
}
if(actual->sigPtr->valor == '0' && actual->sigPtr->sigPtr->sigPtr->sigPtr->valor == '0' && actual->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr-> valor == '0'){
cout<<"Gano de manera vertical"<<endl;
auxiliar =9;
system("PAUSE");
}
if(actual->sigPtr->sigPtr->valor == 'X' && actual->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->valor == 'X' && actual->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr-> valor == 'X'){
cout<<"Gano de manera vertical"<<endl;
auxiliar =9;
system("PAUSE");
}
if(actual->sigPtr->sigPtr->valor == '0' && actual->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->valor == '0' && actual->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr->sigPtr-> valor == '0'){
cout<<"Gano de manera vertical"<<endl;
auxiliar =9;
system("PAUSE");
}
}

   
friend ostream &operator<<(ostream &os, Lista &l){
    if(l.IsEmpty()){
        return os;
        Nodo *actPtr=l.PrimeroPtr;
        cout<<actPtr->valor<<endl;
        while(actPtr->sigPtr!=0){
            actPtr=actPtr->sigPtr;
            cout<<"->"<<actPtr->valor;
        }
        return os;
    };
}
};

int main(){
system("CLS");
system("Color 8F");
bool seguir = true;

string opcion;
int posicion;

Lista l=Lista();
l.createListX0();
cout<<"--------------------------------- Tic Tac Toe ---------------------------------"<<endl;
while(auxiliar<=3){
if(turno == true){
cout<<"Ingrese posicion: ";
cin>>posicion;
l.LlenarJugador1(posicion);
l.Imprimir();
l.Gane();
auxiliar++;
cout<<"\n";
cout<<"\n";
}
else if(turno == false){
cout<<"Ingrese posicion: ";
cin>>posicion;
l.LlenarJugador2(posicion);
l.Imprimir();
l.Gane();
auxiliar++;
cout<<"\n";
cout<<"\n";

system("PAUSE");
}
}
return 0;
}

ivancea96

Muther of god. Esas largas cadenas de if de llenarJugadorX, los puedes (debes) hacer con un for o con un while.

Por lo demás, no sé cual es el error. ¿Es un error sintáctico, lógico? ¿Qué problema tienes al cambiar los turnos? Como dato, y por legibilidad, el cambio de turno (turno = false/true) lo deberías hacer en el main.