2013-05-30 3 views
1

Я пытаюсь запрограммировать Pong для задания в курсе программирования, но ошибки возникли, когда я попытался создать главное меню с использованием случаев. Код находится в области обновления игры XNA Window. Код в игровом случае прошел отлично сам. Возникают проблемы, когда я попытался сделать главное меню и переместил мой понга код в игровом случаеСложное время с случаями (C#/XNA)

switch (CurrentGameState) 
{ 
    case GameState.MainMenu: 
     if (btnPlay.isClicked == true) CurrentGameState = GameState.Playing; 
     btnPlay.Update(mouse); 
     break; 

    case GameState.Playing: 
     if (Keyboard.GetState().IsKeyDown(Keys.Down)) 
     { 
      if (POPBox.Y >= 373) 
      { 
       POPBox.Y += 0; 
      } 
      else 
      { 
       POPBox.Y += PlayersSpeed; 
      } 

      if (Keyboard.GetState().IsKeyDown(Keys.Up)) 
      { 
       if (POPBox.Y <= 0) 
       { 
        POPBox.Y += 0; 
       } 
       else 
       { 
        POPBox.Y += -PlayersSpeed; 
       } 
      } 

      // Ball Limets 
      if (BallBox.Y <= 0) 
       VelocityY *= -1; 
      if (BallBox.Y >= 463) 
       VelocityY *= -1; 
      if (BallBox.X <= 0) 
       VelocityX *= -1; 

      //Collision Detection (Runs this code if it hits the player one's paddle) 
      if (BallBox.Intersects(POPBox)) 
      { 
       //Used to deflect in different directions for some veriety 
       if (PlayersSpeed > 0) 
        VelocityY += 3; 
       if (PlayersSpeed < 0) 
        VelocityY -= 3; 

       VelocityX *= -1; 
       HitCount++; 
       ShockerGeneratorPlayerOne(); 

       //Stopping the no slope bug. If it wants to bounce perfectly straight, it is slightly shifty to fix that error. 
       if (VelocityY == 0) 
        VelocityY = VelocityY += 3; 
       if (VelocityX == 0) 
        VelocityX = VelocityX += 3; 

       //speed control 
       if (VelocityX > 10) 
        VelocityX = 10; 
       if (VelocityY > 10) 
        VelocityY = 10; 
      } 

      // Runs this code if the ball hits player two's paddle 
      if (BallBox.Intersects(PTPBox)) 
      { 
       VelocityX *= -1; 
       ShockerGeneratorPlayerTwo(); 

       if (VelocityY == 0) 
        VelocityY = VelocityY += 3; 
       if (VelocityX == 0) 
        VelocityX = VelocityX += 3; 
      } 

      //Object a collision 
      if (BallBox.Intersects(ShocObjectARectangle)) 
      { 
       VelocityY *= -1; 
      } 

      if (BallBox.Intersects(ShocObjectBRectangle)) 
      { 
       VelocityX *= -1; 
      } 

      // If Player One Loses 
      if (BallBox.X >= 790) 
      { 
       PlayerOneLoses(); 
      } 

      //Player Two's "AI" and limets 
      if (PTPBox.Y >= 173) 
       PTPBox.Y += 0; 
      else 
       PTPBox.Y = BallBox.Y; 

      if (PTPBox.Y <= 0) 
       PTPBox.Y += 0; 
      else 
       PTPBox.Y = (BallBox.Y -30); 

      //Object A movement code 
      ShocObjectARectangle.X += ObjectASpeed; 
      if (ShocObjectARectangle.X <= 80) 
       ObjectASpeed *= -1; 
      else if (ShocObjectARectangle.X >= 600) 
       ObjectASpeed *= -1; 

      //Object B movement code 
      ShocObjectBRectangle.Y += ObjectBSpeed; 

      if (ShocObjectBRectangle.Y <= 0) 
       ObjectBSpeed *= -1; 
      else if (ShocObjectBRectangle.Y >= 415) 
       ObjectBSpeed *= -1; 

      // Ball Velocity 
      BallBox.Y += -VelocityY; 
      BallBox.X += VelocityX; 
      PlayersSpeed = 10; 
     } 
    } 
} 


