| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1769 人关注过本帖
标题:急!高手进!经典模型:五位数猜谜游戏!
只看楼主 加入收藏
andongtianzi
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2010-6-29
结帖率:40%
收藏
已结贴  问题点数:20 回复次数:11 
急!高手进!经典模型:五位数猜谜游戏!
请给个独一无二的源代码(原理尽量简单点),不要copy网上的!小弟谢过!!急求!

使用c语言实现五位数字猜谜游戏,读入将用户输入的数字后与随机抽取的数字比对,并给出判定结果的表示。
【基本要求】
(1).    产生五位随机数。
(2).    电脑会将用户提交的数与它自动产生的数进行比较,结果显示成"*Y*N"。Y代表位置正确数字也正确,N代表数字正确但位置不正确,比如:"3Y1N"表示有3个数字的位置正确且数值也正确,除此以外,还猜对了1个数字,但位置不对。共有9次机会,在9次内,如果结果为“5Y0N”,游戏成功。如果9次里都没有猜对游戏失败。
(3).    设计排名榜,保存成绩最高的前10条记录。
搜索更多相关主题的帖子: 位数 模型 经典 游戏 
2010-07-03 13:32
andongtianzi
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2010-6-29
收藏
得分:0 
最好搞成人机界面,这样美观!老师也这么要求!
2010-07-03 14:12
yuls
Rank: 2
等 级:论坛游民
帖 子:23
专家分:60
注 册:2010-5-28
收藏
得分:5 
程序代码:
/*使用c语言实现五位数字猜谜游戏,读入将用户输入的数字后与随机抽取的数字比对,并给出判定结果的表示。
【基本要求】
(1).    产生五位随机数。
(2).    电脑会将用户提交的数与它自动产生的数进行比较,结果显示成"*Y*N"。Y代表位置正确数字也正确,N代表数字正确但位置不正确,比如:"3Y1N"表示有3个数字的位置正确且数值也正确,除此以外,还猜对了1个数字,但位置不对。共有9次机会,在9次内,如果结果为“5Y0N”,游戏成功。如果9次里都没有猜对游戏失败。
(3).    设计排名榜,保存成绩最高的前10条记录。
*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
//
struct P
{
    int times;
    char Name[20];
};
//
int suiji()
{
    int i=0;
    int a;
    srand(time(0));
    while(i!=1)
    {
        a = rand()%100000;
            if(a>=10000)
                i++;
    }
    return a;
}
//
void flgw(int a,int Array[5])
{
    Array[0]=a/10000;
    Array[1]=(a-Array[0]*10000)/1000;
    Array[2]=(a-Array[0]*10000-Array[1]*1000)/100;
    Array[3]=(a-Array[0]*10000-Array[1]*1000-Array[2]*100)/10;
    Array[4]=(a-Array[0]*10000-Array[1]*1000-Array[2]*100-Array[3]*10);
}

//
void main()
{  
    int c=1;
    //int k=0;//player de number
    int M=0;//mei cheng gong yi ge ren ,++
    char membername[20];

    P player[100]={};//applay 100 space for user 

    while(c==1)
    {
        int n = 0;//次数
        int a = suiji();//chan sheng sui ji shu
        printf("(你可以删除该句)电脑产生的随机数为 %d  \n",a);//you can delete this sentence if you are cleaver enough
        printf(" 随机数已产生,可以开始游戏了(你共有9次机会)!\n\n");
        printf("Input User Name :");//input user Name eg: yuls
        scanf("%s",membername);

        int Array1[5]={};
        int Array2[5]={};

        flgw(a,Array1);//分离 a 的各位存在 Array1 中
       
        while(n<9)
        {
            printf("time %dth:\t",n+1);
            n++;
            int b;// cai
            int Y = 0,N = 0;
            int j ;
           
            scanf("%d",&b);// input the number you have guessed
            flgw(b,Array2);//fenli b

            int Array11[5]={-1,-1,-1,-1,-1};
            int Array21[5]={-1,-1,-1,-1,-1};// initialize ,this 2 arrays are used to save the number which
                                             //exist but not at the right position
       
            for(j=0;j<5;j++)
            {
            //printf("%c\n",string[j]);
                if(Array1[j]==Array2[j])
                {
                    Y++;
                    if(Y==5)
                    {
                        player[M].times=n;
                        strcpy(player[M].Name,membername);
                        M++;
                        n=10;
                        printf("\tcongratulations!\n\n");
                    }   
                }
                else
                {
                    Array11[j] = Array1[j];
                    Array21[j] = Array2[j];
                }
            }
        //
            for(int i=0;i<5;i++)
            {
                if(Array21[i]!=-1 )
                {
                    for(int j=0;j<5;j++)
                    {   
                        int flag = 0;
                        if(flag==0&&Array21[i]==Array11[j])
                        {
                            N++;
                            Array11[j]=-1;//
                            flag = 1;  //
                            //printf("(这是检测语句)已发现 %d 个数存在但位置错误\n",N);//you can delete this sentence
                        }
                        continue;
                    }
                }
            }
            printf(" %dY%dN  \n",Y,N);
        }
        if(n==9)
            printf("You are failed ,but you should not give up\n");
       
       
            printf("Input 1/0 to continue/leave\t");// if you choose 0 ,it will display the rank
            scanf("%d",&c);
       
    printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
    }
   
    //sort();
   
    int temp;
    char tem[20];
    if(M==0)
        printf("None got the right number\n");
    else if(M==1)
        printf("%10s  has guessed %d times ,and ranked %d\n",player[0].Name,player[0].times,1);
    else if(M>=2)
    {
        for(int i=1;i<M;i++ )
            for(int j=i;j>0;j--)
                if(player[j].times<player[j-1].times)
                {
                    temp = player[j].times;
                    player[j].times = player[j-1].times;
                    player[j-1].times = temp;

                    strcpy(tem, player[j].Name);
                    strcpy(player[j].Name, player[j-1].Name);
                    strcpy(player[j-1].Name, tem);
                }
                else break;
        printf("\nthe rank is :\n");
        for(int i=0;i<M;i++)
            printf("%10s  has guessed %d times ,ranking  %d\n",player[i].Name,player[i].times,i+1);
    }   
}
注:再次修改

[ 本帖最后由 yuls 于 2010-7-4 15:16 编辑 ]
2010-07-04 13:54
德意志战车
Rank: 1
等 级:新手上路
帖 子:1
专家分:5
注 册:2010-7-4
收藏
得分:5 
还要独一无二,自己的作业不会自己做啊,估计你就是通达的,你哪个班的,03?04?25?26?27?回头给你个及格就不错了!
首先你那学习态度就不端正,要好好反思一下。
在这给你说下简单的思路,先用srand()函数初始化随机数生成器的种子,以便每次运行程序可以得到不同的随机数序列。下面排序应该不难的。第三问排行榜你不会就放弃。
别让我再在这看见你andongtianzi在这发求答案帖。
2010-07-04 13:57
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:5 
修改了下2楼的代码,能运行了
程序代码:
/*使用c语言实现五位数字猜谜游戏,读入将用户输入的数字后与随机抽取的数字比对,并给出判定结果的表示。
【基本要求】
(1).    产生五位随机数。
(2).    电脑会将用户提交的数与它自动产生的数进行比较,结果显示成"*Y*N"。Y代表位置正确数字也正确,N代表数字正确但位置不正确,比如:"3Y1N"表示有3个数字的位置正确且数值也正确,除此以外,还猜对了1个数字,但位置不对。共有9次机会,在9次内,如果结果为“5Y0N”,游戏成功。如果9次里都没有猜对游戏失败。
(3).    设计排名榜,保存成绩最高的前10条记录。
*/
#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
//
struct P
{
    int times;
    char Name[20];
};
//
int suiji()
{
    int i=0;
    int a;
    srand(time(0));
    while(i!=1)
    {
        a = rand()%100000;
            if(a>=10000)
                i++;
    }
    return a;
}
//
void flgw(int a,int Array[5])
{
    Array[0]=a/10000;
    Array[1]=(a-Array[0]*10000)/1000;
    Array[2]=(a-Array[0]*10000-Array[1]*1000)/100;
    Array[3]=(a-Array[0]*10000-Array[1]*1000-Array[2]*100)/10;
    Array[4]=(a-Array[0]*10000-Array[1]*1000-Array[2]*100-Array[3]*10);
}

