Answered You can hire a professional tutor to get the answer.
I am trying to establish a fairy in my c++ code and i am trying to make it run away from the player as well as act as a torch to light up the game...
I am trying to establish a fairy in my c++ code and i am trying to make it run away from the player as well as act as a torch to light up the game board. I am receiving errors with the code can someone please take a look?
This is the GSP115_Course_Project.cpp
// GSP115 TREASURE CAVE
#pragma once
#include "GSP115_Course_Project.h"
// Global Constants
const int MAX_ROWS = 7;
const int MIN_ROWS = 0;
const int MAX_COLS = 7;
const int MIN_COLS = 0;
const int TOTAL_ROWS = MAX_ROWS + 1;
const int TOTAL_COLS = MAX_COLS + 1;
// <WK6 status=permanent>
// Combat Result Constants
const int PLAYER_DIES_WITH_WEAPON = 80;
const int MONSTER_DIES_WITH_WEAPON = 30;
const int PLAYER_DIES_NO_WEAPON = 20;
const int MONSTER_DIES_NO_WEAPON = 18;
// <WK6>
//Display Constants
const char ULC = 201; //Upper left corner
const char HB = 205; //Horizontal border
const char URC = 187; //Upper right corner
const char VB = 186; //Vertical border
const char LRC = 188; //Lower right corner
const char LLC = 200; //Lower left corner
const char MT = ' '; //Empty location
const char PSymbol = 'P'; //Player symbol
const char TOSymbol = 'T'; //Torch symbol
const char WSymbol = 'W'; //Weapon symbol
const char TRSymbol = '$'; //Treasure symbol
const char MSymbol = 'M'; //Monster symbol
const char NSymbol = 'N'; //Noisemaker symbol
const char XSymbol = 'X'; //Cave exit symbol
const char FRsymbol = 'F';//Fairy symbol
using namespace std;
// function prototypes
gameObject placeInCave(gameObjectType array[TOTAL_ROWS][TOTAL_COLS]);
bool checkVisible(gameObject x, gameObject y, int dist);
bool showOnBoard(gameObject x);
// <WK6 status=permanent>
bool resolveCombat(playerObject &p, gameObject &m, int YouDie, int MonsterDies, string &str, bool &moveP, bool &mPause);
void setcolor(int c);
void gamecolor(unsigned char type);
// </WK6>
int main()
{
//**Initialize Variables**
srand(time(NULL)); // Seed the random number function
gameObjectType cave[TOTAL_ROWS][TOTAL_COLS];// the cave--a two dimensional array
char board[TOTAL_ROWS + 3][TOTAL_COLS + 3] = // the game board--a two dimensional array
{
{ MT,MT,'0','1','2','3','4','5','6','7',MT },
{ MT,ULC,HB,HB,HB,HB,HB,HB,HB,HB,URC },
{ 'A',VB,MT,MT,MT,MT,MT,MT,MT,MT,VB },
{ 'B',VB,MT,MT,MT,MT,MT,MT,MT,MT,VB },
{ 'C',VB,MT,MT,MT,MT,MT,MT,MT,MT,VB },
{ 'D',VB,MT,MT,MT,MT,MT,MT,MT,MT,VB },
{ 'E',VB,MT,MT,MT,MT,MT,MT,MT,MT,VB },
{ 'F',VB,MT,MT,MT,MT,MT,MT,MT,MT,VB },
{ 'G',VB,MT,MT,MT,MT,MT,MT,MT,MT,VB },
{ 'H',VB,MT,MT,MT,MT,MT,MT,MT,MT,VB },
{ MT,LLC,HB,HB,HB,HB,HB,HB,HB,HB,LRC }
};
// <WK6 status=permanent>
gameObjectType hold = EMPTY; // Holds objects under the monster<bug fix>
// </WK6>
playerObject player = { true, false, false, false, false,{ -1, -1, false, true } }; // the player
gameObject treasure = { -1, -1, false, true }; // the treasure
gameObject monster = { -1, -1, false, true }; // the monster
gameObject weapon = { -1, -1, false, true }; // the weapon
gameObject torch = { -1, -1, false, true }; // the torch
gameObject noisemaker = { -1, -1, false, true }; // the noisemaker
// <WK6 status=permanent>
gameObject caveExit = { -1, -1, false, true }; // the cave exit
gameObject fairy = { -1, -1, false, true };
// </WK6>
int row, column; // temporarily hold the new player position
int MonsterMoveCounter = 6; // track and control monster movement around treasure
// <WK6 status=permanent>
int killedValue = PLAYER_DIES_NO_WEAPON; // a random value above this level means you are killed by the monster
int killMonsterValue = MONSTER_DIES_NO_WEAPON; // a random value above this level and below killedValue means you kill the monster
// </WK6>
string msg; // status message variable
char command; // player input
bool monsterPause = false; // flag to indicate the monster has stopped moving
bool movePlayer = true; // flag to indicate the player position can be updated
bool gameOver = false; // status flag
//**Prepare Cave***********
//...Initialize an empty cave
for (gameObjectType(&R)[TOTAL_COLS] : cave)
{
for (auto &C : R) C = EMPTY;
}
//...Add player in rows 0-2, columns 0-2
player.position.row = rand() % 3;
player.position.column = rand() % 3;
cave[player.position.row][player.position.column] = PLAYER;
//...Add Treasure in rows 4-6, column 1-6
treasure.row = rand() % 3 + 4;
treasure.column = rand() % 6 + 1;
cave[treasure.row][treasure.column] = TREASURE;
//...Add Monster at treasure row +1 , column -1
monster.row = treasure.row + 1;
monster.column = treasure.column - 1;
cave[monster.row][monster.column] = MONSTER;
//...Add Weapon in any empty location
weapon = placeInCave(cave);
cave[weapon.row][weapon.column] = WEAPON;
//...Add Noisemaker in any empty location
noisemaker = placeInCave(cave);
cave[noisemaker.row][noisemaker.column] = NOISEMAKER;
//...Add Torch in any empty location
torch = placeInCave(cave);
cave[torch.row][torch.column] = TORCH;
// ... Add the Fairy in any location.
fairy = placeInCave(cave);
cave[fairy.row][fairy.column] = FAIRY;
// <WK6 status=permanent>
//...Add Cave Exit in any empty location.
caveExit = placeInCave(cave);
cave[caveExit.row][caveExit.column] = CAVE_EXIT;
// </WK6>
//**Play Game*************
//...Begin Game Loop
while (!gameOver)
{
//....Display Board
//.....Check visibility
if (!player.hasTorch)
{
torch.isVisible = checkVisible(player.position, torch, 2);
weapon.isVisible = checkVisible(player.position, weapon, 2);
treasure.isVisible = checkVisible(player.position, treasure, 2);
monster.isVisible = checkVisible(player.position, monster, 2);
noisemaker.isVisible = checkVisible(player.position, noisemaker, 2);
// <WK6 status=permanent>
caveExit.isVisible = checkVisible(player.position, caveExit, 2);
// </WK6>
}
if (!player.hasfairy)
{
torch.isVisible = checkVisible(player.position, torch, 2);
weapon.isVisible = checkVisible(player.position, weapon, 2);
treasure.isVisible = checkVisible(player.position, treasure, 2);
monster.isVisible = checkVisible(player.position, monster, 2);
noisemaker.isVisible = checkVisible(player.position, noisemaker, 2);
// <WK6 status=permanent>
caveExit.isVisible = checkVisible(player.position, caveExit, 2);
// </WK6>
}
board[weapon.row + 2][weapon.column + 2] = showOnBoard(weapon) ? WSymbol : MT;
board[torch.row + 2][torch.column + 2] = showOnBoard(torch) ? TOSymbol : MT;
board[treasure.row + 2][treasure.column + 2] = showOnBoard(treasure) ? TRSymbol : MT;
board[noisemaker.row + 2][noisemaker.column + 2] = showOnBoard(noisemaker) ? NSymbol : MT;
// <WK6 status=permanent>
board[caveExit.row + 2][caveExit.column + 2] = showOnBoard(caveExit) ? XSymbol : MT;
// </WK6>
board[monster.row + 2][monster.column + 2] = showOnBoard(monster) ? MSymbol : MT;
board[player.position.row + 2][player.position.column + 2] = player.alive ? PSymbol : MT;
// Put the board on the screen
for (char(&R)[TOTAL_COLS + 3] : board)
{
for (char &C : R)
{
// <WK6 status=permanent>
gamecolor(C);
// </WK6>
cout << C;
}
cout << endl;
}
// <WK6 status=permanent>
gamecolor('Z');
// </WK6>
cout << msg.c_str() << endl;
//....Get command
cout << "What is your command? ";
cin >> command;
//....Clear display and message
msg.clear();
system("cls");
//....Process player command
row = player.position.row;
column = player.position.column;
switch (command)
{
case 'a':
column = player.position.column - 1;
if (column < MIN_COLS)
{
column = player.position.column;
msg = "You have hit the west wall!";
}
break;
case 's':
row = player.position.row + 1;
if (row > MAX_ROWS)
{
row = player.position.row;
msg = "You have hit the south wall!";
}
break;
case 'w':
column = player.position.column;//Is this really needed?
row = player.position.row - 1;
if (row < MIN_ROWS)
{
row = player.position.row;
msg = "You have hit the north wall!";
}
break;
case 'd':
row = player.position.row;//Is this really needed?
column = player.position.column + 1;
if (column > MAX_COLS)
{
column = player.position.column;
msg = "You have hit the east wall!";
}
break;
case 'n':
if (player.hasNoisemaker)
{
msg = "You make an irritating noise!";
monsterPause = true;
}
else
{
msg = "You make a feeble whimper.";
}
break;
case 'q':
gameOver = true;
msg = "Quitting?n";
break;
default:
movePlayer = false;
break;
}
//....Check if the game is over
if (!gameOver)
{
//..... Check for events
switch (cave[row][column])
{
//......If exit found, set flag to exit game
// <WK6 status=permanent>
case CAVE_EXIT:
gameOver = true;
msg = "You exit the cave.";
break;
// </WK6>
//......If treasure found, set flag to show player has treasure
case TREASURE:
player.hasTreasure = true;
treasure.isFound = true;
msg = "You found the treasure!";
break;
//......If weapon found, set flag to show player has weapon
case WEAPON:
player.hasWeapon = true;
weapon.isFound = true;
msg = "You have a weapon.";
// <WK6 status=permanent>
killedValue = PLAYER_DIES_WITH_WEAPON;
killMonsterValue = MONSTER_DIES_WITH_WEAPON;
// </WK6>
break;
//......If noise-maker found, set flag to show player has noise-maker
case NOISEMAKER:
player.hasNoisemaker = true;
noisemaker.isFound = true;
msg = "You found a noisemaker.";
break;
//......If torch found, set flag to show player has torch
case TORCH:
player.hasTorch = true;
torch.isFound = true;
msg = "Let there be light! You found a torch.";
// <WK6 status=permanent>
caveExit.isVisible = true;
// </WK6>
weapon.isVisible = true;
treasure.isVisible = true;
noisemaker.isVisible = true;
monster.isVisible = true;
break;
//if player finds fairy this will act as a torch
case FAIRY:
player.hasfairy = true;
torch.isFound = true;
msg = "Let there be light! You found a torch.";
// <WK6 status=permanent>
caveExit.isVisible = true;
// </WK6>
weapon.isVisible = true;
treasure.isVisible = true;
noisemaker.isVisible = true;
monster.isVisible = true;
break;
//......If monster found
case MONSTER:
if (!monster.isFound)
{
msg = "You have found the monster";
//.......Resolve combat
// <WK6 status=permanent>
gameOver = resolveCombat(player, monster, killedValue, killMonsterValue, msg, movePlayer, monsterPause);
// </WK6>
}
break;
}
//.....Move Player
if (movePlayer)
{
cave[player.position.row][player.position.column] = EMPTY; //updates position information
cave[row][column] = PLAYER;
board[player.position.row + 2][player.position.column + 2] = MT;//clear the screen where player was
player.position.row = row;
player.position.column = column;
}
movePlayer = true;
//.....Process Monster
if (!monster.isFound)
{
if (monsterPause)
{
// Monster paused. Check if Monster starts moving again
if (rand() % 3 == 1)
{
monsterPause = false;
}
}
else
{
//......Move Monster
MonsterMoveCounter = (++MonsterMoveCounter) % 8;
row = monster.row;
column = monster.column;
switch (MonsterMoveCounter)
{
case 0:
column++;
break;
case 1:
row--;
break;
case 2:
row--;
break;
case 3:
column--;
break;
case 4:
column--;
break;
case 5:
row++;
break;
case 6:
row++;
break;
case 7:
column++;
break;
default:
break;
}
//......Check for events
//.......If player found
if (cave[row][column] == PLAYER)
{
msg = "The monster has found you";
//........Resolve combat
// <WK6 status=permanent>
gameOver = resolveCombat(player, monster, killedValue - 2, killMonsterValue - 2, msg, movePlayer, monsterPause);
// </WK6>
}
else
{
//........Move Monster
// <WK6 status=permanent>
cave[monster.row][monster.column] = hold; // reveal what is under the monster <bug fix in week 6>
// </WK6>
board[monster.row + 2][monster.column + 2] = MT;// clear the screen behind monster
// <WK6 status=permanent>
hold = cave[row][column]; // save what the monster is about to move over <bug fix in week 6>
// </WK6>
monster.row = row; // update monster's row
monster.column = column; // update monster's column
cave[row][column] = MONSTER; // change monster's location in the cave
}
}
}
}
}
//...End Game Loop
//**End Game**************
//...Provide end win/loss message
cout << msg.c_str() << endl;
if (player.alive)
{
if (player.hasTreasure) msg = "You are alive and rich!";
else msg = "You didn't get the treasure, but you live to seek adventure another day.";
}
else
{
msg = "RIP Adventurer";
}
cout << msg.c_str() << endl;
//...Do clean-up
//...Quit
return 0;
}
//--------------------------------------------------------------------------------
//================================================================================
gameObject placeInCave(gameObjectTypearray[TOTAL_ROWS][TOTAL_COLS])
{
int r, c;
gameObject obj;
do
{
r = rand() % 8;
c = rand() % 8;
} while (array[r][c] != EMPTY);
obj.row = r;
obj.column = c;
obj.isFound = false;
return obj;
}
bool checkVisible(gameObject x, gameObject y, int dist)
{
if ((abs(x.row - y.row) < dist && (abs(x.column - y.column) < dist))) return true;
return false;
}
bool showOnBoard(gameObject x)
{
return ((x.isVisible) && (!x.isFound));
}
// <WK6 status=permanent>
bool resolveCombat(playerObject &p, gameObject &m, int YouDie, int MonsterDies, string &str, bool &moveP, bool &mPause)
{
int combatRoll = rand() % 100;
//........Killed by Monster
if (combatRoll > YouDie)
{
str += " and you have been eaten by a Grue!nGAME OVER!";
moveP = false;
p.position.isVisible = false;
p.alive = false;
return true;
}
//........Kill Monster
else if (combatRoll > MonsterDies)
{
if (p.hasWeapon) str += " and you slay the monster with your weapon.";
else str += " , but--against all odds--you actually killed the monster with your bare hands.";
m.isFound = true;
return false;
}
//........Survive Attack
else
{
str += " and you managed to survive the monster's attack.";
moveP = false;
mPause = true;
return false;
}
}
// <WK6 status=permanent>
void gamecolor(unsigned char type)
{
switch (type) {
case 201: case 205: case 200: case 188: case 186: case 187:
setcolor(FOREGROUND_RED);
break;
case 'W':
setcolor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
break;
case '$':
setcolor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
break;
case 'P':
setcolor(FOREGROUND_BLUE | FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_INTENSITY);
break;
case 'T':
setcolor(FOREGROUND_RED | FOREGROUND_INTENSITY);
break;
case 'X':
setcolor(BACKGROUND_BLUE | BACKGROUND_GREEN);
break;
case 'M':
setcolor(FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
break;
case 'N':
setcolor(FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
break;
default:
setcolor(FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED);
}
}
// <WK6 status=permanent>
void setcolor(int c)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c);
}
Here is the GSP115_Course_Project.h
#pragma once
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <windows.h>
enum gameObjectType
{
EMPTY, PLAYER, TREASURE, MONSTER, WEAPON, TORCH, NOISEMAKER, CAVE_EXIT, FAIRY
};
struct gameObject
{
int row; // row position of the object
int column; // column position of the object
bool isFound; // flag to indicate if the object has been found (or is dead, in the case of the monster)
bool isVisible; // flag to indicate if the object can be seen on the board -add in week 4
};
struct playerObject
{
bool alive; // flag to indicate if the player is alive or dead
bool hasWeapon; // flag to indicate if the player has the weapon
bool hasTreasure; // flag to indicate if the player has the treasure
bool hasTorch; // flag to indicate if the player has the torch -add in week 4
bool hasNoisemaker; // flag to indicate if the player has the noisemaker -add in week 4
bool hasfairy;
gameObject position;// variables for row, column and visibility
};