C# 骰子游戏(Windows申请表)多期

C# Dice Game (Windows Application Form) Multiple Issues

好的,所以我在处理一个教程问题时遇到了一些问题,所以希望能得到一些指导,因为我是 C# 的新手而且不太擅长。

场景是这样的: 编写一个程序,模拟两个骰子滚动 1000 次。该程序应计算掷双六的次数,并输出 1000 次掷骰子的平均分数。您不需要显示每 1000 卷的结果,只需每 100 卷点击一次“运行 模拟”按钮。按钮和输出应该有适当的标签。

虽然场景说要掷 1000 次并一次掷 2 个骰子,但目前我只掷 10 次和一次掷骰子,直到我能做到这一点。这是我到目前为止编写的代码:

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

            namespace Dice_Roll_2___Advanced
            {
                public partial class Form1 : Form
                {
                    int roll;


                    int countDouble;
                    int countRoll;

                    int count;
                    int count2;

                    int average;
                    int doubleSix;


                    public Form1()
                    {
                        InitializeComponent();
                    }

                    private void Dice_Roll_Click(object sender, EventArgs e)
                    {
                        Random rnd = new Random();
                        for(count = 0; count <1; count++)
                        {
                            for(count2 = 0; count2 < 10; count2++)
                            {
                               roll = rnd.Next (6) + 1;
                               MessageBox.Show(roll.ToString());
                                if(roll < 6)
                                {
                                    countRoll++;
                                }
                                else if(roll == 6)
                                {
                                    countDouble++;
                                }

                            }
                        }





                    }

                    private void Average_Click(object sender, EventArgs e)
                    {
                        average = (countRoll / 10);
                        Average.Text = average.ToString();
                    }

                    private void Doubles_Click(object sender, EventArgs e)
                    {
                        doubleSix = countDouble;
                        Doubles.Text = doubleSix.ToString();

                     }

第一期

在场景中,它说我必须一次输出100个数字。因为我现在只做 10 个,所以我希望一次输出 10 个。目前,这还没有发生。它给了我一个数字,然后我单击确定,然后它给了我下一个数字,依此类推。我认为代码中的这一行是问题所在,但不确定如何更正它。

MessageBox.Show(roll.ToString());

第 2 期

平均值根本不起作用,每次都给我一个0值。在我的代码中你会看到是否写了:

                                if(roll < 6)
                                {
                                    countRoll++;
                                }
                                else if(roll == 6)
                                {
                                    countDouble++;
                                }

然后在标签中我希望发送信息: 平均值 = (countRoll / 10); Average.Text = average.ToString();

我知道信息很多,但如有任何帮助,我们将不胜感激。

几点建议:

  • 你可以去掉只有运行一次的外层循环;这是不必要的(内部循环至少已经 运行 一次)。
  • 通常,Random 对象的声明是在 class 级别而不是在按钮的 Click 事件处理程序中完成的。以这种方式思考:使用您现在的代码,每次用户按下 Dice_Roll 按钮时,计算机都必须重新创建 Random 对象。这是对系统资源的浪费。
  • 如果要在单个消息框中显示滚动,则必须将滚动存储在某个地方(如 int[]List<int>)。然后,在执行掷骰的循环之外,创建另一个循环来构建您要显示的消息。
  • 每个骰子应该掷一次。在您当前的代码中,您只掷一个骰子(并且只检查那个骰子是否为 6)。
  • 你应该把 10 "magic number" 变成一个常量(类似于 private const int numRolls = 10;)。
  • average = (countRoll / 10); 没有意义。您将卷数除以 10(在这种情况下……是卷数)。对于平均值,您需要将每个卷起来得到总数,然后除以卷数。
  • 您的 if 语句也需要一些调整。目前,只有 < 6 的卷才会被计算在内,这意味着 6 的卷不会被计算在内,并且会被排除在平均值之外(可能不是期望的行为)。 countRoll 每次进行掷骰时都应递增,而不管掷骰的值如何。

很遗憾,这是我有时间提供的所有反馈。请不要觉得我在试图拆开您的代码,我只是想指出一些应该让您回到正轨并稍微清理一下 code/logic 的东西。

祝你好运。