不会赢的游戏1

游戏规则:输入整数范围,根据系统给出提示进行猜数,每猜一次减少一次机会,猜中或者机会耗尽则一轮游戏结束。

游戏示例:输入范围0-4,你可以猜数1,2,3,系统提示有一次猜数机会

    如果你猜1,如果猜中,系统显示“恭喜你,猜对了”,否则将显示“猜错了,正确结果为XXX”。

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <math.h>

#include <time.h>



int main(void){

	int guess_cishu=0;

	int guess_cishu1=0; int guess_cishu2=0;

	int up_limit=0;

	int down_limit=100;

	int caishu=1;

	int result;

	char cmd[10];

	double random_number;



	while(1){

		srand((unsigned)time(NULL)*100);

		printf("输入start开始游戏,输入end结束游戏\n");

		scanf("%s", cmd);  //用fgets会出问题,why

		if(memcmp(cmd, "end", 3)==0) break;

		else if(memcmp(cmd, "start", 5)==0){

			memset(cmd, 0, 10);

			random_number = (double)rand()/RAND_MAX;



			printf("请输入猜数范围\n");

			printf("范围上限:");

			scanf("%d", &up_limit);

			printf("范围下限:");

			scanf("%d", &down_limit);

			if(up_limit>=down_limit-2){

				printf("范围不合理,请重新输入\n");

				continue;

			}

			guess_cishu = (int)(log10((double)down_limit-up_limit-1)/log10((double)2));

			printf("你有%d次猜的机会\n", guess_cishu);

			while(1){

				printf("输入要猜的数字:");

				scanf("%d", &caishu);

				if(caishu>=down_limit||caishu<=up_limit){

					printf("输入的数字非范围内\n");

					continue;

				}

				else{

					random_number = (double)rand()/RAND_MAX;

					guess_cishu --;

					guess_cishu1 = (int)(log10((double)caishu-up_limit-1)/log10((double)2));

					guess_cishu2 = (int)(log10((double)down_limit-caishu-1)/log10((double)2));

					if(guess_cishu==guess_cishu1&&guess_cishu==guess_cishu2){

						if(random_number<0.5) up_limit=caishu;

						else down_limit=caishu;

					}

					else if(guess_cishu==guess_cishu1){

						down_limit = caishu;

					}

					else{

						up_limit = caishu;

					}

					/*

					if(caishu>(up_limit+down_limit)/2){

						down_limit = caishu;

					}

					else if(caishu<(up_limit+down_limit)/2){

						up_limit = caishu;

					}

					else{

						if(random_number<0.5) up_limit = caishu;

						else down_limit = caishu;

					}*/					

					if(guess_cishu>0){

						printf("你猜错了,你还可以再猜%d次,范围是%d-%d\n", guess_cishu, up_limit, down_limit);

					}

					else break;

				}

			}

			random_number = (double)rand()/RAND_MAX;

			result = floor(random_number*(down_limit-up_limit-1))+up_limit+1;

			printf("哈哈,猜错了,正确答案是%d\n", result);  //用随机数输出结果

		}

		else{

			printf("未知指令\n");

			memset(cmd, 0, 10);

		}

	}

	printf("用户结束游戏\n");

	system("pause");



	return 0;

}



我们来看结果:

不会赢的游戏1

不会赢的游戏1


 

你可能感兴趣的:(游戏)