用C#创建类似minesweeper的模式的问题

时间:2018-09-25 19:21:16

标签: c# loops design-patterns nested

首先,我是C#的新手,所以如果我问一些“如此新手”,我深表歉意。好吧,这件事:

我正尝试创建一种模式,就像游戏一样: Minesweeper “因为我正在做一个简单的游戏,一个国际象棋游戏,所以我现在的大问题是我可以做到” t有效地创建列,所以,这是我的代码:

class chessGame
{
    static void Main(string[] args)
    {
        const string EX = "X";
        const string OU = "O";
        const int VALUE_X = 8;

        int numRows = 0;
        int numCol = 0;

        while (numRows < VALUE_X)
        {
            for (numCol = 0; numCol < VALUE_X; numCol++)
            {
                Console.WriteLine(OU);
            }
            for (numRows = 0; numRows < numCol; numRows++)
            {
                Console.WriteLine(EX);
            }
            Console.WriteLine();
        }
        Console.ReadLine();
    }
}

而且,我根本不知道是否是使用嵌套循环创建列和行的方式,因此,如果有人可以帮助我,或者只是有人可以帮助我,用我的实际代码正确执行,非常感谢!

记录下来,这是我现在在控制台中看到的内容:

enter image description here

事先,谢谢您对所有人的建议!

3 个答案:

答案 0 :(得分:5)

顾名思义,

WriteLine会写整行(并在末尾添加换行符)。对于在您的设置中完成不止一列不是很好!

典型的解决方案是仅使用Console.Write,有时使用Console.SetCursorPosition,这样您就可以一次编写单个“单元格”。

另一种相当简单的方法是将每行预先计算为一个字符串,然后WriteLine

无论哪种方式,您都需要对循环进行相当大的修改才能获得正确的效果。

答案 1 :(得分:3)

要开始使用,您需要将两个内部WriteLine()调用更改为Write()

但是,实际上,您要开始考虑整个电路板的问题,在该电路板上您有一个2D数组来表示电路板的状态。然后编写一个函数以输出整个数组。

答案 2 :(得分:1)

        const string EX = "X";
        const string OU = "O";
        const int VALUE_X = 8;
        bool writeToggle = true;
        int numRows = 0;
        int numCol = 0;

        for (numRows = 0; numRows < VALUE_X; numRows++)
        {
            for (numCol = 0; numCol < VALUE_X; numCol++)
            {
                if (writeToggle)
                {
                    Console.Write(EX);
                }
                else
                {
                    Console.Write(OU);
                }
                writeToggle = !writeToggle;
            }
            Console.WriteLine();
        }
        Console.ReadLine();

这是一些应生成模式的代码。请注意使用Console.Write而不是Console.WriteLine,因此它不会在每次打印字符时都跳过一行。另外,布尔writeToggle用于在X和O之间交替。