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