C中farkle游戏的计算点

时间:2016-04-13 20:08:42

标签: c

这是程序的一部分(我没有添加所有编写的函数代码)。 " roll_a_dice()"为每个骰子创建一个数字。和 根据规则1,用户每个骰子将获得50分5。 根据规则2,用户将获得100分组合骰子(1,1,1) 我不知何故写了但看起来效率低下。如何以更有效的方式编写它?

注意:我不允许使用数组,指针等。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int compute_points(int ruleno)
{
    int k=0,i;
    switch(ruleno)
    {
        case 1:
            if(d1==5) k+=50;
            if(d2==5) k+=50;
            if(d3==5) k+=50;
            if(d4==5) k+=50;
            if(d5==5) k+=50;
            if(d6==5) k+=50; break;

        case 2:
            if(d1==1) i+=1;
            if(d2==1) i+=1;
            if(d3==1) i+=1;
            if(d4==1) i+=1;
            if(d5==1) i+=1;
            if(d6==1) i+=1;
            if(i=>3)  k=100 break;
    }

    return k;   
}

int main()
{
    int m,p1,p2,turn, t1,t2,ruleno,d1,d2,d3,d4,d5,d6,point;
    srand(time(NULL));
    printf("FARKLE GAME!");
    m=menu(m);

        ruleno=select_rule_number(ruleno);

        d1=roll_a_dice();
        d2=roll_a_dice();
        d3=roll_a_dice();
        d4=roll_a_dice();
        d5=roll_a_dice();
        d6=roll_a_dice();
        numberofdice(d1,d2,d3,d4,d5,d6);

        point=compute_points(ruleno,d1,d2,d3,d4,d5,d6);

    printf("Goodby!");
    return 0;
}

1 个答案:

答案 0 :(得分:0)

您可以使用一些C技巧来获得更优雅的解决方案。

试试这个:

result += 50 * ((d1 == 5) + (d2 == 5) + (d3 == 5) + (d4 == 5) + (d5 == 5) + (d6 == 5));

你知道这是做什么的吗?

首先,d1 == 5是一个布尔表达式,结果为true或false,所以如果它是5,它将产生1.如果不是,则为0.所以你要做的是你收集计数五个并乘以50.这会将大部分代码减少到一行。