2013-06-08 5 views
0

Я программист-любитель, и я работаю над простой игрой Noughts and crosses в XNA Game studio. Прямо сейчас я делаю левый щелчок триггером, и он работает. Но когда я передавал код в два файла с частичной командой класса, я случайно изменил код, и теперь квадраты верхнего квадрата справа не работают. Вот "обновление" код, который проверяет это:Noughts and Crosses Issue

private void MouseProcess() 
    { 

     MouseState mstate = Mouse.GetState(); 
     Mouse_pos = new Vector2(mstate.X, mstate.Y); 
     float xpos = mstate.X; 
     float ypos = mstate.Y; 

     if (mstate.LeftButton.Equals(ButtonState.Pressed)) 
     { 
      if (xpos >= Gamevar[0].Position.X && xpos <= Gamevar[0].Position.X + 72) 
      { 
       C = 1; 
      } 

      if (xpos >= Gamevar[1].Position.X && xpos <= Gamevar[1].Position.X + 72) 
      { 
       C = 2; 
      } 

      if (xpos >= Gamevar[2].Position.X && xpos <= Gamevar[2].Position.X + 72) 
      { 
       C = 3; 
      } 

      if (ypos >= Gamevar[0].Position.Y && xpos <= Gamevar[0].Position.Y + 75) 
      { 
       R = 1; 
      } 

      if (ypos >= Gamevar[3].Position.Y && xpos <= Gamevar[3].Position.Y + 75) 
      { 
       R = 2; 
      } 

      if (ypos >= Gamevar[6].Position.Y && xpos <= Gamevar[6].Position.Y + 75) 
      { 
       R = 3; 
      } 
     } 


    } 

    private void Turncode() 
    { 
     switch (turn) 
     { 
      case true: 
       switch (C) 
       { 
        case 1: 
         switch (R) 
         { 
          case 1: 
           Gamevar[0].owner = 1; 
           turn = false; 
           C = 0; 
           R = 0; 
           break; 
          case 2: 
           Gamevar[3].owner = 1; 
           turn = false; 
           C = 0; 
           R = 0; 
           break; 
          case 3: 
           Gamevar[6].owner = 1; 
           turn = false; 
           C = 0; 
           R = 0; 
           break; 
         } 
         break; 

        case 2: 
         switch (R) 
         { 
          case 1: 
           Gamevar[1].owner = 1; 
           turn = false; 
           C = 0; 
           R = 0; 
           break; 
          case 2: 
           Gamevar[4].owner = 1; 
           turn = false; 
           C = 0; 
           R = 0; 
           break; 
          case 3: 
           Gamevar[7].owner = 1; 
           turn = false; 
           C = 0; 
           R = 0; 
           break; 
         } 
         break; 

        case 3: 
         switch (R) 
         { 
          case 1: 
           Gamevar[2].owner = 1; 
           turn = false; 
           C = 0; 
           R = 0; 
           break; 
          case 2: 
           Gamevar[5].owner = 1; 
           turn = false; 
           C = 0; 
           R = 0; 
           break; 
          case 3: 
           Gamevar[8].owner = 1; 
           turn = false; 
           C = 0; 
           R = 0; 
           break; 
         } 
         break; 
       } 

       break; 
      case false: 
       switch (C) 
       { 
        case 1: 
         switch (R) 
         { 
          case 1: 
           Gamevar[0].owner = 2; 
           turn = true; 
           C = 0; 
           R = 0; 
           break; 
          case 2: 
           Gamevar[3].owner = 2; 
           turn = true; 
           C = 0; 
           R = 0; 
           break; 
          case 3: 
           Gamevar[6].owner = 2; 
           turn = true; 
           C = 0; 
           R = 0; 
           break; 
         } 
         break; 

        case 2: 
         switch (R) 
         { 
          case 1: 
           Gamevar[1].owner = 2; 
           turn = true; 
           C = 0; 
           R = 0; 
           break; 
          case 2: 
           Gamevar[4].owner = 2; 
           turn = true; 
           C = 0; 
           R = 0; 
           break; 
          case 3: 
           Gamevar[7].owner = 2; 
           turn = true; 
           C = 0; 
           R = 0; 
           break; 
         } 
         break; 

        case 3: 
         switch (R) 
         { 
          case 1: 
           Gamevar[2].owner = 2; 
           turn = true; 
           C = 0; 
           R = 0; 
           break; 
          case 2: 
           Gamevar[5].owner = 2; 
           turn = true; 
           C = 0; 
           R = 0; 
           break; 
          case 3: 
           Gamevar[8].owner = 2; 
           turn = true; 
           C = 0; 
           R = 0; 
           break; 
         } 
         break; 
       } 

       break; 

     } 
    } 

Это не очень сложный, но Gamevar [1], [2] и [5] не работают.

ответ

0

Вы можете использовать цикл for для итерации по квадратам, чтобы получить положение курсора. (обратите внимание на свои значения C и R будет один меньше, чем в исходном коде.)

Вы можете получить индекс вам ячейку на один одномерный массив с уравнением (R*3)+C.

private void MouseProcess() 
{ 
    MouseState mstate = Mouse.GetState(); 
    Mouse_pos = new Vector2(mstate.X, mstate.Y); 
    float xpos = mstate.X; 
    float ypos = mstate.Y; 

    if (mstate.LeftButton.Equals(ButtonState.Pressed)) 
    { 
     for (int i=0; i<3; i++) 
     { 
      if (xpos >= Gamevar[i].Position.X && xpos <= Gamevar[i].Position.X + 72) 
      { 
       C = i; 
      } 
      if (ypos >= Gamevar[i*3].Position.Y && ypos <= Gamevar[i*3].Position.Y + 75) 
      { 
       R = i; 
      } 
     } 
    } 
} 

private void Turncode() 
{ 
    if (turn==true) 
    { 
     Gamevar[(R*3)+C].owner=1; 
    } 
    else 
    { 
     Gamevar[(R*3)+C].owner=2; 
    } 
    turn=!turn; //toggle to the other person's turn 
    C=0; 
    R=0; 
} 

Если ваш код повторяется, попробуйте использовать петлю или найти какое-либо условие для выполнения вашей работы.

+0

Спасибо. Это прекрасно работает – Monacraft

0

Внутри ProcessMouse, ваши if заявления проверки ypos фактически смотрит на xpos во втором операнде к &&:

например

if (ypos >= Gamevar[0].Position.Y && xpos <= Gamevar[0].Position.Y + 75) 
{ 
    R = 1; 
} 

должно быть:

if (ypos >= Gamevar[0].Position.Y && ypos <= Gamevar[0].Position.Y + 75) 
{ 
    R = 1; 
} 

и так далее для следующих двух if заявлений.

Кроме того, вы, вероятно, извлечете выгоду из рефакторинга кода, чтобы иметь метод вычисления индекса квадрата, на который нужно щелкнуть, вместо того, чтобы хранить столбец и строку в отдельных переменных и иметь вложенные операторы switch.

+0

Благодарим за помощь, Я начинаю прямо сейчас, но плохо смотрю на это позже. – Monacraft

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