| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5936 人关注过本帖, 1 人收藏
标题:猜数字游戏
只看楼主 加入收藏
取消关键字高亮
虾饺
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2017-2-27
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:21 
猜数字游戏
猜数字游戏
一、问题描述:
该游戏可以由程序随机产生或由用户输入四个0到9之间的数字,且不重复。玩游戏者通过游戏提示输入八次来匹配上面所输入的数字。A表示位置正确且数字正确,B表示数字正确而位置不正确。
二、功能要求:
1、本游戏显示这样的菜单:
(1)随机产生数据
(2)用户输入数据
(3)退出游戏
2、游戏成功与否都能返回主菜单
三、算法提示:
1、数据结构:数组
2、用简单的程序设计方法
四、测试数据:
测试数据:   3792
第一次输入: 1234
0A2B
第二次输入:  5678
                     0A1B
第三次输入:  0867
                     0A1B
第四次输入:   9786
                    1A1B
第五次输入:   1794
                    2A0B
第六次输入:   2793
                    2A2B
第七次输入:   3792
                    4A0B
游戏成功!!!
五、其它:
对该系统有兴趣的同学可以在实现系统基本功能后,完善系统的其它功能,如:破记录功能,若你所匹配的次数小于纪录保持者,则为破纪录。
求c语言编程
搜索更多相关主题的帖子: 游戏 程序设计 用户 
2017-03-02 14:15
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:5 
回复 楼主 虾饺
0a2b里面的0 2 是神马东东
还有1234里面的2位置错误 数字正确 怎么会是0a2b

DO IT YOURSELF !
2017-03-02 14:22
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
明白了

DO IT YOURSELF !
2017-03-02 14:32
mnmn4429
Rank: 4
等 级:业余侠客
帖 子:64
专家分:245
注 册:2017-2-21
收藏
得分:5 
经典的游戏
2017-03-02 14:58
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

//只接受源数据为4位的整型
void split(int s,int  buf[4])
{
    buf[3]=s % 10 ;
    s/=10;
    buf[2]=s % 10 ;
    s/=10;
    buf[1]=s % 10 ;
    s/=10;
    buf[0]=s;
}

int main()
{
    srand((unsigned int)time(0));
    int s=0;  //s 随机获取的谜底数字
    int buf[4]={0};    //存放谜底的数组
    int ipbuf[4]={0};  //存放用户猜测的数组
    while(s<1000)
    {
        s=rand()%10000;
        split(s,buf); 
        if(buf[0]==buf[1] || buf[0]==buf[2] || buf[0]==buf[3] || buf[1]==buf[2] || buf[1]==buf[3] || buf[2]==buf[3])
           s=0;
    }
    int j=0;  //猜测的次数
    int t;  //用户猜测的数据
    int m=0;  //记录数字正确且位置正确
    int n=0;  //记录数字正确且位置不正确
    while(j<8)
    {
        printf("\n请输入你猜测的数字 当前第%2d次猜测:  \n",j+1);
        scanf("%d",&t);
        split(t,ipbuf);
        if(buf[0]==ipbuf[0]) m++; else if(buf[0]==ipbuf[1] || buf[0]==ipbuf[2] || buf[0]==ipbuf[3]) n++;
        if(buf[1]==ipbuf[1]) m++; else if(buf[1]==ipbuf[0] || buf[1]==ipbuf[2] || buf[1]==ipbuf[3]) n++;
        if(buf[2]==ipbuf[2]) m++; else if(buf[2]==ipbuf[1] || buf[2]==ipbuf[0] || buf[2]==ipbuf[3]) n++;
        if(buf[3]==ipbuf[3]) m++; else if(buf[3]==ipbuf[1] || buf[3]==ipbuf[2] || buf[3]==ipbuf[0]) n++;
        printf("\n%dA%dB\n",m,n);
        if(m==4 && n==0)
        {
            printf("猜测正确\n");
            break;
        }
        j++;
        m=0;
        n=0;
        fflush(stdin);
    }
    if(j==8) printf("真笨啊 8次都没猜出来  告诉你谜底吧 %d\n",s);
    return 0;
}


[此贴子已经被作者于2017-3-2 15:44编辑过]


DO IT YOURSELF !
2017-03-02 15:30
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
太难了 8次根本就猜不出来啊

[此贴子已经被作者于2017-3-2 15:45编辑过]


DO IT YOURSELF !
2017-03-02 15:40
yanzy
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:104
专家分:372
注 册:2017-2-7
收藏
得分:5 
程序代码:
#include <stdio.h>
#include <time.h>
#include <stdbool.h>
#include <ctype.h>

int x[4];

void random(void)
{
    int n;
    while (true)
    {
        if ((n = rand()) > 1000 && n < 9999)
        {
            for (int i = 0; i < 4; i++)
            {
                x[i] = n % 10;
                n /= 10;
            }
            printf("已生成4位随机数\n");
            return;
        }
    }
}
void f(void)
{
    printf("请输出4个0-9之间的数字\n");
    for (int i = 0; i < 4; )
        if (isdigit(x[i] = getchar()))
        {
            x[i] -= 48;
            i++;
        }
    return;
}
void caishu(void)
{
    int n, y[4];
    int a = 0, b = 0;
    for (int i = 0; i < 7; i++)
    {
        printf("第 %d 次猜数(请输入4个0-9之间的数字):", i + 1);
        for (int i = 0; i < 4; )
            if (isdigit(y[i] = getchar()))
            {
                y[i] -= 48;
                i++;
            }
        for (int j = 0; j < 4; j++)
        {
            for (int k = 0; k < 4; k++)
            {
                if (y[j] == x[k] && j == k)
                    a++;
                if (y[j] == x[k] && j != k)
                    b++;
            }
            if (a == 4)
            {
                printf("游戏成功!!!\n");
                while (getchar() != '\n')
                    ;
                return;
            }
        }
        printf("%dA%dB\n", a, b);
        a = 0;
        b = 0;
    }
    printf("尝试8次均失败,游戏结束.正确答案是%d%d%d%d\n",x[0],x[1],x[2],x[3]);
    while (getchar() != '\n')
        ;
    return;
}
int main(void)
{
    char code;
    srand((unsigned)time(NULL));
    for (;;)
    {
        printf("请选择:1、随机产生4个数;2、用户输入4个数;3、退出游戏\n");
        code = getchar();
        while (getchar() != '\n')
            ;
        switch (code)
        {
        case '1':random(); caishu(); break;
        case '2':f(); caishu(); break;
        case '3':exit(0); break;
        default:printf("输入错误,请重新输入:\n"); break;
        }
    }
    return 0;
}


写的不太好,欢迎大家改进
2017-03-02 17:16
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:5 
此贴忽略~

[此贴子已经被作者于2017-3-2 17:36编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-03-02 17:24
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 7楼 yanzy
8次之内肯定可以成功的~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-03-02 17:25
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用九转星河在2017-3-2 17:25:08的发言:

8次之内肯定可以成功的~
10中选4  在不告诉哪个数字是正确的 只告诉几个位置对的 几个数对的  8次 80次都未必能猜出来

DO IT YOURSELF !
2017-03-02 17:29
快速回复:猜数字游戏
数据加载中...
 
   



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

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