最有效的添加分数的方法?

时间:2014-12-02 23:06:46

标签: c arrays sum dice

我仍在尝试制作骰子游戏,我只需要知道在游戏中添加分数的最佳方式是什么,这样我就可以打印出明显的赢家。我需要一堆 if-else 语句,还是更容易创建头文件?

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

void clean_stdin(void) {
int c;
do {
    c = getchar();
} while (c != '\n' && c != EOF);
}


int main() {

int i, r, diceRoll;
char player1[20];
int score1[5];
int sum;
srand(time(NULL));

printf("\t\t\t Welcome to Farkle Lite!\n");
printf(" Highest score wins!\n\n");
printf(" The rules:\n");
printf(" 1 = 100 pts, 5 = 50 pts. Everything else is 0.\n\n Get 3 of a kind, and multiply the result by 100 (Ex. Three 4s = 400 pts).\n");
printf(" If you get more than 3 of a kind, any repeats will double the score \n (Ex. Four 4s = 800 pts, Five 4s = 1600.)\n\n");
printf(" Rolling 1-6 gets you an automatic 1500 pts!\n\n");
printf("Enter name for Player 1:\n");
fgets (player1, 20, stdin);
clean_stdin();

printf("\n\n %s Dice Roll:\n\n", player1);

for(i = 0; i < 6; i ++){
     r = (rand()%6)+1;
    diceRoll= r;
    score1[i]= diceRoll;
    sum = score[i];
    printf(" test %d \n", score1[i]);
}
printf(" %d", score1[i]);
return 0;
}

1 个答案:

答案 0 :(得分:1)

这是使用函数的好机会。每个玩家将对骰子进行六次角色,每个玩家将得到他们的总得分,并且每个玩家将能够输入他们的名字。我们可以创建一个集中此行为的函数。为此,我们需要将玩家名称和玩家得分存储在数组中,以便第二次运行该函数时,我们不会覆盖第一次运行时的信息。以下是一个例子:

void play (int playerNo, char* name, int* score)
{
    int loop;
    int role;

    printf("Enter name for Player %d:\n", playerNo);
    fgets (name, 20, stdin);
    clean_stdin();

    printf("\n\n %s Dice Roll:\n\n", name);

    *score = 0;
    for(loop = 0; loop<6; loop++)
    {
        role = (rand()%6)+1;
        *score += role;
        printf (" %d\n", role);
    }
}

此功能将允许用户输入名称,然后将骰子角色6次,总计得分。退出后,将更新playerNames和playerScores数组中的相应条目。

有了这个,我们只需要遍历玩家,为每个玩家调用此功能:

int main() 
{
    const int   playerCount = 2;
    char        playerNames [playerCount][20];
    int         playerScores[playerCount];
    int         loop;
    int         highestScore = 0;
    int         highestPlayer;

    // Seed rng
    srand(time(NULL));

    // Instructions
    printf("\t\t\t Welcome to Farkle Lite!\n");
    printf(" Highest score wins!\n\n");
    printf(" The rules:\n");
    printf(" 1 = 100 pts, 5 = 50 pts. Everything else is 0.\n\n Get 3 of a kind, and multiply the result by 100 (Ex. Three 4s = 400 pts).\n");
    printf(" If you get more than 3 of a kind, any repeats will double the score \n (Ex. Four 4s = 800 pts, Five 4s = 1600.)\n\n");
    printf(" Rolling 1-6 gets you an automatic 1500 pts!\n\n");

    // Let each player play the game
    for (loop=0; loop<playerCount; loop++)
        play (loop+1, &playerNames[loop][0], &playerScores[loop]);

    // Tally scores
    for (loop=0; loop<playerCount; loop++)
    {
        if (playerScores[loop] > highestScore)
        {
            highestScore = playerScores[loop];
            highestPlayer = loop;
        }
    }

    // Display winner
    printf ("Player %d: %s wins with a scrore of %d", 
        highestPlayer+1,
        playerNames[highestPlayer],
        playerScores[highestPlayer]);

    return 0;
}

之后我们可以通过所有分数来记录最高分,然后显示获胜者。