【问题标题】:Labels not showing output for random simulation标签未显示随机模拟的输出
【发布时间】:2019-11-22 16:19:29
【问题描述】:

我有一个类项目来创建井字游戏模拟(游戏不是由人玩的),其中 O 和 X 会在单击“新游戏”按钮时自动生成。我无法使用代码来获取标签以显示输出。

使用二维数组类型INT来模拟棋盘,它应该在9个元素中分别存储一个0或1,并产生一个O或X。如果X或O获胜,还需要一个标签来显示。

这是我到目前为止的代码(我知道没有太多,我完全迷路了):

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void StartButton_Click(object sender, EventArgs e)
    {
        Random rand = new Random();
        const int ROWS = 3;
        const int COLS = 3;

        int[,] gameBoard = new int[ROWS, COLS];

        for (int row = 0; row < ROWS; row++)
        {
            for (int col = 0; col < COLS; col++)
            { gameBoard[row, col]= rand.Next(2); }
        }


    }

    private void ExitButton_Click(object sender, EventArgs e)
    {
        this.Close();
    }
}
}

【问题讨论】:

  • 我们在您的代码中看不到对任何标签的引用。
  • 我知道,这就是我要解决的问题。 labels1-9 是名称,我不明白如何获取随机生成的结果并根据生成的内容让标签显示 X 或 O。

标签: c# multidimensional-array label


【解决方案1】:

除非当前事件进程完全完成,否则会填充 Win Forms 标签。如果您想使用 X 和 O 更新标签,同时您可以使用控件属性 InvokeRequired(布尔值)并在将值分配给标签调用 label.Refresh() 函数之后。我会建议在点击开始按钮时分叉一个线程并在线程内执行 for 循环 -> random.next() 。尝试进行这些更改。万事如意!!

【讨论】:

  • 对不起,我是编程新手,你能提供一个解释的例子吗?我们还没有涵盖你在课堂上提到的内容。
【解决方案2】:

尝试以下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication4
{
    public partial class Form1 : Form
    {
        const int ROWS = 3;
        const int COLS = 3;

        const int WIDTH = 100;
        const int HEIGHT = 100;
        const int SPACE = 20;
        static TextBox[,] gameBoard;

        public Form1()
        {
            InitializeComponent();
            gameBoard = new TextBox[ROWS, COLS];

            for (int row = 0; row < ROWS; row++)
            {
                for (int col = 0; col < COLS; col++)
                {
                    TextBox newTextBox = new TextBox();
                    newTextBox.Multiline = true;
                    this.Controls.Add(newTextBox);
                    newTextBox.Height = HEIGHT;
                    newTextBox.Width = WIDTH;
                    newTextBox.Top = SPACE + (row * (HEIGHT + SPACE));
                    newTextBox.Left = SPACE + (col * (WIDTH + SPACE));
                    gameBoard[row, col] = newTextBox;
                }
            }

        }


    }
}

【讨论】:

  • 这不符合项目标准,我们需要在windows窗体中使用标签控件。
  • 然后只需将控件类型从文本框更改为标签。除了标签没有多行之外,一切都将相同(因此删除此行)。
  • 我已经创建了表单,我需要它来随机生成 0 或 1 并为每个标签分配 O 或 X。
  • 然后您必须按行和列索引每个标签。我将 9 个标签添加到 gameBoard 数组中。所以你需要做同样的事情。动态创建标签使更改更容易。
猜你喜欢
  • 1970-01-01
  • 2015-10-05
  • 1970-01-01
  • 2021-01-04
  • 2014-12-18
  • 1970-01-01
  • 2019-08-31
  • 2018-09-03
  • 1970-01-01
相关资源
最近更新 更多