首先咱来分析一波——搬山游戏。
1.这个搬山游戏是玩家和电脑(人机)一块进行搬山,有输赢次数,还有游戏次数。
进行初始化
#include<stdio.h>
int main()
{
int mountain_count,//山的总数
carry, //一次允许搬运的数量
human, //玩家本次搬运的数量
comp, //电脑本次搬运的数量
comp_win, //电脑赢的次数
human_win, //玩家赢的次数
game_count; //当前游戏次数
printf("搬山游戏\n");
printf("游戏开始\n");
human_win=comp_win=0;
game_count=1;
2.咱们得首先设置多少座山,然后设置一次允许搬多少座山。
for(; ;)
{
printf("NO.%2d game\n",game_count++);
printf("-------------");
printf("那里有多少座山?\n");
scanf("%d",&mountain_count);/*读入山的总数*/
if(!mountain_count)
{
break;//本次游戏结束
}
printf("每次允许多少座山?\n");
do
{
scanf("%d",&carry);/*读入允许的搬山数*/
if(carry>mountain_count||carry<1)
{
//判断搬山数
printf("再说一遍!\n");
}
} while(carry>mountain_count||carry<1);
3.我们希望一次搬多少座山,然后设置电脑(人机)一次搬山数量,这个人机搬山数量可一自己定义啊。
do
{
printf("你希望多少山搬走?\n");
scanf("%d",&human);
if(human<1|| human>carry||human>mountain_count){
//判断搬山数是否符合要求
printf("不符合要求,请再次输入!\n");
continue;//结束本次循环
}
mountain_count-=human;
printf("现在还剩下%d座山.\n",mountain_count);
if(!mountain_count){
printf("... ... ... 我赢了,你输了... ... ...");
comp_win++;
}
else{
comp=(mountain_count-1)%(carry+1);//求出最佳搬山数
if(!comp)
{
comp=1;
}
mountain_count-=comp;
printf("电脑搬走了%d 座山.\n",comp);
if(mountain_count){
printf("现在还剩下%d座山.\n",mountain_count);
}else{
printf("... ... ... 我输了,你赢了... ... ...\n");
human_win++;
}
}
}
while(mountain_count);
}
return 0;
}
运行结果:
搬山游戏
游戏开始
NO. 1 game
-------------那里有多少座山?
100
每次允许多少座山?
20
你希望多少山搬走?
20
现在还剩下80座山.
电脑搬走了16 座山.
现在还剩下64座山.
你希望多少山搬走?
10
现在还剩下54座山.
电脑搬走了11 座山.
现在还剩下43座山.
你希望多少山搬走?
20
现在还剩下23座山.
电脑搬走了1 座山.
现在还剩下22座山.
你希望多少山搬走?
30
不符合要求,请再次输入!
你希望多少山搬走?
20
现在还剩下2座山.
电脑搬走了1 座山.
现在还剩下1座山.
你希望多少山搬走?
1
现在还剩下0座山.
... ... ... 我赢了,你输了... ... ...NO. 2 game
-------------那里有多少座山?
最后,特别说明:此代码是连续的。如果自己要敲一遍的话,直接按顺序敲就可以。