今天闲着没事随便写的一个小游戏,可能有bug,但是我目前还没发现,以后可能会进行一点改进。
源代码
#include<windows.h>
#include<iostream>
#include<cstdlib>
#include<conio.h>
#include<cstdio>
#include<ctime>
using namespace std;
void verbatim_output(string a,int time)
{
int len=a.length();
for(int i=0;i<len;i++,Sleep(time))
printf("%c",a[i]);
printf("\n");
}
int main()
{
A:
printf("你只有八次机会,猜出四个按顺序排列的数(四个数的范围皆在0~9,且各不相同)。\n猜对一个数但位置错误为B,猜对且位置真确为A。\n");
printf("如一组数为1234,而猜的是3205,则显示为1A 1B,有3但位置不对为1B,有2且位置真确为1A。\n\n任意键开始。");
getch();
system("cls");
printf("数字生成中");
char number[4];
srand(unsigned(time(0)));
number[0]=rand()%10+'0';
for(int i=1;i<4;i++)
{
Number:
number[i]=rand()%10+'0';
for(int j=0;j<i;j++)
if(number[i]==number[j])
goto Number;
}
system("cls");
printf("数字已生成,任意键开始游戏。");
getch();
system("cls");
cout<<number<<endl;
char a[4];
int A,B,time=0;
while(time<8)
{
printf("当前剩余次数为%d,请输入:",8-time);
A=0;
for(int i=0;i<4;i++)
{
scanf("%c",&a[i]);
if(a[i]=='\n') i--;
else if(number[i]==a[i])
A++;
}
B=-A;
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
if(number[i]==a[j])
B++;
if(A==4) break;
printf("%d",A); printf("A ");
printf("%d",B); printf("B\n");
time++;
}
Sleep(100);
system("cls");
if(time>=8) verbatim_output("GAMEOVER!",50);
else verbatim_output("恭喜你成功通关!",25);
printf("\n任意键继续。");
getch();
system("cls");
printf("是否再来一局?\n1.是 2.否");
B:
char x=getch();
if(x!='1'&&x!='2')
{
printf("输入错误,请输入1或2。\n\n任意键继续。");
getch();
system("cls");
goto B;
}
else if(x=='1')
{
system("cls");
goto A;
}
else return 0;
}