2017-05-02 18 views
0

임의의 블록에 몇 가지 능력을 추가 할 예정입니다. 당신이 2 개의 볼이나 더 큰 패들 또는 더 느린 볼 스피드를 얻는 것처럼.모노 게임 브레이크 아웃 : 더 이상 패들 또는 더 많은 공과 같은 능력을 추가하는 데 문제가 있습니다.

내 블록 수준에 몇 가지 기능을 추가 할 수있는 for 루프 및 if 문을 작성하는 데 도움이 필요합니다. 레벨 1에서 무작위로 1 점을 얻는 것과 같습니다. 그래서 당신이 20 블록과 같은 1 개의 무작위 블록을 치면, 그건 내 능력이 있습니다. 그것은 최초의 탈주 게임처럼 패들로 떨어질 것입니다.

능력이있는 임의의 블록이 맞고 스위치를 사용하여 랜덤 화하면 스위치가 필요하다고 생각했습니다.

void PowerUp() 
    { 
     powerups.Add(abilityballs_rect); 
     powerups.Add(abilitylong_rect); 
     powerups.Add(abilityslow_rect); 
    } 

-

List<Rectangle> block = new List<Rectangle>(); 
    List<Rectangle> block2 = new List<Rectangle>(); 
    List<Rectangle> block3 = new List<Rectangle>(); 
    List<Rectangle> block4 = new List<Rectangle>(); 
    List<Rectangle> block5 = new List<Rectangle>(); 
    List<Rectangle> block6 = new List<Rectangle>(); 

    List<Rectangle> powerups = new List<Rectangle>(); 

-

  if (level == 1) 
      { 
       if (block.Count == 14 && block2.Count == 14) 
       { 
        spriteBatch.DrawString(spritefont2, "LEVEL " + level, new Vector2(252, 400), Color.White); 
       } 

       foreach (Rectangle g in block) 
       { 
        spriteBatch.Draw(block_texture, g, Color.LimeGreen); 
       } 
       foreach (Rectangle r in block2) 
       { 
        spriteBatch.Draw(block_texture, r, Color.IndianRed); 
       } 
      } 

      else if (level == 2) 
      { 
       if (block3.Count == 18 && block4.Count == 27) 
       { 
        spriteBatch.DrawString(spritefont2, "LEVEL " + level, new Vector2(246, 400), Color.White); 
       } 

       foreach (Rectangle b in block3) 
       { 
        spriteBatch.Draw(block_texture, b, Color.CornflowerBlue); 
       } 
       foreach (Rectangle y in block4) 
       { 
        spriteBatch.Draw(block_texture, y, Color.Yellow); 
       } 
      } 

      else if (level == 3) 
      { 
       if (block5.Count == 36 && block6.Count == 18) 
       { 
        spriteBatch.DrawString(spritefont2, "LEVEL " + level, new Vector2(246, 400), Color.White); 
       } 

       foreach (Rectangle o in block5) 
       { 
        spriteBatch.Draw(block_texture, o, Color.Orange); 
       } 
       foreach (Rectangle p in block6) 
       { 
        spriteBatch.Draw(block_texture, p, Color.HotPink); 
       } 
      } 

-

void AddBlocks() 
    { 
     //LEVEL 1 
     for (int i = 1; i < 3; i++) 
     { 
      for (int f = 1; f < 8; f++) 
      { 
       block.Add(new Rectangle((f * 63) + 94, (i * 40) + 60, block_texture.Width, block_texture.Height)); 
      } 
     } 
     for (int i = 1; i < 3; i++) 
     { 
      for (int g = 1; g < 8; g++) 
      { 
       block2.Add(new Rectangle((g * 63) + 94, (i * 40) + 40, block_texture.Width, block_texture.Height)); 
      } 
     } 

     //LEVEL 2 
     for (int i = 1; i < 3; i++) 
     { 
      for (int j = 1; j < 10; j++) 
      { 
       block3.Add(new Rectangle((j * 63) + 34, (i * 200) - 60, block_texture.Width, block_texture.Height)); 
      } 
     } 
     for (int i = 1; i < 10; i++) 
     { 
      for (int k = 1; k < 4; k++) 
      { 
       block4.Add(new Rectangle((k * 103) + 143, (i * 20) + 140, block_texture.Width, block_texture.Height)); 
      } 
     } 

     //LEVEL 3 
     for (int i = 1; i < 7; i++) 
     { 
      for (int j = 1; j < 7; j++) 
      { 
       block5.Add(new Rectangle((j * 63) + 127, (i * 20) + 190, block_texture.Width, block_texture.Height)); 
      } 
     } 
     for (int i = 1; i < 10; i++) 
     { 
      for (int k = 1; k < 3; k++) 
      { 
       block6.Add(new Rectangle((k * 443) - 317, (i * 20) + 160, block_texture.Width, block_texture.Height)); 
      } 
     } 
    } 

