2016-03-21 11 views
0

Şu anda, bir takım rastgele seçilen kartlarla 3x3 ızgara oluşturduğum Sprite Kit'te bir eşleme kartları oyunu üzerinde çalışıyorum ve sağ tarafta rastgele seçilen bir dizi kart için başka bir 3x3 ızgara.Diğer ızgarada her zaman eşleşen bir Sprite Düğümüne sahip olmak için rastgele seçilen SKSpriteNodes iki ayrı ızgarayı nasıl alabilirim?

Buradaki fikir, sol kılavuzdaki her kartın, doğru kılavuzda eşleşen bir karta sahip olmasıdır. Sağdaki kartların, eşleşme aslında farklı hareketli grafikler olduğuna dikkat edin; Soldaki kartlar görüntüleri gösterir, sağdaki kartlar ilgili harfi gösterir.

Ben (bir müzik ile ilgili oyun için var, değişken isimleri lütfen bağışlayın) şöyle bir kılavuz oluşturun:

biri kartların ızgara oluşturma:

for (j = 0; j < 3; j++) 
{ 
    for (i = 0; i < 3; i ++) 
    { 
     int randomCard = arc4random_uniform(8); 
     switch (randomCard) 
     { 
      case CardC: 
       staveCard = [SKSpriteNode spriteNodeWithImageNamed:@"Card_C"]; 
       staveCard.name = @"0"; 
       break; 
      case CardD: 
       staveCard = [SKSpriteNode spriteNodeWithImageNamed:@"Card_D"]; 
       staveCard.name = @"1"; 
       break; 
      case CardE: 
       staveCard = [SKSpriteNode spriteNodeWithImageNamed:@"Card_E"]; 
       staveCard.name= @"2"; 
       break; 
      case CardF: 
       staveCard = [SKSpriteNode spriteNodeWithImageNamed:@"Card_F"]; 
       staveCard.name = @"3"; 
       break; 
      case CardG: 
       staveCard = [SKSpriteNode spriteNodeWithImageNamed:@"Card_G"]; 
       staveCard.name = @"4"; 
       break; 
      case CardA: 
       staveCard = [SKSpriteNode spriteNodeWithImageNamed:@"Card_A"]; 
       staveCard.name = @"5"; 
       break; 
      case CardB: 
       staveCard = [SKSpriteNode spriteNodeWithImageNamed:@"Card_B"]; 
       staveCard.name = @"6"; 
       break; 
      case CardC2: 
       staveCard = [SKSpriteNode spriteNodeWithImageNamed:@"Card_C2"]; 
       staveCard.name = @"7"; 
       break; 
     } 

     grid[j*3+i] = randomCard; // store the stave cards in the grid 

     staveCard.xScale = 0.5; 
     staveCard.yScale = 0.5; 

     staveCard.position = CGPointMake(((i*xGridSize)+120),((j*yGridSize)+120)); 
     [self addChild:staveCard]; 
    } 

ben diğeri için aynı şeyi yapmak SKSpriteNodes diğer kümesi ile ızgara.

Artık uygulamayı çalıştırdığım zaman rastgele kartların seçimi başarılı oluyor, ancak doğru kılavuzdaki kartlar her zaman soldaki kartlarla uyuşmuyor; Yani, her kartın her zaman eşleşen bir çifti yoktur.

Soruma göre: Sol ızgaradaki kartların her zaman doğru kılavuzda eşleşen bir kart bulunabileceğinden nasıl emin olabilirim?

+0

Lütfen repost yapmayın. [Benim sorum asla cevaplanmadı; ne yapabilirim?] (http://meta.stackoverflow.com/q/251422) –

+0

@Josh Caswell Son bir soru gönderdiğimden beri, bir şeyler yaptığım için adil bir şey değişti, bu yüzden değeceğini düşündüm reposting. Önceki soruyu silecek. –

cevap

0

Sadece doğru kartı, soldaki ile aynı anda yapın.
Aynı pozisyonda olmalarını istemiyorsanız, rastgele bir şekilde doğru olan pozisyonu seçebilirsiniz.

+0

Geri bildirim için teşekkürler! Daha önce bu şekilde yapmayı denedim, ama doğru kılavuzun pozisyonunu nasıl rasgele seçeceğime emin değilim. Önerin var mı? @Cing –

+0

Pozisyonun rasgele çevrilmesi "karıştırma" dır. Bunun için basit bir algoritma "Knuth Shuffle" (i = 8; i> = 0; i--) {int rand = arc4_random (i); tempCard1 = ızgara [i]; tempCard2 = ızgara [rand]; ızgara [rand] = tempCard1; ızgara [i] = tempCard2;} –

0

Her zaman kullanılabilen tüm "kartları" kullanıyor görünüyorsunuz, bu nedenle biri sol tarafa, diğeri sağ tarafa, diğeri de shuffle them'a sahip iki paralel dizi yapın. Daha sonra sırayla iki diziyi ızgara konumlarına atayın.

Tüm kartları kullanmıyorsanız, dizilerinizi bir yere göre seçim yaparak paralel olarak oluşturabilirsiniz.

+0

Cevapladığınız için çok teşekkürler, bunu deneyecek –

İlgili konular