【问题标题】:Most Efficient Way to Add a Score?添加分数的最有效方法?
【发布时间】:2015-01-31 08:48:25
【问题描述】:

我仍在尝试制作骰子游戏,我只需要知道在游戏中添加分数的最佳方法是什么,以便打印出明显的赢家。我需要一堆 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;
}

【问题讨论】:

    标签: c arrays sum dice


    【解决方案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;
    }
    

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

    【讨论】:

      猜你喜欢
      • 2011-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-13
      相关资源
      最近更新 更多