diff --git a/src/main/c/Tim/SchereSteinPapier.c b/src/main/c/Tim/SchereSteinPapier.c index 4d485f8..828d337 100644 --- a/src/main/c/Tim/SchereSteinPapier.c +++ b/src/main/c/Tim/SchereSteinPapier.c @@ -1,9 +1,260 @@ #include "SchereSteinPapier.h" #include +#include +#include +#include +void gameLoop(); +char* getWelcomeMessageSSP(); +int selectCOMChoice(); +void printResult(int, int, int); +int getuserSelection(); -int schereSteinPapier() + + +void schereSteinPapier() +{ + srand(time(NULL)); + printf("%s", getWelcomeMessageSSP()); + gameLoop(); +} + +void gameLoop() { - printf("Test"); - return 1; + while(1) + { + int comChoice, userChoice; + userChoice = getuserSelection(); + if(userChoice == 0) + { + printf("Vielen Dank fuers Spielen! Tschau!\n"); + break; + } + else if(userChoice == 1 || userChoice == 2 || userChoice == 3) + { + comChoice = selectCOMChoice(); + int winNum = calculateWinner(userChoice, comChoice); + printResult(winNum, comChoice, userChoice); + } + else + { + printf("Deine eingegebene Wahl ist ungueltig\n"); + } + } } +//Berechnung,welche Auswahl gewinnt. +//@return: 0 = unentschieden; 1 = gewonnen; -1 = verloren; 3 = Fehler bei der Wertuebergabe +//@param userSelection = UserChoice; comSelection = COMChoice +int calculateWinner(int userSelection, int comSelection) +{ + switch (userSelection) + { + case(1): + switch (comSelection) { + case(1): return 0; + + case(2): return -1; + + case(3): return 1; + + default: return 3; + } + case(2): + switch (comSelection) { + case(1): return 1; + + case(2): return 0; + + case(3): return -1; + + default: return 3; + } + case(3): + switch (comSelection) { + case(1): return -1; + + case(2): return 1; + + case(3): return 0; + + default: return 3; + } + default: return 3; + } + +} + +int selectCOMChoice() +{ + return rand() % 3 + 1; +} + +int getuserSelection() +{ + int userSelect; + printf("Bitte treffe deine Wahl!\n" + "1: Schere \n2: Stein \n3: Papier\n0: Spiel verlassen\n"); + scanf("%d", &userSelect); + + return userSelect; +} + +char* getWelcomeMessageSSP() +{ + return "\nHallo und Willkommen zu\n\n" + " _____ _ _____ _____ _ \r\n" + " | __ \\ | | | __ \\ / ____| (_) \r\n" + " | |__) |___ ___| | __ | |__) |_ _ _ __ ___ _ __ | (___ ___ _ ___ ___ ___ _ __ ___ \r\n" + " | _ // _ \\ / __| |/ / | ___/ _` | '_ \\ / _ \\ '__| \\___ \\ / __| / __/ __|/ _ \\| '__/ __|\r\n" + " | | \\ \\ (_) | (__| < | | | (_| | |_) | __/ | ____) | (__| \\__ \\__ \\ (_) | | \\__ \\\r\n" + " |_| \\_\\___/ \\___|_|\\_\\ |_| \\__,_| .__/ \\___|_| |_____/ \\___|_|___/___/\\___/|_| |___/ \r\n" + " | | \r\n" + " |_| \n" + "credits to wynand1004\n\n" + "In diesem Spiel spielst du gegen einen COM Schere-Stein-Papier!\n" + "Waehle, sobald dich die Konsole dazu auffordert, deine 'Waffe' aus, indem du die entsprechende Zahl eintippst.\n" + "Gibst du bei der Aufforderung 0 ein, gelangst du zurueck ins Hauptmenue!\n\n"; +} + +void printResult(int winNumb, int comSelect, int userSelect) +{ + char comWeapon[10]; + switch(comSelect) + { + case(1): + strcpy(comWeapon, "Schere"); + break; + case(2): + strcpy(comWeapon,"Stein"); + break; + case(3): + strcpy(comWeapon,"Papier"); + break; + default: + strcpy(comWeapon, "Not found"); + break; + } + if(userSelect == 1) + { + switch (comSelect) + { + case(1): + printf(" _______ _______\n" + "---' ____)____ ____(____ '---\n" + " ______) (______\n" + " __________) (__________\n" + " (____) (____)\n" + "---.__(___) (___)__.---\n" + " Scissor vs Scissor\n"); + break; + case(2): + printf(" _______ _______\n" + "---' ____)____ (____ '---\n" + " ______) (_____)\n" + " __________) (_____)\n" + " (____) (____)\n" + "---.__(___) (___)__.---\n" + " Scissor vs Rock\n"); + break; + case(3): + printf(" _______ _______\n" + "---' ____)____ ____(____ '----\n" + " ______) (______\n" + " __________) (_______\n" + " (____) (_______\n" + "---.__(___) (_________.---\n" + " Scissor vs Paper\n"); + break; + default: + printf("ungültige Eingabe\n"); + break; + } + } + else if(userSelect ==2) + { + switch (comSelect) + { + case(1): + printf(" _______ _______\n" + "---' ____) ____(____ '---\n" + " (_____) (______\n" + " (_____) (__________\n" + " (____) (____)\n" + "---.__(___) (___)__.---\n" + " Rock VS Scissor\n"); + break; + case(2): + printf(" _______ _______\n" + "---' ____) (____ '---\n" + " (_____) (_____)\n" + " (_____) (_____)\n" + " (____) (____)\n" + "---.__(___) (___)__.---\n" + " Rock VS Rock\n"); + break; + case(3): + printf(" _______ _______\n" + "---' ____) ____(____ '----\n" + " (_____) (______\n" + " (_____) (_______\n" + " (____) (_______\n" + "---.__(___) (_________.---\n" + " Rock VS Paper\n"); + break; + default: + printf("ungültige Eingabe\n"); + break; + } + } + else if(userSelect ==3) + { + switch (comSelect) + { + case(1): + printf(" _______ _______\n" + "---' ____)____ ____(____ '---\n" + " ______) (______\n" + " _______) (__________\n" + " _______) (____)\n" + "---.__________) (___)__.---\n" + " Paper VS Scissor\n"); + break; + case(2): + printf(" _______ _______\n" + "---' ____)____ (____ '---\n" + " ______) (_____)\n" + " _______) (_____)\n" + " _______) (____)\n" + "---.__________) (___)__.---\n" + " Paper VS Rock\n"); + break; + case(3): + printf(" _______ _______\n" + "---' ____)____ ____(____ '----\n" + " ______) (______\n" + " _______) (_______\n" + " _______) (_______\n" + "---.__________) (_________.---\n" + " Paper VS Paper\n"); + break; + default: + printf("ungültige Eingabe\n"); + break; + } + } + else + { + printf("ungültige Eingabe"); + } + switch (winNumb) + { + case(-1):printf("Der Computer hat %s gewaehlt, Du hast verloren!!!\n\n", comWeapon); + break; + case(0): printf("Der Computer hat %s gewaehlt, Es steht unentschieden!!!\n\n", comWeapon); + break; + case(1): printf("Der Computer hat %s gewaehlt, Du hast gewonnen!!!\n\n", comWeapon); + break; + default: printf("Error!"); + break; + } +} \ No newline at end of file diff --git a/src/main/c/Tim/SchereSteinPapier.h b/src/main/c/Tim/SchereSteinPapier.h index 8b695c2..a96c9f9 100644 --- a/src/main/c/Tim/SchereSteinPapier.h +++ b/src/main/c/Tim/SchereSteinPapier.h @@ -1,6 +1,7 @@ #ifndef SCHERESTEINPAPIER_H #define SCHERESTEINPAPIER_H -int schereSteinPapier(); +void schereSteinPapier(); +int calculateWinner(int, int); #endif diff --git a/src/main/c/Tim/hangman.c b/src/main/c/Tim/hangman.c new file mode 100644 index 0000000..d49319b --- /dev/null +++ b/src/main/c/Tim/hangman.c @@ -0,0 +1,7 @@ +#include "hangman.h" +#include + +void hangman() +{ + printf("Hello World!"); +} diff --git a/src/main/c/Tim/hangman.h b/src/main/c/Tim/hangman.h new file mode 100644 index 0000000..cd17d02 --- /dev/null +++ b/src/main/c/Tim/hangman.h @@ -0,0 +1,6 @@ +#ifndef HANGMAN_H +#define HANGMAN_H + +void hangman(); + +#endif diff --git a/src/main/c/main.c b/src/main/c/main.c index 6af2d92..cbaccdc 100644 --- a/src/main/c/main.c +++ b/src/main/c/main.c @@ -11,7 +11,8 @@ //todo // Includiert hier euer .h-Datei für das entsprechende Spiel mit '#include "datei.h"' #include -#include "Tim/SchereSteinPapier.h" +#include "SchereSteinPapier.h" +#include "hangman.h" void openInterface(); @@ -31,7 +32,8 @@ void openInterface() // Vergesst das \n am Ende des Namens nicht!!! printf("\n\nHallo und willkommen bei unserer Spielesammlung!!!\n" "Du hast folgende Spiele zur Auswahl:\n\n" - "1: Schere-Stein-Papier\n"); + "1: Schere-Stein-Papier\n" + "2: Hangman\n"); printf("\nBitte waehle die Zahl des entsprechenden Spiels aus, um damit zu starten.\nAm Ende eines Spiels kannst du mit der Taste 0 wieder zurueck zum Hauptmenue kommen.\nIm Hauptmenue beendest du mit der Auswahl 0 das Programm \n\n"); scanf_s("%d", &selection); @@ -44,10 +46,10 @@ void openInterface() case(1): schereSteinPapier(); break; - /*case(2): - //Spiel() - break; - case(3): + case(2): + hangman(); + break; + /*case(3): //Spiel() break; case(4): diff --git a/src/test/c/Tim/test_SchereSteinPapier.c b/src/test/c/Tim/test_SchereSteinPapier.c index 9c41029..485a07b 100644 --- a/src/test/c/Tim/test_SchereSteinPapier.c +++ b/src/test/c/Tim/test_SchereSteinPapier.c @@ -1,5 +1,10 @@ #include "SchereSteinPapier.h" #include "unity.h" +#include + +const int scissor = 1; +const int rock = 2; +const int paper = 3; void setUp(void) { @@ -11,11 +16,147 @@ void tearDown(void) } +//Testfälle für Unentschieden +//1. Beide wählen Schere +void test_draw_USER_Scissor_COM_Scissor() +{ + //arrange + int expectedResult = 0; + //act + int actualResult = calculateWinner(scissor,scissor); + //assert + TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); +} +//2. Beide wählen Stein +void test_draw_USER_Rock_COM_Rock() +{ + //arrange + int expectedResult = 0; + //act + int actualResult = calculateWinner(rock,rock); + //assert + TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); +} +//3. Beide wählen Papier +void test_draw_USER_Paper_COM_Paper() +{ + //arrange + int expectedResult = 0; + //act + int actualResult = calculateWinner(paper,paper); + //assert + TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); +} + + +//Testfälle für Niederlage +//1. User wählt Schere, Computer wählt Stein +void test_lose_USER_Scissor_COM_Rock() +{ + //arrange + int expectedResult = -1; + //act + int actualResult = calculateWinner(scissor,rock); + //assert + TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); +} +//2. User wählt Papier, Computer wählt Schere +void test_lose_USER_Paper_COM_Scissor() +{ + //arrange + int expectedResult = -1; + //act + int actualResult = calculateWinner(paper,scissor); + //assert + TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); +} +//3. User wählt Stein, Computer wählt Papier +void test_lose_USER_Rock_COM_Paper() +{ + //arrange + int expectedResult = -1; + //act + int actualResult = calculateWinner(rock,paper); + //assert + TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); +} + -void testingCeedlingFunctionality() +//Testfälle für Sieg +//1. User wählt Schere, Computer wählt Papier +void test_win_USER_Scissor_COM_Paper() { + //arrange int expectedResult = 1; + //act + int actualResult = calculateWinner(scissor,paper); + //assert + TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); +} +//2. User wählt Stein, Computer wählt Schere +void test_win_USER_Rock_COM_Scissor() +{ + //arrange + int expectedResult = 1; + //act + int actualResult = calculateWinner(rock,scissor); + //assert + TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); +} +//3. User wählt Papier, Computer wählt Stein +void test_win_USER_Paper_COM_Rock() +{ + //arrange + int expectedResult = 1; + //act + int actualResult = calculateWinner(paper,rock); + //assert + TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); +} + - int actualResult = schereSteinPapier(); +//Testfälle für ungültige Parameterübergabe +//1. Durch den User wurde ein ungültiges Parameter übergeben +// Der Computer wählt eine Zahl zwischen 1 und 3 +void test_error_USER_unknownParameter_Rock_randomChoice() +{ + //arrange + int expectedResult = 3; + //act + int actualResult = calculateWinner(5,rand() % 3 + 1); + //assert + TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); +} +//2. Der User wählt eine Zahl zwischen 1 und 3 +// Durch den Computer wurde ein ungültiges Parameter übergeben +void test_error_USER_randomChoice_Rock_unknownParameter() +{ + //arrange + int expectedResult = 3; + //act + int actualResult = calculateWinner(rand() % 3 + 1, 5); + //assert + TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); +} +//3. Der User wählt eine Zahl zwischen 1 und 3 +// Durch den Computer wurde das ungültige Parameter 0 übergeben +void test_error_USER_randomChoice_Rock_zero() +{ + //arrange + int expectedResult = 3; + //act + int actualResult = calculateWinner(rand() % 3 + 1, 0); + //assert + TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); +} +//4. Durch den User wurde das ungültige Parameter 0 übergeben +// Der Computer wählt eine Zahl zwischen 1 und 3 +void test_error_USER_zero_Rock_randomChoice() +{ + //arrange + int expectedResult = 3; + //act + int actualResult = calculateWinner(0, rand() % 3 + 1); + //assert TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); } \ No newline at end of file diff --git a/src/test/c/Tim/test_hangman.c b/src/test/c/Tim/test_hangman.c new file mode 100644 index 0000000..2afdf17 --- /dev/null +++ b/src/test/c/Tim/test_hangman.c @@ -0,0 +1,24 @@ +#include "hangman.h" +#include "unity.h" + + + +void setUp(void) +{ + +} + +void tearDown(void) +{ + +} + +void test_ceedling_functionality() +{ + //arrange + int expectedResult = 0; + //act + int actualResult = 0; + //assert + TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); +} \ No newline at end of file