Browse Source
Merge pull request #15 from Mac10goesBRRRT/navigation
Merge pull request #15 from Mac10goesBRRRT/navigation
Navigationremotes/origin/fdai7372-main-patch-93194
Mac10goesBRRRT
2 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 1742 additions and 0 deletions
-
0build-project.sh
-
1run_test_display_gcov.sh
-
30src/c/commands.c
-
8src/c/commands.h
-
77src/c/items.c
-
25src/c/items.h
-
262src/c/main.c
-
90src/c/map.c
-
39src/c/map.h
-
12src/c/nav_helper.c
-
9src/c/nav_helper.h
-
123src/c/player.c
-
30src/c/player.h
-
144src/c/shop.c
-
9src/c/shop.h
-
61src/c/weapon.c
-
41src/c/weapon.h
-
6src/content/game.map
-
53src/content/game_instructions.txt
-
8src/content/items.map
-
37test/c/test_commands.c
-
109test/c/test_items.c
-
153test/c/test_map.c
-
36test/c/test_nav_helper.c
-
155test/c/test_player.c
-
224test/c/test_weapon.c
@ -0,0 +1,30 @@ |
|||
#include <stdio.h> |
|||
#include <stdlib.h> |
|||
#include <string.h> |
|||
#include <stdbool.h> |
|||
|
|||
#include "map.h" |
|||
|
|||
char* getPossibleCommands(Room r, int playerPosition) |
|||
{ |
|||
char commands[][20] = {}; |
|||
|
|||
char *msg = malloc(sizeof(char) * (500)); |
|||
strcpy(msg, ""); //assign char (string) that no leading zero result |
|||
if (playerPosition > 0) |
|||
{ |
|||
strcat(msg, "You can move south from here\n"); |
|||
} |
|||
|
|||
if (playerPosition < mapMax - 1) |
|||
{ |
|||
strcat(msg, "You can move north from here\n"); |
|||
} |
|||
|
|||
if (r.shopAvailable == 1) |
|||
{ |
|||
strcat(msg, "You can call 'shop' to buy items.\n"); |
|||
} |
|||
|
|||
return msg; |
|||
} |
@ -0,0 +1,8 @@ |
|||
#ifndef COMMANDS_H |
|||
#define COMMANDS_H |
|||
|
|||
#include "map.h" |
|||
|
|||
char* getPossibleCommands(Room r, int playerPosition); |
|||
|
|||
#endif // COMMANDS_H |
@ -0,0 +1,77 @@ |
|||
#include <stdio.h> |
|||
#include <stdlib.h> |
|||
#include <string.h> |
|||
#include <stdbool.h> |
|||
|
|||
#include "nav_helper.h" |
|||
#include "items.h" |
|||
|
|||
Item *getItems(char *itemsMapFile) |
|||
{ |
|||
static Item getItems[maxItems]; |
|||
|
|||
FILE *stream; |
|||
char *line = NULL; |
|||
size_t len = 0; |
|||
ssize_t read; |
|||
|
|||
stream = fopen(itemsMapFile, "r"); |
|||
if (stream == NULL) |
|||
{ |
|||
printf("ERROR: couldn't open or find file: ITEMS!\n"); |
|||
exit(EXIT_FAILURE); // exit |
|||
} |
|||
|
|||
char delimiter[] = ";"; |
|||
|
|||
/* print line by line from file */ |
|||
int lineCounter = 0; |
|||
while ((read = getline(&line, &len, stream)) != -1) |
|||
{ |
|||
// printf("Retrieved line of length %u :\n", read); |
|||
if (startsWith(line, "#") == 0) |
|||
{ |
|||
char *arr[itemAttributesMax]; |
|||
char *token = strtok(line, delimiter); |
|||
int countToken = 0; |
|||
while (token != NULL) |
|||
{ |
|||
arr[countToken] = token; |
|||
token = strtok(NULL, ";"); |
|||
|
|||
countToken += 1; |
|||
} |
|||
free(token); |
|||
|
|||
Item i; |
|||
i.id = atoi(arr[0]); |
|||
strcpy(i.itemName, arr[1]); |
|||
// printf(arr[2]); |
|||
i.price = atoi(arr[3]); |
|||
|
|||
getItems[lineCounter] = i; |
|||
lineCounter += 1; |
|||
} |
|||
} |
|||
return getItems; |
|||
} |
|||
|
|||
int getItemPrice(Item *item) |
|||
{ |
|||
return item->price; |
|||
} |
|||
|
|||
void setItemPrice(Item *item, int price) |
|||
{ |
|||
item->price = price; |
|||
} |
|||
|
|||
int getItemShopAvailable(Item *item) |
|||
{ |
|||
return item->inShopAvailable; |
|||
} |
|||
|
|||
void setItemShopAvailable(Item *item, bool value) |
|||
{ |
|||
item->inShopAvailable = value; |
|||
} |
@ -0,0 +1,25 @@ |
|||
#ifndef ITEMS_H |
|||
#define ITEMS_H |
|||
|
|||
#define itemAttributesMax 4 // for items |
|||
#define maxItems 100 // for inventory/item list |
|||
|
|||
#include <stdbool.h> |
|||
|
|||
typedef struct |
|||
{ |
|||
int id; |
|||
char itemName[50]; |
|||
bool inShopAvailable; |
|||
int price; |
|||
} Item; |
|||
|
|||
Item *getItems(char *itemsMapFile); |
|||
|
|||
int getItemPrice(Item *item); |
|||
void setItemPrice(Item *item, int price); |
|||
|
|||
int getItemShopAvailable(Item *item); |
|||
void setItemShopAvailable(Item *item, bool value); |
|||
|
|||
#endif |
@ -0,0 +1,262 @@ |
|||
// BIBs |
|||
#include <stdio.h> |
|||
#include <stdlib.h> |
|||
#include <stdbool.h> |
|||
#include <string.h> |
|||
|
|||
#include "map.h" |
|||
#include "nav_helper.h" |
|||
#include "items.h" |
|||
#include "shop.h" |
|||
#include "player.h" |
|||
#include "commands.h" |
|||
|
|||
bool gameRunning; |
|||
bool acceptedRules; |
|||
|
|||
// declare needed variables |
|||
Room *map; |
|||
Item *availableItems; |
|||
Player actualPlayer; |
|||
int inputCounter = 0; |
|||
|
|||
// content |
|||
char *gameInstructionsFile = "../../src/content/game_instructions.txt"; |
|||
char *gameMapFile = "../../src/content/game.map"; |
|||
char *itemsMapFile = "../../src/content/items.map"; |
|||
|
|||
// navigation |
|||
int playerPosition = 0; |
|||
int lastPlayerPosition = 0; |
|||
|
|||
// function declarations |
|||
void printInit(); |
|||
void setUp(); |
|||
void acceptInstructions(); |
|||
void processInput(); |
|||
int checkExit(); |
|||
int checkMove(); |
|||
void printStatus(); |
|||
|
|||
int main() |
|||
{ |
|||
// init and instructions |
|||
printInit(); |
|||
|
|||
if (acceptedRules == 1) |
|||
{ |
|||
setUp(); |
|||
|
|||
char userInput[20]; // maximum defined user input length |
|||
while (gameRunning == 1) // while running |
|||
{ |
|||
// Print current status |
|||
printStatus(); |
|||
|
|||
// User Input |
|||
scanf(" %s", userInput); |
|||
printf("\n"); |
|||
|
|||
// NEXT STEP: |
|||
// Processing |
|||
processInput(userInput); |
|||
} |
|||
} |
|||
return 0; |
|||
} |
|||
|
|||
// init dialogue |
|||
void printInit() |
|||
{ |
|||
FILE *stream; |
|||
char *line = NULL; |
|||
size_t len = 0; |
|||
ssize_t read; |
|||
|
|||
stream = fopen(gameInstructionsFile, "r"); |
|||
if (stream == NULL) |
|||
{ |
|||
printf("ERROR: couldn't open or find file: INSTRUCTIONS !\n"); |
|||
exit(EXIT_FAILURE); // exit |
|||
} |
|||
|
|||
/* print line by line from file */ |
|||
while ((read = getline(&line, &len, stream)) != -1) |
|||
{ |
|||
// printf("Retrieved line of length %u :\n", read); |
|||
printf("%s", line); |
|||
} |
|||
|
|||
free(line); /* Deallocate allocated memory */ |
|||
fclose(stream); /* closing file */ |
|||
|
|||
acceptInstructions(); |
|||
} |
|||
|
|||
// setUp |
|||
void setUp() |
|||
{ |
|||
// define variables |
|||
actualPlayer.id = 1; |
|||
actualPlayer.wallet = 100; |
|||
gameRunning = 1; |
|||
|
|||
// get Content |
|||
map = getMap(gameMapFile); |
|||
availableItems = getItems(itemsMapFile); |
|||
} |
|||
|
|||
// accept rules and instructions for init dialogue |
|||
void acceptInstructions() |
|||
{ |
|||
char userInput[1]; |
|||
bool inputState = 0; |
|||
int acceptCounter = 0; |
|||
while (inputState == 0) |
|||
{ |
|||
scanf(" %c", userInput); |
|||
if (strcasecmp(userInput, "y") == 0) |
|||
{ |
|||
acceptedRules = 1; |
|||
inputState = 1; // break while |
|||
} |
|||
else if (strcasecmp(userInput, "n") == 0) |
|||
{ |
|||
printf("You didn't read our rules & instructions. The game will close now. \n\n"); |
|||
acceptedRules = 0; |
|||
inputState = 1; // break while |
|||
} |
|||
else |
|||
{ |
|||
printf("Invalid Input!\n"); |
|||
} |
|||
} |
|||
} |
|||
|
|||
// process user input |
|||
void processInput(char userInput[20]) |
|||
{ |
|||
if (checkExit(userInput) == 1) |
|||
{ |
|||
gameRunning = 0; |
|||
printf("!GAME EXIT!\n"); |
|||
} |
|||
else if (strcmp(userInput, "shop") == 0) |
|||
{ |
|||
Room actualRoom = map[playerPosition]; |
|||
if (actualRoom.shopAvailable == 1) |
|||
{ |
|||
int *result = malloc(sizeof(int) * 2); |
|||
result = openShop(availableItems, actualPlayer); // result > 0 -> integer = index of item OR result = 0 -> cancel |
|||
if (result[0] == 0) |
|||
{ |
|||
actualPlayer = buyItem(availableItems, result[1], actualPlayer); |
|||
} |
|||
else if (result[0] == 1) |
|||
{ |
|||
actualPlayer = sellItem(result[1], actualPlayer); |
|||
} |
|||
} |
|||
else |
|||
{ |
|||
printf("You can't access the shop from here."); |
|||
} |
|||
} |
|||
else if (strcmp(userInput, "inventory") == 0) |
|||
{ |
|||
showInventory(actualPlayer); |
|||
} |
|||
else if (checkMove(userInput) == 1) |
|||
{ |
|||
printf("Wrong Input!\n"); |
|||
} |
|||
} |
|||
|
|||
// function for checking user input of exit |
|||
int checkExit(char userInput[20]) |
|||
{ |
|||
if (strcmp(userInput, "esc") == 0 || strcmp(userInput, "exit") == 0 || strcmp(userInput, "quit") == 0) |
|||
{ |
|||
return 1; |
|||
} |
|||
|
|||
return 0; |
|||
} |
|||
|
|||
// check is user moved |
|||
int checkMove(char userInput[20]) |
|||
{ |
|||
Room r = map[playerPosition]; |
|||
inputCounter += 1; |
|||
if (strcmp(userInput, "north") == 0) |
|||
{ |
|||
lastPlayerPosition = playerPosition; |
|||
if (playerPosition == (int)(mapMax - 1)) |
|||
{ |
|||
printf("You have reached the border. You have to go in the other direction!\n"); |
|||
} |
|||
else |
|||
{ |
|||
playerPosition = r.successor; |
|||
} |
|||
|
|||
return 0; |
|||
} |
|||
else if (strcmp(userInput, "south") == 0) |
|||
{ |
|||
lastPlayerPosition = playerPosition; |
|||
if (playerPosition > 0) |
|||
{ |
|||
playerPosition = r.predecessor; |
|||
} |
|||
else |
|||
{ |
|||
printf("You have reached the border. You have to go in the other direction!\n"); |
|||
} |
|||
|
|||
return 0; |
|||
} |
|||
else |
|||
{ |
|||
return 1; |
|||
} |
|||
} |
|||
|
|||
// print actual location and messages from game.map |
|||
void printStatus() |
|||
{ |
|||
Room actualRoom = map[playerPosition]; |
|||
char moveMessage[30]; |
|||
|
|||
if (lastPlayerPosition > playerPosition) |
|||
{ |
|||
strcpy(moveMessage, "You went to the south!"); |
|||
} |
|||
else if (lastPlayerPosition < playerPosition) |
|||
{ |
|||
strcpy(moveMessage, "You went to the north!"); |
|||
} |
|||
else if (lastPlayerPosition == playerPosition && playerPosition == 0) |
|||
{ |
|||
strcpy(moveMessage, "START"); |
|||
} |
|||
else |
|||
{ |
|||
strcpy(moveMessage, "You didn't move"); |
|||
} |
|||
|
|||
if (lastPlayerPosition != playerPosition || playerPosition == 0 && inputCounter == 0) |
|||
{ |
|||
printf("\n\n################################################################################\n"); |
|||
|
|||
printf("--> %s <--\n", moveMessage); |
|||
printf("%s\n", actualRoom.nameRoom); |
|||
printf("%s\n", actualRoom.msgRoom); |
|||
printf("\n"); |
|||
|
|||
char *possibleCommands = malloc(sizeof(char) * (500)); |
|||
possibleCommands = getPossibleCommands(map[playerPosition], playerPosition); |
|||
printf("%s", possibleCommands); |
|||
free(possibleCommands); |
|||
} |
|||
} |
@ -0,0 +1,90 @@ |
|||
// headers |
|||
#include "map.h" |
|||
|
|||
Room *getMap(char *gameMapFile) |
|||
{ |
|||
static Room fillMap[mapMax]; |
|||
|
|||
FILE *stream; |
|||
char *line = NULL; |
|||
size_t len = 0; |
|||
ssize_t read; |
|||
|
|||
stream = fopen(gameMapFile, "r"); |
|||
if (stream == NULL) |
|||
{ |
|||
printf("ERROR: couldn't open or find file: MAP!\n"); |
|||
exit(EXIT_FAILURE); // exit |
|||
} |
|||
|
|||
char delimiter[] = ";"; |
|||
|
|||
/* print line by line from file */ |
|||
int lineCounter = 0; |
|||
while ((read = getline(&line, &len, stream)) != -1) |
|||
{ |
|||
|
|||
// printf("Retrieved line of length %u :\n", read); |
|||
if (startsWith(line, "#") == 0) |
|||
{ |
|||
char *arr[roomAttributesMax]; |
|||
char *token = strtok(line, delimiter); |
|||
int countToken = 0; |
|||
while (token != NULL) |
|||
{ |
|||
arr[countToken] = token; |
|||
token = strtok(NULL, ";"); |
|||
|
|||
countToken += 1; |
|||
} |
|||
free(token); |
|||
|
|||
Room r; |
|||
r.id = atoi(arr[0]); |
|||
strcpy(r.nameRoom, arr[1]); |
|||
strcpy(r.msgRoom, arr[2]); |
|||
r.successor = atoi(arr[3]); |
|||
r.predecessor = atoi(arr[4]); |
|||
memcpy(r.items, arr[5], sizeof arr[5]); |
|||
r.shopAvailable = atoi(arr[6]); |
|||
|
|||
fillMap[lineCounter] = r; |
|||
lineCounter += 1; |
|||
} |
|||
} |
|||
|
|||
free(line); /* Deallocate allocated memory */ |
|||
fclose(stream); /* closing file */ |
|||
|
|||
return fillMap; |
|||
}; |
|||
|
|||
int getRoomSuccessor(Room *room) |
|||
{ |
|||
return room->successor; |
|||
} |
|||
|
|||
void setRoomSuccessor(Room *room, int successorSet) |
|||
{ |
|||
room->successor = successorSet; |
|||
} |
|||
|
|||
int getRoomPredecessor(Room *room) |
|||
{ |
|||
return room->predecessor; |
|||
} |
|||
|
|||
void setRoomPredecessor(Room *room, int predecessorSet) |
|||
{ |
|||
room->predecessor = predecessorSet; |
|||
} |
|||
|
|||
bool getRoomShopAvailable(Room *room) |
|||
{ |
|||
return room->shopAvailable; |
|||
} |
|||
|
|||
void setRoomShopAvailable(Room *room, bool shopAvailableSet) |
|||
{ |
|||
room->shopAvailable = shopAvailableSet; |
|||
} |
@ -0,0 +1,39 @@ |
|||
#ifndef MAP_H |
|||
#define MAP_H |
|||
|
|||
//bibs |
|||
#include <stdio.h> |
|||
#include <stdlib.h> |
|||
#include <stdbool.h> |
|||
#include <string.h> |
|||
|
|||
#include "nav_helper.h" |
|||
|
|||
//defs |
|||
#define mapMax 4 // for map (adjust to txt count of rooms -> game.map) |
|||
#define roomAttributesMax 7 // for room struct (adjust to txt count of room-attributes -> game.map) |
|||
|
|||
typedef struct Room |
|||
{ |
|||
int id; |
|||
char nameRoom[20]; |
|||
char msgRoom[150]; |
|||
int successor; |
|||
int predecessor; |
|||
char items[10]; |
|||
bool shopAvailable; |
|||
} Room; |
|||
|
|||
Room *getMap(char *gameMapFile); |
|||
|
|||
|
|||
int getRoomSuccessor(Room *room); |
|||
void setRoomSuccessor(Room *room, int successorSet); |
|||
|
|||
int getRoomPredecessor(Room *room); |
|||
void setRoomPredecessor(Room *room, int predecessorSet); |
|||
|
|||
bool getRoomShopAvailable(Room *room); |
|||
void setRoomShopAvailable(Room *room, bool shopAvailableSet); |
|||
|
|||
#endif // MAP_H |
@ -0,0 +1,12 @@ |
|||
//bibs |
|||
#include <stdbool.h> |
|||
|
|||
//headers |
|||
#include "nav_helper.h" |
|||
|
|||
bool startsWith(const char *a, const char *b) |
|||
{ |
|||
if (strncmp(a, b, strlen(b)) == 0) |
|||
return 1; |
|||
return 0; |
|||
}; |
@ -0,0 +1,9 @@ |
|||
#ifndef NAV_HELPER_H |
|||
#define NAV_HELPER_H |
|||
|
|||
#include <stdbool.h> |
|||
#include <string.h> |
|||
|
|||
bool startsWith(const char *a, const char *b); |
|||
|
|||
#endif |
@ -0,0 +1,123 @@ |
|||
#include <stdio.h> |
|||
#include <stdlib.h> |
|||
#include <string.h> |
|||
#include <stdbool.h> |
|||
|
|||
#include "player.h" |
|||
|
|||
// PLAYER INVENTORY |
|||
|
|||
// add and remove |
|||
Player addItemToInventory(Item *availableItems, int itemIndex, Player actualPlayer) |
|||
{ |
|||
int counter = actualPlayer.itemCounter; |
|||
actualPlayer.itemInventory[counter] = availableItems[itemIndex - 1]; // -1 to get right index (items begin - 1,2,3,4...) |
|||
actualPlayer.itemCounter += 1; |
|||
|
|||
return actualPlayer; |
|||
} |
|||
|
|||
Player removeItemFromInventory(int itemIndex, Player actualPlayer) |
|||
{ |
|||
Item items[maxItems]; // actualPlayer.itemInventory |
|||
int i, index = -1; |
|||
|
|||
for (i = 0; i < maxItems; i++) |
|||
{ |
|||
if (i == itemIndex) |
|||
{ |
|||
// printf("%d - '%s' has been removed from inventory.\n", actualPlayer.itemInventory[i].id, actualPlayer.itemInventory[i].itemName); |
|||
index = i; |
|||
break; |
|||
} |
|||
} |
|||
|
|||
if (index != -1) |
|||
{ |
|||
// shift all the element from index+1 by one position to the left |
|||
for (i = index; i < maxItems - 1; i++) |
|||
actualPlayer.itemInventory[i] = actualPlayer.itemInventory[i + 1]; |
|||
|
|||
/*printf("New Array : "); |
|||
for(i = 0; i < maxItems - 1; i++) |
|||
printf("%d ",actualPlayer.itemInventory[i].id);*/ |
|||
} |
|||
else |
|||
printf("Element Not Found\n"); |
|||
|
|||
actualPlayer.itemCounter = actualPlayer.itemCounter - 1; |
|||
|
|||
return actualPlayer; |
|||
} |
|||
|
|||
// currency |
|||
Player setTotal(Player actualPlayer, int value) |
|||
{ |
|||
actualPlayer.wallet = value; |
|||
return actualPlayer; |
|||
} |
|||
|
|||
Player addMoneyToPlayer(Player actualPlayer, int money) |
|||
{ |
|||
int newTotal = money + actualPlayer.wallet; |
|||
actualPlayer = setTotal(actualPlayer, newTotal); |
|||
return actualPlayer; |
|||
} |
|||
|
|||
Player removeMoneyFromPlayer(Player actualPlayer, int money) |
|||
{ |
|||
int newTotal = actualPlayer.wallet - money; |
|||
actualPlayer = setTotal(actualPlayer, newTotal); |
|||
return actualPlayer; |
|||
} |
|||
|
|||
//add and remove items with currency |
|||
Player buyItem(Item *availableItems, int itemIndex, Player actualPlayer) |
|||
{ |
|||
int itemPrice = availableItems[itemIndex - 1].price; |
|||
if (actualPlayer.wallet >= itemPrice) |
|||
{ |
|||
actualPlayer = addItemToInventory(availableItems, itemIndex, actualPlayer); |
|||
actualPlayer = removeMoneyFromPlayer(actualPlayer, itemPrice); |
|||
printf("You bought item[%d] for %d$! \nYour balance is now: %d$\n", itemIndex, itemPrice, actualPlayer.wallet); |
|||
return actualPlayer; |
|||
} |
|||
else |
|||
{ |
|||
printf("You don't have enough money.\n\n"); |
|||
return actualPlayer; |
|||
} |
|||
} |
|||
|
|||
Player sellItem(int itemIndex, Player actualPlayer) |
|||
{ |
|||
int priceItemSell = actualPlayer.itemInventory[itemIndex].price; |
|||
actualPlayer = addMoneyToPlayer(actualPlayer, actualPlayer.itemInventory[itemIndex].price / 2); |
|||
printf("Item has been sold for 50%% of the purchase price (purchase price: %d$)! \nYour balance is now: %d$\n", priceItemSell, actualPlayer.wallet); |
|||
|
|||
actualPlayer = removeItemFromInventory(itemIndex, actualPlayer); |
|||
return actualPlayer; |
|||
} |
|||
|
|||
// show |
|||
void showInventory(Player actualPlayer) |
|||
{ |
|||
int inventoryItemCounter = actualPlayer.itemCounter; |
|||
|
|||
if (inventoryItemCounter == 0) |
|||
{ |
|||
printf("*** Inventory is empty *** \n\n"); |
|||
} |
|||
else |
|||
{ |
|||
printf("*** Inventory *** \n\n"); |
|||
|
|||
for (int i = 0; i < actualPlayer.itemCounter; i++) |
|||
{ |
|||
// printf("%d: %d - %s\n", i, inventory[i].id, inventory[i].itemName); |
|||
printf("> %s - %d\n", actualPlayer.itemInventory[i].itemName, i); |
|||
} |
|||
} |
|||
|
|||
printf("\n\n"); |
|||
} |
@ -0,0 +1,30 @@ |
|||
#ifndef PLAYER_H |
|||
#define PLAYER_H |
|||
|
|||
#include "items.h" |
|||
|
|||
typedef struct |
|||
{ |
|||
int id; |
|||
int itemCounter; |
|||
Item itemInventory[100]; |
|||
int wallet; |
|||
} Player; |
|||
|
|||
//add and remove items |
|||
Player addItemToInventory(Item *availableItem, int itemIndex, Player actualPlayer); |
|||
Player removeItemFromInventory(int index, Player actualPlayer); |
|||
|
|||
//currency |
|||
Player setTotal(Player actualPlayer, int value); |
|||
Player addMoneyToPlayer(Player actualPlayer, int money); |
|||
Player removeMoneyFromPlayer(Player actualPlayer, int money); |
|||
|
|||
//add and remove items with currency |
|||
Player buyItem(Item *availableItems, int itemIndex, Player actualPlayer); |
|||
Player sellItem(int itemIndex, Player actualPlayer); |
|||
|
|||
//show |
|||
void showInventory(Player actualPlayer); |
|||
|
|||
#endif |
@ -0,0 +1,144 @@ |
|||
#include <stdio.h> |
|||
#include <stdlib.h> |
|||
#include <string.h> |
|||
#include <stdbool.h> |
|||
#include <ctype.h> |
|||
|
|||
#include "shop.h" |
|||
#include "player.h" |
|||
|
|||
int *openShop(Item *availableItems, Player actualPlayer) |
|||
{ |
|||
int mode = 0; |
|||
int *x = malloc(sizeof(int) * 2); |
|||
|
|||
int userModeInput; |
|||
fflush(stdout); |
|||
bool selectMode = 1; |
|||
while (selectMode == 1) |
|||
{ |
|||
printf("Please type '0' for buy or '1' to sell items!\n"); |
|||
while (scanf(" %d", &userModeInput) != 1) |
|||
{ |
|||
printf("Invalid [index]. Please try again: "); |
|||
fflush(stdout); |
|||
} |
|||
|
|||
if (userModeInput > 1 || userModeInput < 0) |
|||
{ |
|||
printf("Invalid [index]. Please try again: "); |
|||
} |
|||
else if (userModeInput == 0) |
|||
{ |
|||
mode = 0; |
|||
selectMode = 0; |
|||
} |
|||
else if (userModeInput == 1) |
|||
{ |
|||
mode = 1; |
|||
selectMode = 0; |
|||
} |
|||
} |
|||
|
|||
int userInput; |
|||
fflush(stdout); |
|||
bool shopIsOpen = 1; |
|||
|
|||
if (mode == 0) |
|||
{ |
|||
|
|||
while (shopIsOpen == 1) |
|||
{ |
|||
printf("*** SHOP-Items *** \n\n"); |
|||
|
|||
// printf("%-5s %-30s %5s\n", "Index", "Name", "Price"); |
|||
for (int i = 0; i < 6; i++) |
|||
{ |
|||
printf("%-5d %-40s %5d$\n", availableItems[i].id, availableItems[i].itemName, availableItems[i].price); |
|||
} |
|||
|
|||
printf("\n-> to buy items type '[index of item]' \n-> write '0' to quit the shop'\n\n"); |
|||
|
|||
while (scanf(" %d", &userInput) != 1) |
|||
{ |
|||
printf("Invalid [index]. Please try again: "); |
|||
fflush(stdout); |
|||
} |
|||
|
|||
if (userInput > 0) |
|||
{ |
|||
x[0] = mode; |
|||
x[1] = userInput; |
|||
return x; |
|||
// BUY ITEM added later -> addItemToInventory(userInput); |
|||
} |
|||
else if (userInput == 0) |
|||
{ |
|||
shopIsOpen = 0; |
|||
printf("Enjoy your items, have a great day!\n"); |
|||
x[0] = -1; |
|||
x[1] = -1; |
|||
return x; |
|||
} |
|||
else |
|||
{ |
|||
printf("Invalid [index]. Please try again: "); |
|||
} |
|||
} |
|||
} |
|||
else if (mode == 1) |
|||
{ |
|||
while (shopIsOpen == 1) |
|||
{ |
|||
if (actualPlayer.itemCounter > 0) |
|||
{ |
|||
printf("*** Your inventory *** \n\n"); |
|||
|
|||
// printf("%-5s %-30s %5s\n", "Index", "Name", "Price"); |
|||
for (int i = 0; i < actualPlayer.itemCounter; i++) |
|||
{ |
|||
printf("%-5d %-40s %5d$\n", i+1, actualPlayer.itemInventory[i].itemName, actualPlayer.itemInventory[i].price); |
|||
} |
|||
|
|||
printf("\n-> to sell items type '[index of item]' \n-> write '0' to quit the shop'\n\n"); |
|||
|
|||
while (scanf(" %d", &userInput) != 1) |
|||
{ |
|||
printf("Invalid [index]. Please try again: "); |
|||
fflush(stdout); |
|||
} |
|||
|
|||
if (userInput > 0) |
|||
{ |
|||
x[0] = mode; |
|||
x[1] = userInput-1; //index begin on 1 because we will cancel with 0 |
|||
return x; |
|||
// BUY ITEM added later -> addItemToInventory(userInput); |
|||
} |
|||
else if (userInput == 0) |
|||
{ |
|||
shopIsOpen = 0; |
|||
printf("Enjoy your money, have a great day!\n"); |
|||
x[0] = -1; |
|||
x[1] = -1; |
|||
return x; |
|||
} |
|||
else |
|||
{ |
|||
printf("Invalid [index]. Please try again: "); |
|||
} |
|||
} |
|||
else |
|||
{ |
|||
shopIsOpen = 0; |
|||
printf("*** Your inventory is empty *** \n\n"); |
|||
x[0] = -1; |
|||
x[1] = -1; |
|||
return x; |
|||
} |
|||
} |
|||
} |
|||
|
|||
x[0] = -1; |
|||
return x; |
|||
} |
@ -0,0 +1,9 @@ |
|||
#ifndef SHOP_H |
|||
#define SHOP_H |
|||
|
|||
#include "items.h" |
|||
#include "player.h" |
|||
|
|||
int *openShop(Item *availableItems, Player actualPlayer); |
|||
|
|||
#endif |
@ -0,0 +1,61 @@ |
|||
#include "weapon.h" |
|||
|
|||
char *getName(Weapon *weapon) |
|||
{ |
|||
return weapon->name; |
|||
} |
|||
|
|||
void setName(Weapon *weapon, char *nameToSet) |
|||
{ |
|||
weapon->name = nameToSet; |
|||
} |
|||
|
|||
char *getFullName(Weapon *weapon) |
|||
{ |
|||
return weapon->fullName; |
|||
} |
|||
|
|||
void setFullName(Weapon *weapon, char *fullNameToSet) |
|||
{ |
|||
weapon->fullName = fullNameToSet; |
|||
} |
|||
|
|||
int getTypeID(Weapon *weapon) |
|||
{ |
|||
return weapon->typeID; |
|||
} |
|||
|
|||
void setTypeID(Weapon *weapon, int typeToSet) |
|||
{ |
|||
weapon->typeID = typeToSet; |
|||
} |
|||
|
|||
int getDamageModifier(Weapon *weapon) |
|||
{ |
|||
return weapon->damageModifier; |
|||
} |
|||
|
|||
void setDamageModifier(Weapon *weapon, int modifierSet) |
|||
{ |
|||
weapon->damageModifier = modifierSet; |
|||
} |
|||
|
|||
int getBaseDamage(Weapon *weapon) |
|||
{ |
|||
return weapon->baseDamage; |
|||
} |
|||
|
|||
void setBaseDamage(Weapon *weapon, int baseDmgSet) |
|||
{ |
|||
weapon->baseDamage = baseDmgSet; |
|||
} |
|||
|
|||
bool getAvailable(Weapon *weapon) |
|||
{ |
|||
return weapon->canBeUsed; |
|||
} |
|||
|
|||
void setAvailable(Weapon *weapon, bool availableSet) |
|||
{ |
|||
weapon->canBeUsed = availableSet; |
|||
} |
@ -0,0 +1,41 @@ |
|||
#ifndef WEAPON_H |
|||
#define WEAPON_H |
|||
|
|||
#include <stdio.h> |
|||
#include <stdlib.h> |
|||
#include <stdbool.h> |
|||
#include <string.h> |
|||
|
|||
typedef struct |
|||
{ |
|||
int id; |
|||
char *fullName; |
|||
char *name; |
|||
int typeID; |
|||
char *typeName; |
|||
int damageModifier; |
|||
int baseDamage; |
|||
bool canBeUsed; |
|||
} Weapon; |
|||
|
|||
char *getName(Weapon *weapon); |
|||
void setName(Weapon *weapon, char *nameToSet); |
|||
|
|||
char *getFullName(Weapon *weapon); |
|||
void setFullName(Weapon *weapon, char *fullNameToSet); |
|||
|
|||
int getTypeID(Weapon *weapon); |
|||
void setTypeID(Weapon *weapon, int typeToSet); |
|||
|
|||
// typeName placeholder |
|||
|
|||
int getDamageModifier(Weapon *weapon); |
|||
void setDamageModifier(Weapon *weapon, int modifierSet); |
|||
|
|||
int getBaseDamage(Weapon *weapon); |
|||
void setBaseDamage(Weapon *weapon, int baseDmgSet); |
|||
|
|||
bool getAvailable(Weapon *weapon); |
|||
void setAvailable(Weapon *weapon, bool availableSet); |
|||
|
|||
#endif |
@ -0,0 +1,6 @@ |
|||
# LINES WITH '#' AT BEGINNING GET IGNORED |
|||
#ID;NAME ORT;MSG;successor;predeacessor;items(comma seperated);shop available (1=y,0=n); |
|||
0;office;welcome to office;1;-1;1,2;0 |
|||
1;hospital;welcome to the hospital;2;0;3;0 |
|||
2;fire department;welcome to fire department;3;1;4;1 |
|||
3;police station;welcome to police;4;2;5,6;0 |
@ -0,0 +1,53 @@ |
|||
|
|||
|
|||
************************************************************************************************************ |
|||
_____ __ __ ______ _____ _______ _____ _______ |
|||
/ ____| /\ | \/ | ____| / ____|__ __|/\ | __ \__ __| |
|||
| | __ / \ | \ / | |__ | (___ | | / \ | |__) | | | |
|||
| | |_ | / /\ \ | |\/| | __| \___ \ | | / /\ \ | _ / | | |
|||
| |__| |/ ____ \| | | | |____ ____) | | |/ ____ \| | \ \ | | |
|||
\_____/_/ \_\_| |_|______| |_____/ |_/_/ \_\_| \_\ |_| |
|||
|
|||
************************************************************************************************************ |
|||
|
|||
|
|||
| | /| / /__ / /______ __ _ ___ / /____ / |/ / _ | / |/ / __/ |
|||
| |/ |/ / -_) / __/ _ \/ ' \/ -_) / __/ _ \ / / __ |/ /|_/ / _/ |
|||
|__/|__/\__/_/\__/\___/_/_/_/\__/ \__/\___/ /_/|_/_/ |_/_/ /_/___/ |
|||
|
|||
|
|||
///////////////////////////////////////////////////////////////////////////////////////////// |
|||
|
|||
INSTRUCTIONS: |
|||
|
|||
how to move on the map |
|||
enter "north" to go north |
|||
enter "south" to go south |
|||
|
|||
|
|||
alltime commands: |
|||
- 'inventory' -> will show your items that you have bought or found () |
|||
|
|||
special commands (not available at any time during the game): |
|||
- 'shop' -> opens the shop where you can buy or sell items |
|||
|
|||
CURRENTLY NOT AVAILABLE FEATURES (will be available soon): |
|||
- "use [item]" |
|||
- "find [item]" |
|||
WARNING: Pickups are always hidden, find them with "find [item]" and take them with "take [item]" |
|||
|
|||
How to leave the game: |
|||
use "esc", "exit" or "quit" to leave the game |
|||
|
|||
|
|||
And remember, EVERY point/room has something you can do. |
|||
Have fun! |
|||
|
|||
|
|||
///////////////////////////////////////////////////////////////////////////////////////////// |
|||
|
|||
|
|||
************************************************************************************************************ |
|||
|
|||
|
|||
did you read our rules and instructions? Yes(y) or No(n) |
@ -0,0 +1,8 @@ |
|||
# LINES WITH '#' AT BEGINNING GET IGNORED |
|||
#ID;NAME;inShopAvailable;price |
|||
1;healing potion;1;20 |
|||
2;shield;1;50 |
|||
3;UV flashlight;1;80 |
|||
4;key for police station;0;9999 |
|||
5;acid;1;9999 |
|||
6;gun;0;9999 |
@ -0,0 +1,37 @@ |
|||
#ifdef TEST |
|||
|
|||
#include "unity.h" |
|||
#include "commands.h" |
|||
#include "map.h" |
|||
#include "nav_helper.h" |
|||
|
|||
void setUp(void) |
|||
{ |
|||
} |
|||
|
|||
void tearDown(void) |
|||
{ |
|||
} |
|||
|
|||
void test_commands(void) |
|||
{ |
|||
/* arrange */ |
|||
// Hier die Werte eingeben/deklarieren |
|||
Room* mapData; |
|||
mapData = getMap("./src/content/game.map"); |
|||
int playerPosition = 3; //last player position in north - so you can only move to south |
|||
char* expectedString = "You can move south from here\n"; |
|||
|
|||
/* act */ |
|||
// Die Funktion wird ausgeführt |
|||
char* msg = getPossibleCommands(mapData[playerPosition], playerPosition); |
|||
|
|||
/* TEST AUSGABE zur Kontrolle */ |
|||
printf("%s", msg); |
|||
|
|||
/* assert */ |
|||
// Vergleichen mit Inhalt |
|||
TEST_ASSERT_EQUAL_STRING(expectedString, msg); |
|||
} |
|||
|
|||
#endif // TEST |
@ -0,0 +1,109 @@ |
|||
#ifdef TEST |
|||
|
|||
#include "unity.h" |
|||
#include "nav_helper.h" |
|||
#include "items.h" |
|||
|
|||
void setUp(void) |
|||
{ |
|||
} |
|||
|
|||
void tearDown(void) |
|||
{ |
|||
} |
|||
|
|||
void test_items(void) |
|||
{ |
|||
/* arrange */ |
|||
// Hier die Werte eingeben/deklarieren |
|||
Item *items; |
|||
int expectedItemID = 1; |
|||
int expectedSecondItemID = 2; |
|||
|
|||
/* act */ |
|||
// Die Funktion wird ausgeführt |
|||
items = getItems("./src/content/items.map"); |
|||
|
|||
/* make visible OUTPUT */ |
|||
for (int i = 0; i < 4; i++) |
|||
{ |
|||
printf("%s\n", items[i].itemName); |
|||
} |
|||
|
|||
/* assert */ |
|||
// Vergleichen mit Inhalt von game.Map File |
|||
TEST_ASSERT_EQUAL_INT(expectedItemID, items[0].id); |
|||
TEST_ASSERT_EQUAL_INT(expectedSecondItemID, items[1].id); |
|||
} |
|||
|
|||
void test_setItemPrice(void) |
|||
{ |
|||
// arrange |
|||
int price = 50, result; |
|||
|
|||
// act |
|||
Item test; |
|||
setItemPrice(&test, price); |
|||
result = test.price; |
|||
|
|||
//output |
|||
printf("---------------------------------------------------\n"); |
|||
printf("setItemPrice | price to set: %d -> item.price: %d", price, result); |
|||
|
|||
// assert |
|||
TEST_ASSERT_EQUAL(price, result); |
|||
} |
|||
|
|||
|
|||
void test_getItemPrice(void) |
|||
{ |
|||
// arrange |
|||
int price = 50, result; |
|||
|
|||
// act |
|||
Item test; |
|||
test.price = price; |
|||
result = getItemPrice(&test); |
|||
|
|||
//output |
|||
printf("getItemPrice | price should be: %d -> price is: %d", price, result); |
|||
|
|||
// assert |
|||
TEST_ASSERT_EQUAL(price, result); |
|||
} |
|||
|
|||
void test_getItemShopAvailable(void) |
|||
{ |
|||
// arrange |
|||
bool value = true, result; |
|||
|
|||
// act |
|||
Item test; |
|||
test.inShopAvailable = value; |
|||
result = getItemShopAvailable(&test); |
|||
|
|||
//output |
|||
printf("getItemShopAvailable | value should be: %d -> is: %d", value, result); |
|||
|
|||
// assert |
|||
TEST_ASSERT_EQUAL(value, result); |
|||
} |
|||
|
|||
void test_setItemShopAvailable(void) |
|||
{ |
|||
// arrange |
|||
bool value = true, result; |
|||
|
|||
// act |
|||
Item test; |
|||
setItemShopAvailable(&test, value); |
|||
result = test.inShopAvailable; |
|||
|
|||
//output |
|||
printf("setItemShopAvailable | value should be: %d -> is: %d", value, result); |
|||
|
|||
// assert |
|||
TEST_ASSERT_EQUAL(value, result); |
|||
} |
|||
|
|||
#endif // TEST |
@ -0,0 +1,153 @@ |
|||
#ifdef TEST |
|||
|
|||
#include "unity.h" |
|||
#include "map.h" |
|||
#include "nav_helper.h" |
|||
|
|||
|
|||
void setUp(void) |
|||
{ |
|||
|
|||
} |
|||
|
|||
void tearDown(void) |
|||
{ |
|||
} |
|||
|
|||
void test_map(void) |
|||
{ |
|||
/* arrange */ |
|||
// Hier die Werte eingeben |
|||
Room *map; |
|||
|
|||
/* act */ |
|||
// Die Funktion wird ausgeführt |
|||
map = getMap("./src/content/game.map"); |
|||
|
|||
for (int i = 0; i < 4; i++) |
|||
{ |
|||
printf("%s\n", map[i].nameRoom); |
|||
} |
|||
|
|||
/* assert */ |
|||
// Vergleichen mit Inhalt von game.Map File |
|||
int officeExpectedSuccessor = 1; |
|||
int officeExpectedID = 0; |
|||
|
|||
int fdExpectedSuccessor = 3; |
|||
int fdExpectedID = 2; |
|||
|
|||
TEST_ASSERT_EQUAL_INT(officeExpectedSuccessor, map[0].successor); |
|||
TEST_ASSERT_EQUAL_INT(officeExpectedID, map[0].id); |
|||
|
|||
TEST_ASSERT_EQUAL_INT(fdExpectedSuccessor, map[2].successor); |
|||
TEST_ASSERT_EQUAL_INT(fdExpectedID, map[2].id); |
|||
} |
|||
|
|||
void test_getRoomSuccessor(void) |
|||
{ |
|||
// arrange |
|||
int successor = 1, result; |
|||
Room test; |
|||
test.successor = successor; |
|||
|
|||
/* act */ |
|||
// Die Funktion wird ausgeführt |
|||
result = getRoomSuccessor(&test); |
|||
|
|||
// output |
|||
printf("---------------------------------------------------------\n"); |
|||
printf("getRoomSuccessor | Successor should be: %d -> is: %d", successor, result); |
|||
|
|||
// assert |
|||
TEST_ASSERT_EQUAL(successor, result); |
|||
} |
|||
|
|||
void test_setRoomSuccessor(void) |
|||
{ |
|||
// arrange |
|||
int successor = 2, result; |
|||
|
|||
// act |
|||
Room test; |
|||
setRoomSuccessor(&test, successor); |
|||
result = test.successor; |
|||
|
|||
//output |
|||
printf("setRoomSuccessor | successor to set: %d -> is: %d", successor, result); |
|||
|
|||
// assert |
|||
TEST_ASSERT_EQUAL(successor, result); |
|||
} |
|||
|
|||
void test_getRoomPredecessor(void) |
|||
{ |
|||
// arrange |
|||
int predecessor = 1, result; |
|||
Room test; |
|||
test.predecessor = predecessor; |
|||
|
|||
/* act */ |
|||
// Die Funktion wird ausgeführt |
|||
result = getRoomPredecessor(&test); |
|||
|
|||
// output |
|||
printf("getRoomPredecessor | Successor should be: %d -> is: %d", predecessor, result); |
|||
|
|||
// assert |
|||
TEST_ASSERT_EQUAL(predecessor, result); |
|||
} |
|||
|
|||
void test_setRoomPredecessor(void) |
|||
{ |
|||
// arrange |
|||
int predecessor = 3, result; |
|||
|
|||
// act |
|||
Room test; |
|||
setRoomPredecessor(&test, predecessor); |
|||
result = test.predecessor; |
|||
|
|||
//output |
|||
printf("setRoomPredecessor | successor to set: %d -> is: %d", predecessor, result); |
|||
|
|||
// assert |
|||
TEST_ASSERT_EQUAL(predecessor, result); |
|||
} |
|||
|
|||
void test_getRoomShopAvailable(void) |
|||
{ |
|||
// arrange |
|||
bool available = true, result; |
|||
Room test; |
|||
test.shopAvailable = available; |
|||
|
|||
/* act */ |
|||
// Die Funktion wird ausgeführt |
|||
result = getRoomShopAvailable(&test); |
|||
|
|||
// output |
|||
printf("getRoomShopAvailable | shopAvailable should be: %d -> is: %d", available, result); |
|||
|
|||
// assert |
|||
TEST_ASSERT_EQUAL(available, result); |
|||
} |
|||
|
|||
void test_setRoomShopAvailable(void) |
|||
{ |
|||
// arrange |
|||
bool available = true, result; |
|||
|
|||
// act |
|||
Room test; |
|||
setRoomShopAvailable(&test, available); |
|||
result = test.shopAvailable; |
|||
|
|||
//output |
|||
printf("setRoomShopAvailable | shopAvailable set to: %d -> after set: %d", available, result); |
|||
|
|||
// assert |
|||
TEST_ASSERT_EQUAL(available, result); |
|||
} |
|||
|
|||
#endif // TEST |
@ -0,0 +1,36 @@ |
|||
#ifdef TEST |
|||
|
|||
#include "unity.h" |
|||
#include "nav_helper.h" |
|||
|
|||
void setUp(void) |
|||
{ |
|||
} |
|||
|
|||
void tearDown(void) |
|||
{ |
|||
} |
|||
|
|||
void test_nav_helper(void) |
|||
{ |
|||
/* arrange */ |
|||
// Hier die Werte eingeben |
|||
char* stringToCheckIsTrue = "#test"; |
|||
char* stringToCheckIsFalse = "test"; |
|||
|
|||
/* act */ |
|||
// Die Funktion wird ausgeführt |
|||
bool valueIsTrue = startsWith(stringToCheckIsTrue,"#"); |
|||
bool valueIsFalse = startsWith(stringToCheckIsFalse, "#"); |
|||
|
|||
//Output |
|||
printf("%s startet mit '#' = %d\n",stringToCheckIsTrue, valueIsTrue); |
|||
printf("%s startet mit '#' = %d",stringToCheckIsFalse, valueIsFalse); |
|||
|
|||
/* assert */ |
|||
// Vergleichen mit Inhalt |
|||
TEST_ASSERT_TRUE(valueIsTrue); |
|||
TEST_ASSERT_FALSE(valueIsFalse); |
|||
} |
|||
|
|||
#endif // TEST |
@ -0,0 +1,155 @@ |
|||
#ifdef TEST |
|||
|
|||
#include "unity.h" |
|||
#include "player.h" |
|||
#include "items.h" |
|||
#include "nav_helper.h" |
|||
|
|||
Item *availableItems; |
|||
Player actualPlayer; |
|||
void setUp(void) |
|||
{ |
|||
availableItems = getItems("./src/content/items.map"); |
|||
} |
|||
|
|||
void tearDown(void) |
|||
{ |
|||
} |
|||
|
|||
void test_addItemToInventory(void) |
|||
{ |
|||
/* arrange */ |
|||
// Hier die Werte eingeben/deklarieren |
|||
int shopItemIndex = 1; |
|||
|
|||
/* act */ |
|||
// Die Funktion wird ausgeführt |
|||
actualPlayer = addItemToInventory(availableItems, shopItemIndex, actualPlayer); |
|||
|
|||
/* assert */ |
|||
// Vergleichen mit Inhalt von game.Map File |
|||
TEST_ASSERT_EQUAL_INT(shopItemIndex, actualPlayer.itemInventory[0].id); |
|||
} |
|||
|
|||
void test_removeItemFromInventory(void) |
|||
{ |
|||
/* arrange */ |
|||
// Hier die Werte eingeben/deklarieren |
|||
int itemToRemove = 0; // index to remove (we already bought it in function above) |
|||
|
|||
/* act */ |
|||
// Die Funktion wird ausgeführt |
|||
Item itemBeforeRemove = actualPlayer.itemInventory[0]; |
|||
actualPlayer = removeItemFromInventory(itemToRemove, actualPlayer); // then remove |
|||
Item itemAfterRemove = actualPlayer.itemInventory[0]; |
|||
|
|||
// OUTPUT |
|||
printf("removeItem | ID_before: %d -> ID_after: %d", itemBeforeRemove.id, itemAfterRemove.id); |
|||
|
|||
/* assert */ |
|||
// Vergleichen mit Inhalt von game.Map File |
|||
TEST_ASSERT_NOT_EQUAL_UINT8(itemBeforeRemove.id, itemAfterRemove.id); |
|||
} |
|||
|
|||
void test_setTotal(void) |
|||
{ |
|||
/* arrange */ |
|||
// Hier die Werte eingeben/deklarieren |
|||
int setMoney = 100; |
|||
|
|||
/* act */ |
|||
// Die Funktion wird ausgeführt |
|||
int valueBefore = actualPlayer.wallet; |
|||
actualPlayer = setTotal(actualPlayer, setMoney); |
|||
int valueAfter = actualPlayer.wallet; |
|||
|
|||
// OUTPUT |
|||
printf("setTotal | before: %d -> after: %d", valueBefore, valueAfter); |
|||
|
|||
/* assert */ |
|||
// Vergleichen mit Inhalt |
|||
TEST_ASSERT_EQUAL_INT(setMoney, actualPlayer.wallet); |
|||
TEST_ASSERT_NOT_EQUAL_UINT8(valueBefore, valueAfter); |
|||
} |
|||
|
|||
void test_addMoneyToPlayer(void) |
|||
{ |
|||
/* arrange */ |
|||
// Hier die Werte eingeben/deklarieren |
|||
// balance = 70 |
|||
int valueToAdd = 20; |
|||
int checkSum = actualPlayer.wallet + valueToAdd; |
|||
|
|||
/* act */ |
|||
// Die Funktion wird ausgeführt |
|||
actualPlayer = addMoneyToPlayer(actualPlayer, valueToAdd); |
|||
|
|||
// OUTPUT |
|||
printf("%d$ has been added to your balance. TOTAL: %d$", valueToAdd, actualPlayer.wallet); |
|||
|
|||
/* assert */ |
|||
// Vergleichen mit Inhalt von game.Map File |
|||
TEST_ASSERT_EQUAL_INT(checkSum, actualPlayer.wallet); |
|||
} |
|||
|
|||
void test_removeMoneyFromPlayer(void) |
|||
{ |
|||
/* arrange */ |
|||
// Hier die Werte eingeben/deklarieren |
|||
int valueToRemove = 20; |
|||
int checkSum = actualPlayer.wallet - valueToRemove; |
|||
|
|||
/* act */ |
|||
// Die Funktion wird ausgeführt |
|||
actualPlayer = removeMoneyFromPlayer(actualPlayer, valueToRemove); |
|||
|
|||
// OUTPUT |
|||
printf("%d$ has been removed from your balance. TOTAL: %d$", valueToRemove, actualPlayer.wallet); |
|||
|
|||
/* assert */ |
|||
// Vergleichen mit Inhalt von game.Map File |
|||
TEST_ASSERT_EQUAL_INT(checkSum, actualPlayer.wallet); |
|||
} |
|||
|
|||
void test_buyItem(void) |
|||
{ |
|||
/* arrange */ |
|||
// Hier die Werte eingeben/deklarieren |
|||
int itemIndex = 2; // price = 50 |
|||
int checkSum = actualPlayer.wallet - availableItems[itemIndex-1].price; |
|||
|
|||
/* act */ |
|||
// Die Funktion wird ausgeführt |
|||
actualPlayer = buyItem(availableItems, itemIndex, actualPlayer); |
|||
|
|||
/* assert */ |
|||
// Vergleichen mit Inhalt von game.Map File |
|||
TEST_ASSERT_EQUAL_INT(itemIndex, actualPlayer.itemInventory[0].id); //check if item has right ID |
|||
TEST_ASSERT_EQUAL_INT(checkSum, actualPlayer.wallet); //check money after transfer |
|||
|
|||
} |
|||
|
|||
void test_sellItem(void) |
|||
{ |
|||
/* arrange */ |
|||
// Hier die Werte eingeben/deklarieren |
|||
int buyItemID = 1; // prepare sell |
|||
actualPlayer = addItemToInventory(availableItems, buyItemID, actualPlayer); // prepare sell |
|||
|
|||
int itemToRemove = 0; // index to remove (we already bought it in function above) |
|||
|
|||
/* act */ |
|||
// Die Funktion wird ausgeführt |
|||
Item itemBeforeRemove = actualPlayer.itemInventory[0]; |
|||
actualPlayer = sellItem(itemToRemove, actualPlayer); // then remove |
|||
Item itemAfterRemove = actualPlayer.itemInventory[0]; |
|||
|
|||
// OUTPUT |
|||
//printf("sellItem | before: %d -> after: %d", itemBeforeRemove.id, itemAfterRemove.id); |
|||
|
|||
/* assert */ |
|||
// Vergleichen mit Inhalt von game.Map File |
|||
TEST_ASSERT_NOT_EQUAL_UINT8(itemBeforeRemove.id, itemAfterRemove.id); |
|||
} |
|||
|
|||
#endif // TEST |
@ -0,0 +1,224 @@ |
|||
#ifdef TEST |
|||
|
|||
#include "unity.h" |
|||
#include "weapon.h" |
|||
|
|||
void setUp(void) |
|||
{ |
|||
} |
|||
|
|||
void tearDown(void) |
|||
{ |
|||
} |
|||
|
|||
void test_getName(void) |
|||
{ |
|||
// arrange |
|||
char *nameOfWeapon = "Kukri", *result; |
|||
Weapon test; |
|||
test.name = nameOfWeapon; |
|||
|
|||
/* act */ |
|||
// Die Funktion wird ausgeführt |
|||
result = getName(&test); |
|||
|
|||
// output |
|||
printf("getName | name should be: %s -> is: %s", nameOfWeapon, result); |
|||
|
|||
// assert |
|||
TEST_ASSERT_EQUAL(nameOfWeapon, result); |
|||
} |
|||
|
|||
void test_setName(void) |
|||
{ |
|||
// arrange |
|||
char *nameWeapon = "switchblade", *result; |
|||
|
|||
// act |
|||
Weapon test; |
|||
setName(&test, nameWeapon); |
|||
result = test.name; |
|||
|
|||
// output |
|||
printf("setName | name set to: %s -> after set: %s", nameWeapon, result); |
|||
|
|||
// assert |
|||
TEST_ASSERT_EQUAL(nameWeapon, result); |
|||
} |
|||
|
|||
void test_getFullName(void) |
|||
{ |
|||
// arrange |
|||
char *nameOfWeapon = "Kukri v2", *result; |
|||
Weapon test; |
|||
test.fullName = nameOfWeapon; |
|||
|
|||
/* act */ |
|||
// Die Funktion wird ausgeführt |
|||
result = getFullName(&test); |
|||
|
|||
// output |
|||
printf("getFullName | fullName should be: %s -> is: %s", nameOfWeapon, result); |
|||
|
|||
// assert |
|||
TEST_ASSERT_EQUAL(nameOfWeapon, result); |
|||
} |
|||
|
|||
void test_setFullName(void) |
|||
{ |
|||
// arrange |
|||
char *fullNameWeapon = "switchblade v2", *result; |
|||
|
|||
// act |
|||
Weapon test; |
|||
setFullName(&test, fullNameWeapon); |
|||
result = test.fullName; |
|||
|
|||
// output |
|||
printf("setFullName | fullName set to: %s -> after set: %s", fullNameWeapon, result); |
|||
|
|||
// assert |
|||
TEST_ASSERT_EQUAL(fullNameWeapon, result); |
|||
} |
|||
|
|||
void test_getTypeID(void) |
|||
{ |
|||
// arrange |
|||
int type = 1, result; |
|||
Weapon test; |
|||
test.typeID = type; |
|||
|
|||
/* act */ |
|||
// Die Funktion wird ausgeführt |
|||
result = getTypeID(&test); |
|||
|
|||
// output |
|||
printf("getTypeID | typeID should be: %d -> is: %d", type, result); |
|||
|
|||
// assert |
|||
TEST_ASSERT_EQUAL(type, result); |
|||
} |
|||
|
|||
void test_setTypeID(void) |
|||
{ |
|||
// arrange |
|||
int type = 2, result; |
|||
|
|||
// act |
|||
Weapon test; |
|||
setTypeID(&test, type); |
|||
result = test.typeID; |
|||
|
|||
// output |
|||
printf("setTypeID | typeID set to: %d -> after set: %d", type, result); |
|||
|
|||
// assert |
|||
TEST_ASSERT_EQUAL(type, result); |
|||
} |
|||
|
|||
void test_getDamageModifier(void) |
|||
{ |
|||
// arrange |
|||
int damageModifier = 2, result; |
|||
Weapon test; |
|||
test.damageModifier = damageModifier; |
|||
|
|||
/* act */ |
|||
// Die Funktion wird ausgeführt |
|||
result = getDamageModifier(&test); |
|||
|
|||
// output |
|||
printf("getDamageModifier | damageModifier should be: %d -> is: %d", damageModifier, result); |
|||
|
|||
// assert |
|||
TEST_ASSERT_EQUAL(damageModifier, result); |
|||
} |
|||
|
|||
void test_setDamageModifier(void) |
|||
{ |
|||
// arrange |
|||
int damageModifier = 5, result; |
|||
|
|||
// act |
|||
Weapon test; |
|||
setDamageModifier(&test, damageModifier); |
|||
result = test.damageModifier; |
|||
|
|||
// output |
|||
printf("setDamageModifier | damageModifier set to: %d -> after set: %d", damageModifier, result); |
|||
|
|||
// assert |
|||
TEST_ASSERT_EQUAL(damageModifier, result); |
|||
} |
|||
|
|||
void test_getBaseDamage(void) |
|||
{ |
|||
// arrange |
|||
int baseDamage = 10, result; |
|||
Weapon test; |
|||
test.baseDamage = baseDamage; |
|||
|
|||
/* act */ |
|||
// Die Funktion wird ausgeführt |
|||
result = getBaseDamage(&test); |
|||
|
|||
// output |
|||
printf("getBaseDamage | baseDamage should be: %d -> is: %d", baseDamage, result); |
|||
|
|||
// assert |
|||
TEST_ASSERT_EQUAL(baseDamage, result); |
|||
} |
|||
|
|||
void test_setBaseDamage(void) |
|||
{ |
|||
// arrange |
|||
int baseDamage = 43, result; |
|||
|
|||
// act |
|||
Weapon test; |
|||
setBaseDamage(&test, baseDamage); |
|||
result = test.baseDamage; |
|||
|
|||
// output |
|||
printf("setBaseDamage | baseDamage set to: %d -> after set: %d", baseDamage, result); |
|||
|
|||
// assert |
|||
TEST_ASSERT_EQUAL(baseDamage, result); |
|||
} |
|||
|
|||
void test_getAvailable(void) |
|||
{ |
|||
// arrange |
|||
bool canBeUsed = true, result; |
|||
Weapon test; |
|||
test.canBeUsed = canBeUsed; |
|||
|
|||
/* act */ |
|||
// Die Funktion wird ausgeführt |
|||
result = getAvailable(&test); |
|||
|
|||
// output |
|||
printf("getAvailable | canBeUsed should be: %d -> is: %d", canBeUsed, result); |
|||
|
|||
// assert |
|||
TEST_ASSERT_EQUAL(canBeUsed, result); |
|||
} |
|||
|
|||
void test_setAvailable(void) |
|||
{ |
|||
// arrange |
|||
bool canBeUsed = false, result; |
|||
|
|||
// act |
|||
Weapon test; |
|||
setAvailable(&test, canBeUsed); |
|||
result = test.canBeUsed; |
|||
|
|||
// output |
|||
printf("setAvailable | canBeUsed set to: %d -> after set: %d", canBeUsed, result); |
|||
|
|||
// assert |
|||
TEST_ASSERT_EQUAL(canBeUsed, result); |
|||
} |
|||
|
|||
#endif // TEST |
Write
Preview
Loading…
Cancel
Save
Reference in new issue