//
void main()
{ 
    int c=1;
    //int k=0;//player de number
    int M=0;//mei cheng gong yi ge ren ,++
    char membername[20];

    P player[100];//applay 100 space for user
    ZeroMemory(player,sizeof(P)*100);

    while(c==1)
    {
        int n = 0;//次数
        int a = suiji();//chan sheng sui ji shu
        printf("(你可以删除该句)电脑产生的随机数为 %d  \n",a);//you can delete this sentence if you are cleaver enough
        printf(" 随机数已产生,可以开始游戏了(你共有9次机会)!\n\n");
        printf("Input User Name :");//input user Name eg: yuls
        scanf("%s",membername);

        int Array1[5];
        int Array2[5];
        ZeroMemory(Array1,sizeof(int)*5);
        ZeroMemory(Array2,sizeof(int)*5);

        flgw(a,Array1);//分离 a 的各位存在 Array1 中
      
        while(n<9)
        {
            printf("time %dth:\t",n+1);
            n++;
            int b;// cai
            int Y = 0,N = 0;
            int j ;
          
            scanf("%d",&b);// input the number you have guessed
            flgw(b,Array2);//fenli b

            int Array11[5]={-1,-1,-1,-1,-1};
            int Array21[5]={-1,-1,-1,-1,-1};// initialize ,this 2 arrays are used to save the number which
                                             //exist but not at the right position
      
            for(j=0;j<5;j++)
            {
            //printf("%c\n",string[j]);
                if(Array1[j]==Array2[j])
                {
                    Y++;
                    if(Y==5)
                    {
                        player[M].times=n;
                        strcpy(player[M].Name,membername);
                        M++;
                        n=9;
                        printf("\tcongratulations!\n\n");
                    }  
                }
                else
                {
                    Array11[j] = Array1[j];
                    Array21[j] = Array2[j];
                }
            }
        //
            for(int i=0;i<5;i++)
            {
                if(Array21[i]!=-1 )
                {
                    for(int j=0;j<5;j++)
                    {  
                        int flag = 0;
                        if(flag==0&&Array21[i]==Array11[j])
                        {
                            N++;
                            Array11[j]=-1;//
                            flag = 1;  //
                            //printf("(这是检测语句)已发现 %d 个数存在但位置错误\n",N);//you can delete this sentence
                        }
                        continue;
                    }
                }
            }
            printf(" %dY%dN  \n",Y,N);
        }
        printf("Input 1/0 to continue/leave\t");
    scanf("%d",&c);
    printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
    }
  
    //sort();
  
    int temp;
    char tem[20];
    if(M<=1)
        printf("%10s  has guess %d times ,and ranked %d\n",player[0].Name,player[0].times,1);
    else
    {
        for(int i=1;i<M;i++ )
            for(int j=i;j>0;j--)
                if(player[j].times<player[j-1].times)
                {
                    temp = player[j].times;
                    player[j].times = player[j-1].times;
                    player[j-1].times = temp;

                    strcpy(tem, player[j].Name);
                    strcpy(player[j].Name, player[j-1].Name);
                    strcpy(player[j-1].Name, tem);
                }
                else break;
        printf("\nthe rank is :\n");
        for(i=0;i<M;i++)
            printf("%10s  has guessed %d times ,ranking  %d\n",player[i].Name,player[i].times,i+1);
    }  
}


