我是C#的初学者。我试图在纸牌游戏中向2名玩家发放等量的牌。我必须将我的阵列(卡片)分成两部分,以便每个玩家拥有相同数量的牌。我已经使用my GetImages()
将ALL(全部是40个)图像随机化为1 pictureBox
。接下来,我将不得不将其拆分为两个,并在我的表单加载时将它们放入pictureBox
。
任何帮助将不胜感激,谢谢。
这是我的代码:
public string[] GetImages(){
string[] img = new string[40];
img[0] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards\1.png";
img[1] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards\2.png";
img[2] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards\3.png";
img[3] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards\5.png";
img[4] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards\6.png";
img[5] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards\7.png";
img[6] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards\9.png";
img[7] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards\10.png";
img[8] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards\11.png";
img[9] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards\13.png";
img[10] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards\14.png";
img[11] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards\15.png";
img[12] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards\17.png";
img[13] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards\18.png";
//so on and so forth
return
img;
}
public void Form2_Load(object sender, EventArgs e)
{
//the code I'm trying now:
string[] Player1Array = GetImages(40/2);
答案 0 :(得分:5)
假设您只需将数组(或List
)元素拆分为第一半/第二半 - 通常会使用Enumerable.Take
/ Enumerable.Skip
后跟Enumerable.ToArray
来必要时转换为数组:
string[] Player1Array = GetImages().Take(20).ToArray();
string[] Player2Array = GetImages().Skip(20).ToArray();
答案 1 :(得分:0)
首先,您必须识别代码中的问题:您无法使用带参数的getImages函数(我指的是40/2),因为它没有使用参数定义。
我对随机化卡片有不同的建议。 将两个数组传递给getImg函数,该函数将随机分配给player1。然后根据包含随机排列的0到39的数字的数组随机到player2。此链接将帮助您了解如何生成随机唯一数字集(它使用列表,但您可以安全地将其替换为数组):
https://codereview.stackexchange.com/questions/61338/generate-random-numbers-without-repetitions
所以getImg函数就是这样的:
public string [] GetImages(string [] player1Array, string [] player2Array){
int [] randomArray=getRandomNembers(); //this call depends on how you define the function
player1Array[randomArray[0]]=" your location here";
// so on until
player1Array[randomArray[19]]=" your location here";
//then you start with player 2
player2Array[randomArray[20]]=" your location here";
//and so on
}
答案 2 :(得分:0)
public static List<string[]> Partition(this string[] source, Int32 size)
{
var output = new List<string[]>();
for (int i = 0; i < Math.Ceiling(source.Count() / (Double)size); i++)
output.Add(source.Skip(size * i).Take(size).ToArray());
return output;
}
受此C# - elegant way of partitioning a list?
的启发所以要使用它,你所要做的就是:
var chunkSize = 40 / 4;
var chunks = GetImages().GetImages(chunkSize);
并且块中的每个元素都是原始的段。每个块中有多少个字符串取决于块大小的参数。 40/4将获得4块。第一项包含前10项。第二项包含下一项10,所以你到达最后10项。这样你就可以轻松地分割你需要的阵列。