#include<stdio.h>
int a[100], b[100], c[100];
int len[] = {0, 0, 1, 1};
int arr[3][100];
int num;
char success_flag = 0;
int move(int a, int b) {
int temp = 0;
temp = arr[a - 1][len[a]];
arr[a - 1][len[a]] = 0;
len[a] -= 1;
len[b] += 1;
arr[b - 1][len[b]] = temp;
if (arr[2][num] == 1)success_flag = 1;
}
void Show_out() {
int i, j, k, m, cntk;
int temp[100];
printf("\n\n");
for (i = num + 1; i > 1; i--) {
for (m = 0; m < 3; m++) {
if (m == 0)temp[i] = arr[0][i];
else if (m == 1)temp[i] = arr[1][i];
else temp[i] = arr[2][i];
if (temp[i] == 0)cntk = num + 1 - temp[i];
else cntk = num - temp[i];
for (k = 0; k < cntk; k++)printf(" ");
if (temp[i] != 0) {
printf("I");
for (k = 0; k < temp[i]; k++)printf("-");
}
if (temp[i] == 0)printf("I");
else printf("%d", temp[i]);
if (temp[i] != 0) {
for (k = 0; k < temp[i]; k++)printf("-");
printf("I");
}
for (k = 0; k < cntk; k++)printf(" ");
printf(" ");
}
printf("\n");
}
for (i = 0; i < 3; i++) {
printf("I");
for (k = 0; k < num ; k++)printf("-");
printf("%c", 97 + i);
for (k = 0; k < num ; k++)printf("-");
printf("I");
printf(" ");
}
printf("\n\n");
}
int main() {
int m1 , m2, i;
printf("请输入挑战的盘子数量:");
scanf("%d", &num);
num = num + 1 ;
len[1] = num;
for (i = 0; i < (num ) ; i++) {
arr[0][i + 1] = num - i;
arr[1][i + 1] = 0;
arr[2][i + 1] = 0;
}
Show_out();
printf("将某一个柱子上的最上面的盘子移动到另一个柱子上,输入示例:1 3 \n");
printf("即将编号为a柱子上的盘子移动到编号为c的柱子上 \n");
while (1) {
printf("输入结束后按下回车,进行下一步移动: \n");
scanf("%d%d", &m1, &m2);
if ((m1 < 4 && m1 > 0) && (m2 < 4 && m2 > 0) && (m1 != m2)) {
if (arr[m1 - 1][len[m1]] ==0 && arr[m2 - 1][len[m2]] ==0 ){
printf("两个柱子上都没有盘子,请重新输入 \n");
continue;
}
if ((arr[m1 - 1][len[m1]] < arr[m2 - 1][len[m2]]) || (arr[m2 - 1][len[m2]] == 0)) {
move(m1, m2);
Show_out();
if (success_flag == 1) {
printf("挑战成功,游戏结束");
break;
}
}
else{
printf("不符合移盘规则\n");
continue;
}
}
else {
printf("不符合移盘规则\n");
continue;
}
}
}
C语言编写的汉诺塔小游戏,原理简单,就没写注释了 10个盘子以内比较好看
最新推荐文章于 2023-03-01 17:55:46 发布