C-Code
/*****************************************************
* spock.c Spiel Stein, Papier, Schere, Echse, Spock
*****************************************************/
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <time.h>
#define NUM_OBJ 5
typedef struct _rule {
int first;
int second;
int winner;
int action;
} rule_t;
char symbols[][8] = {
"Schere", "Papier", "Stein", "Echse", "Spock" };
char actions[][16] = {
"schneidet", "bedeckt", "schleift", "zerquetscht", "vergiftet",
"zertrümmert", "köpft", "frisst", "widerlegt", "verdampft" };
rule_t rules[NUM_OBJ][NUM_OBJ] = {
{ {0,0,-1,0}, {0,1,0,0}, {2,0,2,2}, {0,3,0,6}, {4,0,4,5} },
{ {0,1,0,0}, {0,0,-1,0},{1,2,1,1}, {3,1,3,7}, {1,4,1,8} },
{ {2,0,2,2}, {1,2,1,1}, {0,0,-1,0},{2,3,2,3}, {4,2,4,9} },
{ {0,3,0,6}, {3,1,3,7}, {2,3,2,3}, {0,0,-1,0},{3,4,3,4} },
{ {4,0,4,5}, {1,4,1,8}, {4,2,4,9}, {3,4,3,4}, {0,0,-1,0}}
};
int main(void) {
char input[3];
int iuser, icomp;
int in, n;
/* Auswahl User */
printf("Wähle ein Symbol:\n");
for (n = 0; n<NUM_OBJ; n++)
printf("%2d %s\n", n+1, symbols[n]);
do {
printf("Auswahl: ");
fgets(input, 3, stdin);
in = atoi(input);
} while (in < 1 || in> NUM_OBJ);
iuser = in-1;
/* Auswahl Computer */
printf("\nDer Computer wählt jetzt zufällig ein Symbol: ");
srandom(time(NULL));
icomp = (int)(random()*(NUM_OBJ+0.1)/RAND_MAX);
printf("%s\n", symbols[icomp]);
/* Ergebnis */
sleep(1);
printf("\n%s gegen %s: ", symbols[iuser], symbols[icomp]);
if (rules[iuser][icomp].winner < 0)
printf("Unentschieden!\n");
else {
printf("%s %s %s.\n", symbols[rules[iuser][icomp].first],
actions[rules[iuser][icomp].action],
symbols[rules[iuser][icomp].second]);
printf("The winner is *%s* (%s).\n",
symbols[rules[iuser][icomp].winner],
(rules[iuser][icomp].winner == iuser)?"Du":"Computer");
}
return 0;
}