码迷,mamicode.com
首页 > 其他好文 > 详细

20170913自制猜数字游戏

时间:2017-09-14 23:56:49      阅读:340      评论:0      收藏:0      [点我收藏+]

标签:clu   指定   一个   blog   bre   head   and   turn   get   

/*
猜数字:系统随机生成一个四位数,请根据下列判断猜出来
A:数值正确,位置正确
B:数值正确,位置不正确
C:数值不正确

*/
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#pragma warning (disable:4996)
#define pUCharHead unsigned char *
//以数组形式返回n个无重复的随机数,范围可指定[min,max]
pUCharHead GenNoRepeatRandomChar(unsigned char min, unsigned char max, int n)
{
	//给随机数在堆中开辟一段内存
	pUCharHead sysChar = (pUCharHead)malloc(sizeof(unsigned char)*n);
	//定义种子
	srand((unsigned char)time(NULL));
	for (int i1 = 0; i1 < n; i1++)
	{
		//生成 ‘0’--‘9’的随机数  假设数对A取模,得到的值肯定在[0,A]之间
		sysChar[i1] = (char)((rand() % (max-min))+ min);
		//生成完成后检测是否重复,重复的话重新生成
		for (int j = 0; j < i1; j++)
		{
			if (sysChar[i1] == sysChar[j])
			{
				i1--;
				break;
			}
		}
	}
	return sysChar;
}
unsigned int * GenNoRepeatRandomUsInt(unsigned int min, unsigned int max, int n)
{
	//给随机数在堆中开辟一段内存
	unsigned int * sysChar = (unsigned int *)malloc(sizeof(unsigned int)*n);
	//定义种子
	srand((unsigned int)time(NULL));
	for (int i1 = 0; i1 < n; i1++)
	{
		//生成 ‘0’--‘9’的随机数  假设数对A取模,得到的值肯定在[0,A]之间
		sysChar[i1] = (unsigned int )((rand() % (max - min)) + min);
		//生成完成后检测是否重复,重复的话重新生成
		for (int j = 0; j < i1; j++)
		{
			if (sysChar[i1] == sysChar[j])
			{
				i1--;
				break;
			}
		}
	}
	return sysChar;
}

int main()
{
	//生成不重复随机数
	int count = 4;//需要的随机数个数
	pUCharHead sysChar = GenNoRepeatRandomChar(‘0‘, ‘9‘, count);
//	unsigned int * sysInt = GenNoRepeatRandomUsInt(0, 9, 5);
	//测试系统生成代码
	//char sysChar[4] = {‘1‘,‘2‘,‘5‘,‘6‘ };

	//人机交互
	//游戏说明
	printf("---------游戏说明-------------------\n");
	printf("请输入四个不重复的10以内的数字,然后\n");
	printf("根据提示猜出正确答案,提示说明:\n");
	printf("A:数值正确,位置正确。\n");
	printf("B:数值正确,位置不正确。\n");
	printf("C:数值不正确。\n");
	printf("---------游戏开始-------------------\n");
int UseTimes = 0;//记录成功完成总共的 使用次数
do
{
printf("力哥在此!快快报出你猜的数:\n");
char ch[4] = { 0 };//初始化用户输入

		
char printChar[4] = { 0 };//初始化存放ABC的数组
for (int j1=0; j1 < 4; j1++)
{
//	scanf(" %c", &ch[j1]);
	ch[j1] = getchar();
}
//清空用户的多余输入
char _tempChar;
while ((_tempChar = getchar()) != ‘\n‘ && _tempChar != EOF);
//----------------------判断业务-------------------
for (int i2=0; i2 < 4; i2++) //遍历用户输入的数
{
	printChar[i2] = ‘C‘;//默认 值&位置都不正确
	for (int j2 = 0; j2 < 4; j2++)//遍历系统随机生成的数
	{
		if (ch[i2] == sysChar[j2])//位置相同且数值相同
		{
			if ( i2 == j2)
			{
				printChar[i2] = ‘A‘;
				break;//因为随机产生的数是不重复的,因此只判断一次;
			}
			else//位置不相同但数值相同
			{
				printChar[i2] = ‘B‘;
			}
		}
	}
}
//一次判断完成,记录判断次数
UseTimes++;
//展示用户结果
for (int i3 = 0; i3 < 4; i3++)
{
	printf("%c", printChar[i3]);
}
printf("\n");
//正确与否判断
if ((printChar[0] ==‘A‘)&&( printChar[1] ==‘A‘) &&(printChar[2] ==‘A‘)&&( printChar[3]==‘A‘))
{
	printf("恭喜你,使用了%d次回答正确!。\n",UseTimes);
	system("pause");
	break;
}
} while (1);
	free(sysChar);
	return 0;
	
}

技术分享
 
 

 

20170913自制猜数字游戏

标签:clu   指定   一个   blog   bre   head   and   turn   get   

原文地址:http://www.cnblogs.com/evenio/p/8a5842d14926bcf7b4aeeb55a2b45729.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!