Ορίστε μια λύση για το 8ο programming project στην σελίδα 217:
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
#include <stdio.h>
#include <stdbool.h> // bool, true, false
#include <stdlib.h> // srand(), rand()
#include <time.h> // time()
#define LOSE_POINT 7
#define FIRST_ROLL_WIN(sum) ((sum) == 7 || (sum) == 11)
#define FIRST_ROLL_LOOSE(sum) ((sum) == 1 || (sum) == 2 || (sum) == 12)
int roll_dice(void)
{
int a = (rand() % 6) + 1, b = (rand() % 6) + 1;
return a + b;
}
bool play_game(void)
{
int roll = 0, point, sum;
while (1) {
sum = roll_dice();
roll++;
printf("You rolled: %d\n", sum);
if (roll == 1) {
if (FIRST_ROLL_WIN(sum))
return true;
else if (FIRST_ROLL_LOOSE(sum))
return false;
else {
point = sum;
printf("Your point is %d.\n", point);
}
}
else {
if (sum == point)
return true;
if (sum == LOSE_POINT)
return false;
}
}
}
int main(void)
{
int wins = 0, losses = 0;
srand((unsigned) time(NULL));
while (1) {
bool play = play_game();
printf(play ? "You win!\n\n" : "You lose!\n\n");
play ? wins++ : losses++;
printf("Play again? ");
char answer = getchar();
if (answer != 'y' && answer != 'Y') {
printf("Wins: %d Losses: %d", wins, losses);
break;
}
getchar(); // catch '\n'
putchar('\n');
}
return 0;
}
Θέλω να ρωτήσω κάτι σχετικά με την παραπάνω λύση.
Στην συνάρτηση play_game() στα σημεία όπου έχουμε νίκη ή ήττα επέλεξα να φεύγω κατευθείαν απ' την συνάρτηση με την return επιστρέφοντας true ή false ανάλογα.
Έτσι όμως έχω 4 σημεία εξόδου απ' την συνάρτηση (τα οποία άλλη φορά μπορεί να ήταν περισσότερα).
Θα ήταν καλύτερα μήπως να θέσω μία μεταβλητή τύπου bool η οποία όπου έχουμε νίκη ή ήττα να γίνεται true ή false, να φεύγω απ' τον βρόχο με break και τελικά να επιστρέφω την μεταβλητή;



