2015-01-04 3 views
0

저는 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

당신은 단지 1 차/2 차 절반에 요소의 배열 (또는 List)를 분할해야 가정 - 일반적으로 하나의 배열로 변환 Enumerable.ToArray 다음 Enumerable.Take/Enumerable.Skip을 사용 필요한 경우 :

string[] Player1Array = GetImages().Take(20).ToArray(); 
string[] Player2Array = GetImages().Skip(20).ToArray(); 
+0

이것은 효과가 있습니다. 도와 주셔서 정말 감사합니다. – zwxzwx

0

첫째, 당신은 당신의 코드에서 문제를 인식 할 수있다 : 당신이 매개 변수를 사용하여 getImages 기능 (나는 2분의 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 
} 
0

알렉세이가 죽었습니다. 우리는 훨씬 더 정교한 얻고 싶은 경우에 당신이 이런 식으로 뭔가를 할 수 있습니다

var chunkSize = 40/4; 
var chunks = GetImages().GetImages(chunkSize); 

C# - elegant way of partitioning a list?

에서 영감을

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; 
    } 

그래서 그것을 사용하는, 당신이 할 일은 이것이다 청크의 모든 요소는 원본 세그먼트입니다. 각 청크에있는 문자열의 수는 청크 크기 매개 변수에 따라 다릅니다. 40/4는 4 개의 덩어리를 가져옵니다. 첫 번째 항목에는 첫 번째 10 초가 포함됩니다. 두 번째 항목에는 다음 10 항목이 포함되므로 마지막 10 자리까지 가져옵니다. 이렇게하면 원하는대로 배열을 쉽게 분할 할 수 있습니다.

관련 문제