-

void DeleteBlocks() 
    { 
     if (level == 1) 
     { 
      for (int j = 0; j < block.Count; j++) 
      { 
       if (ball_rect.Intersects(block[j])) 
       { 
        ball_speed.Y *= -1; 
        points += 1; 
        block.RemoveAt(j); 
        if (points > highscore) 
        { 
         highscore = points; 
        } 
       } 
      } 

      for (int k = 0; k < block2.Count; k++) 
      { 
       if (ball_rect.Intersects(block2[k])) 
       { 
        ball_speed.Y *= -1; 
        points += 1; 
        block2.RemoveAt(k); 
        if (points > highscore) 
        { 
         highscore = points; 
        } 
       } 
      } 
      if (block.Count == 0 && block2.Count == 0) 
      { 
       level++; 
       StartValueBallPaddle(); 
       Start = false; 
      } 
     } 

     else if (level == 2) 
     { 
      for (int l = 0; l < block3.Count; l++) 
      { 
       if (ball_rect.Intersects(block3[l])) 
       { 
        ball_speed.Y *= -1; 
        points += 1; 
        block3.RemoveAt(l); 
        if (points > highscore) 
        { 
         highscore = points; 
        } 
       } 
      } 
      for (int m = 0; m < block4.Count; m++) 
      { 
       if (ball_rect.Intersects(block4[m])) 
       { 
        ball_speed.Y *= -1; 
        points += 1; 
        block4.RemoveAt(m); 
        if (points > highscore) 
        { 
         highscore = points; 
        } 
       } 
      } 
      if (block3.Count == 0 && block4.Count == 0) 
      { 
       level++; 
       StartValueBallPaddle(); 
       Start = false; 
      } 
     } 

     else if (level == 3) 
     { 
      for (int n = 0; n < block5.Count; n++) 
      { 
       if (ball_rect.Intersects(block5[n])) 
       { 
        ball_speed.Y *= -1; 
        points += 1; 
        block5.RemoveAt(n); 
        if (points > highscore) 
        { 
         highscore = points; 
        } 
       } 
      } 
      for (int o = 0; o < block6.Count; o++) 
      { 
       if (ball_rect.Intersects(block6[o])) 
       { 
        ball_speed.Y *= -1; 
        points += 1; 
        block6.RemoveAt(o); 
        if (points > highscore) 
        { 
         highscore = points; 
        } 
       } 
      } 
     } 
    } 
+0

게시물을 통해 무엇을 요청하려고하는지 명확하지 않습니다. 코드를 작성하는 데 문제가 있습니까? 누군가 코드에 대한 코드를 확인하길 원하십니까? 게시물의 제목을 더 명확한 질문으로 바꿔야합니다. – stackuser83

+0

네 말이 맞아, 지금은 분명해. 미안 내 영어에 대해 : P –

답변

0

블록 데이터를 블록의 색상, 위치 및 파워 업을 포함하는 클래스로 캡슐화 할 수 있습니다.
"AddPowerup()"또는 그 밖의 메서드를 사용할 수 있습니다.이 메서드는 임의의 (또는 특정) 전원 공급을 블록에 추가하는 데 사용됩니다. 파워 업을 위해 게터가 필요할 수도 있습니다.

이제 게임 내에서 레벨의 모든 블록을 2 차원 배열이나 2 차원 배열 또는 원하는 컬렉션에 넣을 수 있습니다. 다음 레벨의 무작위 블록에 파워 업을 적용하려면 다음과 같이합니다 이 (주로 의사 코드, 그래서 테스트되지 않음) : 여러 블록에 파워 업을 적용 할 경우

List<Block> blockList = CreateBlockLevel(1); 
int randomIndex = new Random().Next(blockList.Length-1); 
blockList[randomIndex].AddPowerup(); 

, 당신은에 대한 루프에 그것을 넣을 수 있습니다,하지만 당신은 블록이 있는지 확인하는 것이 좋습니다 이미 파워 업했는지 여부.