在二维数组中的随机位置上弹出一个数字

时间:2014-06-11 22:12:48

标签: c game-engine

我目前正在开发一个项目来编写一个C程序来克隆流行的iphone游戏" 2048"。如果您不熟悉此游戏,可以访问here查看。

我将简要地谈谈我如何解决这个问题:

  1. 只用两个'生成一张表。

  2. 用户开始播放。

  3. 该程序会弹出一个' 2'在二维数组中的随机位置,它是' 0'

  4. 检查是否还有其他动作。如果没有,游戏结束。

  5. 我目前写的程序结构是:

    1. 生成二维数组。

    2. 写了4个函数来移动数组中的数字。 (MoveUP,MoveDown,MoveLeft,Move Right)。

    3. 写了4个函数来移动后加上数字。 (AddUp,AddDown,AddLeft,AddRight)。

    4. 再次调用移动功能,在添加后重新排列表格。

    5. 打印矩阵并等待用户进行下一次移动。

    6. 这是我现在的代码的一部分:

      代码有点长。

      现在我无法找到一种方法来弹出一个' 2'在每次移动后的随机零区块上。任何帮助表示赞赏。

      我也愿意接受现有代码的建议。如果你需要整个代码,我也可以给你。

      #include<stdio.h>
      #include<stdlib.h>
      
      /* The main matrix */
      int a[4][4];
      
      /* <- Function declarations begin -> */
      void InitMat(int a[4][4]);
      void PrintMat(int a[4][4]);
      void MoveUp(int a[4][4]);
      void MoveLeft(int a[4][4]);
      void MoveRight(int a[4][4]);
      void MoveDown(int a[4][4]);
      void AddUp(int a[4][4]);
      void AddDown(int a[4][4]);
      void AddLeft(int a[4][4]);
      void AddRight(int a[4][4]);
      
      /* -> Function declarations end <- */
      
      
      /* <- Main function begin -> */
      int main(void)
      {
          int input;
          /* Initialize the starting matrix */
          InitMat(a);
          /* Display the main matrix */
          PrintMat(a);
      
          while ((input = getchar()) != 'q')
          {
              switch (input)
              {
              case 'w':
                  MoveUp(a);
                  AddUp(a);
                  MoveUp(a);
                  PrintMat(a);
                  break;
              case 'a':
                  MoveLeft(a);
                  AddLeft(a);
                  MoveLeft(a);
                  PrintMat(a);
                  break;
              case 'd':
                  MoveRight(a);
                  AddRight(a);
                  MoveRight(a);
                  PrintMat(a);
                  break;
              case 's':
                  MoveDown(a);
                  AddDown(a);
                  MoveDown(a);
                  PrintMat(a);
                  break;
              }
          }
      
      
          return 0;
      }
      /* -> Main function end <- */
      
      /* <- Function definitions begin -> */
      
      /* Function1: initializing the main matrix */
      void InitMat(int a[4][4])
      {
          int i, j;
      
          for (i = 0; i < 4; i++)
          {
              for (j = 0; j < 4; j++)
              {
                  a[i][j] = 0;
              }
          }
          a[1][2] = a[2][2] = 2;
          a[0][0] = 2;
          a[3][0] = 2;
          a[3][3] = 2;
      }
      
      /* Function2: Print the main matrix */
      void PrintMat(int a[4][4])
      {
          printf("+-------+-------+-------+-------+\n");
          printf("|   %d   |   %d   |   %d   |   %d   |\n", a[0][0], a[0][1], a[0][2], a[0][3]);
          printf("+-------+-------+-------+-------+\n");
          printf("|   %d   |   %d   |   %d   |   %d   |\n", a[1][0], a[1][1], a[1][2], a[1][3]);
          printf("+-------+-------+-------+-------+\n");
          printf("|   %d   |   %d   |   %d   |   %d   |\n", a[2][0], a[2][1], a[2][2], a[2][3]);
          printf("+-------+-------+-------+-------+\n");
          printf("|   %d   |   %d   |   %d   |   %d   |\n", a[3][0], a[3][1], a[3][2], a[3][3]);
          printf("+-------+-------+-------+-------+\n");
      }
      
      /* Function3: Move upwards */
      void MoveUp(int a[4][4])
      {
          int j;
          /* i: rows; j: columns */
          for (j = 0; j < 4; j++)
          {
              if (a[0][j] == 0)
              {
                  if (a[1][j] == 0)
                  {
                      if (a[2][j] == 0)
                      {
                          if (a[3][j] == 0)
                          {
                          }
                          else
                          {
                              a[0][j] = a[3][j];
                              a[3][j] = 0;
                          }
                      }
                      else
                      {
                          a[0][j] = a[2][j];
                          a[2][j] = 0;
                      }
                  }
                  else
                  {
                      a[0][j] = a[1][j];
                      a[1][j] = 0;
                  }
              }
              else
              {
                  a[0][j] = a[0][j];
              }
      
              if (a[1][j] == 0)
              {
                  if (a[2][j] == 0)
                  {
                      if (a[3][j] == 0)
                      {
                      }
                      else
                      {
                          a[1][j] = a[3][j];
                          a[3][j] = 0;
                      }
                  }
                  else
                  {
                      a[1][j] = a[2][j];
                      a[2][j] = 0;
                  }
              }
              else
              {
                  a[1][j] = a[1][j];
              }
      
              if (a[2][j] == 0)
              {
                  if (a[3][j] == 0)
                  {
                  }
                  else
                  {
                      a[2][j] = a[3][j];
                      a[3][j] = 0;
                  }
              }
              else
              {
                  a[2][j] = a[2][j];
              }
          }
      }
      
      /* Function7: addition after moving up */
      void AddUp(int a[4][4])
      {
          int i, j;
          /* i: rows; j: columns */
          for (j = 0; j < 4; j++)
          {
              for (i = 0; i < 4; i++)
              {
                  if (a[i][j] == a[i + 1][j])
                  {
                      a[i][j] += a[i + 1][j];
                      a[i + 1][j] = 0;
                  }
                  else
                  {
                  }
              }
          }
      

1 个答案:

答案 0 :(得分:1)

您可以使用函数rand()生成0和maxint值之间的随机值。

你必须做这样的事情:

#define MAXRANDOMVALUE 3

/.../  //functions and everything

void poprandomtwo() {

int i,j; //your indexs
i=(rand ())%(MAXRANDOMVALUE+1));
j=(rand ())%(MAXRANDOMVALUE+1));
/../ //here comes your job ;)
} 

int main {

    srand(time(NULL)); //do this one time at the beginning of your code to set the seed     
    /.../
    return 0;
}

希望有所帮助