检查wordsearch游戏中的重叠字符

时间:2013-08-10 20:15:49

标签: c++ arrays vector wordsearch

我正在开发一个单词搜索生成器来更好地学习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';
    }
}

我所做的是创建一个用0(零)字符填充的二维数组[10] [11],所以当我遍历它时,所有空格都用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];

我想要做的是最终让用户给我一个他们想要搜索的单词列表,这个功能选择其中一些并在玩游戏时将其呈现给用户。这种功能不正确也会导致重复项出现在填字游戏和单词搜索列表中。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您的代码中有两次此错误:

if (flag = true)

那是条件,这是一项任务。它将true分配给flag,if-block将始终执行。您需要使用==

使其成为比较条件
if (flag == true)

在C ++中编写它的一种更常见的方法就是

if (flag)