适合c语言项目实践做的小游戏,C语言实现搬山小游戏,适合新手的项目实战,超易上手!...

问题描述

设有n座山,计算机与人作为比赛的双方,轮流搬山。规定每次搬山数不能超过k座,谁搬最后一座淮输。

游戏开始时,计算机请人输入山的总数n和每次允许搬山的最大数k,然后请人开始,等人输入了需要搬走的山的数目后,计算机马上打印出它搬多少座山,并提示尚余多少座山。

双方轮流搬山直到最后一座山搬完为止。计算机会显示谁是赢家,并问人是否要继续比赛。如果人不想玩了,计算机便会统计出共玩了几局,双方胜负如何。

问题分析

程序中先输入山的座数,要求每次搬山的最大数,从而找出最佳的搬山座数以获得游戏的胜利。

程序在若干次游戏结束后还记录了电脑跟人的胜负次数。程序中应用了条件语句、循环语句和逻辑判断语句来实现功能。

在有n座山的情况下,计算机为了将最后一座山留给人,而且又要控制每次搬山的数目不超过最大数k,应搬山的数目要满足关系:(n-1)%(k+1)。

算法设计

计算机参加游戏时应遵循下列原则:

(1)当剩余山的数目-1≤可移动的最大数k时,计算机要移(剩余山数目-1)座,以便将最后一座山留给人。

(2)对于任意正整数x,y,一定有:0≤x%(y+1)≤y

在有n座山的情况下,计算机为了将最后一座山留给人,而且又要控制每次搬山的数目不超过最大数k,则它应搬山的数目要满足下列关系:(n-1)%(k+1)

如果算出结果为0,即整除无余数,则规定只搬一座山,以防止冒进后发生问题。

呈上代码:

#include

int main()

{

int n, k, x, y, cc, pc, g;

printf("搬山游戏");

printf("游戏开始");

pc=cc=0;

g=1;

for( ; ; )

{

printf("No.%2d game ", g++);

printf("-------------");

printf("那里有多少座山?");

scanf("%d", &n);  /*读入山的总数*/

if(!n)

break;

printf("每次允许多少座山?");

do

{

scanf("%d", &k);  /*读入允许的搬山数*/

if(k>n || k<1)  /*判断搬山数*/

printf("再说一遍!");

}

while(k>n || k<1);

do

{

printf("你希望多少山搬走?");

scanf("%d",&x);

if(x<1 || x>k || x>n)  /*判断搬山数是否符合要求*/

{

printf("不符合要求,请再次输入!");

continue;

}

n-=x;

printf("现在还剩下%d座山.", n);

if(!n)

{

printf("……………我赢了,你输了。……………");

cc++;

}

else

{

y=(n-1)%(k+1);  /*求出最佳搬山数*/

if(!y)

y=1;

n-=y;

printf("电脑一走了 %d 座山.", y);

if(n)

printf(" 现在还剩下%d座山.", n);

else

{

printf("……………我输了,你赢了。………………");

pc++;

}

}

}

while(n);

}

/*打印结果*/

printf("总共进行了游戏%d.", cc+pc);

printf("你的得分是胜利%d,输了%d.", pc, cc);

printf("我的得分是胜利%d,输了%d.", cc, pc);

return 0;

}

结果如下:

搬山游戏

游戏开始

No. 1 game

-------------

那里有多少座山?10

每次允许多少座山?3

你希望多少山搬走?1

现在还剩下9座山.

电脑一走了 1 座山.

现在还剩下8座山.

你希望多少山搬走?3

现在还剩下5座山.

电脑一走了 1 座山.

现在还剩下4座山.

你希望多少山搬走?2

现在还剩下2座山.

电脑一走了 1 座山.

现在还剩下1座山.

你希望多少山搬走?1

现在还剩下0座山.

……………我赢了,你输了。……………

如图:

100fa07dd95a

对于热爱编程的人来说,有一群一起学习一起解答的小伙伴很重要!

小编的专栏有一个C/C++编程学习交流俱乐部(群),【点击进入】!

还有编程学习文件(源码,零基础教程,项目实战教学视频),欢迎初学者和正在进阶中的小伙伴们!

c语言24点游戏源码 c语言Turbo C下写的俄罗斯方块 c语言UDP传输系统源码 c语言奔跑的火柴人游戏源码 c语言别踩白块儿(双人版)源码 C语言超市管理系统 c语言吃逗游戏源码 c语言打字母游戏源码 c语言打字游戏代码 c语言大丰收游戏源码 c语言地空对战游戏 c语言电子时钟程序 c语言对对碰游戏源码 c语言对自己电脑系统测试 c语言俄罗斯方块 c语言盒子接球游戏源码 c语言黑白棋ai游戏源码 c语言华容道源码 c语言火车票订票管理源码 c语言教工工资管理系统 c语言坑爹;大冒险 c语言矿井逃生 c语言力学相关的流体源码 c语言连连看游戏源码 c语言模拟快打旋风游戏源码 c语言配有图片和音乐的打字母游戏 c语言实现类似弹力球效果 c语言实现如果cmd中的ping c语言实现数字雨 c语言实现水波纹显示效果 c语言实现图片转化为ASCI图 c语言贪吃蛇游戏的双人对战版 c语言坦克游戏源代码 c语言通讯录管理系统源码 c语言图书管理系统源码 c语言图书借阅系统源码 c语言涂格子游戏源码 c语言万年历源码 c语言文本编辑器系统源码 c语言五子棋源码 c语言学生成绩管理系统 c语言学生成绩管理系统源码 c语言学生信息系统 c语言支持自2已创建迷宫,并求解最短路径 c语言种地要浇水游戏源码 c语言自创军旗游戏源码 c语言自创推箱子游戏改版 c语言的播放器源码 c语言的绘图板系统 c语言的一个任务管理器 纯c语言迷宫源码 链表HuffmanTree
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值