Browse Source

Merge pull request #4 from Mac10goesBRRRT/SchereSteinPapier

Schere stein papier in main gemerged, alle test liefen
remotes/origin/testTools
Mac10goesBRRRT 2 years ago
committed by GitHub
parent
commit
60cb867815
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 3
      project.yml
  2. 149
      src/c/rockPaperScissors.c
  3. 37
      src/c/rockPaperScissors.h
  4. 190
      test/c/test_rockPaperScissors.c

3
project.yml

@ -100,5 +100,4 @@
- module_generator
- xml_tests_report
- gcov
...
...

149
src/c/rockPaperScissors.c

@ -0,0 +1,149 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <time.h>
#include "rockPaperScissors.h"
int playRockPaperScissors(int rounds){
int roundsToWin = (rounds/2)+1;
int winner = NOTWONYET;
int playerWins = 0, computerWins = 0, *playerPt = &playerWins, *computerPt = &computerWins;
printPrompt(roundsToWin);
while (winner == NOTWONYET){
runGame(playerPt, computerPt);
winner = wasGameWon(roundsToWin, playerWins, computerWins);
}
printWinner(winner);
return winner;
}
void printPrompt(int roundsToWin){
printf("Hello NAME.\nLet us play a game, shall we? I assume you are familiar with Rock-Paper-Scissors?\nIf not, here are the rules:\nThe first one to win %d rounds wins the game. Rock beats scissors, scissors beats paper and paper beats rock.\nThey are quite simple, even you should understand. Got it?\n", roundsToWin);
}
void runGame(int *playerWins, int *computerWins){
int computerInput, playerInput;
int roundwinner = NOWINNER;
playerInput = getPlayerInput();
computerInput = getComputerInput();
roundwinner = findWinner(playerInput, computerInput);
setScore(roundwinner, playerWins, computerWins);
printResult(playerInput, computerInput, roundwinner, *playerWins, *computerWins);
}
int getPlayerInput(){
bool inputValid = false;
int playerInput;
while(!inputValid){
printf("Enter your choice:\n1 for Rock\n2 for Paper\n3 for Scissors\n");
scanf("%d", &playerInput);
playerInput -= 1;
inputValid = validatePlayerInput(playerInput);
}
return playerInput;
}
bool validatePlayerInput(int playerInput){
bool inputValid;
if (playerInput == ROCK || playerInput == PAPER || playerInput == SCISSORS){
inputValid = true;
}
else {
inputValid = false;
}
return inputValid;
}
int getComputerInput(){
srand(time(0));
int input = rand() % 3;
return input;
}
int findWinner(int playerInput, int computerInput){
if (playerInput == computerInput){
return NOWINNER;
}
else if (playerInput == ROCK && computerInput == SCISSORS) {
return PLAYERWINSROUND;
}
else if (playerInput == PAPER && computerInput == ROCK) {
return PLAYERWINSROUND;
}
else if (playerInput == SCISSORS && computerInput == PAPER) {
return PLAYERWINSROUND;
}
else {
return COMPUTERWINSROUND;
}
}
void setScore(int roundwinner, int *playerWins, int *computerWins){
if (roundwinner == PLAYERWINSROUND){
*playerWins += 1;
}
else if (roundwinner == COMPUTERWINSROUND){
*computerWins += 1;
}
}
void printResult(int playerInput, int computerInput, int roundWinner, int playerWins, int computerWins){
switch (playerInput){
case ROCK: printf("So you chose rock.\n"); break;
case PAPER: printf("So you chose paper.\n"); break;
case SCISSORS: printf("So you chose scissors.\n"); break;
}
switch (roundWinner)
{
case PLAYERWINSROUND: printf("Seems you win this round, I chose "); break;
case COMPUTERWINSROUND: printf("Too bad for you. I win this one, I chose "); break;
case NOWINNER: printf("Looks like it's a draw, I also chose "); break;
}
switch (computerInput)
{
case ROCK: printf("rock.\n"); break;
case PAPER: printf("paper.\n"); break;
case SCISSORS: printf("scissors.\n"); break;
}
printf("With this, you are at %d wins and I am at %d.\n", playerWins, computerWins);
}
int wasGameWon(int roundsToWin, int playerWins, int computerWins){
int winner;
if (playerWins == roundsToWin){
winner = PLAYERWINSGAME;
}
else if (computerWins == roundsToWin){
winner = COMPUTERWINSGAME;
}
else {
winner = NOTWONYET;
}
return winner;
}
void printWinner(int winner){
if (winner == PLAYERWINSGAME){
printf("Damn you, you beat me! You actually won! Oh well, I stand by my word. You may pass.\n");
}
else if (winner == COMPUTERWINSGAME){
printf("Oh poor you, seems like I won. You're gomma have to try again. Do better next time.\n");
}
}

37
src/c/rockPaperScissors.h

