我怎么能填补一个矩阵随机字符在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++;
}
问题在于,为了让游戏运行,我需要在随机位置创建每个随机字符两次。我有点卡住了,我唯一的想法太复杂了,有什么建议吗?
您应该首先事先生成所有字母对,对它们进行洗牌,然后将它们分配给矩阵。
假设你有一个平方矩阵,你可以有一对的重复:
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的想法,使用:
随机化列表
打乱列表。确保列表与矩阵大小相同