C :: Aufgabe #88

3 Lösungen Lösungen öffentlich

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:

1 Kommentar
1x
vote_ok
von devnull (8870 Punkte) - 27.12.2015 um 22:47 Uhr
Quellcode ausblenden 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;
}
vote_ok
von Siriora (100 Punkte) - 09.01.2016 um 16:08 Uhr
comparision.c:
Quellcode ausblenden 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:
Quellcode ausblenden C-Code
#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:
Quellcode ausblenden C-Code
#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;
	}
}
vote_ok
von kathleenw (3600 Punkte) - 10.07.2020 um 09:47 Uhr
Quellcode ausblenden C-Code
#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);
     
}
2092624

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.