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 文件中设计我的作品,并让方法将其转换为数组。另一种方法不是打印整个东西。
所以我正在尝试用 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 文件中设计我的作品,并让方法将其转换为数组。另一种方法不是打印整个东西。