//Called Every Hit 
public void ShockerGeneratorPlayerOne() 
{ 
    Random rnd = new Random(); 
    RanShocMatch = rnd.Next(10); 
    if (RanShocMatch == 1) 
    { 
    //Speed Boost! 
     VelocityX = (VelocityX - 1); 
     VelocityY = (VelocityY - 1); 
    } 
    else if (RanShocMatch == 2) 
     { 
      if (ObjectBCalled == false) 
      { 
       ShocObjectBRectangle = new Rectangle(362, 200, 10, 100); 
       ObjectBCalled = true; 
      } 
     } 
     else if (RanShocMatch == 3) 
      { 
       if (ObjectACalled == false) 
       { 
        ShocObjectARectangle = new Rectangle(80, 200, 100, 10); 
        ObjectACalled = true; 
       } 
      } 
} 

//Called Every Hit 
public void ShockerGeneratorPlayerTwo() 
{ 
    Random rnd = new Random(); 
    RanShocMatch = rnd.Next(5); 

    if (RanShocMatch == 1) 
    { 
     //Speed Boost! 
     VelocityX = (VelocityX + 3); 
     VelocityY = (VelocityY + 3); 
    } 
} 

//Called When Player One Loses 
public void PlayerOneLoses() 
{ 
    // MediaPlayer.Play(LosingBeep); 
    VelocityX = -BasicVelocity; 
    VelocityY = BasicVelocity; 
    BallBox.X += -360; 

    if (HitCount > highScore) 
     highScore = HitCount; 
     HitCount = 0; 
     break; 
} 

}     
}      

    base.Update(gameTime); 
} 

Ошибки:

  1. Пространство имен не может непосредственно содержать такие элементы, как поля и методы
  2. Тип или определение пространства имен или ожидаемый конец файла
  3. Управление не может проваливаться с одного футляра корпуса
  4. Отсутствие замкнутого контура, из которого следует сломать или продолжить

Я новичок в этих форумах, и мое форматирование ужасно, если у вас есть какие-либо советы по его улучшению, я сделаю редактирование.

+2

Вы, скорее всего, отсутствует кронштейн где-то и он имеет эффект ошибки бабочки на остальной части вашего кода. Нажмите Ctrl 'K D', который должен автоматически форматировать ваш код, и я держу пари, что он рвет. –

+0

Определенно выглядит как отсутствующая скобка где-то –

+2

Вы также должны рассмотреть возможность уменьшения количества else-if else-if, анализируя ваш код! –

ответ

1

Похоже вы подсвеченный код и перенесла его вниз, попробуйте этот

метод Update

