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
#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; }