C语言入门 -- Simple Simon 简单的西蒙游戏(2021/1/7)

Simple Simon

用C语言写一款简单的西蒙游戏

Simple Simon是一款记忆测试游戏。计算机在屏幕上短时间显示一系列数字。当你从屏幕上记住数字的序列时,你必须完全记住这些数字。每次你成功了,你可以重复这个过程,得到一个更长的数字列表供你尝试。
程序必须生成一个介于0和9之间的整数序列,并在屏幕上显示该序列一秒钟,然后再将其删除。然后玩家必须尝试输入相同的数字序列。序列逐渐变长,直到玩家得到错误的序列。然后根据成功尝试的次数和花费的时间计算得分,然后询问玩家是否愿意再次玩。
序列长度从3开始,每三次成功尝试,增加序列长度。
(长度加1)
Simple Simon程序的基本逻辑如下:
C语言入门 -- Simple Simon 简单的西蒙游戏(2021/1/7)_第1张图片

编程中将使用以下头文件:

#include    /* For input and output   */
#include    /* For toupper() function */
#include   /* For rand() and srand() */
#include     /* For time() , clock()  and   CLOCKS_PER_SEC*/

提示:
(1) 等一秒钟
库函数clock()返回自程序启动以来的时间,以时钟刻度为单位。头文件的定义了一个符号CLOCKS_PER_SEC,它是一秒钟内的时钟周期数。使用变量now存储当前时间,循环的代码如下:

  /* Wait one second */
now = clock();
for( ;clock() - now < CLOCKS_PER_SEC; );

(2) 计算游戏分数
计算玩游戏的总时间(秒):

time_taken = (clock() – startTime) / CLOCKS_PER_SEC;

如果变量计数器存储成功尝试的次数,则可以使用以下公式计算游戏分数:

scores = counter * 100 / time_taken

(3) 生成0到9之间的整数序列并在屏幕上显示该序列

seed = time(NULL);
srand((unsigned int)seed);  /* Initialize the random sequence */
for(int i = 0; i < sequence_length; i++)
printf("%2d", rand() % 10);

如果使用相同的种子生成整数序列(srand(seed)),它将生成相同的序列。
(4) 清除输出的数字序列

printf("\r");               /* go to beginning of the line */
for(int i = 1; i <= sequence_length; i++)
printf("  ");

以下为整个程序源代码:

/*
  Name:programme3.c
  Author:祁麟
  Copyright:BJTU | school of software
  Date:2020/10/27 
  Description:Write a game of Simple Simon in C.
*/

#include     /* For input and output   */
#include     /* For toupper() function */
#include    /* For rand() and srand() */
#include      /* For time() , clock()  and  CLOCKS_PER_SEC*/
#include 

int main(){
     

	//初始化程序
	char another_game = 'N';
	bool correct = true;
	int counter = 0;
	int sequence_length = 0;
	time_t seed = 0;
	time_t now = 0;
	int number = 0;
	int time_taken = 0;
	int c,i;
	
	do{
     //初始化游戏循环
		printf("Simon游戏开始!\n");
		counter = 0;
		sequence_length = 2;
		time_taken = clock();
		correct = true;
		
		while(correct){
     
			sequence_length += (counter++%3 ==0);
			
			//生成随机数
			seed = time(NULL);
			now = clock();
			srand((unsigned int)seed);
			for( i = 1; i <= sequence_length; i++) {
     
				printf("%d ",rand()%10);
			}

			//等待一秒
			for(;clock() - now < CLOCKS_PER_SEC;)
			
			//删除数字序列
			printf("\r");
			for( i = 1; i <= sequence_length; i++){
     
				printf("  ");
			} 
			
			if(counter == 1){
     
				printf("\n输入序列,用空格间隔。\n");
			}	else{
     
				printf("\r");
			}
			
			//读取用户输入
			//判断输入是否正确
			srand((unsigned int)seed);
			for( i = 1; i<= sequence_length; i++){
     
				scanf("%d",&number);
				if(number != rand()%10){
     
					correct = false;
					break;
				}
			}
			printf("%s\n",correct?"Correct~":"Wrong!"); 
		
		} 
		
		//结算分数
		time_taken = (clock() - time_taken)/CLOCKS_PER_SEC;
		printf("您的得分为:%d",--counter*counter*100/time_taken);
		
		while ((c = getchar()) != '\n' );
		//是否开始新游戏?
		printf("\n是否开始新游戏?(y/n)\n");
		scanf("%c",&another_game); 
		
	}
	 while(toupper(another_game) == 'Y');
	 
	 //结束
	 return 0; 	
} 

运行截图:
C语言入门 -- Simple Simon 简单的西蒙游戏(2021/1/7)_第2张图片

你可能感兴趣的:(C语言入门,c语言,程序设计)