黑马程序员技术交流社区

标题: 一个有着bug的游戏 [打印本页]

作者: 卖毛玉的小贩    时间: 2015-7-17 21:21
标题: 一个有着bug的游戏
今天去问老师的,结果因为让次调函数当主调函数,所以有一个小bug,发来特地来警告大伙
#include <stdio.h>
#include <stdlib.h>
int  suiJi(int a);
int  suiJi1 (int a);
int  suiJi2 (int a);


int  shuRu();
int  shuRu1();
int  shuRu2();


int  biJiao(int a,int b, int c,int d);
int  biJiao1(int a,int b, int c);
int  biJiao2(int a,int b);

int  main(int argc, const char * argv[])
{
      suiJi(2);
}
/*
黑白配游戏思路:
先定义三个随机数。
定义玩家输入数。
对四个数进行判定,如果两两相同,就重新来,三一就判定一输,并且剩下三个继续游戏,直到剩下两个。
两个进行剪刀石头布游戏。
玩家在此输一次都将被淘汰,电脑不在分出胜负。
*/
//这是四个人的游戏设定与比较:
   int  suiJi(int a)//随机三个电脑数,并且从键盘上获取数。
{
     int i,n,k,f;
     i = n = k =0;
     i = arc4random_uniform(a);
     n = arc4random_uniform(a);
     k = arc4random_uniform(a);
     f = shuRu();
     biJiao(i, n, k, f);//调用函数,并淘汰一人。
     return 0;
}
    int shuRu()//在键盘上输入参与游戏的数
{
        int a=0;
        printf("0为黑,1为白,请输入:\n");
    for (; ; ) {
         scanf("%d",&a);
        if (a==0||a==1) {
            return a;
        }else
            printf("你看不懂字幕吗?\n");
    }
      
        return 0;
}


    int biJiao(int a,int b, int c,int d)//四个人进行比较
{
     if (!((a==b&&b==c)&&(c==d&&b==d)&&(a==c&&a==d))&&((a==c&&c==d)||(b==c&&c==d)||(a==b&&b==d)))
         //玩家在第一局胜利,淘汰一个电脑
    {
   
            
        
        printf("恭喜你进入第二回合\n");
        printf("小王=%d\t,小明=%d\t,小红=%d\t自己=%d\n",a,b,c,d);
        if ((a!=b)&&(a!=c)&&(a!=d)) {
            printf("未来隔壁小王已被淘汰了\n");
        }else if ((b!=c)&&(b!=d)){
            printf("数学课本调皮小明以出局\n");
        }else{
            printf("唯一妹子小红已惨遭淘汰\n");
        }
   
        //这里开始重新调用,进入三人游戏设定
        suiJi1(2);
    }
    else if (((a==b)&&(c==d)&&(b==c))||(((a==b||c==d)||((a==c||b==d)||(a==d||b==c)))))//平局,继续,谁都不淘汰。
    {
        printf("平局了,请重新输入:\n");
        printf("小王=%d\t,小明=%d\t,小红=%d\t自己=%d\n",a,b,c,d);
        suiJi(2);
    }else if(a==b&&b==c){
        printf("抱歉你淘汰在第一关了\n");
        return 0 ;
    }
        
    return  suiJi1(2);
}

//三人游戏设定:


int  suiJi1(int a)//随机两个电脑数,并且从键盘上获取数。
{
    int i,n,k;
    k = -1;
    i = n  =0;
    i = arc4random_uniform(a);
    n = arc4random_uniform(a);
    k = shuRu1();
    biJiao1(i, n, k);//调用函数,并淘汰一人。
    return 0;
}
int shuRu1()//在键盘上输入参与游戏的数
{
    int a=0;
    printf("\n依旧是0为黑,1为白\n");
    for (; ; ) {
        scanf("%d",&a);
        if (a==0||a==1) {
            return a;
        }else
            printf("对于你这种到了第二局依旧傻傻分不清的家伙我没话说\n");
    }
   
    return 0;
}
int biJiao1(int a,int b, int c)//三个人进行比较
{
    if (((a==c)||(b==c))&&(a!=b)) {
        printf("恭喜你又赢了,即将进入最后一回合\n");
        printf("蒙面的小X=%d\t,蒙面的小小X=%d\t自己=%d\n",a,b,c);
        suiJi2(3);
    }
    else if (a==b&&b==c){
        printf("平局,请重新输入:\n");
        printf("蒙面的小X=%d\t,蒙面的小小X=%d\t自己=%d\n",a,b,c);
        shuRu1();
        
    }else{
        printf("可惜,你倒在了这关\n");
   
    }
    return 0;
}

//现在开始进行一对一的剪刀石头布游戏
//两个人的设定:
int suiJi2 (int a)//开始随机并提示用户输入
{
    int j = -1;
    int n = -1;
    j=arc4random_uniform(3);
    printf("0是石头,1是布,2是剪刀\n");
    n= shuRu2();
    biJiao2(j, n);
    return 0;
}
int shuRu2()
{
    printf("已经是最后一局了哦,加把劲啊!\n");
    for (int b=-1;  ; ) {
        scanf("%d",&b);
        if (b==0||b==1||b==2) {//对用户输入进行判定
            return b;
        }else   
            printf("你傻不傻啊,这都最后一把了啊!\n");
    }
    return  0;
}
int biJiao2 (int a,int b)//对两个数在一次进行判断
{
   
    if ((a==0&&b==1)||(a==1&&b==2)||(a==2&&b==0)) {
        printf("哈哈哈哈,没想到你居然一步步的走到最后,并且赢了啊!\n");
    }else if ((a==0&&b==0)||(a==1&&b==1)||(a==2&&b==2)){
        printf("平局,请重新输入,加油,就差一点了!\n");
        suiJi2(3);
    }
    else
    {
        printf("真是可惜,倒在了最后一关\n");
    }
    return 0;
}

作者: 卖毛玉的小贩    时间: 2015-7-17 21:29
老师说不能这么麻烦的,因为returm 很容易出现某个bug,因为我这在一个函数内调用另一个,所以推荐大伙老老实实的在主函数慢慢来吧···




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2