编写一个“记忆力训练”程序,玩家按照相反的顺序输入已记忆的字符串序列,例如提示的题目是5892.屏幕显示n秒钟后,题目数字自动消失,并提示输入,玩家需输入2985。
停留几秒需要用到sleep()函数
数字消失需要用到清屏函数
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int main(){
int i,clock=5;//暂停clock秒,初始化为5
char ch;
char a[101];//最大记忆字符数为100,最后一个是结束符\0
printf("----------欢迎来到记忆力训练----------\n");
printf("规则:玩家按照相反的顺序输入已记忆的字符串序列,\n"
"例如提示的题目是5892.屏幕显示n秒钟,题目数字 \n"
"自动消失,并提示输入,玩家需输入2985.游戏需要自定义题目\n " );
printf("请输入题目:\n");
gets(a);//从控制台获取字符
//倒计时显示设计:
while(--clock>=0){
Sleep(1000);
printf("请注意:%d后结束题目显示\n",clock+1);
}
//时间到了之后进行清屏模式
system("cls");
printf("时间到!\n");
printf("请玩家按照相反的顺序输入已记忆的字符串序列:\n");
i=strlen(a)-1;//题目的最后一个字符的下标赋值给i
while(getchar()==a[i]){//判断从控制台获取的字符是否和题目的倒序每一位相同
i--;
}
if(i==-1){printf("恭喜你!答对了!\n");}
else{printf("游戏失败,欢迎下次再玩!\n");}
return 0;
}
解答如下,可以调节秒数
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#define Max 255
void SleepSec(int sec,char str[])
{
int tem;
for(int i=0; i<sec; i++)
{
printf("字符串:");
puts(str);
printf("倒计时%d秒\n",sec-i);
Sleep(1000);
system("cls");
}
}
void reserve(char str[],int len)
{
for(int i=0; i<len/2; i++)
{
char tem=str[i];
str[i]=str[len-1-i];
str[len-1-i]=tem;
}
}
int main()
{
int num=15;//测试15次
while(num--)
{
int sec;
//=rand()%8+2;//2-10s
char str[Max];
printf("输入字符串:\n");
fflush(stdin);
gets(str);
sec=strlen(str);//字符串多少个字符就几秒
system("cls");
SleepSec(sec,str);
char input[Max];
fflush(stdin);
gets(input);
reserve(input,strlen(input));
if(strcmp(str,input)==0)
{
printf("\nright\n\n");
printf("str:%s\ninput:%s\n",str,input);
}
else
{
printf("\nerror\n\n");
printf("str:%s\ninput:%s\n",str,input);
}
return 0;
}
}
这种用个随机数,然后sleep下n秒后再提示输入,比对就行
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int str_cmp(char rand_str[], char guess_str[])
{
int i, len;
int len_rand = strlen(rand_str);
int len_guess = strlen(guess_str);
if (len_rand != len_guess) return 1;
for(i = 0; i<len; i++) {
if(rand_str[i] != guess_str[len - i -1]) return 1;
}
return 0;
}
int main()
{
int i=0, n, len;
char rand_str[100], guess_str[100], bflush[255];
printf("please input n s time for remeber num: ");
scanf("%d", &n);
srand(time(NULL));
len = rand()%5+1; //1-9999
for(i = 0; i<len; i++) {
if (i%3==0) rand_str[i] = 'a' + rand()%26;
if (i%3==1) rand_str[i] = 'A' + rand()%26;
if (i%3==2) rand_str[i] = '0' + rand()%9;
}
rand_str[len] = '\0';
printf("please remember str: %s, after %d s will miss", rand_str, n);
fflush(stdout);
sleep(n);
for( i = 0; i < 50; i++) bflush[i] = ' '; bflush[i] = '\0';
printf("\r%s\n", bflush);
printf("please input the str reverse: ");
getchar();
gets(guess_str);
if (str_cmp(rand_str, guess_str) == 0) printf("YES oye\n");
else printf("NO sosad\n");
printf("the orig str is %s\n", rand_str);
return 0;
}
Sleep();
输入值的单位是毫秒;
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int main(){
int n=2;//暂停n秒,n初始化为2
char a[101];//假设最多记忆100个字符
int i;
printf("记忆力训练\n");
printf("请输入已记忆的字符串序列:\n");
gets(a);
Sleep(n*1000);//Windows C语言中单位是毫秒,乘以1000就是2秒
system("cls");//清空控制台显示
printf("请玩家按照相反的顺序输入已记忆的字符串序列:\n");
for(i=strlen(a)-1;i>=0;i--){
if(getchar()!=a[i]){
printf("输入错误!-_-");
break;
}
}
if(i==-1)printf("输入正确!^_^");
system("pause");
return 0;
}
可参照这个代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
time_t seed=0;
time_t wait_time=0;
int show_time=1;
unsigned int i=1;
char choose='1';
char input1;
unsigned int score=0;
unsigned int input2;
unsigned int flag=1;
printf("准备好进行记忆测试了吗?\n");
printf("屏幕上即将显示一串数字,你是否能记住它们呢?\n");
printf("输入正确就可以挑战更高的难度了!\n");
printf("按回车键开始!\n");
getchar();
printf("那么就开始吧!\n");
int length=3;
while(choose=='1'){
for(;;length+=2,show_time++)
{
wait_time = clock();
srand(time(&seed));
for(i = 1; i <= length; i++)
printf("%u", rand() % 10);
for( ; clock() - wait_time < show_time * CLOCKS_PER_SEC;);
for(i=1; i<=length; i++)
printf("\b \b");
printf("\n记住了吗?那么就试试吧:");
srand(seed);
for(i = 1; i <= length; i++)
{
input1=getchar();
input2=(int)input1-(int)'0';
if(input2 != rand() % 10)
{
printf("很遗憾!错误。正确答案:");
srand(seed);
for(i = 1; i <= length; i++)
printf("%u", rand() % 10);
flag=0;
break;
}
}
fflush(stdin);
if(flag==0)break;
score=score+length;
printf("正确!继续挑战!下一个是:\n");
}
printf("\n你本次的分数为:%u\n是否重来?\n是-----1 否-----0\n",score);
choose=getchar();
if(choose=='1')printf("再来一次:\n");
else printf("本次游戏结束,再见!");
fflush(stdin);
}
return 0;
}
代码参考自实例链接:https://blog.csdn.net/twentyonepilots/article/details/80513070
//编写一个“记忆力训练”程序,玩家按照相反的顺序输入已记忆的字符串序列,例如提示的题目是5892.屏幕显示n秒钟后,题目数字自动消失,并提示输入,玩家需输入2985。
#pragma warning(disable:4996) //开头加这句或项目、属性、配置属性、C/C++、预处理器、预处理器定义中添加“_CRT_SECURE_NO_WARNINGS”
#include <windows.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
int main() {
char s[5],r[5];
int i,v,n;
n=5;
srand((unsigned int)time(NULL));
while (1) {
for (i=0;i<4;i++) {
v=rand()%10+'0';
s[i]=v;r[3-i]=v;
}
s[4]=0;
r[4]=0;
cprintf("%s",s);
for (i=0;i<n;i++) {
cprintf(" %d",n-i);
Sleep(1000);
cprintf("\b\b");
}
cprintf("\b\b\b\bInput:");
for (i=0;i<4;i++) {
s[i]=getche();
if (s[i]=='\r') return 1;//按回车键退出
}
s[4]=0;
if (0==strcmp(s,r)) {
cprintf(" OK!");
return 0;
} else {
cprintf(" ERROR");
}
Sleep(3000);
cprintf("\r \r");
}
return 0;
}