tamagoshi_cow
This commit is contained in:
125
src/C/tamagoshi_cow.c
Normal file
125
src/C/tamagoshi_cow.c
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
enum State {
|
||||||
|
byebyelife = 0,
|
||||||
|
lifesucks = 1,
|
||||||
|
liferocks = 2
|
||||||
|
};
|
||||||
|
|
||||||
|
int stock = 5;
|
||||||
|
int fitness = 5;
|
||||||
|
|
||||||
|
int clamp(int x, int min, int max) {
|
||||||
|
if (x < min) return min;
|
||||||
|
if (x > max) return max;
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum State get_state(void) {
|
||||||
|
if (fitness == 0 || fitness == 10) {
|
||||||
|
return byebyelife;
|
||||||
|
} else if ((fitness >= 1 && fitness <= 3) || (fitness >= 7 && fitness <= 9)) {
|
||||||
|
return lifesucks;
|
||||||
|
} else {
|
||||||
|
return liferocks;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void affiche_vache(enum State s) {
|
||||||
|
if (s == liferocks) {
|
||||||
|
printf(" _______________________________________\n");
|
||||||
|
printf("< You are a good sla... I mean player ! >\n");
|
||||||
|
printf("-----------------------------------------\n");
|
||||||
|
printf(" \\ ^__^\n");
|
||||||
|
printf(" \\ ($$)\\_______\n");
|
||||||
|
printf(" ( _)\\ )\\/\\\n");
|
||||||
|
printf(" U ||----w |\n");
|
||||||
|
printf(" || ||\n");
|
||||||
|
} else if (s == lifesucks) {
|
||||||
|
printf(" _______________________\n");
|
||||||
|
printf("< You SUCK at this game >\n");
|
||||||
|
printf("-------------------------\n");
|
||||||
|
printf(" \\ ^__^\n");
|
||||||
|
printf(" \\ (@@)\\_______\n");
|
||||||
|
printf(" (__)\\ )\\/\\\n");
|
||||||
|
printf(" | ||----w |\n");
|
||||||
|
printf(" ' /| ||\n");
|
||||||
|
} else {
|
||||||
|
printf(" _______________________________\n");
|
||||||
|
printf("< Where is my warranty ticket :( >\n");
|
||||||
|
printf(" ----------------------------------\n");
|
||||||
|
printf(" \\ ||\n");
|
||||||
|
printf(" \\ ||\n");
|
||||||
|
printf(" \\ ||\n");
|
||||||
|
printf(" \\||\n");
|
||||||
|
printf(" ~__~\n");
|
||||||
|
printf(" (xx)\\_______\n");
|
||||||
|
printf(" (__)\\ )\\\n");
|
||||||
|
printf(" o o||----w | \\\n");
|
||||||
|
printf(" o o|| ||\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int fitness_update(int lunchfood) {
|
||||||
|
int digestion = -(rand() % 4); // valeur entre 0 et -3
|
||||||
|
|
||||||
|
fitness = fitness + lunchfood + digestion;
|
||||||
|
fitness = clamp(fitness, 0, 10);
|
||||||
|
|
||||||
|
return fitness;
|
||||||
|
}
|
||||||
|
|
||||||
|
int stock_update(int lunchfood) {
|
||||||
|
int crop = (rand() % 7) - 3; // valeur entre -3 et +3, il y a probablement le biais avec le modulo comme parler dans les fichiers bash mais la n'est pas le sujet....
|
||||||
|
|
||||||
|
stock = stock - lunchfood + crop;
|
||||||
|
stock = clamp(stock, 0, 10);
|
||||||
|
|
||||||
|
return stock;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
srand((unsigned) time(NULL));
|
||||||
|
|
||||||
|
int duree_vie = 0;
|
||||||
|
int lunchfood;
|
||||||
|
enum State state = get_state();
|
||||||
|
|
||||||
|
while (state != byebyelife) {
|
||||||
|
printf("\n============================\n");
|
||||||
|
printf("TAMAGOSHI COW\n");
|
||||||
|
printf("============================\n\n");
|
||||||
|
|
||||||
|
affiche_vache(state);
|
||||||
|
|
||||||
|
printf("\nStock actuel : %d / 10\n", stock);
|
||||||
|
|
||||||
|
do {
|
||||||
|
printf("Quantite de nourriture a donner : ");
|
||||||
|
scanf("%d", &lunchfood);
|
||||||
|
|
||||||
|
if (lunchfood < 0 || lunchfood > stock) {
|
||||||
|
printf("Valeur invalide. Entrez une valeur entre 0 et %d.\n", stock);
|
||||||
|
}
|
||||||
|
|
||||||
|
} while (lunchfood < 0 || lunchfood > stock);
|
||||||
|
|
||||||
|
fitness_update(lunchfood);
|
||||||
|
stock_update(lunchfood);
|
||||||
|
|
||||||
|
duree_vie++;
|
||||||
|
state = get_state();
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n============================\n");
|
||||||
|
printf("GAME OVER\n");
|
||||||
|
printf("============================\n\n");
|
||||||
|
|
||||||
|
affiche_vache(byebyelife);
|
||||||
|
|
||||||
|
printf("\nScore final : %d\n", duree_vie);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user