c语言如何编写一个简单的程序代码,C语言编写一个简单的Simon游戏【案例学习】...

1.1 问题

这是一个记忆测试游戏。计算机会在屏幕上将一串数字显示很短的时间。玩家必须在数字消失之前记住他们,然后输入这串数字。每次过关后,计算机会显示更长的一串数字,让玩家继续玩下去。玩家应尽可能使这个过程重复更多的次数;

1.2 分析

程序的逻辑很简单。程序必须产生一连串0-9的整数使它们在屏幕屏幕上显示1秒钟之后删除它们。接着玩家试着输入这串数字。如果玩家能正确输入这串数字,程序就显示一个更长的数字串,直到玩家输入错误为止;根据成功的次数和所花的时间来计分,然后程序会询问玩家,是否继续玩。

下图中可说明此程序的逻辑:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

每个方块表示程序中的一个动作,菱形表示判断。显然,玩家通常至少玩一次游戏,所以循环的检查就放在循环结束的地方,三次成功地输入数字串后,下一个数字串的长度就会增加。输入不正确的数字串,会结束游戏。下面将使用这个流程图作为编写程序的基础。

1.3 解决方案

以下将介绍解决方案的步骤,程序中介绍了管理键盘输入的其他一些方面,还会解释如何在程序中控制操作的时间。

1. 步骤1

首先确定代码的基本功能块,包括游戏的主循环。循环的检查应放在循环结束的地方,所以do-while循环在这里是最合适不过了。最初的程序代码如下:

//记数小游戏

#include //For input and output

#include //For toupper() function

int main (void)

{

char another_game='Y';//记录是否要开始下一个游戏;

const unsigned int DELAY=1;//固定的整数值,指定显示的秒数;

/*更多的程序变量声明*/

//描述这个游戏如何玩;

printf("\nTo play simple game, (玩一个简单的游戏) ");

printf("watch the screen for a sequence of digits.(看屏幕上的数据序列.)");

printf("\nwatch carefully, as the digits are only displayed for %u second%s,(仔细看,这些数据序列只会显示1秒钟)",DELAY,DELAY>1 ? "s!":"!");

printf("\nThe conputer will remove them,and then prompt you(计算机将移除它他,并提示你) ");

printf("\nto enter the same sequence.(输入相同的数据序列。)");

printf("\nwhen you do,you must put spaces between the digits.(当你在输入时,你必须在数据间输入空格。)\n");

printf("\nGood Luck!\nPress Enter to play.(祝你好运!输入回车开始游戏。)\n");

scanf("%c,&another_game");

do

{

/*初始化一个游戏*/

/*此处使用内循环来玩游戏*/

/*游戏结束时,输出分数*/

//检查是否需要开始一个新游戏

printf("\nDo you want to play again (y/n)?(你希望再玩一次吗(y/n)?)");

scanf("%c,&another_game");//输入y(Y)或者n(N)告诉计算机是否想再玩一次;

} while(toupper(another_game)=='Y');//判断用户输入的值;

return 0;

}

在当前游戏结束时,在main()开始定义的another_game变量确定是否要开始下一个游戏,在游戏的主循环末尾,把键盘上的一个字符读入这个变量,在循环条件中检查其值。如果输入了Y或者y,循环就继续,开始下一个游戏,否则,游戏就结束。把another_game转换为大写形式,就可以避免检查y和Y。

DELAY变量是一个固定整数值,指定数字串在消失之前的显示秒数。它用于控制程序在删除数字串之前的等待时间。这里它是1,但可以增加它,使游戏更容易玩。

在以下语句中,当DELAY多于1秒时,这个语句也使用条件运算符把“s!”添加到输出上,来替代“!”。

printf("\nwatch carefully, as the digits are only displayed for %u second%s",DELAY,DELAY>1 ? "s!":"!");

2. 步骤2

下一步,添加另一个变量correct的声音,程序需要记录玩家输入的数字项是否正确。这个变量用于控制玩一次游戏的循环次数。

//记数小游戏

#include //For input and output

#include //For toupper() function

#include //For bool,true,false

int main (void)

{

char another_game='Y';//记录是否要开始下一个游戏;

const unsigned int DELAY=1;//固定的整数值,指定显示的秒数;

bool correct=true;//若为正确的数据序列correct的值为true,否则为false;

/*更多的程序变量声明*/

//描述这个游戏如何玩;

printf("\nTo play simple game, (玩一个简单的游戏) ");

printf("watch the screen for a sequence of digits.(看屏幕上的数据序列.)");

printf("\nwatch carefully, as the digits are only displayed for %u second%s,(仔细看,这些数据序列只会显示1秒钟)",DELAY,DELAY>1 ? "s!":"!");

printf("\nThe conputer will remove them,and then prompt you(计算机将移除它他,并提示你) ");

printf("\nto enter the same sequence.(输入相同的数据序列。)");

printf("\nwhen you do,you must put spaces between the digits.(当你在输入时,你必须在数据间输入空格。)\n");

printf("\nGood Luck!\nPress Enter to play.(祝你好运!输入回车开始游戏。)\n");

scanf("%c,&another_game");

do

{

correct=true;//表示输入了正确的数据序列;

//只要输入的数据序列正确,以下内循环就继续运行;

while(correct)

{

/*通过这里的语句来循环执行游戏*/

}

/*游戏结束时,输出分数*/

//检查是否需要开始一个新游戏

printf("\nDo you want to play again (y/n)?(你希望再玩一次吗(y/n)?)");

scanf("%c,&another_game");//输入y(Y)或者n(N)告诉计算机是否想再玩一次;

} while(toupper(another_game)=='Y');//判断用户输入的值;

return 0;

}

这里使用了_bool变量correct,但因为给头文件添加了#include指令,所以可以将bool用作类型外。头文件还定义了符号true和false,它们分别对应1和0.只要correct的值是true,while循环就继续。玩家输入不正确的数字串时,就把correct设置为false。

注意:代码可以进行编译了,而且应该编译它,但还不应该执行它,如果执行它,程序就不会停止,因为它包含一个无限循环。内部的while循环是个无限循环。这个循环的条件永远是true,因为该循环没有对correct进行任何改变。稍后将在此添加一些代码。

在开发程序时,应确保每步编写的代码都能编译,如果试图一口气编写出所有的程序代码,就可能出现上百个错误需要修正,而且更正了一个错误后,又出现其他更多的错误,这很令人气馁,每添加一些代码就检查程序,错误就比较容易处理,开发也比较快!

3. 步骤3

//未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值