diff --git a/src/main/c/Stefan/place_your_code_here.txt b/src/main/c/Stefan/place_your_code_here.txt deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/c/Stefan/slot_machine.c b/src/main/c/Stefan/slot_machine.c new file mode 100644 index 0000000..f659eab --- /dev/null +++ b/src/main/c/Stefan/slot_machine.c @@ -0,0 +1,164 @@ +#include "slot_machine.h" +#include +#include +#include +#include + +void slotMachine(){ + + welcomeMessage(); + + char symbols[NUM_OF_SYMBOLS]; + + int balance = getBalance(); + + while(balance > 0){ + + int bet = getBet(balance); + balance = subtractBetFromBalance(bet, balance); + + randomizeSymbols(symbols); + balance = spin(symbols, bet, balance); + } + +} + +int getBalance(){ + int balance; + printf("Guthaben einwerfen: "); + balance = userInput(); + printf("Dein Guthaben: %d\n", balance); + return balance; +} + +int userInput(){ + int input; + scanf("%d", &input); + return input; +} + +int getBet(int balance){ + + while(1){ + printf("Wetteinsatz: "); + int bet = userInput(); + + if(bet <= balance && bet > 0){ + return bet; + } else { + printf("Ungueltige Eingabe!\n"); + } + + } + +} + +int subtractBetFromBalance(int bet, int balance){ + return balance - bet; +} + +void randomizeSymbols(char symbols[]){ + + srand(time(NULL)); + + for (int i = 0; i < NUM_OF_SYMBOLS; i++) { + + int r = rand() % 100; + + // 35% chance für A + if (r < 35) { + symbols[i] = 'A'; + } + // 30% chance für B + else if (r < 65) { + symbols[i] = 'B'; + } + // 20% chance für C + else if (r < 85) { + symbols[i] = 'C'; + } + // 15% chance für D + else { + symbols[i] = 'D'; + } + } + +} + +int spin(char symbols[], int bet, int balance){ + + int winnings = getWinnings(symbols, bet); + + showResult(symbols, winnings); + + balance += winnings; + printf("Aktuelles Guthaben: %d\n-------------------------\n", balance); + return balance; +} + +int getWinnings(char symbols[], int bet){ + + int winnings = 0; + + // 0 | 1 | 2 + // 3 | 4 | 5 + // 6 | 7 | 8 + + // 3 gleiche Symbole in einer Reihe gewinnen, Gewinn berechnen + for (int i = 0; i < ROWS; i++){ + + if (symbols[i * ROWS] == symbols[i * ROWS + 1] && symbols[i * ROWS] == symbols[i * ROWS + 2]) { + + switch(symbols[i * ROWS]){ + case 'A': winnings += bet * 3; break; + case 'B': winnings += bet * 5; break; + case 'C': winnings += bet * 10; break; + case 'D': winnings += bet * 20; break; + } + } + } + if (winnings > 0) { + printf("\nDu hast %d gewonnen!\n", winnings - bet); + } + else { + printf("\nLeider verloren.\n"); + } + + return winnings; +} + +void showResult(char symbols[], int winnings){ + + char winnerMessage[] = {""}; + + if(winnings > 0){ + strcpy(winnerMessage, " WINNER "); + } else { + strcpy(winnerMessage, " LOSER "); + } + + printf("\n" + " .-------.\n" + " {-%s-} \n" + " .=============.\n" + " | | __\n" + " | [%c] [%c] [%c] |( )\n" + " | [%c] [%c] [%c] | ||\n" + " | [%c] [%c] [%c] | ||\n" + " | |_||\n" + " | xxx ::::::: |--'\n" + " | ooo ::::::: |\n" + " | $$$ ::::::: |\n" + " | __ |\n" + " |_____/__\\____|\n\n", winnerMessage, symbols[0], symbols[1], symbols[2], symbols[3], symbols[4], symbols[5], symbols[6], symbols[7], symbols[8]); +} + +void welcomeMessage(){ + printf("Herzlich Willkommen zur \n\n" + " _ _ _ _ \n" + " | | | | | | (_) \n" + " ___| | ___ | |_ _ __ ___ __ _ ___| |__ _ _ __ ___ \n" + "/ __| |/ _ \\| __| | '_ ` _ \\ / _` |/ __| '_ \\| | '_ \\ / _ \\\n" + "\\__ \\ | (_) | |_ | | | | | (_| | (__| | | | | | | | __/\n" + "|___/_|\\___/ \\__| |_| |_| |_|\\__,_|\\___|_| |_|_|_| |_|\\___|\n\n"); +} \ No newline at end of file diff --git a/src/main/c/Stefan/slot_machine.h b/src/main/c/Stefan/slot_machine.h new file mode 100644 index 0000000..c08b4bb --- /dev/null +++ b/src/main/c/Stefan/slot_machine.h @@ -0,0 +1,19 @@ +#ifndef SLOT_MACHINE_H +#define SLOT_MACHINE_H + + +#define NUM_OF_SYMBOLS 9 +#define ROWS 3 + +void slotMachine(); +void welcomeMessage(); +int getBalance(); +int userInput(); +int getBet(int balance); +int subtractBetFromBalance(int bet, int balance); +void randomizeSymbols(char symbols[]); +int spin(char symbols[], int bet, int balance); +int getWinnings(char symbols[], int bet); +void showResult(char symbols[], int winnings); + +#endif // SLOT_MACHINE_H \ No newline at end of file diff --git a/src/main/c/main.c b/src/main/c/main.c index 6036ea8..f3c838d 100644 --- a/src/main/c/main.c +++ b/src/main/c/main.c @@ -15,6 +15,7 @@ #include "hangman.h" #include "tictactoe.h" #include "ASCII_art.h" +#include "Stefan/slot_machine.h" void openInterface(); @@ -37,6 +38,7 @@ void openInterface() "1: Schere-Stein-Papier\n" "2: Hangman\n" "3: TicTacToe\n" + "4: Slot Machine\n" "5: ASCII - Art\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("%d", &selection); @@ -56,9 +58,9 @@ void openInterface() case(3): startTicTacToe(); break; - /*case(4): - //Spiel() - break;*/ + case(4): + slotMachine(); + break; case(5): ASCII_Art(); break; diff --git a/src/test/c/Stefan/place_your_tests_here.txt b/src/test/c/Stefan/place_your_tests_here.txt deleted file mode 100644 index e69de29..0000000 diff --git a/src/test/c/Stefan/test_slot_machine.c b/src/test/c/Stefan/test_slot_machine.c new file mode 100644 index 0000000..f2a17c9 --- /dev/null +++ b/src/test/c/Stefan/test_slot_machine.c @@ -0,0 +1,224 @@ +#include "slot_machine.h" +#include "unity.h" + +void setUp() {} + +void tearDown() {} + +void test_subtract_bet_10_from_balance_10() { + + //arrange + int expectedResult = 0; + + //act + int actualResult = subtractBetFromBalance(10, 10); + + //assert + TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); +} + +void test_subtract_bet_0_from_balance_10() { + + //arrange + int expectedResult = 10; + + //act + int actualResult = subtractBetFromBalance(0, 10); + + //assert + TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); +} + +void test_subtract_bet_5_from_balance_10() { + + //arrange + int expectedResult = 5; + + //act + int actualResult = subtractBetFromBalance(5, 10); + + //assert + TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); +} + +void test_no_rows_won_bet_equals_10() { + + //arrange + char testSymbols[] = {"AABAACAAD"}; + + int expectedResult = 0; + + //act + int actualResult = getWinnings(testSymbols, 10); + + //assert + TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); +} + +void test_3_A_won_bet_equals_10() { + + //arrange + char testSymbols[] = {"AAAAACAAD"}; + + int expectedResult = 30; + + //act + int actualResult = getWinnings(testSymbols, 10); + + //assert + TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); +} + +void test_3_B_won_bet_equals_10() { + + //arrange + char testSymbols[] = {"BBBAACAAD"}; + + int expectedResult = 50; + + //act + int actualResult = getWinnings(testSymbols, 10); + + //assert + TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); +} + +void test_3_C_won_bet_equals_10() { + + //arrange + char testSymbols[] = {"BABAACCCC"}; + + int expectedResult = 100; + + //act + int actualResult = getWinnings(testSymbols, 10); + + //assert + TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); +} + +void test_3_D_won_bet_equals_10() { + + //arrange + char testSymbols[] = {"BABDDDCAC"}; + + int expectedResult = 200; + + //act + int actualResult = getWinnings(testSymbols, 10); + + //assert + TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); +} + +void test_6_A_won_bet_equals_10() { + + //arrange + char testSymbols[] = {"AAAAAACAC"}; + + int expectedResult = 60; + + //act + int actualResult = getWinnings(testSymbols, 10); + + //assert + TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); +} + +void test_6_B_won_bet_equals_10() { + + //arrange + char testSymbols[] = {"BBBBBBCAC"}; + + int expectedResult = 100; + + //act + int actualResult = getWinnings(testSymbols, 10); + + //assert + TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); +} + +void test_6_C_won_bet_equals_10() { + + //arrange + char testSymbols[] = {"CCCCCCCAC"}; + + int expectedResult = 200; + + //act + int actualResult = getWinnings(testSymbols, 10); + + //assert + TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); +} + +void test_6_D_won_bet_equals_10() { + + //arrange + char testSymbols[] = {"DDDDDDCAC"}; + + int expectedResult = 400; + + //act + int actualResult = getWinnings(testSymbols, 10); + + //assert + TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); +} + +void test_3_A_3_B_won_bet_equals_10() { + + //arrange + char testSymbols[] = {"AAABBBCAC"}; + + int expectedResult = 80; + + //act + int actualResult = getWinnings(testSymbols, 10); + + //assert + TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); +} + +void test_3_C_3_D_won_bet_equals_10() { + + //arrange + char testSymbols[] = {"BAACCCDDD"}; + + int expectedResult = 300; + + //act + int actualResult = getWinnings(testSymbols, 10); + + //assert + TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); +} + +void test_9_A_won_bet_equals_10() { + + //arrange + char testSymbols[] = {"AAAAAAAAA"}; + + int expectedResult = 90; + + //act + int actualResult = getWinnings(testSymbols, 10); + + //assert + TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); +} + +void test_3_B_3_C_3_D_won_bet_equals_10() { + + //arrange + char testSymbols[] = {"BBBCCCDDD"}; + + int expectedResult = 350; + + //act + int actualResult = getWinnings(testSymbols, 10); + + //assert + TEST_ASSERT_EQUAL_INT(expectedResult, actualResult); +} \ No newline at end of file