c#如何让符号保持开启状态(记忆游戏)

c#如何让符号保持开启状态(记忆游戏),c#,C#,我被困在一个地方,我想我的符号保持翻转,如果他们匹配。这是一个简单的4x4记忆游戏的项目。我应该制定一个新的方法吗?如果有人能告诉我是否可以通过按键来重置电路板,那就太好了 我是一个完全的初学者,所以如果有人能以一种非常简单的方式向我解释这一点,那将对我帮助很大。现在我被困在这个问题上了 using System; namespace Memory { class Program { static Coordinate[,] board = new Coord

我被困在一个地方,我想我的符号保持翻转,如果他们匹配。这是一个简单的4x4记忆游戏的项目。我应该制定一个新的方法吗?如果有人能告诉我是否可以通过按键来重置电路板,那就太好了

我是一个完全的初学者,所以如果有人能以一种非常简单的方式向我解释这一点,那将对我帮助很大。现在我被困在这个问题上了

using System;

namespace Memory
{
    class Program
    {

        static Coordinate[,] board = new Coordinate[4, 4];

        static int PosX = 0;
        static int PosY = 0;

        static void Main(string[] args)
        {
            //randomize

            char[] symbols = new char[] { '#', '#', '1', '1', '2', '2', '3', '3', '4', '4', 'A', 'A', 'B', 'B', 'C', 'C' };
            Random rnd = new Random();

            for (int y = 0; y < board.GetLength(0); y++)
            {
                for (int x = 0; x < board.GetLength(1); x++)
                {
                    Coordinate c = new Coordinate();

                    while (true)
                    {
                        int index = rnd.Next(symbols.Length);
                        if (symbols[index] != ' ')
                        {
                            c.Symbol = symbols[index];
                            symbols[index] = ' ';
                            break;
                        }
                    }
                    board[y, x] = c;
                }
            }

            while (true)
            {
                DrawBoard();

                var key = Console.ReadKey();
                if(key.Key == ConsoleKey.LeftArrow)
                {
                    PosX--;
                }
                if (key.Key == ConsoleKey.RightArrow)
                {
                    PosX++;
                }
                if (key.Key == ConsoleKey.UpArrow)
                {
                    PosY--;
                }
                if (key.Key == ConsoleKey.DownArrow)
                {
                    PosY++;
                }
                if (key.Key == ConsoleKey.Spacebar)
                {
                    board[PosY, PosX].IsOpen = true;
                }

                Console.Clear();
            }
            Console.ReadLine();
        }

        static void DrawBoard()
        {
            for (int y = 0; y < board.GetLength(0); y++)
            {
                for (int x = 0; x < board.GetLength(1); x++)
                {
                    if(x == PosX && y == PosY)
                    {
                        Console.BackgroundColor = ConsoleColor.Blue;
                    }
                    if (!board[y, x].IsOpen)
                    {
                        Console.Write(". ");
                    }
                    else
                    {
                        Console.Write(board[y, x].Symbol + " ");
                    }
                    Console.BackgroundColor = ConsoleColor.Black;
                }
                Console.WriteLine();
            }
        }
    }

    class Coordinate
    {
        public char Symbol;
        public bool IsOpen;
        public bool isDone;
    }

}
使用系统;
名称空间内存
{
班级计划
{
静态坐标[,]板=新坐标[4,4];
静态int PosX=0;
静态int-PosY=0;
静态void Main(字符串[]参数)
{
//随机化
字符[]符号=新字符[]{'#','#','1','2','2','3','3','4','4','A','A','B','B','C','C'};
随机rnd=新随机();
对于(int y=0;y
如果更改行:

board[PosY, PosX].IsOpen = true;

再次选择时,所选字段将向后翻转

或者用字母“R”翻转整个电路板:

if(key.key==ConsoleKey.R)
{
对于(int y=0;y

如果实现了
isDone
,则应扩展此功能,因为如果字段
isDone
可能不应还原回它?

感谢Luuk的帮助!我的意思是,当我打开两个字段时,如果它们不匹配,那么它们都会自动翻转。例如,如果我打开“#”和“a”,那么它应该关闭,因为它们不匹配。我还希望它们在匹配时保持开放。当你自己编写代码时,你应该足够聪明来做到这一点。提示:将isOpen设置为True时,您还可以增加一个计数器,当它达到值2时,比较两个打开的字段,如果它们不相等,则关闭它们,如果它们相等,则执行其他操作。此代码部分由我完成,大部分由教我c#的老师完成。自从你发了评论后,我就试着按照你说的去做,但我仍然不知道怎么做。可能需要一些帮助。你说的柜台是什么意思?我应该用主方法还是用一种全新的方法,如果是的话,它会是什么样子?非常感谢。很抱歉,你的老师跳过了编程课的一部分(基础)。不,他没有。我真的是不知所措,我学的不快。我有一个考试在2天内解释这一点,我真的不知道该怎么做。而且英语不是我的母语,所以我不懂英语中的一些东西。
board[PosY, PosX].IsOpen = !board[PosY, PosX].IsOpen;
if (key.Key == ConsoleKey.R)
{
   for (int y = 0; y < board.GetLength(0); y++)
   {
      for (int x = 0; x < board.GetLength(1); x++)
      {
         if (board[y, x].IsOpen) board[y, x].IsOpen = false;
      }
   }
}