O_纯C汉诺塔
说明
大二暑假随手写的一个小游戏,算法比较简单,权当消遣,有兴趣的可以看看。
2020.03.01
V2_5:全面更新算法,规则完善,逻辑优化。
逻辑
演示
视频大小 - 449KB
主界面
帮助日志
游戏初始化界面
游戏界面
获胜界面
V2_5代码
/*
TowerOfHanoi_C V2.5
2020-02-28
*/
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <conio.h>
char StrI[8] = { ' ', ' ', ' ', '|', ' ', ' ', ' ' }; //8用(2*i)+1时显示“烫烫烫乱码”,此数组相当于空层
static char StrN[3][3][8] = { ' ' }; //柱
int i = 0, j = 1, k = 2;
char StrP3[8] = { ' ', ' ', '=', '=', '=', ' ', ' ' }; //小盘
char StrP5[8] = { ' ', '=', '=', '=', '=', '=', ' ' }; //中盘
char StrP7[8] = { '=', '=', '=', '=', '=', '=', '=' }; //大盘
char CH = '\0';
void Menu(); //主界面,包含输入判定
void Show(); //搭建游戏界面,只显示
void Help(); //帮助系统
void Play(); //初始化游戏,进入输入判断算法函数
void Getin(); //输入记录函数
void Judge(); //规则判断函数
int main()
{
Menu();
return 0;
}
void Menu()
{
int M_CH = 0;
printf("\n\n\n\n\t\t\t Sakura 汉诺塔V2.5");
printf("\n\n\n\n\n\t\t\t\t1. 开始游戏\n\n\n\t\t\t\t2. 帮助日志\n\n\n\t\t\t\t3. 退出游戏\n\n");
M_CH = _getch();
if (M_CH == '1')
{
system("cls");
Play();
}
if (M_CH == '2')
{
system("cls");
Help();
}
if (M_CH == '3')
{
exit(0);
}
else
{
printf("\n\n\t\t\t 输入错误,请重新输入!\n");
int DELAY = 280000000;
int i = 0;
for (i = 0; i < DELAY; i++){}
system("cls");
Menu();
}
}
void Show()
{
printf("\n\tR: 重新开始\tB: 返回主菜单\tQ: 退出游戏\n");
printf("\n-------------------------------------------------------------------\n");
printf("\n| | | |");
printf("\n| | | |");
printf("\n| | | |");
printf("\n| |\t\t%s\t\t%s\t\t%s\t\t| |", StrI, StrI, StrI);
printf("\n| |\t\t%s\t\t%s\t\t%s\t\t| |", StrI, StrI, StrI);
printf("\n| |\t\t%s\t\t%s\t\t%s\t\t| |", StrI, StrI, StrI);
printf("\n| |\t\t%s\t\t%s\t\t%s\t\t| |", StrI, StrI, StrI);
printf("\n| |\t\t%s\t\t%s\t\t%s\t\t| |", StrN[0][0], StrN[1][0], StrN[2][0]);
printf("\n| |\t\t%s\t\t%s\t\t%s\t\t| |", StrN[0][1], StrN[1][1], StrN[2][1]);
printf("\n| |\t\t%s\t\t%s\t\t%s\t\t| |", StrN[0][2], StrN[1][2], StrN[2][2]);
printf("\n| |\t --------------------------------------------- \t| |");
printf("\n| | | |");
printf("\n| | | |");
printf("\n| | | |");
printf("\n-------------------------------------------------------------------\n\n");
}
void Help()
{
printf("\n\n\n\n\t\t\t游戏帮助:");
printf("\n\t\t\t\t使用1、2、3按键进行移动,大盘必须在小盘之上");
printf("\n\n\n\t\t\t升级日志:");
printf("\n\t\t\t\tV2.5:全面优化核心算法,分离输入捕获与判断系统");
printf("\n\t\t\t\tV2.0:尝试遍历所有情况进行判断");
printf("\n\t\t\t\tV1.0:初步判断并移动,大小叠加限制规则未实现,游戏胜利判定有延迟");
printf("\n\n\n\t\t\t\t\t\t“按任意键返回...”");
if (_getch())
{
system("cls");
Menu();
}
}
void Play()
{
int n = 3;
int i = 0;
//printf("请输入层数:");
//scanf_s("%d", &n);
strcpy_s(StrN[0][0], StrP3); //初始化
strcpy_s(StrN[0][1], StrP5);
strcpy_s(StrN[0][2], StrP7);
strcpy_s(StrN[1][0], StrI);
strcpy_s(StrN[1][1], StrI);
strcpy_s(StrN[1][2], StrI);
strcpy_s(StrN[2][0], StrI);
strcpy_s(StrN[2][1], StrI);
strcpy_s(StrN[2][2], StrI);
Show();
while (1)
{
Getin();
}
}
void Getin()
{
printf("\n\t\t\t\t输入");
CH = _getch(); //_getch()实现键盘监测
//-----------------------------------------------------------------------------------------------------------
if (CH == '1')
{
printf("1");
CH = _getch();
if (CH == '2')
{
printf("2");
i = 0; j = 1;
}
else if (CH == '3')
{
printf("3");
i = 0; j = 2;
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
else if (CH == '2')
{
printf("2");
CH = _getch();
if (CH == '1')
{
printf("1");
i = 1; j = 0;
}
else if (CH == '3')
{
printf("3");
i = 1; j = 2;
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
else if (CH == '3')
{
printf("3");
CH = _getch();
if (CH == '1')
{
printf("1");
i = 2; j = 0;
}
else if (CH == '2')
{
printf("2");
i = 2; j = 1;
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
//-----------------------------------------------------------------------------------------------------------
else if (CH == 'q')
{
printf("\n\n\n\t\t\t 退出游戏....\n\n");
exit(0);
}
else if (CH == 'r')
{
system("cls");
Play();
}
else if (CH == 'b')
{
system("cls");
Menu();
}
//-----------------------------------------------------------------------------------------------------------
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
Judge();
}
void Judge()
{
//-----------------------------------------------------------------------------------------------------------
if (strcmp(StrN[i][0], StrI) != 0) //i柱顶层不为空
{
strcpy_s(StrN[j][2], StrN[i][0]); //i柱顶层移至j柱底层
strcpy_s(StrN[i][0], StrI); //i柱顶层制空
system("cls"); //此处使用iostream
Show();
Getin(); //递归调用
}
//-----------------------------------------------------------------------------------------------------------
else if (strcmp(StrN[i][0], StrI) == 0 && strcmp(StrN[i][1], StrI) != 0) //i柱顶层为空中层不为空
{
if (strcmp(StrN[j][2], StrI) == 0) //j柱底层为空
{
strcpy_s(StrN[j][2], StrN[i][1]); //i柱中层移至j柱底层
strcpy_s(StrN[i][1], StrI);
system("cls");
Show();
Getin();
}
else if (strcmp(StrN[j][2], StrI) != 0) //j柱底层不为空
{
if (strcmp(StrN[i][1], StrP3) == 0) //i柱中层为小
{
strcpy_s(StrN[j][1], StrN[i][1]); //i柱中层移至j柱中层
strcpy_s(StrN[i][1], StrI);
system("cls");
Show();
Getin();
}
else
{
system("cls");
Show();
Getin();
}
}
else
{
system("cls");
Show();
Getin();
}
}
//-----------------------------------------------------------------------------------------------------------
else if (strcmp(StrN[i][1], StrI) == 0) //i柱中层为空
{
if (strcmp(StrN[j][1], StrP5) == 0) //j柱中层为中
{
strcpy_s(StrN[j][0], StrN[i][2]); //i柱底层小移至j柱顶层
strcpy_s(StrN[i][2], StrI);
system("cls");
Show();
printf("\n\n\t\t\t游戏成功!\n\n");
printf("\t1. 重新开始\tN. 返回主菜单\t0. 退出游戏\n\n");
CH = _getch();
if (CH == '1')
{
system("cls");
Play();
}
else if (CH == '0')
{
exit(0);
}
else
{
system("cls");
Menu();
}
}
else if (strcmp(StrN[j][1], StrI) == 0) //j柱中层为空
{
if (strcmp(StrN[j][2], StrI) == 0) //j柱底层为空
{
strcpy_s(StrN[j][2], StrN[i][2]); //i柱底层移至j柱底层
strcpy_s(StrN[i][2], StrI);
system("cls");
Show();
Getin();
}
else if (strcmp(StrN[j][2], StrI) != 0) //j柱底层不为空
{
if (strcmp(StrN[j][2], StrP7) == 0 || (strcmp(StrN[j][2], StrP5) == 0 && strcmp(StrN[i][2], StrP3) == 0)) //j柱底层为大,或j柱底层为中且i柱底层为小
{
strcpy_s(StrN[j][1], StrN[i][2]); //i柱底层移至j柱中层
strcpy_s(StrN[i][2], StrI);
system("cls");
Show();
Getin();
}
else
{
system("cls");
Show();
Getin();
}
}
else
{
system("cls");
Show();
Getin();
}
}
else
{
system("cls");
Show();
Getin();
}
}
else
{
system("cls");
Show();
Getin();
}
}V1_0代码
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <conio.h>
//for (i = 0; i < n; i++)
//{ //加上花括号之后的printf中StrI无法识别
char StrI[8] = { ' ', ' ', ' ', '|', ' ', ' ', ' ' }; //8用(2*i)+1时显示“烫烫烫乱码”
static char StrN1[3][8] = { ' ' };
static char StrN2[3][8] = { ' ' };
static char StrN3[3][8] = { ' ' };
char StrP3[8] = { ' ', ' ', '=', '=', '=', ' ', ' ' };
char StrP5[8] = { ' ', '=', '=', '=', '=', '=', ' ' };
char StrP7[8] = { '=', '=', '=', '=', '=', '=', '=' };
//}
void Menu(); //前向引用声明
int main()
{
Menu();
return 0;
}
void Play();
void Show()
{
printf("\n\tR: 重新开始\tB: 返回主菜单\tQ: 退出游戏\n");
printf("\n-------------------------------------------------------------------\n");
printf("\n| | | |");
printf("\n| | | |");
printf("\n| | | |");
printf("\n| |\t\t%s\t\t%s\t\t%s\t\t| |", StrI, StrI, StrI);
printf("\n| |\t\t%s\t\t%s\t\t%s\t\t| |", StrI, StrI, StrI);
printf("\n| |\t\t%s\t\t%s\t\t%s\t\t| |", StrI, StrI, StrI);
printf("\n| |\t\t%s\t\t%s\t\t%s\t\t| |", StrI, StrI, StrI);
printf("\n| |\t\t%s\t\t%s\t\t%s\t\t| |", StrN1[0], StrN1[1], StrN1[2]);
printf("\n| |\t\t%s\t\t%s\t\t%s\t\t| |", StrN2[0], StrN2[1], StrN2[2]);
printf("\n| |\t\t%s\t\t%s\t\t%s\t\t| |", StrN3[0], StrN3[1], StrN3[2]);
printf("\n| |\t --------------------------------------------- \t| |");
printf("\n| | | |");
printf("\n| | | |");
printf("\n| | | |");
printf("\n-------------------------------------------------------------------\n\n");
}
void Getin()
{
char CH = '\0';
printf("\n\t\t\t\t输入");
CH = _getch(); //_getch()实现键盘监测
//-----------------------------------------------------------------------------------------------------------
if (CH == '1' && strcmp(StrN1[0], StrI) != 0 && strcmp(StrN1[0], StrP3) == 0) //如果键入1且1柱顶层不为空且为三
{
printf("1");
CH = _getch();
if (CH == '2') //因为1柱顶不为空,所以1柱所移动的片全部放在2柱底部
{
printf("2");
strcpy_s(StrN1[0], StrI); //1柱顶层制空
strcpy_s(StrN3[1], StrP3); //2柱底层加三
system("cls"); //此处使用iostream
Show();
Getin(); //递归调用
}
if (CH == '3') //因为1柱顶不为空,所以1柱所移动的片直接放在2柱底部
{
printf("3");
strcpy_s(StrN1[0], StrI); //1柱顶层制空
strcpy_s(StrN3[2], StrP3); //3柱底层加三
system("cls");
Show();
Getin();
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
if (CH == '1' && strcmp(StrN1[0], StrI) != 0 && strcmp(StrN1[0], StrP5) == 0) //如果键入1且1柱顶层不为空且为五
{
printf("1");
CH = _getch();
if (CH == '2')
{
printf("2");
strcpy_s(StrN2[0], StrI); //1柱顶层制空
strcpy_s(StrN3[1], StrP5); //2柱底层加五
system("cls");
Show();
Getin();
}
if (CH == '3')
{
printf("3");
strcpy_s(StrN1[0], StrI);
strcpy_s(StrN3[2], StrP5);
system("cls");
Show();
Getin();
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
if (CH == '1' && strcmp(StrN1[0], StrI) != 0 && strcmp(StrN1[0], StrP7) == 0)
{
printf("1");
CH = _getch();
if (CH == '2')
{
printf("2");
strcpy_s(StrN2[0], StrI);
strcpy_s(StrN3[1], StrP7);
system("cls");
Show();
Getin();
}
if (CH == '3')
{
printf("3");
strcpy_s(StrN1[0], StrI);
strcpy_s(StrN3[2], StrP7);
system("cls");
Show();
Getin();
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
//-----------------------------------------------------------------------------------------------------------
if (CH == '2' && strcmp(StrN1[1], StrI) != 0 && strcmp(StrN1[1], StrP3) == 0)
{
printf("2");
CH = _getch();
if (CH == '1')
{
printf("1");
strcpy_s(StrN1[1], StrI);
strcpy_s(StrN3[0], StrP3);
system("cls");
Show();
Getin();
}
if (CH == '3')
{
printf("3");
strcpy_s(StrN1[1], StrI);
strcpy_s(StrN3[2], StrP3);
system("cls");
Show();
Getin();
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
if (CH == '2' && strcmp(StrN1[1], StrI) != 0 && strcmp(StrN1[1], StrP5) == 0)
{
printf("2");
CH = _getch();
if (CH == '2')
{
printf("2");
strcpy_s(StrN2[1], StrI);
strcpy_s(StrN3[0], StrP5);
system("cls");
Show();
Getin();
}
if (CH == '3')
{
printf("3");
strcpy_s(StrN1[1], StrI);
strcpy_s(StrN3[2], StrP5);
system("cls");
Show();
Getin();
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
if (CH == '2' && strcmp(StrN1[1], StrI) != 0 && strcmp(StrN1[1], StrP7) == 0)
{
printf("2");
CH = _getch();
if (CH == '2')
{
printf("2");
strcpy_s(StrN2[1], StrI);
strcpy_s(StrN3[0], StrP7);
system("cls");
Show();
Getin();
}
if (CH == '3')
{
printf("3");
strcpy_s(StrN1[1], StrI);
strcpy_s(StrN3[2], StrP7);
system("cls");
Show();
Getin();
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
//-----------------------------------------------------------------------------------------------------------
if (CH == '3' && strcmp(StrN1[2], StrI) != 0 && strcmp(StrN1[2], StrP3) == 0)
{
printf("3");
CH = _getch();
if (CH == '1')
{
printf("1");
strcpy_s(StrN1[2], StrI);
strcpy_s(StrN3[0], StrP3);
system("cls");
Show();
Getin();
}
if (CH == '2')
{
printf("2");
strcpy_s(StrN1[2], StrI);
strcpy_s(StrN3[1], StrP3);
system("cls");
Show();
Getin();
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
if (CH == '3' && strcmp(StrN1[2], StrI) != 0 && strcmp(StrN1[2], StrP5) == 0)
{
printf("3");
CH = _getch();
if (CH == '1')
{
printf("1");
strcpy_s(StrN2[2], StrI);
strcpy_s(StrN3[0], StrP5);
system("cls");
Show();
Getin();
}
if (CH == '2')
{
printf("2");
strcpy_s(StrN1[2], StrI);
strcpy_s(StrN3[1], StrP5);
system("cls");
Show();
Getin();
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
if (CH == '3' && strcmp(StrN1[2], StrI) != 0 && strcmp(StrN1[2], StrP7) == 0)
{
printf("3");
CH = _getch();
if (CH == '1')
{
printf("1");
strcpy_s(StrN2[2], StrI);
strcpy_s(StrN3[0], StrP7);
system("cls");
Show();
Getin();
}
if (CH == '2')
{
printf("2");
strcpy_s(StrN1[2], StrI);
strcpy_s(StrN3[1], StrP7);
system("cls");
Show();
Getin();
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
//-----------------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------------
if (CH == '1' && strcmp(StrN1[0], StrI) == 0 && strcmp(StrN2[0], StrI) != 0 && strcmp(StrN2[0], StrP3) == 0) //1柱顶层为空,中间层为三
{
printf("1");
CH = _getch();
if (CH == '2' && strcmp(StrN3[1], StrI) == 0) //若不在1柱的一片不在2柱
{
printf("2");
strcpy_s(StrN2[0], StrI); //将1柱中间层移到2柱底层
strcpy_s(StrN3[1], StrP3);
system("cls");
Show();
Getin();
}
if (CH == '2' && strcmp(StrN3[1], StrI) != 0) //若不在1柱的一片在2柱
{
printf("2");
strcpy_s(StrN2[0], StrI); //将1柱中间层移到2柱中层
strcpy_s(StrN2[1], StrP3);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) == 0) //若不在1柱的一片不在3柱
{
printf("3");
strcpy_s(StrN2[0], StrI); //将1柱中间层移到3柱底层
strcpy_s(StrN3[2], StrP3);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) != 0) //若不在1柱的一片在3柱
{
printf("3");
strcpy_s(StrN2[0], StrI); //将1柱中间层移到3柱中层
strcpy_s(StrN2[2], StrP3);
system("cls");
Show();
Getin();
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
if (CH == '1' && strcmp(StrN1[0], StrI) == 0 && strcmp(StrN2[0], StrI) != 0 && strcmp(StrN2[0], StrP5) == 0)
{
printf("1");
CH = _getch();
if (CH == '2' && strcmp(StrN3[1], StrI) == 0)
{
printf("2");
strcpy_s(StrN2[0], StrI);
strcpy_s(StrN3[1], StrP5);
system("cls");
Show();
Getin();
}
if (CH == '2' && strcmp(StrN3[1], StrI) != 0)
{
printf("2");
strcpy_s(StrN2[0], StrI);
strcpy_s(StrN2[1], StrP5);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) == 0)
{
printf("3");
strcpy_s(StrN2[0], StrI);
strcpy_s(StrN3[2], StrP5);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) != 0)
{
printf("3");
strcpy_s(StrN2[0], StrI);
strcpy_s(StrN2[2], StrP5);
system("cls");
Show();
Getin();
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
if (CH == '1' && strcmp(StrN1[0], StrI) == 0 && strcmp(StrN2[0], StrI) != 0 && strcmp(StrN2[0], StrP7) == 0)
{
printf("1");
CH = _getch();
if (CH == '2' && strcmp(StrN3[1], StrI) == 0)
{
printf("2");
strcpy_s(StrN2[0], StrI);
strcpy_s(StrN3[1], StrP7);
system("cls");
Show();
Getin();
}
if (CH == '2' && strcmp(StrN3[1], StrI) != 0)
{
printf("2");
strcpy_s(StrN2[0], StrI);
strcpy_s(StrN2[1], StrP7);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) == 0)
{
printf("3");
strcpy_s(StrN2[0], StrI);
strcpy_s(StrN3[2], StrP7);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) != 0)
{
printf("3");
strcpy_s(StrN2[0], StrI);
strcpy_s(StrN2[2], StrP7);
system("cls");
Show();
Getin();
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
//-----------------------------------------------------------------------------------------------------------
if (CH == '2' && strcmp(StrN1[1], StrI) == 0 && strcmp(StrN2[1], StrI) != 0 && strcmp(StrN2[1], StrP3) == 0) //2柱顶层为空,中间层为三
{
printf("2");
CH = _getch();
if (CH == '1' && strcmp(StrN3[0], StrI) == 0) //若不在2柱的一片不在1柱
{
printf("1");
strcpy_s(StrN2[1], StrI); //将2柱中间层移到1柱底层
strcpy_s(StrN3[0], StrP3);
system("cls");
Show();
Getin();
}
if (CH == '1' && strcmp(StrN3[0], StrI) != 0) //若不在2柱的一片在1柱
{
printf("1");
strcpy_s(StrN2[1], StrI); //将2柱中间层移到1柱中层
strcpy_s(StrN2[0], StrP3);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) == 0) //若不在2柱的一片不在3柱
{
printf("3");
strcpy_s(StrN2[1], StrI); //将2柱中间层移到3柱底层
strcpy_s(StrN3[2], StrP3);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) != 0) //若不在2柱的一片在3柱
{
printf("3");
strcpy_s(StrN2[1], StrI); //将2柱中间层移到3柱中层
strcpy_s(StrN2[2], StrP3);
system("cls");
Show();
Getin();
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
if (CH == '2' && strcmp(StrN1[1], StrI) == 0 && strcmp(StrN2[1], StrI) != 0 && strcmp(StrN2[1], StrP5) == 0)
{
printf("2");
CH = _getch();
if (CH == '1' && strcmp(StrN3[0], StrI) == 0)
{
printf("1");
strcpy_s(StrN2[1], StrI);
strcpy_s(StrN3[0], StrP5);
system("cls");
Show();
Getin();
}
if (CH == '1' && strcmp(StrN3[0], StrI) != 0)
{
printf("1");
strcpy_s(StrN2[1], StrI);
strcpy_s(StrN2[0], StrP5);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) == 0)
{
printf("3");
strcpy_s(StrN2[1], StrI);
strcpy_s(StrN3[2], StrP5);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) != 0)
{
printf("3");
strcpy_s(StrN2[1], StrI);
strcpy_s(StrN2[2], StrP5);
system("cls");
Show();
Getin();
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
if (CH == '2' && strcmp(StrN1[1], StrI) == 0 && strcmp(StrN2[1], StrI) != 0 && strcmp(StrN2[1], StrP7) == 0)
{
printf("2");
CH = _getch();
if (CH == '1' && strcmp(StrN3[0], StrI) == 0)
{
printf("1");
strcpy_s(StrN2[1], StrI);
strcpy_s(StrN3[0], StrP7);
system("cls");
Show();
Getin();
}
if (CH == '1' && strcmp(StrN3[0], StrI) != 0)
{
printf("1");
strcpy_s(StrN2[1], StrI);
strcpy_s(StrN2[0], StrP7);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) == 0)
{
printf("3");
strcpy_s(StrN2[1], StrI);
strcpy_s(StrN3[2], StrP7);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) != 0)
{
printf("3");
strcpy_s(StrN2[1], StrI);
strcpy_s(StrN2[2], StrP7);
system("cls");
Show();
Getin();
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
//-----------------------------------------------------------------------------------------------------------
if (CH == '3' && strcmp(StrN1[2], StrI) == 0 && strcmp(StrN2[2], StrI) != 0 && strcmp(StrN2[2], StrP3) == 0) //3柱顶层为空,中间层为三
{
printf("3");
CH = _getch();
if (CH == '1' && strcmp(StrN3[0], StrI) == 0) //若不在3柱的一片不在1柱
{
printf("1");
strcpy_s(StrN2[2], StrI); //将3柱中间层移到1柱底层
strcpy_s(StrN3[0], StrP3);
system("cls");
Show();
Getin();
}
if (CH == '1' && strcmp(StrN3[0], StrI) != 0) //若不在3柱的一片在1柱
{
printf("1");
strcpy_s(StrN2[2], StrI); //将3柱中间层移到1柱中层
strcpy_s(StrN2[0], StrP3);
system("cls");
Show();
Getin();
}
if (CH == '2' && strcmp(StrN3[1], StrI) == 0) //若不在3柱的一片不在2柱
{
printf("2");
strcpy_s(StrN2[2], StrI); //将3柱中间层移到2柱底层
strcpy_s(StrN3[1], StrP3);
system("cls");
Show();
Getin();
}
if (CH == '2' && strcmp(StrN3[1], StrI) != 0) //若不在3柱的一片在2柱
{
printf("2");
strcpy_s(StrN2[2], StrI); //将3柱中间层移到2柱中层
strcpy_s(StrN2[1], StrP3);
system("cls");
Show();
Getin();
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
if (CH == '3' && strcmp(StrN1[2], StrI) == 0 && strcmp(StrN2[2], StrI) != 0 && strcmp(StrN2[2], StrP5) == 0)
{
printf("3");
CH = _getch();
if (CH == '1' && strcmp(StrN3[0], StrI) == 0)
{
printf("1");
strcpy_s(StrN2[2], StrI);
strcpy_s(StrN3[0], StrP5);
system("cls");
Show();
Getin();
}
if (CH == '1' && strcmp(StrN3[0], StrI) != 0)
{
printf("1");
strcpy_s(StrN2[2], StrI);
strcpy_s(StrN2[0], StrP5);
system("cls");
Show();
Getin();
}
if (CH == '2' && strcmp(StrN3[1], StrI) == 0)
{
printf("2");
strcpy_s(StrN2[2], StrI);
strcpy_s(StrN3[1], StrP5);
system("cls");
Show();
Getin();
}
if (CH == '2' && strcmp(StrN3[1], StrI) != 0)
{
printf("2");
strcpy_s(StrN2[2], StrI);
strcpy_s(StrN2[1], StrP5);
system("cls");
Show();
Getin();
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
if (CH == '3' && strcmp(StrN1[2], StrI) == 0 && strcmp(StrN2[2], StrI) != 0 && strcmp(StrN2[2], StrP7) == 0)
{
printf("3");
CH = _getch();
if (CH == '1' && strcmp(StrN3[0], StrI) == 0)
{
printf("1");
strcpy_s(StrN2[2], StrI);
strcpy_s(StrN3[0], StrP7);
system("cls");
Show();
Getin();
}
if (CH == '1' && strcmp(StrN3[0], StrI) != 0)
{
printf("1");
strcpy_s(StrN2[2], StrI);
strcpy_s(StrN2[0], StrP7);
system("cls");
Show();
Getin();
}
if (CH == '2' && strcmp(StrN3[1], StrI) == 0)
{
printf("2");
strcpy_s(StrN2[2], StrI);
strcpy_s(StrN3[1], StrP7);
system("cls");
Show();
Getin();
}
if (CH == '2' && strcmp(StrN3[1], StrI) != 0)
{
printf("2");
strcpy_s(StrN2[2], StrI);
strcpy_s(StrN2[1], StrP7);
system("cls");
Show();
Getin();
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
//-----------------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------------
if (CH == '1' && strcmp(StrN2[0], StrI) == 0 && strcmp(StrN3[0], StrI) != 0 && strcmp(StrN3[0], StrP3) == 0) //1柱中层为空,底层为三
{
printf("1");
CH = _getch();
if (CH == '2' && strcmp(StrN3[1], StrI) == 0) //若不在1柱的两片都不在2柱
{
printf("2");
strcpy_s(StrN3[0], StrI); //将1柱底层移到2柱底层
strcpy_s(StrN3[1], StrP3);
system("cls");
Show();
Getin();
}
if (CH == '2' && strcmp(StrN3[1], StrI) != 0 && strcmp(StrN2[1], StrI) == 0) //若不在1柱的只有一片在2柱
{
printf("2");
strcpy_s(StrN3[0], StrI); //将1柱底层移到2柱中层
strcpy_s(StrN2[1], StrP3);
system("cls");
Show();
Getin();
}
if (CH == '2' && strcmp(StrN3[1], StrI) != 0 && strcmp(StrN2[1], StrI) != 0) //若不在1柱的两片全在2柱
{
printf("2");
strcpy_s(StrN3[0], StrI); //将1柱底层移到2柱顶层
strcpy_s(StrN1[1], StrP3);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) == 0) //若不在1柱的两片都不在3柱
{
printf("3");
strcpy_s(StrN3[0], StrI); //将1柱底层移到3柱底层
strcpy_s(StrN3[2], StrP3);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) != 0 && strcmp(StrN2[2], StrI) == 0) //若不在1柱的只有一片在3柱
{
printf("3");
strcpy_s(StrN3[0], StrI); //将1柱底层移到3柱中层
strcpy_s(StrN2[2], StrP3);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) != 0 && strcmp(StrN2[2], StrI) != 0) //若不在1柱的两片全在3柱
{
printf("3");
strcpy_s(StrN3[0], StrI); //将1柱底层移到3柱顶层
strcpy_s(StrN1[2], StrP3);
system("cls");
Show();
Getin();
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
if (CH == '1' && strcmp(StrN2[0], StrI) == 0 && strcmp(StrN3[0], StrI) != 0 && strcmp(StrN3[0], StrP5) == 0) //1柱中层为空,底层为五
{
printf("1");
CH = _getch();
if (CH == '2' && strcmp(StrN3[1], StrI) == 0) //若不在1柱的两片都不在2柱
{
printf("2");
strcpy_s(StrN3[0], StrI); //将1柱底层移到2柱底层
strcpy_s(StrN3[1], StrP5);
system("cls");
Show();
Getin();
}
if (CH == '2' && strcmp(StrN3[1], StrI) != 0 && strcmp(StrN2[1], StrI) == 0) //若不在1柱的只有一片在2柱
{
printf("2");
strcpy_s(StrN3[0], StrI); //将1柱底层移到2柱中层
strcpy_s(StrN2[1], StrP5);
system("cls");
Show();
Getin();
}
if (CH == '2' && strcmp(StrN3[1], StrI) != 0 && strcmp(StrN2[1], StrI) != 0) //若不在1柱的两片全在2柱
{
printf("2");
strcpy_s(StrN3[0], StrI); //将1柱底层移到2柱顶层
strcpy_s(StrN1[1], StrP5);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) == 0) //若不在1柱的两片都不在3柱
{
printf("3");
strcpy_s(StrN3[0], StrI); //将1柱底层移到3柱底层
strcpy_s(StrN3[2], StrP5);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) != 0 && strcmp(StrN2[2], StrI) == 0) //若不在1柱的只有一片在3柱
{
printf("3");
strcpy_s(StrN3[0], StrI); //将1柱底层移到3柱中层
strcpy_s(StrN2[2], StrP5);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) != 0 && strcmp(StrN2[2], StrI) != 0) //若不在1柱的两片全在3柱
{
printf("3");
strcpy_s(StrN3[0], StrI); //将1柱底层移到3柱顶层
strcpy_s(StrN1[2], StrP5);
system("cls");
Show();
Getin();
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
if (CH == '1' && strcmp(StrN2[0], StrI) == 0 && strcmp(StrN3[0], StrI) != 0 && strcmp(StrN3[0], StrP7) == 0) //1柱中层为空,底层为七
{
printf("1");
CH = _getch();
if (CH == '2' && strcmp(StrN3[1], StrI) == 0) //若不在1柱的两片都不在2柱
{
printf("2");
strcpy_s(StrN3[0], StrI); //将1柱底层移到2柱底层
strcpy_s(StrN3[1], StrP7);
system("cls");
Show();
Getin();
}
if (CH == '2' && strcmp(StrN3[1], StrI) != 0 && strcmp(StrN2[1], StrI) == 0) //若不在1柱的只有一片在2柱
{
printf("2");
strcpy_s(StrN3[0], StrI); //将1柱底层移到2柱中层
strcpy_s(StrN2[1], StrP7);
system("cls");
Show();
Getin();
}
if (CH == '2' && strcmp(StrN3[1], StrI) != 0 && strcmp(StrN2[1], StrI) != 0) //若不在1柱的两片全在2柱
{
printf("2");
strcpy_s(StrN3[0], StrI); //将1柱底层移到2柱顶层
strcpy_s(StrN1[1], StrP7);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) == 0) //若不在1柱的两片都不在3柱
{
printf("3");
strcpy_s(StrN3[0], StrI); //将1柱底层移到3柱底层
strcpy_s(StrN3[2], StrP7);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) != 0 && strcmp(StrN2[2], StrI) == 0) //若不在1柱的只有一片在3柱
{
printf("3");
strcpy_s(StrN3[0], StrI); //将1柱底层移到3柱中层
strcpy_s(StrN2[2], StrP7);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) != 0 && strcmp(StrN2[2], StrI) != 0) //若不在1柱的两片全在3柱
{
printf("3");
strcpy_s(StrN3[0], StrI); //将1柱底层移到3柱顶层
strcpy_s(StrN1[2], StrP7);
system("cls");
Show();
Getin();
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
//-----------------------------------------------------------------------------------------------------------
if (CH == '2' && strcmp(StrN2[1], StrI) == 0 && strcmp(StrN3[1], StrI) != 0 && strcmp(StrN3[1], StrP3) == 0) //2柱中层为空,底层为三
{
printf("2");
CH = _getch();
if (CH == '1' && strcmp(StrN3[0], StrI) == 0) //若不在2柱的两片都不在1柱
{
printf("1");
strcpy_s(StrN3[1], StrI); //将2柱底层移到1柱底层
strcpy_s(StrN3[0], StrP3);
system("cls");
Show();
Getin();
}
if (CH == '1' && strcmp(StrN3[0], StrI) != 0 && strcmp(StrN2[0], StrI) == 0) //若不在1柱的只有一片在1柱
{
printf("1");
strcpy_s(StrN3[1], StrI); //将2柱底层移到1柱中层
strcpy_s(StrN2[0], StrP3);
system("cls");
Show();
Getin();
}
if (CH == '1' && strcmp(StrN3[0], StrI) != 0 && strcmp(StrN2[0], StrI) != 0) //若不在1柱的两片全在1柱
{
printf("1");
strcpy_s(StrN3[1], StrI); //将2柱底层移到1柱顶层
strcpy_s(StrN1[0], StrP3);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) == 0) //若不在2柱的两片都不在3柱
{
printf("3");
strcpy_s(StrN3[1], StrI); //将2柱底层移到3柱底层
strcpy_s(StrN3[2], StrP3);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) != 0 && strcmp(StrN2[2], StrI) == 0) //若不在2柱的只有一片在3柱
{
printf("3");
strcpy_s(StrN3[1], StrI); //将2柱底层移到3柱中层
strcpy_s(StrN2[2], StrP3);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) != 0 && strcmp(StrN2[2], StrI) != 0) //若不在2柱的两片全在3柱
{
printf("3");
strcpy_s(StrN3[1], StrI); //将2柱底层移到3柱顶层
strcpy_s(StrN1[2], StrP3);
system("cls");
Show();
Getin();
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
if (CH == '2' && strcmp(StrN2[1], StrI) == 0 && strcmp(StrN3[1], StrI) != 0 && strcmp(StrN3[1], StrP5) == 0) //2柱中层为空,底层为五
{
printf("2");
CH = _getch();
if (CH == '1' && strcmp(StrN3[0], StrI) == 0) //若不在2柱的两片都不在1柱
{
printf("1");
strcpy_s(StrN3[1], StrI); //将2柱底层移到1柱底层
strcpy_s(StrN3[0], StrP5);
system("cls");
Show();
Getin();
}
if (CH == '1' && strcmp(StrN3[0], StrI) != 0 && strcmp(StrN2[0], StrI) == 0) //若不在2柱的只有一片在1柱
{
printf("1");
strcpy_s(StrN3[1], StrI); //将2柱底层移到1柱中层
strcpy_s(StrN2[0], StrP5);
system("cls");
Show();
Getin();
}
if (CH == '1' && strcmp(StrN3[0], StrI) != 0 && strcmp(StrN2[0], StrI) != 0) //若不在2柱的两片全在1柱
{
printf("1");
strcpy_s(StrN3[1], StrI); //将2柱底层移到1柱顶层
strcpy_s(StrN1[0], StrP5);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) == 0) //若不在2柱的两片都不在3柱
{
printf("3");
strcpy_s(StrN3[1], StrI); //将2柱底层移到3柱底层
strcpy_s(StrN3[2], StrP5);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) != 0 && strcmp(StrN2[2], StrI) == 0) //若不在2柱的只有一片在3柱
{
printf("3");
strcpy_s(StrN3[1], StrI); //将2柱底层移到3柱中层
strcpy_s(StrN2[2], StrP5);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) != 0 && strcmp(StrN2[2], StrI) != 0) //若不在2柱的两片全在3柱
{
printf("3");
strcpy_s(StrN3[1], StrI); //将2柱底层移到3柱顶层
strcpy_s(StrN1[2], StrP5);
system("cls");
Show();
Getin();
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
if (CH == '2' && strcmp(StrN2[1], StrI) == 0 && strcmp(StrN3[1], StrI) != 0 && strcmp(StrN3[1], StrP7) == 0)
{
printf("2");
CH = _getch();
if (CH == '1' && strcmp(StrN3[0], StrI) == 0)
{
printf("1");
strcpy_s(StrN3[1], StrI);
strcpy_s(StrN3[0], StrP7);
system("cls");
Show();
Getin();
}
if (CH == '1' && strcmp(StrN3[0], StrI) != 0 && strcmp(StrN2[0], StrI) == 0)
{
printf("1");
strcpy_s(StrN3[1], StrI);
strcpy_s(StrN2[0], StrP7);
system("cls");
Show();
Getin();
}
if (CH == '1' && strcmp(StrN3[0], StrI) != 0 && strcmp(StrN2[0], StrI) != 0)
{
printf("1");
strcpy_s(StrN3[1], StrI);
strcpy_s(StrN1[0], StrP7);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) == 0)
{
printf("3");
strcpy_s(StrN3[1], StrI);
strcpy_s(StrN3[2], StrP7);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) != 0 && strcmp(StrN2[2], StrI) == 0)
{
printf("3");
strcpy_s(StrN3[1], StrI);
strcpy_s(StrN2[2], StrP7);
system("cls");
Show();
Getin();
}
if (CH == '3' && strcmp(StrN3[2], StrI) != 0 && strcmp(StrN2[2], StrI) != 0)
{
printf("3");
strcpy_s(StrN3[1], StrI);
strcpy_s(StrN1[2], StrP7);
system("cls");
Show();
Getin();
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
//-----------------------------------------------------------------------------------------------------------
if (CH == '3' && strcmp(StrN2[2], StrI) == 0 && strcmp(StrN3[2], StrI) != 0 && strcmp(StrN3[2], StrP3) == 0)
{
printf("3");
CH = _getch();
if (CH == '1' && strcmp(StrN3[0], StrI) == 0)
{
printf("1");
strcpy_s(StrN3[2], StrI);
strcpy_s(StrN3[0], StrP3);
system("cls");
Show();
Getin();
}
if (CH == '1' && strcmp(StrN3[0], StrI) != 0 && strcmp(StrN2[0], StrI) == 0)
{
printf("1");
strcpy_s(StrN3[2], StrI);
strcpy_s(StrN2[0], StrP3);
system("cls");
Show();
Getin();
}
if (CH == '1' && strcmp(StrN3[0], StrI) != 0 && strcmp(StrN2[0], StrI) != 0)
{
printf("1");
strcpy_s(StrN3[2], StrI);
strcpy_s(StrN1[0], StrP3);
system("cls");
Show();
Getin();
}
if (CH == '2' && strcmp(StrN3[1], StrI) == 0)
{
printf("2");
strcpy_s(StrN3[2], StrI);
strcpy_s(StrN3[1], StrP3);
system("cls");
Show();
Getin();
}
if (CH == '2' && strcmp(StrN3[1], StrI) != 0 && strcmp(StrN2[1], StrI) == 0)
{
printf("2");
strcpy_s(StrN3[2], StrI);
strcpy_s(StrN2[1], StrP3);
system("cls");
Show();
Getin();
}
if (CH == '2' && strcmp(StrN3[1], StrI) != 0 && strcmp(StrN2[1], StrI) != 0)
{
printf("2");
strcpy_s(StrN3[2], StrI);
strcpy_s(StrN1[1], StrP3);
system("cls");
Show();
Getin();
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
if (CH == '3' && strcmp(StrN2[2], StrI) == 0 && strcmp(StrN3[2], StrI) != 0 && strcmp(StrN3[2], StrP5) == 0)
{
printf("3");
CH = _getch();
if (CH == '1' && strcmp(StrN3[0], StrI) == 0)
{
printf("1");
strcpy_s(StrN3[2], StrI);
strcpy_s(StrN3[0], StrP5);
system("cls");
Show();
Getin();
}
if (CH == '1' && strcmp(StrN3[0], StrI) != 0 && strcmp(StrN2[0], StrI) == 0)
{
printf("1");
strcpy_s(StrN3[2], StrI);
strcpy_s(StrN2[0], StrP5);
system("cls");
Show();
Getin();
}
if (CH == '1' && strcmp(StrN3[0], StrI) != 0 && strcmp(StrN2[0], StrI) != 0)
{
printf("1");
strcpy_s(StrN3[2], StrI);
strcpy_s(StrN1[0], StrP5);
system("cls");
Show();
Getin();
}
if (CH == '2' && strcmp(StrN3[1], StrI) == 0)
{
printf("2");
strcpy_s(StrN3[2], StrI);
strcpy_s(StrN3[1], StrP5);
system("cls");
Show();
Getin();
}
if (CH == '2' && strcmp(StrN3[1], StrI) != 0 && strcmp(StrN2[1], StrI) == 0)
{
printf("2");
strcpy_s(StrN3[2], StrI);
strcpy_s(StrN2[1], StrP5);
system("cls");
Show();
Getin();
}
if (CH == '2' && strcmp(StrN3[1], StrI) != 0 && strcmp(StrN2[1], StrI) != 0)
{
printf("2");
strcpy_s(StrN3[2], StrI);
strcpy_s(StrN1[1], StrP5);
system("cls");
Show();
Getin();
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
if (CH == '3' && strcmp(StrN2[2], StrI) == 0 && strcmp(StrN3[2], StrI) != 0 && strcmp(StrN3[2], StrP7) == 0)
{
printf("3");
CH = _getch();
if (CH == '1' && strcmp(StrN3[0], StrI) == 0)
{
printf("1");
strcpy_s(StrN3[2], StrI);
strcpy_s(StrN3[0], StrP7);
system("cls");
Show();
Getin();
}
if (CH == '1' && strcmp(StrN3[0], StrI) != 0 && strcmp(StrN2[0], StrI) == 0)
{
printf("1");
strcpy_s(StrN3[2], StrI);
strcpy_s(StrN2[0], StrP7);
system("cls");
Show();
Getin();
}
if (CH == '1' && strcmp(StrN3[0], StrI) != 0 && strcmp(StrN2[0], StrI) != 0)
{
printf("1");
strcpy_s(StrN3[2], StrI);
strcpy_s(StrN1[0], StrP7);
system("cls");
Show();
Getin();
}
if (CH == '2' && strcmp(StrN3[1], StrI) == 0)
{
printf("2");
strcpy_s(StrN3[2], StrI);
strcpy_s(StrN3[1], StrP7);
system("cls");
Show();
Getin();
}
if (CH == '2' && strcmp(StrN3[1], StrI) != 0 && strcmp(StrN2[1], StrI) == 0)
{
printf("2");
strcpy_s(StrN3[2], StrI);
strcpy_s(StrN2[1], StrP7);
system("cls");
Show();
Getin();
}
if (CH == '2' && strcmp(StrN3[1], StrI) != 0 && strcmp(StrN2[1], StrI) != 0)
{
printf("2");
strcpy_s(StrN3[2], StrI);
strcpy_s(StrN1[1], StrP7);
system("cls");
Show();
Getin();
}
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新操作\n\n");
Getin();
}
}
//-----------------------------------------------------------------------------------------------------------
if (CH == 'q')
{
printf("\n\n\n\t\t\t 退出游戏....\n\n");
exit(0);
}
//-----------------------------------------------------------------------------------------------------------
if (CH == 'r')
{
system("cls");
Play();
}
//-----------------------------------------------------------------------------------------------------------
if (CH == 'b')
{
system("cls");
Menu();
}
//-----------------------------------------------------------------------------------------------------------
if (strcmp(StrN1[2], StrP3) == 0 && strcmp(StrN2[2], StrP5) == 0 && strcmp(StrN3[2], StrP7) == 0)
{
printf("\n\n\t\t\t游戏成功!\n\n");
printf("\t1. 重新开始\t2. 返回主菜单\t3. 退出游戏\n\n");
CH = _getch();
if (CH == '1')
{
system("cls");
Play();
}
if (CH == '2')
{
system("cks");
Menu();
}
if (CH == '3')
{
exit(0);
}
}
//-----------------------------------------------------------------------------------------------------------
else
{
system("cls");
Show();
printf("\n\t\t\t 输入错误,请重新选择!\n");
Getin();
}
}
void Menu();
void Play()
{
int n = 3;
int i = 0;
//printf("请输入层数:");
//scanf_s("%d", &n);
strcpy_s(StrN1[0], StrP3); //初始化
strcpy_s(StrN1[1], StrI);
strcpy_s(StrN1[2], StrI);
strcpy_s(StrN2[0], StrP5);
strcpy_s(StrN2[1], StrI);
strcpy_s(StrN2[2], StrI);
strcpy_s(StrN3[0], StrP7);
strcpy_s(StrN3[1], StrI);
strcpy_s(StrN3[2], StrI);
Show();
while (1)
{
Getin();
}
}
void Menu();
void Help()
{
printf("\n\n\n\n\t\t\t\t抱歉,帮助请自行脑补。(按下B返回主菜单)");
if (_getch())
{
system("cls");
Menu();
}
}
void Menu()
{
int M_CH = 0;
printf("\n\n\n\n\t\t\t Sakura 汉诺塔V1.01");
printf("\n\n\n\n\n\t\t\t\t1. 开始游戏\n\n\n\t\t\t\t2. 帮助\n\n\n\t\t\t\t3. 退出游戏\n\n");
M_CH = _getch();
if (M_CH == '1')
{
system("cls");
Play();
}
if (M_CH == '2')
{
system("cls");
Help();
}
if (M_CH == '3')
{
exit(0);
}
else
{
printf("\n\n\t\t\t 输入错误,请重新输入!\n");
int DELAY = 280000000;
int i = 0;
for (i = 0; i < DELAY; i++){}
system("cls");
Menu();
}
}
评论已关闭