【问题标题】:My tic tac toe game only works on the first click我的井字游戏只在第一次点击时有效
【发布时间】:2022-08-02 17:00:47
【问题描述】:

我从video 获得了这段代码,并出于教育目的对其进行了修改。我根据视频输入了所有内容,但是当我尝试运行它时,它仅适用于左上角的按钮,并且不显示其他任何内容。重置按钮和新游戏按钮工作正常,但我还没有看到分数选项卡是否工作,因为它不会显示其余的 x\'s 和 o\'s。

#pragma endregion
        Boolean checker;
        int plus;
 
        void Enable_False() {
            btn1->Enabled = false;
            btn2->Enabled = false;
            btn3->Enabled = false;
            btn4->Enabled = false;
            btn5->Enabled = false;
            btn6->Enabled = false;
            btn7->Enabled = false;
            btn8->Enabled = false;
            btn9->Enabled = false;
        }
 
        void score(){
            {
                // Player X
                if (btn1->Text == \"X\" && btn2->Text == \"X\" && btn3->Text == \"X\"){
                    btn1->BackColor = System::Drawing::Color::PowderBlue;
                    btn2->BackColor = System::Drawing::Color::PowderBlue;
                    btn3->BackColor = System::Drawing::Color::PowderBlue;
                    MessageBox::Show(\"Player X wins!\", \"Tic Tac Toe\", MessageBoxButtons::OK, MessageBoxIcon::Information);
                    plus = int::Parse(playerx->Text);
                    playerx->Text = Convert::ToString(plus + 1);
                    Enable_False();
                }
                if (btn1->Text == \"X\" && btn4->Text == \"X\" && btn7->Text == \"X\"){
                    btn1->BackColor = System::Drawing::Color::PowderBlue;
                    btn4->BackColor = System::Drawing::Color::PowderBlue;
                    btn7->BackColor = System::Drawing::Color::PowderBlue;
                    MessageBox::Show(\"Player X wins!\", \"Tic Tac Toe\", MessageBoxButtons::OK, MessageBoxIcon::Information);
                    plus = int::Parse(playerx->Text);
                    playerx->Text = Convert::ToString(plus + 1);
                    Enable_False();
                }
                if (btn1->Text == \"X\" && btn5->Text == \"X\" && btn9->Text == \"X\"){
                    btn1->BackColor = System::Drawing::Color::PowderBlue;
                    btn5->BackColor = System::Drawing::Color::PowderBlue;
                    btn9->BackColor = System::Drawing::Color::PowderBlue;
                    MessageBox::Show(\"Player X wins!\", \"Tic Tac Toe\", MessageBoxButtons::OK, MessageBoxIcon::Information);
                    plus = int::Parse(playerx->Text);
                    playerx->Text = Convert::ToString(plus + 1);
                    Enable_False();
                }
                if (btn4->Text == \"X\" && btn5->Text == \"X\" && btn6->Text == \"X\"){
                    btn4->BackColor = System::Drawing::Color::PowderBlue;
                    btn5->BackColor = System::Drawing::Color::PowderBlue;
                    btn6->BackColor = System::Drawing::Color::PowderBlue;
                    MessageBox::Show(\"Player X wins!\", \"Tic Tac Toe\", MessageBoxButtons::OK, MessageBoxIcon::Information);
                    plus = int::Parse(playerx->Text);
                    playerx->Text = Convert::ToString(plus + 1);
                    Enable_False();
                }
                if (btn7->Text == \"X\" && btn8->Text == \"X\" && btn9->Text == \"X\"){
                    btn7->BackColor = System::Drawing::Color::PowderBlue;
                    btn8->BackColor = System::Drawing::Color::PowderBlue;
                    btn9->BackColor = System::Drawing::Color::PowderBlue;
                    MessageBox::Show(\"Player X wins!\", \"Tic Tac Toe\", MessageBoxButtons::OK, MessageBoxIcon::Information);
                    plus = int::Parse(playerx->Text);
                    playerx->Text = Convert::ToString(plus + 1);
                    Enable_False();
                }
                if (btn3->Text == \"X\" && btn5->Text == \"X\" && btn7->Text == \"X\"){
                    btn3->BackColor = System::Drawing::Color::PowderBlue;
                    btn5->BackColor = System::Drawing::Color::PowderBlue;
                    btn7->BackColor = System::Drawing::Color::PowderBlue;
                    MessageBox::Show(\"Player X wins!\", \"Tic Tac Toe\", MessageBoxButtons::OK, MessageBoxIcon::Information);
                    plus = int::Parse(playerx->Text);
                    playerx->Text = Convert::ToString(plus + 1);
                    Enable_False();
                }
                // Player O
                if (btn1->Text == \"O\" && btn2->Text == \"O\" && btn3->Text == \"O\"){
                    btn1->BackColor = System::Drawing::Color::PowderBlue;
                    btn2->BackColor = System::Drawing::Color::PowderBlue;
                    btn3->BackColor = System::Drawing::Color::PowderBlue;
                    MessageBox::Show(\"Player O wins!\", \"Tic Tac Toe\", MessageBoxButtons::OK, MessageBoxIcon::Information);
                    plus = int::Parse(playero->Text);
                    playero->Text = Convert::ToString(plus + 1);
                    Enable_False();
                }
                if (btn1->Text == \"O\" && btn4->Text == \"O\" && btn7->Text == \"O\"){
                    btn1->BackColor = System::Drawing::Color::PowderBlue;
                    btn4->BackColor = System::Drawing::Color::PowderBlue;
                    btn7->BackColor = System::Drawing::Color::PowderBlue;
                    MessageBox::Show(\"Player O wins!\", \"Tic Tac Toe\", MessageBoxButtons::OK, MessageBoxIcon::Information);
                    plus = int::Parse(playero->Text);
                    playero->Text = Convert::ToString(plus + 1);
                    Enable_False();
                }
                if (btn1->Text == \"O\" && btn5->Text == \"O\" && btn9->Text == \"O\"){
                    btn1->BackColor = System::Drawing::Color::PowderBlue;
                    btn5->BackColor = System::Drawing::Color::PowderBlue;
                    btn9->BackColor = System::Drawing::Color::PowderBlue;
                    MessageBox::Show(\"Player O wins!\", \"Tic Tac Toe\", MessageBoxButtons::OK, MessageBoxIcon::Information);
                    plus = int::Parse(playero->Text);
                    playero->Text = Convert::ToString(plus + 1);
                    Enable_False();
                }
                if (btn4->Text == \"O\" && btn5->Text == \"O\" && btn6->Text == \"O\"){
                    btn4->BackColor = System::Drawing::Color::PowderBlue;
                    btn5->BackColor = System::Drawing::Color::PowderBlue;
                    btn6->BackColor = System::Drawing::Color::PowderBlue;
                    MessageBox::Show(\"Player O wins!\", \"Tic Tac Toe\", MessageBoxButtons::OK, MessageBoxIcon::Information);
                    plus = int::Parse(playero->Text);
                    playero->Text = Convert::ToString(plus + 1);
                    Enable_False();
                }
                if (btn7->Text == \"O\" && btn8->Text == \"O\" && btn9->Text == \"O\"){
                    btn7->BackColor = System::Drawing::Color::PowderBlue;
                    btn8->BackColor = System::Drawing::Color::PowderBlue;
                    btn9->BackColor = System::Drawing::Color::PowderBlue;
                    MessageBox::Show(\"Player O wins!\", \"Tic Tac Toe\", MessageBoxButtons::OK, MessageBoxIcon::Information);
                    plus = int::Parse(playero->Text);
                    playero->Text = Convert::ToString(plus + 1);
                    Enable_False();
                }
                if (btn3->Text == \"O\" && btn5->Text == \"O\" && btn7->Text == \"O\"){
                    btn3->BackColor = System::Drawing::Color::PowderBlue;
                    btn5->BackColor = System::Drawing::Color::PowderBlue;
                    btn7->BackColor = System::Drawing::Color::PowderBlue;
                    MessageBox::Show(\"Player O wins!\", \"Tic Tac Toe\", MessageBoxButtons::OK, MessageBoxIcon::Information);
                    plus = int::Parse(playero->Text);
                    playero->Text = Convert::ToString(plus + 1);
                    Enable_False();
                }
 
            }
        }
    private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) {
    }
    private: System::Void btn1_Click(System::Object^ sender, System::EventArgs^ e) {
        if (checker == false) {
            btn1->Text = \"X\";
            checker = true;
        }
        else {
            btn1->Text = \"O\";
            checker = false;
        }
        score();
        btn1->Enabled = false;
    }
    private: System::Void btn2_Click(System::Object ^ sender, System::EventArgs ^ e) {
        if (checker == false) {
            btn2->Text = \"X\";
            checker = true;
        }
        else {
            btn2->Text = \"O\";
            checker = false;
        }
        score();
        btn2->Enabled = false;
    }
    private: System::Void btn3_Click(System::Object^ sender, System::EventArgs^ e) {
        if (checker == false) {
            btn3->Text = \"X\";
            checker = true;
        }
        else {
            btn3->Text = \"O\";
            checker = false;
        }
        score();
        btn3->Enabled = false;
    }
    private: System::Void btn4_Click(System::Object^ sender, System::EventArgs^ e) {
        if (checker == false) {
            btn4->Text = \"X\";
            checker = true;
        }
        else {
            btn4->Text = \"O\";
            checker = false;
        }
        score();
        btn4->Enabled = false;
    }
    private: System::Void btn5_Click(System::Object^ sender, System::EventArgs^ e) {
        if (checker == false) {
            btn5->Text = \"X\";
            checker = true;
        }
        else {
            btn5->Text = \"O\";
            checker = false;
        }
        score();
        btn5->Enabled = false;
    }
    private: System::Void btn6_Click(System::Object^ sender, System::EventArgs^ e) {
        if (checker == false) {
            btn6->Text = \"X\";
            checker = true;
        }
        else {
            btn6->Text = \"O\";
            checker = false;
        }
        score();
        btn6->Enabled = false;
    }
    private: System::Void btn7_Click(System::Object^ sender, System::EventArgs^ e) {
        if (checker == false) {
            btn7->Text = \"X\";
            checker = true;
        }
        else {
            btn7->Text = \"O\";
            checker = false;
        }
        score();
        btn7->Enabled = false;
    }
    private: System::Void btn8_Click(System::Object^ sender, System::EventArgs^ e) {
        if (checker == false) {
            btn8->Text = \"X\";
            checker = true;
        }
        else {
            btn8->Text = \"O\";
            checker = false;
        }
        score();
        btn8->Enabled = false;
    }
    private: System::Void btn9_Click(System::Object^ sender, System::EventArgs^ e) {
        if (checker == false) {
            btn9->Text = \"X\";
            checker = true;
        }
        else {
            btn9->Text = \"O\";
            checker = false;
        }
        score();
        btn9->Enabled = false;
    }
 
private: System::Void reset_Click(System::Object^ sender, System::EventArgs^ e) {
    btn1->Enabled = true;
    btn2->Enabled = true;
    btn3->Enabled = true;
    btn4->Enabled = true;
    btn5->Enabled = true;
    btn6->Enabled = true;
    btn7->Enabled = true;
    btn8->Enabled = true;
    btn9->Enabled = true;
 
    btn1->Text = \"\";
    btn2->Text = \"\";
    btn3->Text = \"\";
    btn4->Text = \"\";
    btn5->Text = \"\";
    btn6->Text = \"\";
    btn7->Text = \"\";
    btn8->Text = \"\";
    btn9->Text = \"\";
 
    newbtn->Enabled = true;
 
    btn1->BackColor = System::Drawing::Color::WhiteSmoke;
    btn2->BackColor = System::Drawing::Color::WhiteSmoke;
    btn3->BackColor = System::Drawing::Color::WhiteSmoke;
    btn4->BackColor = System::Drawing::Color::WhiteSmoke;
    btn5->BackColor = System::Drawing::Color::WhiteSmoke;
    btn6->BackColor = System::Drawing::Color::WhiteSmoke;
    btn7->BackColor = System::Drawing::Color::WhiteSmoke;
    btn8->BackColor = System::Drawing::Color::WhiteSmoke;
    btn9->BackColor = System::Drawing::Color::WhiteSmoke;
}
 
private: System::Void newBtn_Click(System::Object^ sender, System::EventArgs^ e) {
    btn1->Enabled = true;
    btn2->Enabled = true;
    btn3->Enabled = true;
    btn4->Enabled = true;
    btn5->Enabled = true;
    btn6->Enabled = true;
    btn7->Enabled = true;
    btn8->Enabled = true;
    btn9->Enabled = true;
 
    btn1->Text = \"\";
    btn2->Text = \"\";
    btn3->Text = \"\";
    btn4->Text = \"\";
    btn5->Text = \"\";
    btn6->Text = \"\";
    btn7->Text = \"\";
    btn8->Text = \"\";
    btn9->Text = \"\";
 
    playerx->Text = \"0\";
    playero->Text = \"0\";
 
    btn1->BackColor = System::Drawing::Color::WhiteSmoke;
    btn2->BackColor = System::Drawing::Color::WhiteSmoke;
    btn3->BackColor = System::Drawing::Color::WhiteSmoke;
    btn4->BackColor = System::Drawing::Color::WhiteSmoke;
    btn5->BackColor = System::Drawing::Color::WhiteSmoke;
    btn6->BackColor = System::Drawing::Color::WhiteSmoke;
    btn7->BackColor = System::Drawing::Color::WhiteSmoke;
    btn8->BackColor = System::Drawing::Color::WhiteSmoke;
    btn9->BackColor = System::Drawing::Color::WhiteSmoke;
}
  • 跟随视频编写程序的主要问题之一是您绕过了编程的几个关键方面。你必须知道什么你正在做并且为什么,以便有机会了解哪里出了问题、如何隔离它以及如何修复它。您可以通过编写自己的小程序、在您所知道的知识和经常测试的基础上逐步构建来有机地发展这些技能。没有捷径可走。

标签: c++ visual-studio winforms tic-tac-toe


【解决方案1】:

经过测试,我找到了分数无法显示的原因。因为程序启动时分数框的内容没有初始化,plus = int::Parse(playero->Text);会导致异常。

解决方案:

在 MyForm_Load 函数中添加分数框的初始化。

private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) {
    playerx->Text = "0";
    playero->Text = "0";
}

结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 2015-01-08
    相关资源
    最近更新 更多