[ 本帖最后由 waterstar 于 2010-7-4 14:37 编辑 ]

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2010-07-04 14:35
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:5 
图片附件: 游客没有浏览图片的权限,请 登录注册


难得遇到一个编译没问题的代码··

结果遇到这样的情况

[ 本帖最后由 死了都要C 于 2010-7-4 14:42 编辑 ]

女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2010-07-04 14:40
yuls
Rank: 2
等 级:论坛游民
帖 子:23
专家分:60
注 册:2010-5-28
收藏
得分:0 
回复 6楼 死了都要C
三楼的帖已修改,在VS2008下无误,可能与编译环境有关。。。

你把 main()函数前面的 void 改为  int ,再在 main()末尾加上 return 0; 试试

[ 本帖最后由 yuls 于 2010-7-4 14:47 编辑 ]
2010-07-04 14:44
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2010-07-04 14:49
yuls
Rank: 2
等 级:论坛游民
帖 子:23
专家分:60
注 册:2010-5-28
收藏
得分:0 
回复 8楼 死了都要C
对于输入错误(eg:非数字)的情况你可以自己加上判断语句啊,你玩第二次的时候就是因为 该输入数字,而你输入的是 shuai……




不好意思,有点给改错了


[ 本帖最后由 yuls 于 2010-7-4 15:03 编辑 ]
2010-07-04 14:58
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
回复 9楼 yuls
嘿嘿。。我故意的啦````

想看看处理异常情况的情况

女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2010-07-04 15:02
快速回复:急!高手进!经典模型:五位数猜谜游戏!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022720 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved