C :: Aufgabe #88
3 Lösungen

Stein, Papier, Schere, Echse, Spock
Anfänger - C
von Energy
- 24.09.2015 um 15:22 Uhr
Programmiere das Spiel Stein, Papier, Schere, Echse, Spock, sodass man selbst eine Figur auswählen kann und der Computer eine zufällige Figur auswählt. Ermittele dann, wer diese Partie gewonnen hat.
Lösungen:

/***************************************************** * 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; }
comparision.c:
C-Code
compare.h:
C-Code
compare.c:
C-Code

#include"compare.h" int Wahl = 1; int main(){ srand(time(NULL)); int again = 0; do{ printf("Herzlich Willkommen zu Schere Stein Papier Echse Spock. \n"); printf("Wähle nun dein Symbol \n%d - Schere \n%d - Stein\n%d - Papier \n%d - Echse \n%d - Spock \n",Schere+1,Stein+1,Papier+1,Echse+1,Spock+1); fflush(stdout); scanf("%d",&Wahl); if(compare(Wahl-1,rand()%5+1)== 4){ clrscr(); printf("Es steht unentschieden.\n\n\n\n\n"); }else if(compare(Wahl-1,1)){ clrscr(); printf("Sie haben gewonnen.\n\n\n\n\n"); }else{ clrscr(); printf("Sie haben verloren.\n\n\n\n\n"); } printf(" Wollen sie nochmal spielen ? \n Fuer Ja tippen sie J und fuer Nein tippen sie N\n"); again = nochmal(); }while(again == 1); if(again == 3){ printf("Wir konnten keine korrekte eingabe feststellen das Pogramm beendet sich jetzt wenn sie wollen können sie es gerne neu starten"); } return 0 ; }
compare.h:

#include <stdio.h> #include <stdlib.h> #include<time.h> enum Sa{Schere, Stein, Papier, Echse, Spock }; int compare(int,int); void clrscr(); int nochmal();
compare.c:

#include"compare.h" int compare(int a,int b){ if(a == b){ return 4; }else{ switch(a){ case Schere: if(b == Papier || b == Echse){ return 1; } break; case Stein: if(b == Echse || b == Schere){ return 1; } break; case Papier : if(b == Spock || b == Stein){ return 1; } break; case Echse : if(b == Spock || b == Papier){ return 1; } break; case Spock : if(b == Stein || b == Schere){ return 1; } break; default : return 2; } } return 3; } void clrscr(){ int i; for(i = 0;i < 24;i++){ printf("\n"); } } int nochmal(){ char answer; fflush(stdout); scanf(" %c",&answer); if(answer == 'j' || answer == 'J'){ return 1; }else if(answer == 'n' || answer == 'N'){ return 0; }else{ return 3; } }

#include <stdio.h> #include <stdlib.h> #include <time.h> void anfang() { printf("\n*******************************\n"); printf("***Schnick, Schnack, Schnuck***\n"); printf("*******************************\n\n"); printf("Bitte wähle:\n"); printf("(1) - Stein\n"); printf("(2) - Papier\n"); printf("(3) - Schere\n"); printf("(4) - Echse\n"); printf("(5) - Spock\n"); printf("(6) - Beenden\n\n"); } int zufallszahl(int min, int max) { int zahl; zahl= (rand()%((max+1)-min))+min; return zahl; } int auswertung(int computer, int spieler) { int ergebnis; //Es wird 1 zurück gegeben wenn der Computer gewonnen hat und 0 wenn der Spieler gewonnen hat und 2 bei unentschieden if ((computer==1 && spieler==1) || (computer==2 && spieler==2) || (computer==3 && spieler==3) || (computer==4 && spieler==4) || (computer==5 && spieler==5)) { printf("Die Partie war UNENTSCHIEDEN.\n"); ergebnis = 2; //unentschieden } else if ((computer==2 && spieler==1) ||(computer==1 && spieler==4) ||(computer==4 && spieler==5) ||(computer==5 && spieler==3) ||(computer==3 && spieler==4) ||(computer==4 && spieler==2) ||(computer==2 && spieler==5) || (computer==5 && spieler==1) || (computer==1 && spieler==3)) { printf("Der COMPUTER hat gewonnen.\n"); ergebnis = 1; //Computer gewonnen } else { printf("SIE haben gewonnen.\n"); ergebnis =0; } return ergebnis; } int main(void) { int eingabe, obere_grenze, untere_grenze, check, computer, ergebnis, punkte_com, punkte_spi, runde; untere_grenze = 1; obere_grenze = 6; punkte_com = 0; punkte_spi = 0; runde = 1; srand(time(NULL)); char elemente[][8] = {"Stein", "Papier", "Schere", "Echse", "Spock"}; do { anfang(); check = scanf("%d", &eingabe); fflush(stdin); if (check!=1 || eingabe<untere_grenze || eingabe>obere_grenze) { printf("Sie haben eine falsche Eingabe gemacht.\n"); return EXIT_FAILURE; } if (eingabe<6) { computer = zufallszahl(untere_grenze,obere_grenze-1); printf("\nDer Computer hat %s und sie haben %s gewählt.\n\n",elemente[computer-1], elemente[eingabe-1]); ergebnis = auswertung(computer, eingabe); if(ergebnis==1) punkte_com++; else if(ergebnis==0) punkte_spi++; printf("\nErgebnis %d. Runde: Computer : Spieler --- %d : %d\n\n", runde, punkte_com, punkte_spi); runde++; } }while(eingabe!=6); }