c++ - 为什么我的数组只接受它们中的第一个数字?

标签 c++ c bbc-microbit

使用 BBC Micro bit。

micro bit 上有两个按钮,在我的代码中,按钮 A 用于偶数,按钮 B 用于负数。如果数字只有 1 或 0,则游戏运行良好,其他任何情况都会结束游戏,我不知道为什么了。

尝试仅使用数组中的 1 个数字并且它有效,甚至更改数组的顺序数组中的第一个数字是唯一将被接受的数字。

#include "MicroBit.h"

MicroBit uBit;

bool game = true;
bool press = false;
int i;
int score;
int number;
int nextNumber;
int odd[5] = {1, 3, 5, 7, 9};
int even[5] = {0, 2, 4, 6, 8};

void endGame()
{
    game = false;
}

void evenNumber()
{
    if(number == even[i])
    {
        score++;
        //number = nextNumber;
    }
    else
    {
        endGame();
    }
}

void oddNumber()
{
    if(number == odd[i])
    {
        score++;
        //number = nextNumber;
    }
    else
    {
        endGame();
    }
}

void onButtonA(MicroBitEvent)
{
    evenNumber();
    press = true;
}

void onButtonB(MicroBitEvent)
{
    oddNumber();
    press = true;
}

void reset(MicroBitEvent)
{
    game = true;
}

int main()
{
    // Initialise the micro:bit runtime.
    uBit.init();
    // Random number between 0 - 10
    uBit.seedRandom(uBit.random(10));
    number = uBit.random(10);
    nextNumber = number;

    while (game == true)
    {
        press = false;
        number = nextNumber;
        nextNumber = uBit.random(10);
        // If numbers are the same, randomise again.
        while(nextNumber == number)
        {
            nextNumber =  uBit.random(10);
        }

        uBit.display.print(number);

        // Button press and shake
        uBit.messageBus.listen(MICROBIT_ID_BUTTON_A, MICROBIT_BUTTON_EVT_CLICK, onButtonA);
        uBit.messageBus.listen(MICROBIT_ID_BUTTON_B, MICROBIT_BUTTON_EVT_CLICK, onButtonB);
        uBit.messageBus.listen(MICROBIT_ID_ACCELEROMETER, MICROBIT_ACCELEROMETER_EVT_SHAKE, reset);

        while (press == false){
            uBit.sleep(100);
        }
    }

    // Make sure we don't exit main
    uBit.sleep(1000);

    // Shows score
    uBit.display.scroll("YOUR SCORE IS:", 80);
    uBit.display.scroll(score, 80);

    release_fiber();
}

所有不超过 8 的偶数都应该在按钮点击 A 上起作用,奇数在按钮点击 B 上起作用,最多 9 个。

最佳答案

欢迎使用 Stackoverflow。我复制了你的问题。这是一些对我有用的代码。我删除了一些不再需要的行。正如@RetiredNinja 所说,您需要更改检查奇数和偶数的方式。

#include "MicroBit.h"

MicroBit uBit;

bool game = true;
bool press = false;
int score;
int number;
int nextNumber;

void endGame()
{
    game = false;
}

void evenNumber()
{
    if(number%2 == 0)
    {
        score++;
        //number = nextNumber;
    }
    else
    {
        endGame();
    }
}

void oddNumber()
{
    if(number%2 == 1)
    {
        score++;
        //number = nextNumber;
    }
    else
    {
        endGame();
    }
}

void onButtonA(MicroBitEvent)
{
    evenNumber();
    press = true;
}

void onButtonB(MicroBitEvent)
{
    oddNumber();
    press = true;
}

void reset(MicroBitEvent)
{
    game = true;
}

int main()
{
    // Initialise the micro:bit runtime.
    uBit.init();
    // Random number between 0 - 10
    uBit.seedRandom(uBit.random(10));
    number = uBit.random(10);
    nextNumber = number;

    while (game == true)
    {
        press = false;
        number = nextNumber;
        nextNumber = uBit.random(10);
        // If numbers are the same, randomise again.
        while(nextNumber == number)
        {
            nextNumber =  uBit.random(10);
        }

        uBit.display.print(number);

        // Button press and shake
        uBit.messageBus.listen(MICROBIT_ID_BUTTON_A, MICROBIT_BUTTON_EVT_CLICK, onButtonA);
        uBit.messageBus.listen(MICROBIT_ID_BUTTON_B, MICROBIT_BUTTON_EVT_CLICK, onButtonB);
        uBit.messageBus.listen(MICROBIT_ID_ACCELEROMETER, MICROBIT_ACCELEROMETER_EVT_SHAKE, reset);

        while (press == false){
            uBit.sleep(100);
        }
    }

    // Make sure we don't exit main
    uBit.sleep(1000);

    // Shows score
    uBit.display.scroll("YOUR SCORE IS:", 80);
    uBit.display.scroll(score, 80);

    release_fiber();
}

关于c++ - 为什么我的数组只接受它们中的第一个数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54612896/

相关文章:

c++ - 如何使用 C++ 在 ostream 中插入缓冲区

c++ - C++ 容器的迭代器失效规则

Linux 的 C++ 调试器类似于 MS Visual Studio 的调试器?

javascript - 在 BBC micro :bit does not do anything 上用 microPython 写模拟

c++ - 将 config.json 文件与 BBC Micro 一起使用 :bit Mbed online compiler

c++ - map 中的字符串是如何存储的?

c - 在函数中使用malloc?

c - 使用固定大小的数组时的垃圾值,而如果使用动态大小的数组,则结果正确

c - 自动使用fgets()测试程序

micropython - 为什么我的microbit显示这个动画?