C ++ Bool值不起作用

时间:2017-02-24 20:40:12

标签: c++ windows boolean

所以我正在为一个学校项目制作一个基本的tic-tac-toe程序,我正在尝试使用bool值来结束激活组合时的游戏。我目前正在使用C ++ WinForm来显示游戏。我有一个运行代码的MyForm.cpp和MyForm.h。

代码在MyForm.h文件中,我在MyForm.cpp中唯一拥有的是运行Form的命令。

如果您需要MyForm.cpp代码:

#include "MyForm.h"

using namespace System;
using namespace System::Windows::Forms;

[STAThread]
void Main(array<String^>^ args)
{
    Application::EnableVisualStyles();
    Application::SetCompatibleTextRenderingDefault(false);

    Tic_Tac_Toe::MyForm form;
    Application::Run(%form);
}

MyForm.h代码的开头

以下是我的bool值:

char player = 'X';
bool b1x = false;
bool b1o = false;

以下是单击按钮时触发bool的代码:

#pragma endregion
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    if (player == 'X' && b1o == false) {
        button1->BackgroundImage = Image::FromFile("File_Location");
        b1x = true;
        player = 'O';
    }
    else if (player == 'O' && b1x == false) {
         button1->BackgroundImage = Image::FromFile("File_Location");
         b1o = true;
         player = 'X';
    }
}

以下是在合并时显示消息的代码

public:
    MyForm(void)
    {
        InitializeComponent(); \
            if (b1x == true && b2x == true && b3x == true) {
                MessageBox::Show("X Wins!");
            }
    }

我试图尽一切可能找出代码,并且我试图以各种方式将bool绑在一起,但是当我组合时(例如,Tile 1,Tile 2和Tile 3)它只是继续前进。它没有显示消息,我仍然能够点击图块(一旦组合被点击,我将链接一种重启游戏的方式)

其他失败的尝试:

public:
MyForm(void)
{
    InitializeComponent(); \
        if (b1x && b2x && b3x) {
            MessageBox::Show("X Wins!");
        }
}
//////////////////////////////////////
public:
MyForm(void)
{
    InitializeComponent(); \
        if (b1x && b2x && b3x) {
            system("PAUSE");
        }
}

我确定bool值有问题,因为当我点击图块时,它会更改图像,然后将bool设置为true(基于图块编号和播放器所在的图像(x或o)它只是不知道什么时候所有三个bool值都是真的。请帮助,我已经尝试了好几天来解决这个问题,并且我已经使用所有可用资源搜索了网页。

[编辑]过去一周,我尝试过几百次运行我的代码,并尝试了每个可以想象的网站给我的解决方案。我已经更改了调试器上的设置,以向我显示程序中的警告,并且它没有给我任何信息。如果有人能告诉我代码中的错误,我会非常感激。

1 个答案:

答案 0 :(得分:0)

在我看来,你的胜利测试只会写入MyForm的构造函数。

构造函数ONLY在最初创建对象时开始运行! 我假设没有球员做过任何动作,所以没有人赢过。

在玩家移动后,您需要重新运行测试以获得胜利。