switch (CurrentGameState) 
      { 
      case GameState.MainMenu: 
       if (btnPlay.isClicked == true) CurrentGameState = GameState.Playing; 
       btnPlay.Update(mouse); 
       break; 
      case GameState.Playing: 
       if (Keyboard.GetState().IsKeyDown(Keys.Down)) 
       { 
        if (POPBox.Y >= 373) 
        { 
         POPBox.Y += 0; 
        } 
        else 
        { 
         POPBox.Y += PlayersSpeed; 
        } 
       } 

       if (Keyboard.GetState().IsKeyDown(Keys.Up)) 
       { 
        if (POPBox.Y <= 0) 
        { 
         POPBox.Y += 0; 
        } 
        else 
        { 
         POPBox.Y += -PlayersSpeed; 
        } 
       } 
       // Ball Limets 
       if (BallBox.Y <= 0) 
        VelocityY *= -1; 
       if (BallBox.Y >= 463) 
        VelocityY *= -1; 
       if (BallBox.X <= 0) 
        VelocityX *= -1; 
       //Collision Detection (Runs this code if it hits the player one's paddle) 
       if (BallBox.Intersects(POPBox)) 
       { 
        //Used to deflect in different directions for some veriety 
        if (PlayersSpeed > 0) 
         VelocityY += 3; 
        if (PlayersSpeed < 0) 
         VelocityY -= 3; 
        VelocityX *= -1; 
        HitCount++; 
        ShockerGeneratorPlayerOne(); 
        //Stopping the no slope bug. If it wants to bounce perfectly straight,    it is slightly shifty to fix that error. 
        if (VelocityY == 0) 
         VelocityY = VelocityY += 3; 
        if (VelocityX == 0) 
         VelocityX = VelocityX += 3; 
        //speed control 
        if (VelocityX > 10) 
         VelocityX = 10; 
        if (VelocityY > 10) 
         VelocityY = 10; 
       } 
       // Runs this code if the ball hits player two's paddle 
       if (BallBox.Intersects(PTPBox)) 
       { 
        VelocityX *= -1; 
        ShockerGeneratorPlayerTwo(); 
        if (VelocityY == 0) 
         VelocityY = VelocityY += 3; 
        if (VelocityX == 0) 
         VelocityX = VelocityX += 3; 
       } 

       //Object a collision 
       if (BallBox.Intersects(ShocObjectARectangle)) 
       { 
        VelocityY *= -1; 
       } 
       if (BallBox.Intersects(ShocObjectBRectangle)) 
       { 
        VelocityX *= -1; 
       } 
       // If Player One Loses 
       if (BallBox.X >= 790) 
       { 
        PlayerOneLoses(); 
       } 
       //Player Two's "AI" and limets 
       if (PTPBox.Y >= 173) 
        PTPBox.Y += 0; 
       else 
        PTPBox.Y = BallBox.Y; 

       if (PTPBox.Y <= 0) 
        PTPBox.Y += 0; 
       else 
        PTPBox.Y = (BallBox.Y -30); 
       //Object A movement code 
       ShocObjectARectangle.X += ObjectASpeed; 
       if (ShocObjectARectangle.X <= 80) 
        ObjectASpeed *= -1; 
       else if (ShocObjectARectangle.X >= 600) 
        ObjectASpeed *= -1; 
       //Object B movement code 
       ShocObjectBRectangle.Y += ObjectBSpeed; 
       if (ShocObjectBRectangle.Y <= 0) 
        ObjectBSpeed *= -1; 
       else if (ShocObjectBRectangle.Y >= 415) 
        ObjectBSpeed *= -1; 
       // Ball Velocity 
       BallBox.Y += -VelocityY; 
       BallBox.X += VelocityX; 
       PlayersSpeed = 10; 
       break; 
      } 
     base.Update(gameTime); 

И ваши другие методы 3

   //Called Every Hit 
       public void ShockerGeneratorPlayerOne() 
       { 
        Random rnd = new Random(); 
        RanShocMatch = rnd.Next(10); 
        if (RanShocMatch == 1) 
        { 
        //Speed Boost! 
         VelocityX = (VelocityX - 1); 
         VelocityY = (VelocityY - 1); 
        } 
        else if (RanShocMatch == 2) 
        { 
         if (ObjectBCalled == false) 
         { 
          ShocObjectBRectangle = new Rectangle(362, 200, 10, 100); 
          ObjectBCalled = true; 
         } 
        } 
        else if (RanShocMatch == 3) 
        { 
         if (ObjectACalled == false) 
         { 
          ShocObjectARectangle = new Rectangle(80, 200, 100, 10); 
          ObjectACalled = true; 
         } 
        } 
       } 

       //Called Every Hit 
       public void ShockerGeneratorPlayerTwo() 
       { 
        Random rnd = new Random(); 
        RanShocMatch = rnd.Next(5); 
        if (RanShocMatch == 1) 
        { 
        //Speed Boost! 
         VelocityX = (VelocityX + 3); 
         VelocityY = (VelocityY + 3); 
        } 
       } 

       //Called When Player One Loses 
       public void PlayerOneLoses() 
       { 
       // MediaPlayer.Play(LosingBeep); 
        VelocityX = -BasicVelocity; 
        VelocityY = BasicVelocity; 
        BallBox.X += -360; 
        if (HitCount > highScore) 
         highScore = HitCount; 
        HitCount = 0; 
       } 
+0

Примечание: лучший способ попробовать - удалить внутренний код для 'Update', (и 3 метода, если хотите), убедитесь, что ваш код компилируется, а затем введите эти 3 метода, потому что я считаю, что у вас слишком много закрывающих скобок на конец тоже – Sayse

Смежные вопросы