商人过河C语言程序编程.docx
《商人过河C语言程序编程.docx》由会员分享,可在线阅读,更多相关《商人过河C语言程序编程.docx(11页珍藏版)》请在冰豆网上搜索。
![商人过河C语言程序编程.docx](https://file1.bdocx.com/fileroot1/2022-12/1/79897537-2bd6-4a59-87fc-8604e7743b9c/79897537-2bd6-4a59-87fc-8604e7743b9c1.gif)
商人过河C语言程序编程
#include
#include
#include
voidbasic_interface()//基本界面
{
system("clear");
system("tputcup520");
printf("==============================================================================================\n");
system("tputcup620");
printf("**\n");
system("tputcup720");
printf("*^_^欢迎使用商人过河游戏!
^_^*\n");
system("tputcup820");
printf("**\n");
system("tputcup920");
printf("*游戏说明:
*\n");
system("tputcup1020");
printf("*三个商人带着三个随从和货物过河,船每次最多只能载两个人,要求在过河期间,任一岸上商人的人数*\n");
system("tputcup1120");
printf("*要大于或等于随从的人数,否则随从会杀掉商人抢走货物。
*\n");
system("tputcup1220");
printf("**\n");
system("tputcup1320");
printf("*游戏操作:
*\n");
system("tputcup1420");
printf("*
(1)依次输入过河的商人和随从人数;*\n");
system("tputcup1520");
printf("*
(2)非法输入按键将重新开始。
*\n");
system("tputcup1620");
printf("*--------------------------------------------------------------------------------------------*\n");
system("tputcup1720");printf("*\n");system("tputcup17113");printf("*\n");
system("tputcup1820");printf("*\n");system("tputcup18113");printf("*\n");
system("tputcup1920");printf("*\n");system("tputcup19113");printf("*\n");
system("tputcup2020");printf("*\n");system("tputcup20113");printf("*\n");
system("tputcup2120");printf("*\n");system("tputcup21113");printf("*\n");
system("tputcup2220");printf("*\n");system("tputcup22113");printf("*\n");
system("tputcup2320");printf("*\n");system("tputcup23113");printf("*\n");
system("tputcup2420");printf("*\n");system("tputcup24113");printf("*\n");
system("tputcup2520");printf("*\n");system("tputcup25113");printf("*\n");
system("tputcup2620");printf("*\n");system("tputcup26113");printf("*\n");
system("tputcup2720");printf("*\n");system("tputcup27113");printf("*\n");
system("tputcup2820");
printf("**********************************************************************************************\n");
}
chara[6];//此岸
charb[6];//彼岸
voidprint_state(chara[],charb[])//打印渡河状态
{
inti,j,ab,aa,ba,bb;//ab此岸商人数,aa此岸随从数bb彼岸商人数,ba,彼岸随从数
aa=ab=ba=bb=0;
basic_interface();
system("tputcup1840");printf("此岸商人数:
\n");
system("tputcup1940");printf("此岸随从数:
\n");
system("tputcup1873");printf("彼岸商人数:
\n");
system("tputcup1973");printf("彼岸随从数:
\n");
for(i=0;i<6;i++)//计算此岸商人数和随从数
{
if(a[i]=='B')
ab++;
elseif(a[i]=='A')
aa++;
}
system("tputcup1853");
printf("%d\n",ab);//输出此岸商人数
system("tputcup1953");
printf("%d\n",aa);//输出此岸随从数
for(j=0;j<6;j++)//计算彼岸商人数和随从数
{
if(b[j]=='B')
bb++;
elseif(b[j]=='A')
ba++;
}
system("tputcup1886");
printf("%d\n",bb);//输出彼岸商人数
system("tputcup1986");
printf("%d\n",ba);//输出彼岸随从数
if(ab==0&&aa==0&&bb==3&&ba==3)//判断是否渡河成功
{
system("tputcup2340");
printf("恭喜你!
你已成功帮助商人安全过河!
按任意键退出...\n");
system("tputcup300");
getchar();
system("clear");
exit(0);
}
}
voidprocess()
{
inti,j,go_b,go_a,back_b,back_a,ab,aa,bb,ba;//go_b,过去商人数,go_a,过去随从数,back_b,回来商人数,back_a,回来随从数,
charch;
Start:
basic_interface();
system("tputcup2040");
printf("请按任意键开始游戏(按Q键退出)...");
ch=getchar();
if(ch=='Q'||ch=='q')
{
system("clear");
exit(0);
}
for(i=0;i<3;i++)
a[i]='B';
for(i=3;i<6;i++)
a[i]='A';
for(i=0;i<6;i++)
b[i]='0';
print_state(a,b);
while
(1)
{
//过去
for(ab=0,aa=0,i=0;i<6;i++)//计算此岸的商人数和随从数
{
if(a[i]=='B')
ab++;
elseif(a[i]=='A')
aa++;
}
system("tputcup2143");
printf("输入去彼岸商人的人数:
\n");
system("tputcup2243");
printf("输入去彼岸随从的人数:
\n");
system("tputcup2165");
scanf("%d",&go_b);//输入去彼岸的商人数
getchar();
system("tputcup2265");
scanf("%d",&go_a);//输入去彼岸的随从数
getchar();
if(go_b<0||go_b>ab||go_a<0||go_a>aa||go_a+go_b<1||go_a+go_b>2)//输入不合法
{
system("tputcup2440");
printf("输入有误!
!
按任意键重新开始...");
getchar();
gotoStart;
}
for(i=1;i<=go_b;i++)//过河后两边的状态
{
for(j=0;j<6;j++)
if(a[j]=='B')
{
a[j]='0';
break;
}
}
for(i=1;i<=go_b;i++)
{
for(j=0;j<6;j++)
if(b[j]=='0')
{
b[j]='B';
break;
}
}
for(i=1;i<=go_a;i++)
{
for(j=0;j<6;j++)
if(a[j]=='A')
{
a[j]='0';
break;
}
}
for(i=1;i<=go_a;i++)
{
for(j=0;j<6;j++)
if(b[j]=='0')
{
b[j]='A';
break;
}
}
for(aa=0,ab=0,i=0;i<6;i++)//统计过河后a岸的商人数和随从数
{
if(a[i]=='A')
aa++;
elseif(a[i]=='B')
ab++;
}
for(ba=0,bb=0,i=0;i<6;i++)//统计过河后b按的商人数和随从数
{
if(b[i]=='A')
ba++;
elseif(b[i]=='B')
bb++;
}
if((ab==3)||(bb==3)||(ab==aa)||(bb==ba))//可以继续下一步的条件
{
print_state(a,b);
}
else
{
system("tputcup2440");
printf("商人被杀,按任意键重新开始...\n");
system("tputcup300");
getchar();
gotoStart;
}
//回来
for(bb=0,ba=0,i=0;i<6;i++)//统计对岸的商人数和随从数
{
if(b[i]=='B')
bb++;
elseif(b[i]=='A')
ba++;
}
system("tputcup2443");
printf("输入回此岸商人的人数:
\n");
system("tputcup2543");
printf("输入回此岸随从的人数:
\n");
system("tputcup2465");
scanf("%d",&back_b);
system("tputcup2565");
scanf("%d",&back_a);
if(back_b<0||back_b>bb||back_a<0||back_a>ba||back_a+back_b<1||back_a+back_b>2)//判断输入是否合法
{
system("tputcup2640");
printf("输入有误!
!
按任意键重新开始...\n");
system("tputcup300");
getchar();
gotoStart;
}
for(i=1;i<=back_b;i++)//返回后的状态
{
for(j=0;j<6;j++)
if(b[j]=='B')
{
b[j]='0';
break;
}
}
for(i=1;i<=back_b;i++)
{
for(j=0;j<6;j++)
if(a[j]=='0')
{
a[j]='B';
break;
}
}
for(i=1;i<=back_a;i++)
{
for(j=0;j<6;j++)
if(b[j]=='A')
{
b[j]='0';
break;
}
}
for(i=1;i<=back_a;i++)
{
for(j=0;j<6;j++)
if(a[j]=='0')
{
a[j]='A';
break;
}
}
for(ab=0,aa=0,i=0;i<6;i++)//计算返回后此岸的商人数和随从数
{
if(a[i]=='B')
ab++;
elseif(a[i]=='A')
aa++;
}
for(bb=0,ba=0,i=0;i<6;i++)//计算返回后彼岸的商人数和随从数
{
if(b[i]=='B')
bb++;
elseif(b[i]=='A')
ba++;
}
if((ab==3)||(bb==3)||(ab==aa)||(bb==ba))//判断是否会进一步继续进行
{
print_state(a,b);
}
else
{
system("tputcup24,40");
printf("商人被杀,按任意键重新开始...\n");
system("tputcup30,0");
getchar();
gotoStart;
}
}
}
voidmain()
{
process();
}