C - 有没有比手动完成所有操作更好的方法?

C - Is there an better way to do this rather than doing all of it manually?

所以我正在尝试用 C 语言制作一个基于文本的游戏,但我不确定是否有办法自动执行此操作:

int karte_plans() {
    printf("\n ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬   ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬ ");
    printf("\n┃----------------------------------------------------------------------------┃ ┃              ┃                            ┃               ┃");  
    printf("\n┃********************************** Karte ***********************************┃ ┃   Pilsēta    ┃      Apskates objekti      ┃   EU Stacija  ┃");  
    printf("\n┃----------------------------------------------------------------------------┃ ┃              ┃                            ┃               ┃");   
    printf("\n┃▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬┃ ┃              ┃                            ┃               ┃");
    printf("\n┃           *  /             _/     ^___/   /                          `^    ┃ ┃▬▬▬▬▬▬▬▬▬▬▬▬▬▬┃▬▬▬▬▬▬▬▬▬▬▬▬▬▬┃▬▬▬▬▬▬▬▬▬▬▬▬▬┃▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬┃");
    printf("\n┃             |           __/              |                             |   ┃ ┃              ┃              ┃             ┃               ┃");  
    printf("\n┃              ^___  ____/          .*    |                              |   ┃ ┃     Rīga     ┃       1      ┃      2      ┃       A       ┃");  
    printf("\n┃                _||                      /     ___________            _/    ┃ ┃              ┃              ┃             ┃               ┃");
    printf("\n┃               / /                       |___/             ^        /       ┃ ┃              ┃              ┃             ┃               ┃");  
    printf("\n┃              /_/                       /                  ^   ___/         ┃ ┃▬▬▬▬▬▬▬▬▬▬▬▬▬▬┃▬▬▬▬▬▬▬▬▬▬▬▬▬▬┃▬▬▬▬▬▬▬▬▬▬▬▬▬┃▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬┃");  
    printf("\n┃                                       |                    ^_/   |         ┃ ┃              ┃              ┃             ┃               ┃");
    printf("\n┃                    .        *          |                          |_       ┃ ┃    Tukums    ┃       3      ┃      4      ┃       B       ┃");  
    printf("\n┃                __/  |                  |                            `      ┃ ┃              ┃              ┃             ┃               ┃");  
    printf("\n┃             __/      `_                 |                           |      ┃ ┃              ┃              ┃             ┃               ┃");
    printf("\n┃ Ventspils /X            `               |                            |     ┃ ┃▬▬▬▬▬▬▬▬▬▬▬▬▬▬┃▬▬▬▬▬▬▬▬▬▬▬▬▬▬┃▬▬▬▬▬▬▬▬▬▬▬▬▬┃▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬┃");  
    printf("\n┃          /  |` _   Talsi `_             |                             |    ┃ ┃              ┃              ┃             ┃               ┃");                                                            
    printf("\n┃         |    |  ` X__       `          /                               `_  ┃ ┃    Talsi     ┃       5      ┃      6      ┃       C       ┃");  
    printf("\n┃         |     |      `       `        /   __X Sigulda                    | ┃ ┃              ┃              ┃             ┃               ┃");  
    printf("\n┃       /Kuldīga X      X Tukums` _____/  _/                               | ┃ ┃              ┃              ┃             ┃               ┃");
    printf("\n┃     /           |     `_       _X______/                                  |┃ ┃▬▬▬▬▬▬▬▬▬▬▬▬▬▬┃▬▬▬▬▬▬▬▬▬▬▬▬▬▬┃▬▬▬▬▬▬▬▬▬▬▬▬▬┃▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬┃");  
    printf("\n┃    |             `     `_     /  Rīga                                    | ┃ ┃              ┃              ┃             ┃               ┃");  
    printf("\n┃   | Liepāja   ____`X______`X_/                                           | ┃ ┃   Ventspils  ┃       7      ┃      8      ┃       D       ┃");
    printf("\n┃   |X_________/  Saldus       Jelgava       ^                              |┃ ┃              ┃              ┃             ┃               ┃");  
    printf("\n┃   |                                      /  ^                            | ┃ ┃              ┃              ┃             ┃               ┃");
    printf("\n┃   |          _________ ___________  ____/     ^___                      |__┃ ┃▬▬▬▬▬▬▬▬▬▬▬▬▬▬┃▬▬▬▬▬▬▬▬▬▬▬▬▬▬┃▬▬▬▬▬▬▬▬▬▬▬▬▬┃▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬┃");  
    printf("\n┃   |      _/ `         `           ``              `__                 _/  ^┃ ┃              ┃              ┃             ┃               ┃");
    printf("\n┃    |  __/                                            `__             /     ┃ ┃   Liepāja    ┃       9      ┃      10     ┃       E       ┃");  
    printf("\n┃    | /                                                   `___   ___/       ┃ ┃              ┃              ┃             ┃               ┃");  
    printf("\n┃    |'                                                        `|`           ┃ ┃              ┃              ┃             ┃               ┃");
    printf("\n┃▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬┃ ┃▬▬▬▬▬▬▬▬▬▬▬▬▬▬┃▬▬▬▬▬▬▬▬▬▬▬▬▬▬┃▬▬▬▬▬▬▬▬▬▬▬▬▬┃▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬┃");
    char izv[1][1];

    printf("\nIzvēlies nākamo staciju: ");  
    scanf("%s",izv);  
  
    switchs(izv)  {  
        icases("A")  
            main();  
        break; 
  
        icases("B")       
            palidzība();  
        break;  

        icases("C")  
            main();  
        break; 
  
        icases("D")       
            palidzība();  
        break; 

        icases("E")  
            main();  
        break; 
  
        icases("1")       
            palidzība();  
        break;  

        icases("2")  
            main();  
        break; 
  
        icases("3")       
            palidzība();  
        break;  

        icases("4")  
            main();  
        break; 
  
        icases("5")       
            palidzība();  
        break;  

        icases("6")  
            main();  
        break; 
  
        icases("7")       
            palidzība();  
        break;  

        icases("8")  
            main();  
        break; 
  
        icases("9")       
            palidzība();  
        break;  

        icases("10")       
            palidzība();  
        break;
  
        defaults  
            printf("Kļūdaina ievade, ieraksti jebkuru burtu vai skaitli, kas rādīts tabulā.");
        karte_plans();
        break;  
    } switchs_end;
}

