hola quiero ver si alguien me puede ayudar..
eh casi terminado con mi juego de gato pero el profesor me pido que guarde el score de victorias y/o perdidas, eh logrado que cree el archivo pero no escribe sobre el..
alguien puede ayudarme u orientarme a termianar el codigo porfavor...
de esto depende mi calificacion:S
eh casi terminado con mi juego de gato pero el profesor me pido que guarde el score de victorias y/o perdidas, eh logrado que cree el archivo pero no escribe sobre el..
alguien puede ayudarme u orientarme a termianar el codigo porfavor...
de esto depende mi calificacion:S
Código (cpp) [Seleccionar]
#include <iostream>
#include <string>
#include <cctype>
#include<fstream>
#include<time.h>
#include <stdlib.h>
#include <windows.h>
using namespace std;
using std::tolower;
class tttboard
{
private:
char board[3][3];
public:
static const char NOBODY = ' ', PLAYER1 = 'X', PLAYER2 = 'O';
tttboard();
void init_board();
void display();
void set(int x, int y, char c);
char get(int x, int y) const;
};
tttboard::tttboard()
{
init_board();
}
void tttboard::init_board()
{
for(int x = 0; x < 3; x ++)
{
for(int y = 0; y < 3; y ++)
{
board[x][y] = NOBODY;
}
}
}
void tttboard::display()
{
system("cls");
cout << endl;
for(int y = 0; y < 3; y ++)
{
for(int x = 0; x < 3; x ++)
{
cout << board[x][y];
if(x < 2) cout << '|';
}
cout << endl;
if(y < 2) cout << "-+-+-\n";
}
}
void tttboard::set(int x, int y, char c)
{
board[x][y] = c;
}
char tttboard::get(int x, int y) const
{
return board[x][y];
}
class opponent
{
//private:
//
// string name;
protected:
char c;
void set_name(string name, char c);
public:
string name;
virtual void move(const tttboard &board, int &xpos, int &ypos) = 0;
string get_name()
{
return name;
}
};
void opponent::set_name(string name, char c)
{
this->name = name + " (" + c + ")";
this->c = c;
}
class aiopponent : public opponent
{
private:
int two(char c, char x, char y, char z);
public:
aiopponent(string name, char c);
void move(const tttboard &board, int &xpos, int &ypos);
};
aiopponent::aiopponent(string name, char c)
{
set_name(name, c);
}
int aiopponent::two(char c, char x, char y, char z)
{
if(x == c && y == c && z == tttboard::NOBODY) return 3;
if(x == c && y == tttboard::NOBODY && z == c) return 2;
if(x == tttboard::NOBODY && y == c && z == c) return 1;
return 0;
}
void aiopponent::move(const tttboard &board, int &xpos, int &ypos)
{
int r;
char ic; // = (c == tttboard::PLAYER1 ? tttboard::PLAYER2 : tttboard::PLAYER1);
if(c == tttboard::PLAYER1) ic = tttboard::PLAYER2;
else ic = tttboard::PLAYER1;
/* Busca lugares para ganar */
for(int x = 0; x < 3; x ++)
{
if((r = two(c, board.get(0, x), board.get(1, x), board.get(2, x))))
{
ypos = x, xpos = r-1;
return;
}
if((r = two(c, board.get(x, 0), board.get(x, 1), board.get(x, 2))))
{
xpos = x, ypos = r-1;
return;
}
}
if((r = two(c, board.get(0, 0), board.get(1, 1), board.get(2, 2))))
{
xpos = r-1, ypos = r-1;
return;
}
if((r = two(c, board.get(2, 0), board.get(1, 1), board.get(0, 2))))
{
xpos = 3-r, ypos = r-1;
return;
}
/* Blokea lugares perdidos */
for(int x = 0; x < 3; x ++)
{
if((r = two(ic, board.get(0, x), board.get(1, x), board.get(2, x))))
{
ypos = x, xpos = r-1;
return;
}
if((r = two(ic, board.get(x, 0), board.get(x, 1), board.get(x, 2))))
{
xpos = x, ypos = r-1;
return;
}
}
if((r = two(ic, board.get(0, 0), board.get(1, 1), board.get(2, 2))))
{
xpos = r-1, ypos = r-1;
return;
}
if((r = two(ic, board.get(2, 0), board.get(1, 1), board.get(0, 2))))
{
xpos = 3-r, ypos = r-1;
return;
}
/*Pone la ficha en el centro si esta disponible*/
if(board.get(1, 1) == tttboard::NOBODY)
{
xpos = 1, ypos = 1;
return;
}
/* Toma la esquina si esta no esta ocupada aun */
if(board.get(0, 0) != c && board.get(2, 0) != c
&& board.get(0, 2) != c && board.get(2, 2) != c)
{
if(board.get(0, 0) == tttboard::NOBODY)
{
xpos = 0, ypos = 0;
return;
}
if(board.get(2, 0) == tttboard::NOBODY)
{
xpos = 2, ypos = 0;
return;
}
if(board.get(0, 2) == tttboard::NOBODY)
{
xpos = 0, ypos = 2;
return;
}
if(board.get(2, 2) == tttboard::NOBODY)
{
xpos = 2, ypos = 2;
return;
}
}
for(int x = 0; x < 3; x ++) {
for(int y = 0; y < 3; y ++) {
if(board.get(x, y) == tttboard::NOBODY) {
xpos = x, ypos = y;
return;
}
}
}
}
class humanopponent : public opponent
{
public:
int v,p,e;
humanopponent(char c);
void move(const tttboard &board, int &xpos, int &ypos);
void victory()
{
v+=1;
}
void lost()
{
p+=1;
}
void tie()
{
e+=1;
}
int getvictory()
{
return v;
}
int getlost()
{
return p;
}
int gettie()
{
return e;
}
void print()
{
cout<<"Victorias "<<v<<endl;
cout<<"Perdidas "<<p<<endl;
cout<<"Empates "<<e<<endl;
}
void get()
{
cout<<name;
cout<<"Victorias "<<getvictory<<endl;
cout<<"Perdidas "<<getlost<<endl;
cout<<"Empates "<<gettie;
}
};
humanopponent::humanopponent(char c)
{
cout << "\nIngresa Tu Nombre: ";
string name;
cin >> name;
set_name(name, c);
v=0;
p=0;
e=0;
}
void humanopponent::move(const tttboard &board, int &xpos, int &ypos)
{
for(;;)
{
cout << "Ingresa Numero De Columna (1-3): ";
while(!(cin >> xpos) || xpos <= 0 || xpos > 3)
{
// !!!
cin.clear();
cout << ": ";
}
cout << "Ingresa Numero De Fila (1-3): ";
while(!(cin >> ypos) || ypos <= 0 || ypos > 3)
{
cin.clear();
cout << ": ";
}
xpos --, ypos --;
if(board.get(xpos, ypos) != tttboard::NOBODY)
{
cout << "Ya Esta Ocupado \n";
continue;
}
break;
}
}
class ttt : public opponent
{
private:
tttboard board;
opponent *player[2];
int turn;
public:
ttt();
~ttt();
bool new_game();
void play_game();
int game_done();
void move(const tttboard &board, int &xpos, int &ypos)
{
}
};
ttt::ttt() : turn(0)
{
player[0] = player[1] = NULL;
}
ttt::~ttt()
{
for(int x = 0; x < 2; x ++)
{
if(player[x]) delete player[x];
}
}
bool ttt::new_game()
{
cout << "\nJuego Nuevo\nJugador #1 ([A]I/[H]uman/[Q]uit): ";
char one;
for(;;)
{
if(!(cin >> one))
{
cin.clear();
continue;
}
one = tolower(one);
if(one == 'q') return false;
if(one == 'a' || one == 'h') break;
}
cout << "Jugador #2 ([A]I/[H]uman/[Q]uit): ";
char two;
for(;;)
{
if(!(cin >> two))
{
cin.clear();
continue;
}
two = tolower(two);
if(two == 'q') return false;
if(two == 'a' || two == 'h') break;
}
if(one == 'h') player[0] = new humanopponent(tttboard::PLAYER1);
else
{
player[0] = new aiopponent("AI for player #1", tttboard::PLAYER1);
}
if(two == 'h') player[1] = new humanopponent(tttboard::PLAYER2);
else
{
player[1] = new aiopponent("AI for player #2", tttboard::PLAYER2);
}
turn = 0;
play_game();
return true;
}
void ttt::play_game()
{
int v,p,e;
int x, y, won;
char again;
do
{
board.init_board();
while(!(won = game_done()))
{
board.display();
cout << player[turn]->get_name() << endl;
player[turn]->move(board, x, y);
cout << player[turn]->get_name() << " picked position "
<< x+1 << ", " << y+1 << endl;
board.set(x, y, turn ? tttboard::PLAYER2 : tttboard::PLAYER1);
turn = !turn;
}
board.display();
cout << "Perdiste,La Primicia Es Mia..";
switch(won) // aqui tengo el problema, para mandar llamar las variables.//
{
case -1: cout << "Bueno Fue Empate quieres la revancha?.";break;
case 1: cout << player[0]->get_name() << "Felicidades Tienes la Primicia!"; break;
case 2: cout << player[1]->get_name() << "Felicidades Tienes la Primicia!"; break;
}
cout << endl;
cout << "tic tac toe by Alberto Coverdale\n"<<endl;
cout << "Quieres jugar de nuevo??";
ofstream rankFileOut("rank.dat", ios::app);
rankFileOut<<opponent::get_name();
rankFileOut.close();
cin >> again;
}
while(tolower(again) == 'y');
}
int ttt::game_done()
{
int n, flag = 0;
for(int x = 0; x < 3 && !flag; x ++)
{
for(int y = 0; y < 3 && !flag; y ++)
{
if(board.get(x, y) == tttboard::NOBODY) flag = 1;
}
}
if(!flag) return -1;
for(int x = 0; x < 3; x ++)
{
if((n = board.get(x, 0)) != tttboard::NOBODY)
{
if(n == board.get(x, 1) && n == board.get(x, 2))
{
return n == tttboard::PLAYER1 ? 1 : 2;
}
}
}
for(int y = 0; y < 3; y ++)
{
if((n = board.get(0, y)) != tttboard::NOBODY)
{
if(n == board.get(1, y) && n == board.get(2, y))
{
return n == tttboard::PLAYER1 ? 1 : 2;
}
}
}
if((n = board.get(0, 0)) != tttboard::NOBODY)
{
if(n == board.get(1, 1) && n == board.get(2, 2))
{
return n == tttboard::PLAYER1 ? 1 : 2;
}
}
if((n = board.get(2, 0)) != tttboard::NOBODY)
{
if(n == board.get(1, 1) && n == board.get(0, 2))
{
return n == tttboard::PLAYER1 ? 1 : 2;
}
}
return 0;
}
int main()
{
int trn=1;
int i=1;
char ch='y';
int winner=1;
int ctrl1,ctrl2;
int ctr=0;
int check_for_tie;
char begin,Yeah, inst, jum, choice;
int dec;
cout<<"Este Juego fue creado por Alberto Coverdale"<<endl;
cout<<"Desea Comenzar el juego??"<<endl;
cout<<"[Y][N]"<<endl;
cin>>Yeah;
if (Yeah=='Y' ||Yeah=='y')
{
cout<<"\n\n\n\n\n";
cout<<"\n** ** ******** *******";
cout<<"\n** ** ******** ********";
cout<<"\n** ** ** ** ** **";
cout<<"\n** * ** ******** *******";
cout<<"\n** *** ** ******** *******";
cout<<"\n*** *** ** ** ** **";
cout<<"\n** ** ** ** ** **";
cout<<"\n\n\n";
for(ctrl1 = 0; ctrl1 < 2000; ctrl1++)
{
for(ctrl2 = 0; ctrl2 < 20000; ctrl2++)
{
}
}
cout<<"\n\t\t******** ********";
cout<<"\n\t\t******** ********";
cout<<"\n\t\t** ** **";
cout<<"\n\t\t** ** *****";
cout<<"\n\t\t** ** *****";
cout<<"\n\t\t******** **";
cout<<"\n\t\t******** **";
cout<<"\n\n\n";
for(ctrl1 = 0; ctrl1 < 2000; ctrl1++)
{
for(ctrl2 = 0; ctrl2 < 20000; ctrl2++)
{
}
}
cout<<"\n\t\t\t******** ** ** ********";
cout<<"\n\t\t\t******** ** ** ********";
cout<<"\n\t\t\t ** ******** **";
cout<<"\n\t\t\t ** ******** *****";
cout<<"\n\t\t\t ** ** ** **";
cout<<"\n\t\t\t ** ** ** ********";
cout<<"\n\t\t\t ** ** ** ********";
cout<<"\n\n\n";
for(ctrl1 = 0; ctrl1 < 2000; ctrl1++)
{
for(ctrl2 = 0; ctrl2 < 20000; ctrl2++)
{
}
}
cout<<"\n ** ******** **** **** ******** **** *******";
cout<<"\n ** ******** ** ** ** ** ******** **** ********";
cout<<"\n ** ** ** ** ** ** ** ** ** **** **";
cout<<"\n ** ******** ** ** ** ** ******** **** **";
cout<<"\n ** ******** ** *** ** ******** **** **";
cout<<"\n ************* ** ** ** ** ** ** ************ ********";
cout<<"\n ************* ** ** ** ** ** ** ************ ********";
}
else
{
return 0;
}
cout<<"\n\n\n\n\n\t\t La Guerra De Los Tamales.\n\n\t\t"<<endl;
cout<<" Este juego es sobre un hombre que vende tamales para alimentar a su familia"<<endl;
cout<<" Estas dispuesto a jugarte la vida por un tamal de chicharron?"<<endl;
cout<<" Aceptaras el desafio por alimentar a tu familia?"<<endl;
cout<<" Qieres Saber la historia de este juego? [Y/N]"<<endl;
cin>> inst;
if (inst=='Y' ||inst=='y')
{
cout<<"Hace tiempo existio un hombre llamado Elias Diaz"<<endl;
cout<<"Apodado 'El Naco Diaz'"<<endl;
cout<<"El Naco tenia todo lo que un hombre podia decear..una bonita casa,una hermosa esposa y adorables hijos.."<<endl<<endl;
cout<<"Pero el destino le dio una mala jugada y perdio casi todo lo que tenia..."<<endl;
cout<<"El Naco no podia soportar que lo unico que le quedaba su familia muriera de hambre..."<<endl;
cout<<"Asi que se dispuso a vender el santo grial de la comida del barrio 'Tamales'"<<endl;
cout<<"Asi fue como El Naco, comenzo su negocio de tamales..pero no contaba con que tendria un rival.."<<endl;
cout<<"Era un taquero muy famoso en la colonia apodado Don Fito, que no queria que El Naco le robara la clientela"<<endl;
cout<<"Don Fito,declaro la guerra a El Naco...por la primicia de sus respectivos lugares en el barrio..."<<endl;
cout<<"Este juego trata sobre eso, el tablero es un mapa del barrio, y para ganar tienes que hacerte de una calle completa..."<<endl;
cout<<"La idea de este juego es crear una linea perpendicular o paralela para ganar el juego"<<endl;
cout<<"Las [x] corresponde Al Naco Diaz."<<endl;
cout<<"Las [O] corresponden Don Fito."<<endl;
cout<<"Es tu Desicion elegir el personaje que mas te guste para tratar de ganar.."<<endl;
for(ctrl1 = 0; ctrl1 < 2000; ctrl1++)
{
for(ctrl2 = 0; ctrl2 < 20000; ctrl2++)
{
}
}
cout<<"Este tablero muestra la colonia donde estan ubicados nuestros hombres"<<endl<<endl<<endl;
cout << "\n"<< 0 << " | " << 1 << " | " << 2 << endl;
cout<< " ---------" << endl;
cout<< 3 << " | " << 4 << " | " << 5 << endl;
cout<< " ---------" << endl;
cout<< 6 << " | " << 7 << " | " << 8 << endl;
for(ctrl1 = 0; ctrl1 < 2000; ctrl1++)
{
for(ctrl2 = 0; ctrl2 < 20000; ctrl2++)
{
}
}
cout<<" Este juego se juega de la siguiente manera"<<endl<<endl;
cout<<" Primero elejimos el turno.. quien sera eL Naco y quien Don Fito."<<endl;
cout<<" Puedes jugar como el personajes que elijas dando la opcion que quieres."<<endl;
cout<<" Puedes jugar contra la maquina o contra persona, pero esa sera tu eleccion"<<endl<<endl;
cout<<" El juego se juega por coordenadas..."<<endl;
cout<<" 123.columna y 123.linea"<<endl;
cout<<" Trata de ganar la primicia del barrio... Estas Listo??"<<endl;
cout<<" Comenzar el juego??? [Y/N]";
cin>> jum;
if (jum=='Y' ||jum=='y')
{
ttt tictactoe;
while(tictactoe.new_game());
}
}
return 0;
return 0;
}