@ -0,0 +1,37 @@
#ifndef ROCKPAPERSCISSORS_H
#define ROCKPAPERSCISSORS_H
#include <stdbool.h>
enum InputOptions{
ROCK,
PAPER,
SCISSORS
};
enum RoundWinner{
PLAYERWINSROUND = 3,
COMPUTERWINSROUND,
NOWINNER
};
enum GameWinner{
PLAYERWINSGAME = 6,
COMPUTERWINSGAME,
NOTWONYET
};
int playRockPaperScissors(int rounds);
void printPrompt(int roundsToWin);
void runGame(int *playerWins, int *computerWins);
int getPlayerInput();
bool validatePlayerInput(int playerInput);
int getComputerInput();
int findWinner(int playerInput, int computerInput);
void setScore(int roundwinner, int *playerWins, int *computerWins);
void printResult(int playerInput, int computerInput, int roundWinner, int playerWins, int computerWins);
int wasGameWon(int roundsToWin, int playerWins, int computerWins);
void printWinner(int winner);
#endif

190
test/c/test_rockPaperScissors.c

@ -0,0 +1,190 @@
#ifdef TEST
#include "unity.h"
#include "rockPaperScissors.h"
//Vor- bzw. Nachbereitung
void setUp(void)
{
}
void tearDown(void)
{
}
void test_rockPaperScissors_validPlayerInput(void)
{
/* arrange */
bool result;
int playerInput = 2;
/* act */
result = validatePlayerInput(playerInput);
/* assert */
TEST_ASSERT_EQUAL_INT(true, result);
}
void test_rockPaperScissors_invalidPlayerInput(void)
{
/* arrange */
bool result;
int playerInput = 5;
/* act */
result = validatePlayerInput(playerInput);
/* assert */
TEST_ASSERT_EQUAL_INT(false, result);
}
void test_rockPaperScissors_generateComputerInput(void)
{
/* arrange */
int result;
/* act */
result = getComputerInput();
/* assert */
TEST_ASSERT_INT_WITHIN(1, 1, result);
}
void test_rockPaperScissors_sameResult(void)
{
/* arrange */
int result;
int playerInput = ROCK;
int computerInput = playerInput;
/* act */
result = findWinner(playerInput, computerInput);
/* assert */
TEST_ASSERT_EQUAL_INT(NOWINNER, result);
}
void test_rockPaperScissors_playerWinsRound(void)
{
/* arrange */
int result;
int playerInput = ROCK;
int computerInput = SCISSORS;
/* act */
result = findWinner(playerInput, computerInput);
/* assert */
TEST_ASSERT_EQUAL_INT(PLAYERWINSROUND, result);
/* arrange */
playerInput = PAPER;
computerInput = ROCK;
/* act */
result = findWinner(playerInput, computerInput);
/* assert */
TEST_ASSERT_EQUAL_INT(PLAYERWINSROUND, result);
/* arrange */
playerInput = SCISSORS;
computerInput = PAPER;
/* act */
result = findWinner(playerInput, computerInput);
/* assert */
TEST_ASSERT_EQUAL_INT(PLAYERWINSROUND, result);
}
void test_rockPaperScissors_computerWinsRound(void)
{
/* arrange */
int result;
int playerInput = ROCK;
int computerInput = PAPER;
/* act */
result = findWinner(playerInput, computerInput);
/* assert */
TEST_ASSERT_EQUAL_INT(COMPUTERWINSROUND, result);
/* arrange */
playerInput = PAPER;
computerInput = SCISSORS;
/* act */
result = findWinner(playerInput, computerInput);
/* assert */
TEST_ASSERT_EQUAL_INT(COMPUTERWINSROUND, result);
/* arrange */
playerInput = SCISSORS;
computerInput = ROCK;
/* act */
result = findWinner(playerInput, computerInput);
/* assert */
TEST_ASSERT_EQUAL_INT(COMPUTERWINSROUND, result);
}
void test_rockPaperScissors_gameWasNotWon(void)
{
/* arrange */
int result;
int roundsToWin = 2;
int playerWins = 1, computerWins = 1;
/* act */
result = wasGameWon(roundsToWin, playerWins, computerWins);
/* assert */
TEST_ASSERT_EQUAL_INT(NOTWONYET, result);
}
void test_rockPaperScissors_playerWinsGame(void)
{
/* arrange */
int result;
int roundsToWin = 2;
int playerWins = 2, computerWins = 1;
/* act */
result = wasGameWon(roundsToWin, playerWins, computerWins);
/* assert */
TEST_ASSERT_EQUAL_INT(PLAYERWINSGAME, result);
}
void test_rockPaperScissors_computerWinsGame(void)
{
/* arrange */
int result;
int roundsToWin = 2;
int playerWins = 1, computerWins = 2;
/* act */
result = wasGameWon(roundsToWin, playerWins, computerWins);
/* assert */
TEST_ASSERT_EQUAL_INT(COMPUTERWINSGAME, result);
}
#endif // TEST
Loading…
Cancel
Save