我想做的是让玩家只移动到他周围 1 个方格的控制点,这样如果玩家在“6”方格,他就可以移动到“3”方格, "4", "B","C", "D", "8", "7" 和 "5" 像国际象棋中的国王一样,并用 asterisk.With switch 语句将剩余的方格填空(这里的只是对字符串稍作修改)它可以手动完成,但是所有选项都需要很长时间并且效率不高。

感谢您的帮助!

将电路板设置为二维阵列。 1是[0][0],2是[1][0],A是[2][0],3是[0][1],6是[1][2]

每个元素都是一个包含有关该方块信息的结构。它的名字是什么。这里面是什么。等等

通过从 x 和 y 中加减 1 并确保它们在棋盘的边界内来找到合法的移动。您可以使用 for 循环执行此操作。

for(int dx = -1; dx <= 1; dx++) {
  int x = player_x + dx;
  if(x < 0 || x > max_x) {
    // Out of bounds
    continue;
  }
  for(int dy = -1; dy <= 1; dy++) {
    int y = player_y + dy;
    if(y < 0 || y > max_y) {
      // Out of bounds
      continue;
    }

    // board[x][y] is legal
  }
}

您可以创建一个类似于 int array[width][height][symbol] 的数组。 然后我会在 .txt 文件中设计我的作品,并让方法将其转换为数组。另一种方法不是打印整个东西。