Gracias de antemano, saludos!!
Código
#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; }