From 73b746ba8f0fadc1e0bf0008242a5ef4f005a778 Mon Sep 17 00:00:00 2001 From: Kishan Takoordyal Date: Sat, 14 Nov 2020 18:28:26 +0400 Subject: [PATCH] init --- .vscode/settings.json | 5 + Dungeon.cpp | 249 ++++++++++++++++++++++++++++++++++++++++++ Dungeon.h | 26 +++++ GameCharacter.cpp | 24 ++++ GameCharacter.h | 18 +++ Item.cpp | 8 ++ Item.h | 15 +++ Player.cpp | 31 ++++++ Player.h | 19 ++++ Room.cpp | 16 +++ Room.h | 21 ++++ main | Bin 0 -> 91808 bytes main.cpp | 42 +++++++ 13 files changed, 474 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 Dungeon.cpp create mode 100644 Dungeon.h create mode 100644 GameCharacter.cpp create mode 100644 GameCharacter.h create mode 100644 Item.cpp create mode 100644 Item.h create mode 100644 Player.cpp create mode 100644 Player.h create mode 100644 Room.cpp create mode 100644 Room.h create mode 100755 main create mode 100644 main.cpp diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..0cba2e6 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "iostream": "cpp" + } +} \ No newline at end of file diff --git a/Dungeon.cpp b/Dungeon.cpp new file mode 100644 index 0000000..11f9477 --- /dev/null +++ b/Dungeon.cpp @@ -0,0 +1,249 @@ +#include + +#include "Dungeon.h" + +using namespace std; + +Dungeon::Dungeon(Player p) { + player = p; +} + +void Dungeon::printActions(int numActions, string actions[]) { + cout << "\nChoose an action:\n"; + + for (int i = 0; i < numActions; i++) { + cout << actions[i] << "\n"; + } +} + +void Dungeon::handleLootActions(Room *room) { + vector items = room->items; + int size = room->items.size(); + + player.lootRoom(room); + room->clearLoot(); + + for (int i = 0; i < size; i++) { + cout << "You open the chest and find a " << items[i].name << "\n"; + cout << "Your health is now " << player.currentHealth << ", your attack is now " << player.attack << ", your defense is now " << player.defense << "\n"; + } +} + +void Dungeon::handleFightActions(GameCharacter *enemy) { + string actions[] = {"a. Attack", "b. Retreat"}; + + while (true) { + printActions(2, actions); + + string input; + cin >> input; + + if (input == "a") { + int damage = enemy->takeDamage(player.attack); + cout << "Your attack does " << damage << " damage.\n"; + } else if (input == "b") { + player.changeRooms(player.previousRoom); + enterRoom(player.currentRoom); + return; + } else { + cout << "Incorrect choice. Please try again.\n"; + } + + if (enemy->isDead()) { + cout << "You win! You have defeated the enemy " << enemy->name << ".\n"; + player.increaseStats(10, 5, 5); + player.currentRoom->clearEnemies(); + return; + } + + int damage = player.takeDamage(enemy->attack); + cout << "The " << enemy->name << " attacked and you took " << damage << " damage.\n"; + cout << "You now have " << player.currentHealth << " health.\n"; + + if (player.isDead()) { + cout << "You have been defeated..."; + return; + } + } +} + + +void Dungeon::handleEmptyRoom(Room *room) { + cout << "You enter the room but it is empty.\n"; + string actions[] = {"a. Move to another room"}; + while (true) { + printActions(1, actions); + + string input; + cin >> input; + + if (input == "a") { + return; + } else { + cout << "Incorrect choice. Please try again.\n"; + } + } +} + +void Dungeon::handleRoomWithChest(Room *room) { + cout << "You enter the room and see a large chest in the middle.\n"; + string actions[] = {"a. Loot the chest", "b. Move to another room"}; + while (true) { + printActions(2, actions); + + string input; + cin >> input; + + if (input == "a") { + handleLootActions(room); + return; + } else if (input == "b") { + return; + } else { + cout << "Incorrect choice. Please try again.\n"; + } + } +} + +void Dungeon::handleRoomWithEnemy(Room *room) { + GameCharacter enemy = room->enemies.front(); + cout << "You enter the room and see a " << enemy.name << " in the middle.\n"; + string actions[] = {"a. Fight the " + enemy.name, "b. Go back to previous room"}; + while (true) { + printActions(2, actions); + + string input; + cin >> input; + + if (input == "a") { + handleFightActions(&enemy); + return; + } else if (input == "b") { + player.changeRooms(player.previousRoom); + enterRoom(player.currentRoom); + return; + } else { + cout << "Incorrect choice. Please try again.\n"; + } + } +} + +void Dungeon::enterRoom(Room *room) { + if (room->enemies.size() > 0) { + handleRoomWithEnemy(room); + } else if (room->items.size() > 0) { + handleRoomWithChest(room); + } else { + handleEmptyRoom(room); + } +} + +void Dungeon::handleMovementActions(Room *room) { + while (true){ + if (room->position == 0) { + string actions[] = {"a. Move right", "b. Move down"}; + printActions(2, actions); + + string input; + cin >> input; + + if (input == "a") { + player.changeRooms(&rooms[1]); + return; + } else if (input == "b") { + player.changeRooms(&rooms[2]); + return; + } else { + cout << "Incorrect choice. Please try again.\n"; + } + } + else if (room->position == 1) { + string actions[] = {"a. Move left"}; + printActions(1, actions); + + string input; + cin >> input; + + if (input == "a") { + player.changeRooms(&rooms[0]); + return; + } else { + cout << "Incorrect choice. Please try again.\n"; + } + } + else if (room->position == 2) { + string actions[] = {"a. Move up", "b. Move right"}; + printActions(2, actions); + + string input; + cin >> input; + + if (input == "a") { + player.changeRooms(&rooms[0]); + return; + } else if (input == "b") { + player.changeRooms(&rooms[3]); + return; + } else { + cout << "Incorrect choice. Please try again.\n"; + } + } + else { + string actions[] = {"a. Move left"}; + printActions(1, actions); + + string input; + cin >> input; + + if (input == "a") { + player.changeRooms(&rooms[2]); + return; + } else { + cout << "Incorrect choice. Please try again.\n"; + } + } + } +} + +int Dungeon::performEndGameLogic() { + while (true) { + string actions[] = {"a. Yes", "b. No"}; + printActions(2, actions); + + string input; + cin >> input; + + if (input == "a") { + return 1; + } else if (input == "b") { + return 0; + } else { + cout << "Incorrect choice. Please try again.\n"; + } + } +} + +int Dungeon::runDungeon() { + cout << "Welcome to the dungeon! Inside you will find treasure but also enemies. Enter at your peril!\n"; + + player.currentRoom = &rooms[0]; + player.previousRoom = &rooms[0]; + + while (true) { + enterRoom(player.currentRoom); + + if (player.isDead()) { + cout << "Game over! Try again?\n"; + return performEndGameLogic(); + } else { + if (player.currentRoom->isExit) { + if (player.currentRoom->enemies.size() <= 0) { + cout << "You win! Play again?\n"; + return performEndGameLogic(); + } + } + } + + handleMovementActions(player.currentRoom); + } +} diff --git a/Dungeon.h b/Dungeon.h new file mode 100644 index 0000000..d2d150a --- /dev/null +++ b/Dungeon.h @@ -0,0 +1,26 @@ +#include "Player.h" + +#ifndef DUNGEON_H +#define DUNGEON_H + +class Dungeon{ + public: + Player player; + Room rooms[4]; + Dungeon(Player); + + int runDungeon(); + void enterRoom(Room *); + void handleEmptyRoom(Room *); + void handleRoomWithChest(Room *); + void handleRoomWithEnemy(Room *); + + void handleLootActions(Room *); + void handleFightActions(GameCharacter *); + void handleMovementActions(Room *); + + void printActions(int, string[]); + int performEndGameLogic(); +}; + +#endif diff --git a/GameCharacter.cpp b/GameCharacter.cpp new file mode 100644 index 0000000..4007604 --- /dev/null +++ b/GameCharacter.cpp @@ -0,0 +1,24 @@ +#include "GameCharacter.h" + +GameCharacter::GameCharacter(string n, int h, int a, int d) { + name = n; + maxHealth = h; + currentHealth = h; + attack = a; + defense = d; +} + +int GameCharacter::takeDamage(int amount) { + int damage = amount - defense; + + if (damage < 0) { + damage = 0; + } + + currentHealth -= damage; + return damage; +} + +bool GameCharacter::isDead() { + return currentHealth <= 0; +} diff --git a/GameCharacter.h b/GameCharacter.h new file mode 100644 index 0000000..6b0f9a5 --- /dev/null +++ b/GameCharacter.h @@ -0,0 +1,18 @@ +#include + +#ifndef GAMECHARACTER_H +#define GAMECHARACTER_H + +using namespace std; + +class GameCharacter{ + public: + string name; + int maxHealth, currentHealth, attack, defense; + GameCharacter(string, int, int, int); + + int takeDamage(int); + bool isDead(); +}; + +#endif diff --git a/Item.cpp b/Item.cpp new file mode 100644 index 0000000..3ec3f1b --- /dev/null +++ b/Item.cpp @@ -0,0 +1,8 @@ +#include "Item.h" + +Item::Item(string n, int h, int a, int d) { + name = n; + health = h; + attack = a; + defense = d; +} diff --git a/Item.h b/Item.h new file mode 100644 index 0000000..1ecf988 --- /dev/null +++ b/Item.h @@ -0,0 +1,15 @@ +#include + +#ifndef ITEM_H +#define ITEM_H + +using namespace std; + +class Item { + public: + string name; + int health, attack, defense; + Item(string, int, int, int); +}; + +#endif diff --git a/Player.cpp b/Player.cpp new file mode 100644 index 0000000..5372bba --- /dev/null +++ b/Player.cpp @@ -0,0 +1,31 @@ +#include "Player.h" + +Player::Player(string n, int h, int a, int d): GameCharacter(n, h, a, d) { + Item dagger = Item("Dagger", 0, 5, 0); + addItem(dagger); +} + +void Player::addItem(Item item) { + inventory.push_back(item); + increaseStats(item.health, item.attack, item.defense); +} + +void Player::increaseStats(int h, int a, int d) { + currentHealth += h; + maxHealth += h; + attack += a; + defense += d; +} + +void Player::lootRoom(Room * room) { + vector items = room->items; + + for (int i = 0; i < items.size(); i++) { + addItem(items[i]); + } +} + +void Player::changeRooms(Room * newRoom) { + previousRoom = currentRoom; + currentRoom = newRoom; +} diff --git a/Player.h b/Player.h new file mode 100644 index 0000000..5ca1d2f --- /dev/null +++ b/Player.h @@ -0,0 +1,19 @@ +#include "Room.h" + +#ifndef PLAYER_H +#define PLAYER_H + +class Player: public GameCharacter { + public: + Room *currentRoom, *previousRoom; + vector inventory; + Player(string = "", int = 0, int = 0, int = 0); + + void addItem(Item); + void increaseStats(int, int, int); + void lootRoom(Room*); + void changeRooms(Room*); +}; + +#endif + diff --git a/Room.cpp b/Room.cpp new file mode 100644 index 0000000..27d7bc0 --- /dev/null +++ b/Room.cpp @@ -0,0 +1,16 @@ +#include "Room.h" + +Room::Room(int p, bool ie, vector is, vector gcs) { + position = p; + isExit = ie; + items = is; + enemies = gcs; +} + +void Room::clearLoot() { + items.clear(); +} + +void Room::clearEnemies() { + enemies.clear(); +} diff --git a/Room.h b/Room.h new file mode 100644 index 0000000..02259d8 --- /dev/null +++ b/Room.h @@ -0,0 +1,21 @@ +#include + +#include "Item.h" +#include "GameCharacter.h" + +#ifndef ROOM_H +#define ROOM_H + +class Room { + public: + int position; + bool isExit; + vector items; + vector enemies; + Room(int = 0, bool = false, vector = vector(), vector = vector()); + + void clearLoot(); + void clearEnemies(); +}; + +#endif diff --git a/main b/main new file mode 100755 index 0000000000000000000000000000000000000000..3f7e5770993adc19f92356d88329e4c8cdfa4edc GIT binary patch literal 91808 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 literal 0 HcmV?d00001 diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..5dac653 --- /dev/null +++ b/main.cpp @@ -0,0 +1,42 @@ +#include + +#include "Dungeon.cpp" +#include "GameCharacter.cpp" +#include "Player.cpp" +#include "Item.cpp" +#include "Room.cpp" + +using namespace std; + +int main() { + cout << "Welcome to our dungeon crawler! What is your name?\n"; + string name; + cin >> name; + + Player player = Player(name, 100, 30, 5); + + Item sword = Item("Sword", 0, 50, 0); + GameCharacter smallEnemy = GameCharacter("Pilon", 30, 10, 5); + GameCharacter bigEnemy = GameCharacter("Grand Pilon", 75, 60, 25); + + Room rooms[] = { + Room(0, false, vector(), vector()), + Room(1, false, vector({ sword }), vector()), + Room(2, false, vector(), vector({ smallEnemy })), + Room(3, true, vector(), vector({ bigEnemy})), + }; + + Dungeon dungeon = Dungeon(player); + dungeon.rooms[0] = rooms[0]; + dungeon.rooms[1] = rooms[1]; + dungeon.rooms[2] = rooms[2]; + dungeon.rooms[3] = rooms[3]; + + while (true) { + int result = dungeon.runDungeon(); + if (result == 0) { + cout << "Goodbye!"; + return 0; + } + } +}