Проверка на совпадение символов в игре поиска слов

Я разрабатываю генератор поиска слов, чтобы лучше изучать c ++, и я застрял в предотвращении наложения неперекрывающихся слов, таких как параллельное написание слова поверх буквы в нисходящем слове. Вот фрагмент кода:

else if (random_choice == 1 && random_word.size() <= 10-j && words_vector.size() != 0) {
flag = true;
for (int x = 0; x < random_word.size(); x++) {
if (wordsearch[i][j+x] != '0') {
flag = false;
break;
}
}
if (flag = true) {
for (int x = 0; x < random_word.size(); x++) {
wordsearch[i][j] = random_word[x];
j += 1;
}
j -= 1;
words_found_vector.insert(words_found_vector.begin(),words_vector[random_word_number]);
//words_vector.erase(words_vector.begin()+random_word_number);
}
else {
wordsearch[i][j] = '1';
}
}

Что я сделал, так это создал двумерный массив [10] [11], заполненный символом 0 (ноль), поэтому, когда я перебираю его, все пробелы заполняются 0, за исключением 11-го пробела в каждой строке с символом новой строки, чтобы сделать сетка 10X10. В моем цикле else if в первой части уже выбрано слово, и оно проверяет, будет ли слово помещаться в нужном месте, проверяя наличие 0. Если он встречается с ненулевым символом (например, если он встречается с буквой из слова сверху вниз или диагонального слова), внутренний цикл завершается, устанавливает логический флаг и вводит 1 (или любую случайную букву) вместо целый мир. Что происходит, так это то, что все слово вставляется в любом случае и перезаписывает одну букву сверху вниз. Что я делаю неправильно? Вот остальная часть кода:

#include <iostream>
#include <cstdlib>
#include <time.h>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
srand(time(NULL));
const char* const a_to_z = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;

int random_char;

char wordsearch [10][11] = {0};

bool flag;

string words_array[] = {"CAT", "HELLO", "GOODBYE", "DOG", "BAT", "NEW", "SAY", "MAY", "DAY", "HAY"};
vector<string> words_vector (words_array, words_array + sizeof(words_array) / sizeof(string));

string words_found_array[] = {};
vector<string> words_found_vector (words_found_array, words_found_array + sizeof(words_found_array) / sizeof(string));

for (int i = 0; i < 10; i++) {
for (int j = 0; j < 11; j++) {
int random_choice = rand() % 5;
int random_word_number = rand() % words_vector.size();
string random_word = words_vector[random_word_number];

if (j == 10) {
wordsearch[i][j] = '\n';
}
else if (random_choice == 1 && random_word.size() <= 10-j && words_vector.size() != 0) {
flag = true;
for (int x = 0; x < random_word.size(); x++) {
if (wordsearch[i][j+x] != '0') {
flag = false;
break;
}

}
if (flag = true) {
for (int x = 0; x < random_word.size(); x++) {
wordsearch[i][j] = random_word[x];
j += 1;
}
j -= 1;
words_found_vector.insert(words_found_vector.begin(),words_vector[random_word_number]);
//words_vector.erase(words_vector.begin()+random_word_number);
}
else {
wordsearch[i][j] = '1';
}
}
else if (random_choice == 2 && random_word.size() <= 10-i && words_vector.size() != 0) {
int temp_i = i;
flag = true;
for (int x = 0; x < random_word.size(); x++) {
if (wordsearch[i+x][j] != '0') {
flag = false;
break;
}
}
if (flag = true) {
for (int x = 0; x < random_word.size(); x++) {
wordsearch[i][j] = random_word[x];
i += 1;
}
i = temp_i;
words_found_vector.insert(words_found_vector.begin(),words_vector[random_word_number]);
//words_vector.erase(words_vector.begin()+random_word_number);
}
else {
wordsearch[i][j] = '1';
}
}
else {
int random_char = rand() % 26 + 0;
wordsearch[i][j] = a_to_z[random_char];
}
}
}
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 11; j++) {
cout<<wordsearch[i][j];
}
}

cout<<"Your words are:"<<endl;
for (int x = 0; x < words_found_vector.size(); x++) {
cout<<words_found_vector[x]<<endl;
}
}

Еще кое-что:

//words_vector.erase(words_vector.begin()+random_word_number);

вылетает моя программа. Я думаю, что это проблема с этим:

int random_choice = rand() % 5;
int random_word_number = rand() % words_vector.size();
string random_word = words_vector[random_word_number];

В конечном итоге я хочу, чтобы пользователь дал мне список слов, которые он хочет найти, и эта функция выбирает некоторые из них и представляет их пользователю во время игры. Неправильное функционирование также приводит к появлению дубликатов в кроссворде и списке слов для поиска.

Спасибо за помощь!

0

Решение

У вас есть эта ошибка дважды в вашем коде:

if (flag = true)

То есть не условие, это назначение. Назначает true в flagи блок if будет выполняться всегда. Вы должны сделать это условие сравнения с помощью ==

if (flag == true)

Более распространенный способ написать это в C ++ будет просто

if (flag)
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]