Ayuda perfeccionar programa

Iniciado por novatus84, 15 Diciembre 2014, 19:02 PM

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

novatus84

Buenas necesito un empujón para perfeccionar programa, saco las letras en horizontal y vertical en la matriz pero lo tengo un poco guarrete, necesito que no me pise las palabras mostradas y que muestre todas bien mezcladas en horizontal y vertical.
Gracias de antemano, saludos!!
Código (cpp) [Seleccionar]
#include <vector>
#include <iostream>
#include <fstream>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <random>

using namespace std;

string filename = "words.txt";
ifstream ifile {filename};
void error(const string&);

vector<string> load_vector(const string& filename) {
   
   vector<string> vi;
   
   if (!ifile)
       error("load_vector cannot open the file " + filename);
   copy(istream_iterator<string>(ifile), istream_iterator<string>(), back_inserter(vi));
   
   return vi;
}

void error(const string& s) {
   cerr << "Error: " << s << endl;
   exit(EXIT_FAILURE);
}

void aleatorio () {
   int HEIGHT = 15; //Numero de filas
   int WIDTH = 15; //Numero de columnas
   int wordsize = 0;
   int wordPos = 0;
   char puzzle[HEIGHT][WIDTH]; //Matriz de caracteres
   bool okWord;
   bool horizontal;
   int randColumn;
   
   srand(time(NULL)); //inicializamos semilla
   
   char random; //Carácter aleatorio
   int filarand = 0; //Variable para escoger una fila aleatoria
   
   vector<string> load_vector(const string&);
   vector<string> words = load_vector(filename);
   vector<string> auxWords;
   string enteredWord;
   string aux;
   
   //Inicializamos matriz
   for (int i = 0; i < HEIGHT; i++) {
       for (int j = 0; j < WIDTH; j++) {
           puzzle[i][j] = ' '; //Al inicializar la matriz la rellenamos con espacios
       }
   }
   
   for (int i = 0; i < words.size(); i++) {
       switch (rand() % 2) {
       case 1:
           filarand = rand() % 15; //Escogemos una fila aleatoria
           wordsize = WIDTH - words[i].size() - 1; //Posiciones que nos quedan para escoger columna aleatoria
           wordPos = rand() % wordsize; //Escogemos columna aleatoria para empezar a escribir la palabra
           for (int j = 0; j < words[i].size(); j++) {
               if (words[i].size() < 10) { //Si la palabra es menor de 10 caracteres
                   aux = ""; // Inicializamos la variable con ningún caracter
                   aux = words[i].substr(j,1); //Sustraemos una letra cada vez de la palabra
                   puzzle[filarand][wordPos + j] = aux[0]; //Rellenamos la fila de la matriz con la palabra
               }
           }
           break;
       case 0:
           randColumn = rand() % 15;
           wordsize = HEIGHT - words[i].size() - 1;
           wordPos = rand() % wordsize;
           for (int j = 0; j < words[i].size(); j++) {
               if (words[i].size() < 10) {
                   aux = "";
                   aux = words[i].substr(j,1);
                   puzzle[wordPos + j][randColumn] = aux[0];
               }
           }
           break;
       }
   }
   
   auxWords = words;

   for (int i = 0; i < HEIGHT; i++) {          //la llenamos aleatoriamente de letras
       for (int j = 0; j < WIDTH; j++) {
           if (puzzle[i][j] == ' ') {
               random = 'A' + (rand() % 26); //Escogemos un carácter aleatorio
               puzzle[i][j] = random; //Rellenamos la posición con un carácter aleatorio
           }
       }
   }
   
   
   for (int i = 0; i < HEIGHT; i++) { //Mostramos la matriz final
       for (int j = 0; j < WIDTH; j++) {
           cout << puzzle[i][j] ;
           cout << "  ";
       }
       cout << endl;
   }
   
   do {
       cout << "Introduce una palabra: ";
       cin >> enteredWord;
       
       for (int i = 0; i < auxWords.size(); i++) {
           if (enteredWord == auxWords[i]) { //Miramos si la palabra introducida existe en el vector de palabras
               okWord = true;                  // SI LA PALABRA existe borrarla del vector, cuando la borre sale
               auxWords.erase(auxWords.begin() + i);
               break;
           }
           else {                          // si no la encuentra sigue buscando
               okWord = false;
           }
       }
       
       if (okWord == true) {                  // si la a encontrado te dice la palabra
           cout << "Palabra " << enteredWord << " correcta" << endl;
       }
       else if (enteredWord != "FIN") {        //si no la encuetra te dice incorrecta
           cout << "Palabra " << enteredWord << " incorrecta" << endl;
       }
   } while (enteredWord != "FIN");             //Mientras que no escribas FIN no termina programa
}



int main() {
   
   int HEIGHT = 10;
   int WIDTH = 10;
   
   char puzzle[HEIGHT][WIDTH];
   
   srand(time(NULL));
   aleatorio();
   //wordToMatrix(10, 10, puzzle[HEIGHT][WIDTH]);
   
   /*for (int i = 0; i < HEIGHT; i++) {
    for (int j = 0; j < WIDTH; j++) {
    cout << puzzle[i][j] << endl;
    }
    }*/
   
   
   
   return 0;
}