我怎么能填补一个矩阵随机字符在c#中,如果每个字符出现它必须出现两次(内存游戏)

本文关键字:字符 游戏 两次 如果 内存 一个 怎么能 随机 | 更新日期: 2023-09-27 17:52:42

我需要在c#(主机)中创建一个简单的内存游戏,必须生成一个带有隐藏卡片的板,在卡片后面我需要从a - z随机选择字符。我创建了一个名为Table的类,包含一个字符矩阵。我还创建了一个方法,假设随机填充矩阵与字符

  public void set_table_values()
    {
        int i=0,randchar=0;
        Random board_filler = new Random() ;
        while(i< Height)
        {
            int j = 0;
            while (j<Width)
            {
                randchar=board_filler.Next(0, 26);
                Table_matrix[i, j] = (char)('A'+randchar);//table matrix is a private member inside the class
                j++;
            }
            i++;
        }

问题在于,为了让游戏运行,我需要在随机位置创建每个随机字符两次。我有点卡住了,我唯一的想法太复杂了,有什么建议吗?

我怎么能填补一个矩阵随机字符在c#中,如果每个字符出现它必须出现两次(内存游戏)

您应该首先事先生成所有字母对,对它们进行洗牌,然后将它们分配给矩阵。

假设你有一个平方矩阵,你可以有一对的重复:

int dimensionOfMatrix=n;
Random rnd=new Random();
char[] arrayOfCouplesOfLetters=new char[dimensionOfMatrix*dimensionOfMatrix];
for(int i=0; i < arrayOfCouplesOfLetters.Count(); i=i+2){
   char letter=(char)rnd.Next(65,91);
   arrayOfCouplesOfLetters[i]=letter;
   arrayOfCouplesOfLetters[i+1]=letter;
}
arrayOfCouplesOfLetters=ShuffleArray(arrayOfCouplesOfLetters); //ShuffleArray should return a permutation of the original array
int currPosition=0;
for(int i=0; i < dimensionOfMatrix; i++)
    for(int j=0; j < dimensionOfMatrix; j++){
        matrix[i,j]=arrayOfCouplesOfLetters[currPosition];
        currPosition++;
    }

不比

复杂多少
public static char[,] CreateCharArray( int rows , int cols )
{
  const string charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ; // whatever character set you want here
  if ( rows < 1 || cols < 1 ) throw new ArgumentException();
  // create and populate the initial set of pairs
  char[] chars = new char[rows*cols];
  for ( int i = 0 ; i < chars.Length ; )
  {
    char ch = charset[ rng.Next(charset.Length) ] ;
    chars[i++] = ch ;
    chars[i++] = ch ;
  }
  // shuffle it up
  Shuffle(chars) ;
  // construct the 2-D grid
  char[,] grid = new char[rows,cols];
  for ( int i = 0 , k = 0 ; i < rows ; ++i )
  {
    for ( int j = 0 ; j < cols ; ++j )
    {
      grid[i,j] = chars[k++] ;
    }
  }
  return grid ;
}
private static Random rng = new Random() ;
private static void Shuffle( char[] chars)
{
  for ( int i = chars.Length ; --i >= 0 ; )
  {
    int j    = rng.Next(i) ;
    char t   = chars[j] ;
    chars[j] = chars[i] ;
    chars[i] = t        ;
  }
  return ;
}

我会使用列表或数组。然后打印数组或列表的随机索引。

Random rnd = new Random();
int myRandomNumber;
List<char> letters = new List<char>();
letters.Add('a');
letters.Add('a');
letters.Add('b');
letters.Add('b');
letters.Add('c');
letters.Add('c');
for (int i = 0; i< letters.Length; i++)
{
     myRandomNumber = rnd.Next(0, letters.Length);
     Console.Write(letters[myRandomNumber]);
}

扩展@Saverio的想法,使用:

随机化列表

打乱列表。确保列表与矩阵大小相同