该游戏是我由一个数学建模题——“安全过河问题”而构思的。有三个商人带者三个随从和货物过河,
船每次最多只能载两个人,要求保证在过河期间商人的人数要大于或等于随从的人数,否则随从杀人抢货。
构思:
用两个数组来表示两岸的商人和随从,其中'A'表示商人,'B'表示随从,数组a 表示此岸,数组b表示彼岸;
通过输入过河的人数,来改变两个数组中的'A'和'B'的个数,在用文本输出两岸的情况.
游戏规则是这样似的:
1)输入过河的人数;
2)非法输入按按了退出处理(如:每次输入的人数不得多于两个;不得输入负数,字母等).
"safe.c"
#include <stdio.h>
#include <conio.h>
#include <string.h>
void helpf()
{
clrscr();
gotoxy(6,3);
printf("该游戏是由一个数学建模题——“安全过河问题”而构思的。\n\n有三个商人带者三个随从和货物过河,船每次最多只能载两个人,要求保证在过河期间\n\n商人的人数要大于或等于随从的人数,否则随从杀人抢货。\n\n游戏规则是这样似的:\n\n 1)输入过河的人数;\n\n 2)非法输入按按了退出处理");
printf("祝君好运!\n");
printf("\t\t\t作者:双刃剑\n");
printf("\t\t\tE-mail: fuzhufang@yahoo.com.cn");
}
char a[6];
char b[6];
void printcase(char a[],char b[])
{int i,j,xa,xb,x0,ya,yb,y0;
xa=xb=x0=ya=yb=y0=0;
gotoxy(1,4);
printf("此岸\t\t 彼岸\n");
for(i=0;i<6;i++) {
if(a[i]=='A')
xa++;
else if (a[i]=='B')
xb++;
else if(a[i]=='0')
x0++;
}
for(i=1;i<=xa;i++)
printf("商人 ");
printf("\n");
for(i=1;i<=xb;i++)
printf("随从 ");
printf("\n");
for(i=1;i<=x0;i++)
printf(" ");
printf("\n");
for(j=0;j<6;j++) {
if(b[j]=='A')
ya++;
else if(b[j]=='B')
yb++;
else if(b[j]=='0')
y0++;
}
gotoxy(25,5);
for(j=1;j<=ya;j++)
printf("商人 ");
gotoxy(25,6);
for(j=1;j<=yb;j++)
printf("随从 ");
gotoxy(25,7);
for(j=1;j<=y0;j++)
printf(" ");
if(xa==0 && xb==0 && ya==3 && yb==3) {
printf("\n\n你以成功帮助商人安全过河!");
exit(0);
}
}
void main()
{
int i,x,y,key,ca,cb,j,aA,aB,bA,bB;
helpf();
getch();
clrscr();
window(1,1,25,80);
textbackground(1);
textcolor(14);
clrscr();
for(i=0;i<3;i++)
a[i]='A';
for(i=3;i<6;i++)
a[i]='B';
for(i=0;i<6;i++)
b[i]='0';
printcase(a,b);
while(1){
gotoxy(20,10);
printf("输入去此岸商人的人数: ");
scanf("%d",&x);
gotoxy(22,10);
printf("输入去此岸随从的人数: ");
scanf("%d",&y);
for(ca=0,cb=0,i=0;i<6;i++) {
if(a[i]=='A')
ca++;
else if(a[i]=='B')
cb++;
}
if(x<0 || x>ca || y<0 || y>cb || x+y<1 ||x+y>2) {
printf("输入有误!!");
exit (0);
}
for(i=1;i<=x;i++) {
for(j=0;j<6;j++)
if(a[j]=='A') {
a[j]='0';
break;
}
}
for(i=1;i<=x;i++) {
for(j=0;j<6;j++)
if(b[j]=='0') {
b[j]='A';
break;
}
}
for(i=1;i<=y;i++) {
for(j=0;j<6;j++)
if(a[j]=='B') {
a[j]='0';
break;
}
}
for(i=1;i<=y;i++) {
for(j=0;j<6;j++)
if(b[j]=='0') {
b[j]='B';
break;
}
}
for(aA=0,aB=0,i=0;i<6;i++) {
if(a[i]=='A')
aA++;
else if(a[i]=='B')
aB++;
}
for(bA=0,bB=0,i=0;i<6;i++) {
if(b[i]=='A')
bA++;
else if(b[i]=='B')
bB++;
}
if((aA==3) ||(bA==3) || (aA==aB) || (bA==bB)) {
clrscr();
printcase(a,b);
}
else{
clrscr();
printf("商人被杀,再来一次吧!!!!\n\n\n\n");
printcase(a,b);
getch();
for(i=0;i<3;i++)
a[i]='A';
for(i=3;i<6;i++)
a[i]='B';
for(i=0;i<6;i++)
b[i]='0';
clrscr();
printcase(a,b);
continue;
}
gotoxy(20,10);
printf("输入回此岸商人的人数: ");
scanf("%d",&x);
gotoxy(22,10);
printf("输入回此岸随从的人数:");
scanf("%d",&y);
for(ca=0,cb=0,i=0;i<6;i++){
if(b[i]=='A')
ca++;
else if(b[i]=='B')
cb++;
}
if(x<0 || x>ca || y<0 || y>cb || x+y<1 || x+y>2) {
printf("输入有误!!");
exit (0);
}
for(i=1;i<=x;i++) {
for(j=0;j<6;j++)
if(b[j]=='A') {
b[j]='0';
break;
}
}
for(i=1;i<=x;i++) {
for(j=0;j<6;j++)
if(a[j]=='0') {
a[j]='A';
break;
}
}
for(i=1;i<=y;i++) {
for(j=0;j<6;j++)
if(b[j]=='B') {
b[j]='0';
break;
}
}
for(i=1;i<=y;i++) {
for(j=0;j<6;j++)
if(a[j]=='0') {
a[j]='B';
break;
}
}
for(aA=0,aB=0,i=0;i<6;i++) {
if(a[i]=='A')
aA++;
else if(a[i]=='B')
aB++;
}
for(bA=0,bB=0,i=0;i<6;i++) {
if(b[i]=='A')
bA++;
else if(b[i]=='B')
bB++;
}
if((aA==3) ||(bA==3) || (aA==aB) || (bA==bB)){
clrscr();
printcase(a,b);
}
else {
clrscr();
printf("商人被杀,再来一次吧!!!!\n\n\n\n");
printcase(a,b);
getch();
for(i=0;i<3;i++)
a[i]='A';
for(i=3;i<6;i++)
a[i]='B';
for(i=0;i<6;i++)
b[i]='0';
clrscr();
printcase(a,b);
continue;
}
}
}
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |