#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include<windows.h>
/*
2 光标定位函数
由于在VC++6.0中没有<dos.h>头文件,所以需要编写gotoxy()函数以实现光标定位功能。
*/
void gotoxy(int x,int y) {
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
HANDLE hConsoleOut;
hConsoleOut=GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hConsoleOut,&csbiInfo);
csbiInfo.dwCursorPosition.X=x;
csbiInfo.dwCursorPosition.Y=y;
SetConsoleCursorPosition(hConsoleOut,csbiInfo.dwCursorPosition);
}
/*
3 猜数字
本函数主要实现数字游戏的功能,系统采用随机函数随机生成数字,为避免生成数字重复,采用系统时钟设定种子,随机数字生成以后,由用户输入所猜数字,并以一变量记录猜测次数,从而进行成绩评定。
*/
void guess(int n)
{
int acount,bcount,ccount,i,j,k=0,flag,a[10],b[10];
char ch;
do
{
flag=0;
srand((unsigned)time(NULL));//利用系统时钟设定种子
for(i=0;i<n;i++)
a[i]=rand()%10;//每次产生0-9范围内任意的一个随机数并存到数组a中
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
if(a[i]==a[j])//判断数组a中是否有相同数字
{
flag=1;//若有上述情况则标志位置1
break;
}
}
}
while(flag==1);//若标志位为1则重新分配数据
do
{
k++;//记录猜数字的次数
acount=0;//每次猜的过程中位置与数字均正确的个数
bcount=0;//每次猜的过程中位置不正确但数字正确的个数
ccount=0;//前两者均不是
printf("猜数字:");
for(i=0;i<n;i++)
scanf("%d",&b[i]);//输入猜测的数据到数组b中
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(a[i]==b[i])//检测输入的数据与计算机分配的数据相同且位置相同的个数
{
acount++;
break;
}
if(a[i]==b[j]&&i!=j)//检测输入的数据与计算机分配的数据相同但位置不同的个数
{
bcount++;
break;
}
if(a[i]!=b[j]&&i!=j)
{
ccount++;
break;
}
}
printf("本次系统产生的数字序列为:");
for (i=0;i<n;i++)
{
printf("%d ",a[i]);
}
printf("\n\n本次成绩为:A:%d B:%d C:%d \n\n",acount,bcount,ccount);
if(acount==n)//判断acount是否与数字的个数相同
{
if(k==2)
{
printf(" 聪明绝顶啊!! \n\n");
}
else if(k>1&&k<=5)
{
printf("天才啊!!\n\n");
}
else if(k>5&&k<=10)
{
printf("聪明啊!!\n\n");
}
else
{
printf("需要继续努力!!\n\n");
}
}
getchar();
printf("是否继续?(y/n)\n");
scanf("%c",&ch);
if(ch=='n')
{
break;
}
}
while(1);
}
//4 主函数
//主函数主要实现对整个程序的运行控制,是整个程序的入口,在其中对相关函数进行调用完成程序功能。
int main()
{
int i,n;
while(1)
{
system("cls");
gotoxy(15,6);//将光标定位
printf("1.开始游戏?(y/n)");
gotoxy(15,8);
printf("2.游戏规则");
gotoxy(15,10);
printf("3.退出\n");
gotoxy(25,15);
printf("请输入你的选择:");
scanf("%d",&i);
switch(i)
{
case 1: system("cls");
printf("请输入数字个数:\n");
scanf("%d",&n);
guess(n);//调用guess函数
Sleep(5);//程序停止5秒钟
break;
case 2://输出游戏规则
system("cls");
printf("\t\t游戏规则为\n");
printf(" 第一步: 输入数字个数\n");
printf(" 第二步: 输入数字,中间用空格分开\n");
printf(" 第三步: 成绩中的'A'代表完全正确\n");
printf(" 成绩中的'B'代表数字正确而位置不正确\n");
printf(" 成绩中的'C'代表数字与位置均不正确\n");
getch();
break;
case 3:
exit(0);//退出游戏
default:break;
}
}
}