我仍在尝试制作骰子游戏,我只需要知道在游戏中添加分数的最佳方式是什么,这样我就可以打印出明显的赢家。我需要一堆 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;
}
答案 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;
}
之后我们可以通过所有分数来记录最高分,然后显示获胜者。