C语言猜数字游戏重写版

文章作者 100test 发表时间 2008:01:25 14:29:52
来源 100Test.Com百考试题网


其实这个程序算法上很简单,所以写得很长是想实现一个好的人机交互,这可以在creatDialog()的众多语句中看出来。此外改动了以前的随机数生成函数,并对原数和输入数得比较函数的格式完全重写(其实算法大致一样,执行效率不一定能提高,不过代码长度大大减少)。
不足之处还望大家不吝赐教。

#include
#include
#include

struct right_place {int right. int place.}.

int main (void)
{
int creatDialog (int x, int *p ).

void rndProduce (int numDft[]).
struct right_place numCompare (int numDft[], int numIn[]).

int dialog, quitOrContinue, allQuit.
int numDft[4], numIn[4], result[2].
struct right_place compareBack.

creatDialog (1, NULL).

allQuit = 1.
while (allQuit == 1)
{
creatDialog (7, NULL).
rndProduce (numDft).
quitOrContinue = 1.
while (quitOrContinue == 1)
{
dialog = 2.
while (dialog == 2)
{
creatDialog (2, numIn).
dialog = creatDialog (3, numIn).
}
compareBack = numCompare (numDft, numIn).
result[0] = compareBack.right .
result[1] = compareBack.place .
quitOrContinue = creatDialog (4, result).
}
if (quitOrContinue == 2)
allQuit = creatDialog (5, numDft).
if (quitOrContinue == 3)
allQuit = 1.
if (quitOrContinue == 4)
allQuit = 2.
}

if (allQuit == 2)
creatDialog (6, NULL).

getchar ().
return 0.
}

int creatDialog (int x, int *p)
{
int back.
int i.
switch (x)
{
case 0:
printf ("************************************************************************\n").
break.
case 1:
creatDialog (0, NULL).
printf ("欢迎玩猜数字游戏!\n版本2.0\n作者:andyzhshg\n制作日期:2007.9.1\n").
creatDialog (0, NULL).
printf ("在本游戏中,你需要输入四个数字,\n然后电脑会给出你猜测的正确情况。").
printf ("电脑会用它之前生成的\n四位数与之你的输入比较,然后告诉你").
printf ("你猜对了几个数字,包\n括数值和顺序的信息.\n").
break.
case 2:
creatDialog (0, NULL).
printf ("请输入你猜测的四位数字(用空格、回车、或Tab隔开):\n").
for (i = 0. i < 4. i , p )
scanf ("%i", p).
break.
case 3:
creatDialog (0, NULL).
printf ("你输入的数字是:%i %i %i %i ,确认请输入“1”,重新输入按“2”。\n", *p, *(p 1), *(p 2), *(p 3)).
scanf ("%i", &.back).
return back.
break.
case 4:
creatDialog (0, NULL).
printf ("你输入的数字中:\n数值和位置都正确的有%i个,\n数值正确但位置不正确的有%i个.\n", *p, *(p 1)).
if ((*p) == 4)
{
printf ("恭喜你,答对了!\n").
printf ("继续游戏吗?继续请输入“1”,退出游戏请输入“2”。\n").
scanf ("%i", &.back).
if (back == 1)
return 3.
if (back == 2)
return 4.
}
else
{
printf ("继续吗?继续请输入“1”,显示正确答案请输入“2”。\n").
scanf ("%i", &.back).
return back.
}
break.
case 5:
creatDialog (0, NULL).
printf ("正确答案是:%i %i %i %i,再接再厉啊!\n", *p, *(p 1), *(p 2), *(p 3)).
printf ("继续游戏吗?继续请输入“1”,退出游戏请输入“2”。\n").
scanf ("%i", &.back).
return back.
break.
case 6:
creatDialog (0, NULL).
printf ("感谢你玩本游戏,再见!\n按任意键退出\n").
break.
case 7:
creatDialog (0, NULL).
printf ("新的游戏开始了!GOOD LUCK!\n").
break.
default:
break.
}
}

void rndProduce (int numDft[])
{
int i.
srand( (unsigned)time( NULL ) ) .
for ( i = 0. i < 4. i )
numDft[i] = rand () % 10.
//printf ("%i %i %i %i\n", numDft[0], numDft[1], numDft[2], numDft[3]).
}

struct right_place numCompare (int numDft[], int numIn[])
{
int i, j.
struct {int Dft. int In.} flag[4] = { 1, 1, 1 ,1 ,1, 1, 1, 1 }.
struct right_place result = { 0, 0 }.
for (i = 0. i < 4. i )
if (numDft[i] == numIn[i])
{
(result.right) .
flag[i].Dft = 0.
flag[i].In = 0.
}
for (i = 0. i < 4. i )
for (j = 0. j < 4. j )
if (flag[i].Dft &.&. flag[j].In &.&. numDft[i] == numIn[j])
{
(result.place) .
flag[i].Dft = 0.
flag[j].In = 0.
}
return result.
}



相关文章


学习关于main( )函数
C语言开发平台的搭建
C语言猜数字游戏重写版
哲学家就餐问题--C原代码
利用钩子函数来捕捉键盘响应的windows应用程序
一个计算四则表达式的模板
C#中使用MYSQL数据库
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