NEED HELP !!

Started by
1 comment, last by lordoftools 18 years, 8 months ago
Hey guys I thought i was finished with this drug wars game but then i had a few friends beta it and i realised that there are some major issues and with my countless re-reads of the code i can't see why these issues are occuring. Below is the code and a list of my problems if anyone has an idea on how to fix any amount of them please tell me. THE PROBLEMS: 1. In the sell drugs menu (not all the time, but sometimes) after you sell the drug it will give you a lot more money than you should have gotten. 2. When the list of drugs which are available populates SOMETIMES you can't select certain ones. (seems like acid, cocaine, and ludes are the problematic drugs) 3. When you try to buy drugs SOMETIMES you can't buy as much as you should be able to. (ie. if you have $40 and you have a drug selling at $10 you SOMETIMES can't buy 4 but a lower quantity will work.) HELPFUL INFO: (for problem #1) It appears to be giving you $10,000 too much but i havn't testing it repeatedly enough to say that the $10,000 is a constant. Also if it is always $10,000 too much you may want to reference the Hentchmen functions because they sell for $10,000 and nothing else uses that number. THE DELEMA: The fact that all these problems are not constant and only occur sometimes is giving me all the trouble with debugging it. My logic appears correct (obviously since i wrote it) but is obviously not correct so maybe an objective eye can help me out here. Also i have repeatedly searched over everything i've said above and can not figure this out on my own. I think im just too inexperienced with CPP but regardless i just wanted you all to know that i wouldn't be posting this if i hadn't done everythign in my power to debug it myself. THE CODE: //requires using MFC in shared DLL (project-->settings) //Using MSVC++
[source code=cpp]
//for VC++
#include "stdafx.h"

//for basic functions i.e. (cout,cin)
#include <iostream>
#include <afx.h>

//for file manipulation
#include <fstream>
#include <cstdlib>

//For getch()/getche()
#include <conio.h>

//For srand() and time()
#include <stdio.h>
#include <stdlib.h> //also for string to int convertions and visa versa
#include <time.h>

//for the string convertions
#include <sstream>
#include <cstring>
#include <stdexcept>

//for ease of use
using namespace std;

//Global Variable Declaration
struct USERDATA
{
	string Name, Gun, Location;
	int Cash, Debt, Bank, Hentchmen, Space, Day;
	double GunRate;
};
struct LOCDATA
{
	string Name;
	int Police, minDrugs, maxDrugs;
};
int i;
struct LOCDATA loc;
struct USERDATA profile;
enum Drugs {ACID=1, COCAINE, HASHISH, HERION, LUDES, MDA, OPIUM, PCP, PEYOTE, SHROOMS, SPEED, WEED};
enum LOCS {BRONX=1, GHETTO, CENTRALPARK, MANHATTAN, CONEYISLAND, BROOKLYN, QUEENS, STATENISLAND};
int intDrugArray[12];
string strDrugArray[12];
int intInvArray[12];
string strInvArray[12];
int intQuantArray[12];
string strPath;
bool boolGun;
int intGun;

//function delcarations
WORD SetConsoleColors(HANDLE hConsole, WORD wColorText, WORD wColorBkg);
WORD GetConsoleColors(HANDLE hConsole);
wstring get_module_path_wide(void);
string wsts(const wstring &src_string);
int MainMenu();
int MenuHandler();
string ProfileMenu();
inline std::string stringify(int x);
string BufferStr(string strString, int MAX_LEN);
void BuyingDrugs(string Drug, int Price);
void PrintStats();
void CityOperations(bool NewDay);
void BankMenu();
void SellDrugsMenu();
void BuyDrugsMenu();
void BuyingGun(string Gun, int Price);
void ChangeLocMenu();
void LoanSharkMenu();
void SaveGame();
bool CheckSaved();
void HentchmenMenu();
int CheckHentchmen();
void ShowInfo();
void DeleteProfile();
void CheckInv();

//Start off function
int main(int argc, char* argv[])
{
	//Initialize random generator 
	srand ( time(NULL) );

	//Initialize global variables
	strPath=wsts(get_module_path_wide());
	for (i=0;i<=11;i++)
	{
		strInvArray=" ";
		strDrugArray=" ";
	}

	//Runs the menus and terminates the program if needed
	return MenuHandler();
}

int MenuHandler()
{
	//Function level Delcarations
	string strProfile, SavedFile=strPath + "\\profiles.dat", strTemp;
	char chrLine[2000];
	int intMnuOpt, cnt=0;

	//Displays Main Menu
	intMnuOpt=MainMenu();

	//ERROR code
	if (intMnuOpt==0)
	{
		system("cls");
		cout<<"int MainMenu() returned ERROR code '0'\n";
	}

	//Application Info
	if (intMnuOpt==1)
	{
		system("cls");
		ShowInfo();
	}

	//New Game code
	if (intMnuOpt==2)
	{
		//Variable initalization. 
		profile.Bank=0;
		profile.Day=0;
		profile.Cash=rand()%3000 + 2000;
		profile.Debt=rand()%9000 + 1000;
		profile.Gun="NONE";
		profile.GunRate=0;
		profile.Location="BRONX";
		profile.Hentchmen=rand()%4 + 7;
		profile.Space=(profile.Hentchmen * 10) + 10;
		loc.maxDrugs=12;

		//Set user name.
		system("cls");
		cout<<"Enter your name: ";
		cin>>strTemp;
		profile.Name=strTemp.c_str();
		
		//Starts off in BRONX
		loc.Name="BRONX";
		loc.minDrugs=7;
		loc.Police=10;
		CityOperations(true);
	}

	//Load Profile code
	if (intMnuOpt==3)
	{
		//displays menu, prompts profile choice, stores the user ID
		strProfile=ProfileMenu();

		//ERROR checking
		if (strProfile=="NULL")
		{
			system("cls");
			cout<<"string ProfileMenu() returned ERROR code 'NULL' (Choice integer was left empty or invalid).\n\n";
			cout<<"Press any key to return to the Main Menu.";
			getch();
			MenuHandler();
		}

		//check for cancel msg
		if (strProfile=="MainMenu")
		{
			system("cls");
			MenuHandler();
		}

		//Load profile settings and start the game
		fstream inFile(SavedFile.c_str(), ios::in);

		inFile.getline(chrLine,2000);

		//convert to string array
		strTemp=chrLine[0];
		for (i=1; i<=1999; i++)
			strTemp=strTemp+chrLine;
		
		while (strTemp.find(strProfile)==std::string::npos)
		{
			inFile.getline(chrLine,2000);

			//convert to string array
			strTemp=chrLine[0];
			for (i=1; i<=1999; i++)
				strTemp=strTemp+chrLine;
		};

		//sets the profile.name
		strTemp=strTemp.substr(strTemp.find("=")+1,strlen(strTemp.c_str())-strTemp.find("=")-1);
		profile.Name=strTemp;

		//sets the rest of the variables
		while(strTemp.find("loc.maxdrugs")==std::string::npos)
		{
			inFile.getline(chrLine,2000);
			//convert to string array
			strTemp=chrLine[0];
			for (i=1; i<=1999; i++)
				strTemp=strTemp+chrLine;

			if ((strTemp.substr(0,strTemp.find("=")))=="profile.gun")
			{
				profile.Gun=strTemp.substr(strTemp.find("=")+1,strlen(strTemp.c_str())-strTemp.find("=")-1);
			}
			else if ((strTemp.substr(0,strTemp.find("=")))=="profile.location")
			{
				profile.Location=strTemp.substr(strTemp.find("=")+1,strlen(strTemp.c_str())-strTemp.find("=")-1);
			}
			else if ((strTemp.substr(0,strTemp.find("=")))=="profile.cash")
			{
				profile.Cash=atoi(strTemp.substr(strTemp.find("=")+1,strlen(strTemp.c_str())).c_str());
			}
			else if ((strTemp.substr(0,strTemp.find("=")))=="profile.debt")
			{
				profile.Debt=atoi(strTemp.substr(strTemp.find("=")+1,strlen(strTemp.c_str())).c_str());
			}
			else if ((strTemp.substr(0,strTemp.find("=")))=="profile.bank")
			{
				profile.Bank=atoi(strTemp.substr(strTemp.find("=")+1,strlen(strTemp.c_str())).c_str());
			}
			else if ((strTemp.substr(0,strTemp.find("=")))=="profile.hentchmen")
			{
				profile.Hentchmen=atoi(strTemp.substr(strTemp.find("=")+1,strlen(strTemp.c_str())).c_str());
			}
			else if ((strTemp.substr(0,strTemp.find("=")))=="profile.space")
			{
				profile.Space=atoi(strTemp.substr(strTemp.find("=")+1,strlen(strTemp.c_str())).c_str());
			}
			else if ((strTemp.substr(0,strTemp.find("=")))=="profile.day")
			{
				profile.Day=atoi(strTemp.substr(strTemp.find("=")+1,strlen(strTemp.c_str())).c_str());
			}
			else if ((strTemp.substr(0,strTemp.find("=")))=="profile.gunrate")
			{
				profile.GunRate=atoi(strTemp.substr(strTemp.find("=")+1,strlen(strTemp.c_str())).c_str());
			}
			else if ((strTemp.substr(0,strTemp.find("=")))=="loc.name")
			{
				loc.Name=strTemp.substr(strTemp.find("=")+1,strlen(strTemp.c_str())-strTemp.find("=")-1);
			}
			else if ((strTemp.substr(0,strTemp.find("=")))=="loc.police")
			{
				loc.Police=atoi(strTemp.substr(strTemp.find("=")+1,strlen(strTemp.c_str())).c_str());
			}
			else if ((strTemp.substr(0,strTemp.find("=")))=="loc.mindrugs")
			{
				loc.minDrugs=atoi(strTemp.substr(strTemp.find("=")+1,strlen(strTemp.c_str())).c_str());
			}
			else if ((strTemp.substr(0,strTemp.find("=")))=="loc.maxdrugs")
			{
				loc.maxDrugs=atoi(strTemp.substr(strTemp.find("=")+1,strlen(strTemp.c_str())).c_str());
			}
			else
			{
				if (strTemp.find("=") !=std::string::npos)
				{
					strInvArray[cnt]=strTemp.substr(0,strTemp.find("="));
					intQuantArray[cnt]=atoi(strTemp.substr(strTemp.find("=")+1,strTemp.find(",")-strTemp.find("=")).c_str());
					intInvArray[cnt]=atoi(strTemp.substr(strTemp.find(",")+1,strlen(strTemp.c_str())).c_str());
					cnt++;
				}
			}
		}

		//start game
		CityOperations(true);
	}

	//Delete a profile
	if (intMnuOpt==4)
	{
		system("cls");
		DeleteProfile();
	}

	//Quit Code
	if (intMnuOpt==5)
	{
		system("cls");
		cout<<"Thank you for playing \"Drug Wars\" clone -- By: Derik Hammer.";
		getch();
	}

	//Application terminator
	return 0;
}

//Operates the features of this location
void CityOperations(bool NewDay)
{
	int intTemp, cnt=0, DrugChecker;
	bool PickAgain;
	char chrChoice;
	HANDLE hConsole = CreateFile("CONOUT$", GENERIC_WRITE | GENERIC_READ,
									FILE_SHARE_READ | FILE_SHARE_WRITE, 0, 
									OPEN_EXISTING, 0, 0);

	if (NewDay==true)
	{
		//increase the day
		profile.Day++;

		//increase debt due to interest each week
		if (profile.Day%7==0)
			profile.Debt=profile.Debt+(profile.Debt*.12);

		//set the randomized guns
		if(rand()%3+1==2)
		{
			boolGun=true;
			intGun=rand()%3+1;
		}
	}
	else
	{
		system("cls");
		PrintStats();
		goto BackFromMenu;
	}

	system("cls");
	PrintStats();

	//sets up the drugs which are in this city (price, how many, what kind)	
	intTemp=rand()%(loc.maxDrugs-loc.minDrugs)+loc.minDrugs;

	while (intTemp-1>=cnt)
	{
		do 
		{
			PickAgain=false;
			DrugChecker=rand()%12+1;
			for (i=0; i<=11; i++)
			{
				if (intDrugArray==DrugChecker)
					PickAgain=true;
			}
		}
		while (PickAgain==true);
		intDrugArray[cnt]=DrugChecker;
		cnt++;
	};

	for (i=intTemp; i<=11; i++)
		intDrugArray=0;

	//Converts the int array to a string with the drug names and then makes the int array
	//into the prices array at the same time.
	for (i=0; i<=11; i++)
	{
		switch (intDrugArray)
		{	
			case ACID:
				strDrugArray="ACID";
				intDrugArray=rand()%3400+1000;
				break;

			case COCAINE:
				strDrugArray="COCAINE";
				intDrugArray=rand()%14000+15000;
				break;

			case HASHISH:
				strDrugArray="HASHISH";
				intDrugArray=rand()%800+480;
				break;

			case HERION:
				strDrugArray="HERION";
				intDrugArray=rand()%7500+5500;
				break;

			case LUDES:
				strDrugArray="LUDES";
				intDrugArray=rand()%49+11;
				break;

			case MDA:
				strDrugArray="MDA (Ecstasy)";
				intDrugArray=rand()%2900+1500;
				break;

			case OPIUM:
				strDrugArray="OPIUM";
				intDrugArray=rand()%710+540;
				break;

			case PCP:
				strDrugArray="PCP";
				intDrugArray=rand()%1500+1000;
				break;

			case PEYOTE:
				strDrugArray="PEYOTE";
				intDrugArray=rand()%480+220;
				break;

			case SHROOMS:
				strDrugArray="SHROOMS";
				intDrugArray=rand()%670+630;
				break;

			case SPEED:
				strDrugArray="SPEED";
				intDrugArray=rand()%160+90;
				break;

			case WEED:
				strDrugArray="WEED";
				intDrugArray=rand()%575+315;
				break;

			default:
				strDrugArray="ERROR: NO_DRUG";
				break;
		}	
	}

	//make stats 'RED' (12) with 'blk bg' (0) [warning std color]
	SetConsoleColors(hConsole, 12, 0);

	//If it's a newday but not the first day run a random event to bust the user and make them bribe the cops
	if (NewDay==true && profile.Day !=1)
	{
		if((rand()%99+1)<=(loc.Police-profile.GunRate))
		{
			int money=profile.Cash*.2;
			string st;
			profile.Cash=profile.Cash-money;
			system("cls");
			PrintStats();
			//make stats 'RED' (12) with 'blk bg' (0) [warning std color]
			SetConsoleColors(hConsole, 12, 0);
			cout<<"BUSTED !! -- Gotta bribe the cops, and it costs you 20% of your cash.\n\n";
			cout<<BufferStr("LOST: "+stringify(money),20)<<"REMAINING: "<<profile.Cash<<"\n\n";
		}
	}

BackFromMenu:
	//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
	SetConsoleColors(hConsole, 10, 0);
	//print city menu
	cout<<"Welcome to "<<loc.Name<<"!\n";
	
	//if its the home city [BRONX] then display spec menu
	if (loc.Name=="BRONX")
	{
specPickAgain:
		cout<<"1. Check out what's available.\n";
		cout<<"2. Sell Drugs.\n";
		cout<<"3. Change location.\n";
		cout<<"4. Visit Bank.\n";
		cout<<"5. Visit Loan Shark.\n";
		cout<<"6. Save Game.\n";
		cout<<"7. Check Inventory.\n";
		cout<<"8. Quit.\n";
		cout<<"Selection: ";
		//await choice
		cin>>chrChoice;

		switch (chrChoice)
		{
			case '1':
				BuyDrugsMenu();
				break;

			case '2':
				SellDrugsMenu();
				break;

			case '3':
				ChangeLocMenu();
				break;

			case '4':
				BankMenu();
				break;

			case '5':
				LoanSharkMenu();
				break;

			case '6':
				SaveGame();
				break;

			case '7':
				CheckInv();
				break;

			case '8':
				system("cls");
				SetConsoleColors(hConsole, 15, 0);
				cout<<"Thank you for playing \"Drug Wars\" clone -- By: Derik Hammer.";
				getch();
				break;

			default:
				system("cls");
				PrintStats();
				//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
				SetConsoleColors(hConsole, 10, 0);
				cout<<"INVALID CHOICE PICK AGAIN!\n\n";
				goto specPickAgain;
				break;
		}
	}
	//if its the city [BROOKLYN] then display spec menu
	else if (loc.Name=="BROOKLYN")
	{
specPickAgain2:
		cout<<"1. Check out what's available.\n";
		cout<<"2. Sell Drugs.\n";
		cout<<"3. Change location.\n";
		cout<<"4. Exchange Hentchmen.\n";
		cout<<"5. Check Inventory.\n";
		cout<<"Selection: ";
		//await choice
		cin>>chrChoice;

		switch (chrChoice)
		{
			case '1':
				BuyDrugsMenu();
				break;
			case '2':
				SellDrugsMenu();
				break;
			case '3':
				ChangeLocMenu();
				break;
			case '4':
				HentchmenMenu();
				break;
			case '5':
				CheckInv();
				break;
			default:
				system("cls");
				PrintStats();
				//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
				SetConsoleColors(hConsole, 10, 0);
				cout<<"INVALID CHOICE PICK AGAIN!\n\n";
				goto specPickAgain2;
				break;
		}
	}
	//if its the city [MANHATTAN] then display spec menu
	else if (loc.Name=="MANHATTAN")
	{
specPickAgain3:
		cout<<"1. Check out what's available.\n";
		cout<<"2. Sell Drugs.\n";
		cout<<"3. Change location.\n";
		cout<<"4. Exchange Hentchmen.\n";
		cout<<"5. Check Inventory.\n";
		cout<<"Selection: ";
		//await choice
		cin>>chrChoice;

		switch (chrChoice)
		{
			case '1':
				BuyDrugsMenu();
				break;
			case '2':
				SellDrugsMenu();
				break;
			case '3':
				ChangeLocMenu();
				break;
			case '4':
				HentchmenMenu();
				break;
			case '5':
				CheckInv();
				break;
			default:
				system("cls");
				PrintStats();
				//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
				SetConsoleColors(hConsole, 10, 0);
				cout<<"INVALID CHOICE PICK AGAIN!\n\n";
				goto specPickAgain3;
				break;
		}
	}
	else
	{
normPickAgain:
		cout<<"1. Check out available Drugs.\n";
		cout<<"2. Sell Drugs.\n";
		cout<<"3. Change location.\n";
		cout<<"4. Check Inventory.\n";
		cout<<"Selection: ";
		//await choice
		cin>>chrChoice;

		switch (chrChoice)
		{
			case '1':
				BuyDrugsMenu();
				break;

			case '2':
				SellDrugsMenu();
				break;

			case '3':
				ChangeLocMenu();
				break;

			case '4':
				CheckInv();
				break;

			default:
				system("cls");
				PrintStats();
				//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
				SetConsoleColors(hConsole, 10, 0);
				cout<<"Invalid choice, please pick again.\n";
				goto normPickAgain;
				break;
		}
	}

	//revert to old colors
	SetConsoleColors(hConsole, 15, 0);
}

//checks your inventory
void CheckInv()
{
	HANDLE hConsole = CreateFile("CONOUT$", GENERIC_WRITE | GENERIC_READ,
									FILE_SHARE_READ | FILE_SHARE_WRITE, 0, 
									OPEN_EXISTING, 0, 0);
	int cnt=1, a;

	//print inventory
	system("cls");
	PrintStats();
	//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
	SetConsoleColors(hConsole, 10, 0);
	cout<<"This is what you got:"<<endl<<endl;
	for(a=0; a<=11; a++)
	{
		if(strInvArray[a] !=" ")
		{
			cout<<BufferStr(stringify(cnt)+": "+strInvArray[a],12); cout<<" - Quantity: "<<intQuantArray[a]<<", bought @ $";
			cout<<intInvArray[a]<<".\n";
			cnt++;
		}	
	}	
	cout<<"\nPress any key to return to your city...";
	getch();

	//return to city
	CityOperations(false);
}

//preforms bank operations
void BankMenu()
{
	//function level delcarations
	char chrChoice;
	int intAmt;
	bool boolDep=false, boolWithd=false;

	//reset screen and disp stats again
	system("cls");
	PrintStats();

	//print bank options
	//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
	HANDLE hConsole = CreateFile("CONOUT$", GENERIC_WRITE | GENERIC_READ,
									FILE_SHARE_READ | FILE_SHARE_WRITE, 0, 
									OPEN_EXISTING, 0, 0);
	SetConsoleColors(hConsole, 10, 0);

	cout<<"Welcome to the Bank!\n\n";

	//check to see what he can do in the bank
	if (profile.Cash>0)
	{
		cout<<"D. Deposit (Up to $"<<profile.Cash<<")\n";
		boolDep=true;
	}
	if (profile.Bank>0)
	{
		cout<<"W. Withdraw (Up to $"<<profile.Bank<<")\n";
		boolWithd=true;
	}
	//await choice
	cout<<"\nSelection (0 to cancel): ";
	cin>>chrChoice;

	if ((chrChoice=='d' || chrChoice=='D') && boolDep==true)
	{
		//disp deposit menu
		system("cls");
		PrintStats();
		SetConsoleColors(hConsole, 10, 0);
DepAgain:
		cout<<"Bank Deposit -- $"<<profile.Cash<<" available.\n\n";
		cout<<"Deposit Amount (0 to cancel): ";
		//await choice
		cin>>intAmt;
		if (intAmt>profile.Cash || intAmt<0)
		{
			system("cls");
			PrintStats();
			SetConsoleColors(hConsole, 10, 0);
			cout<<"Invalid $ amount please pick again.\n\n";
			goto DepAgain;
		}
		//alter $ amounts accordingly
		profile.Cash=profile.Cash-intAmt;
		profile.Bank=profile.Bank+intAmt;
	}
	else if ((chrChoice=='w' || chrChoice=='W') && boolWithd==true)
	{
		//disp withdraw menu
		system("cls");
		PrintStats();
		SetConsoleColors(hConsole, 10, 0);
WDrawAgain:
		cout<<"Bank Withdraw -- $"<<profile.Bank<<" available.\n\n";
		cout<<"Withdraw Amount (0 to cancel): ";
		//await choice
		cin>>intAmt;
		if (intAmt>profile.Bank || intAmt<0)
		{
			system("cls");
			PrintStats();
			SetConsoleColors(hConsole, 10, 0);
			cout<<"Invalid $ amount please pick again.\n\n";
			goto WDrawAgain;
		}
		//alter $ amounts accordingly
		profile.Bank=profile.Bank-intAmt;
		profile.Cash=profile.Cash+intAmt;

	}
	else if (chrChoice=='0')
	{
		//return to your city
		CityOperations(false);
	}
	else
		BankMenu();

	CityOperations(false);

	//revert to old colors
	SetConsoleColors(hConsole, 15, 0);
}
void SellDrugsMenu()
{
	//Function level Declarations
	HANDLE hConsole = CreateFile("CONOUT$", GENERIC_WRITE | GENERIC_READ,
									FILE_SHARE_READ | FILE_SHARE_WRITE, 0, 
									OPEN_EXISTING, 0, 0);
	int cnt, cnt2, x, intSell[12], tmpQuant[12];
	string strQuant, strChoice;

	//print menu
	system("cls");
	PrintStats();
	//make stats 'RED' (12) with 'blk bg' (0) [warning std color]
	SetConsoleColors(hConsole, 12, 0);
	cout<<"NOTE: You may only sell drugs which this city is buying.\n";
	cout<<"      See the Inventory option for an accurate list of your drugs.\n\n";
	//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
	SetConsoleColors(hConsole, 10, 0);
	cout<<"What drugs do you want to sell?\n\n";

	cnt2=1;
	//prints the sell options (can only sell to citys who are buying)
	for (cnt=0;cnt<12;cnt++)
	{
		for (x=0;x<=11;x++)
		{
			if(strDrugArray[cnt]==strInvArray[x] && strDrugArray[cnt] !=" ")
			{
				cout<<BufferStr(stringify(cnt2)+": "+strInvArray[x],12); cout<<" - Quantity: "<<intQuantArray[x]<<", bought @ $";
				cout<<intInvArray[x]<<", selling @ $"<<intDrugArray[cnt]<<"\n";
				intSell[cnt2]=cnt;
				tmpQuant[cnt2]=intQuantArray[x];
				cnt2++;
			}
		}
	}

	//give option to sell gun (3/4 value)
	int intGunPrice;
	if(profile.Gun !="NONE")
	{
		if(profile.Gun=="BARETTA")
		{
			intGunPrice=3000*.75;
			cout<<"G. Baretta - bought @ $3000, selling @ $"<<intGunPrice<<endl;
		}
		else if(profile.Gun==".38SPEC")
		{
			intGunPrice=3500*.75;
			cout<<"G. .38 Special - bought @ $3500, selling @ $"<<intGunPrice<<endl;
		}
		else if(profile.Gun=="SATNIGHTSPEC")
		{
			intGunPrice=3100*.75;
			cout<<"G. Saturday Night Special - bought @ $3100, selling @ $"<<intGunPrice<<endl;
		}
		else if(profile.Gun=="RUGER")
		{
			intGunPrice=2900*.75;
			cout<<"G. Ruger - bought @ $2900, selling @ $"<<intGunPrice<<endl;
		}
	}

	cout<<"\nSelect Drug to Sell (0 to cancel): ";
	cin>>strChoice;

	//check for gun selection
	if(strChoice=="G" || strChoice=="g")
		goto Sell_Gun;

	//if the cancel value is entered return to the city
	if (atoi(strChoice.c_str())==0 && strChoice=="0")
		goto City;

	//if it's a letter send it to the invalid choice menu
	if (atoi(strChoice.c_str())==0 && strChoice !="0")
		strChoice="9999";
	
	//reprint menu if invalid drug is choosen
	while (atoi(strChoice.c_str())>cnt2-1 || atoi(strChoice.c_str())<0)
	{
		system("cls");
		PrintStats();
		//make stats 'RED' (12) with 'blk bg' (0) [warning std color]
		SetConsoleColors(hConsole, 12, 0);
		cout<<"NOTE: You may only sell drugs which this city is buying.\n";
		cout<<"      See the Inventory option for an accurate list of your drugs.\n\n";
		//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
		SetConsoleColors(hConsole, 10, 0);
		cout<<"INVALID DRUG CHOICE PLEASE CHOOSE AGAIN!\n\n";
		cout<<"What drugs do you want to sell?\n\n";
		cnt2=1;
		//prints the sell options (can only sell to citys who are buying)
		for (cnt=0;cnt<12;cnt++)
		{
			for (x=0;x<=11;x++)
			{
				if(strDrugArray[cnt]==strInvArray[x] && strDrugArray[cnt] !=" ")
				{
					cout<<BufferStr(stringify(cnt2)+": "+strInvArray[x],12); cout<<" - Quantity: "<<intQuantArray[x]<<", bought @ $";
					cout<<intInvArray[x]<<", selling @ $"<<intDrugArray[cnt]<<"\n";
					intSell[cnt2]=cnt;
					cnt2++;
				}
			}
		}
		
		cout<<"\nSelect Drug to Sell (0 to cancel): ";
		cin>>strChoice;

		//check for gun selection
		if(strChoice=="G" || strChoice=="g")
			goto Sell_Gun;

		//if it's a letter send it to the invalid choice menu
		if (atoi(strChoice.c_str())==0 && strChoice !="0")
			strChoice="9999";
	}

	//if the cancel value is entered return to the city
	if (atoi(strChoice.c_str())==0 && strChoice=="0")
		goto City;

	cout<<"\nQuantity (0 to cancel): ";
	cin>>strQuant;

	//if the cancel value is entered return to the city
	if (atoi(strQuant.c_str())==0 && strQuant=="0")
		goto City;

	//if it's a letter send it to the invalid choice menu
	if (atoi(strQuant.c_str())==0 && strQuant !="0")
		strQuant="9999";

	//reprint menu if invalid quantity is choosen
	while ((atoi(strQuant.c_str())>tmpQuant[atoi(strChoice.c_str())]) || (atoi(strQuant.c_str())<0))
	{
		system("cls");
		PrintStats();
		//make stats 'RED' (12) with 'blk bg' (0) [warning std color]
		SetConsoleColors(hConsole, 12, 0);
		cout<<"NOTE: You may only sell the drug which this city is buying.\n";
		cout<<"      See the Inventory option for an accurate list of your drugs.\n\n";
		//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
		SetConsoleColors(hConsole, 10, 0);
		cout<<"INVALID DRUG CHOICE PLEASE CHOOSE AGAIN!\n\n";
		cout<<"What drugs do you want to sell?\n\n";
		cout<<"NOTE: You may only sell drugs which this city is buying, See the Inventory option for an accurate list of your drugs.\n\n";
		cnt=0;
		cnt2=1;
		//prints the sell options (can only sell to citys who are buying)
		while (cnt<12 && strDrugArray[cnt] !=" ")
		{
			for (x=0;x<=11;x++)
			{
				if(strDrugArray[cnt]==strInvArray[x])
				{
					cout<<BufferStr(stringify(cnt2)+": "+strInvArray[x],12); cout<<" - Quantity: ";
					cout<<intQuantArray[x]<<", bought @ $";
					cout<<intInvArray[x]<<", selling @ $"<<intDrugArray[cnt]<<"\n";
					intSell[cnt2]=cnt;
					cnt2++;
				}
			}
			cnt++;
		}

		cout<<"\nSelect Drug to Sell (0 to cancel): "<<strChoice<<"\n";

		cout<<"\nQuantity (0 to cancel): ";
		cin>>strQuant;

		//if it's a letter send it to the invalid choice menu
		if (atoi(strQuant.c_str())==0 && strQuant !="0")
			strQuant="9999";
	}

	//if the cancel value is entered return to the city
	if (atoi(strQuant.c_str())==0 && strQuant=="0")
		goto City;

	//empty out inv of the drugs sold and update related variables
	for(i=0;i<=11;i++)
	{
		if(strInvArray==strDrugArray[intSell[atoi(strChoice.c_str())]])
		{
			profile.Space=profile.Space+atoi(strQuant.c_str());
			profile.Cash=profile.Cash+(atoi(strQuant.c_str())*intDrugArray[intSell[atoi(strChoice.c_str())]]);
			if(atoi(strQuant.c_str())<intQuantArray)
			{
				intQuantArray=intQuantArray-atoi(strQuant.c_str());
			}
			else
			{
				intQuantArray=0;
				intInvArray=0;
				strInvArray=" ";
			}
			i=12;
		}
	}

	//an impossible if so that this code can only be reached with the goto
	if(intGunPrice==9999)
	{
Sell_Gun:
		profile.Cash=profile.Cash+intGunPrice;
		profile.Gun="NONE";
		profile.GunRate=0;
	}

	//return to the city
City:
	CityOperations(false);

	//reverts back to old colors
	SetConsoleColors(hConsole, 15, 0);
}

//determines whether to buy or sell hentchmen
int CheckHentchmen()
{
	//Function level delcarations
	HANDLE hConsole = CreateFile("CONOUT$", GENERIC_WRITE | GENERIC_READ,
									FILE_SHARE_READ | FILE_SHARE_WRITE, 0, 
									OPEN_EXISTING, 0, 0);
	string strChoice;

	//print menu
	system("cls");
	PrintStats();
	//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
	SetConsoleColors(hConsole, 10, 0);
RePrint:
	cout<<"What type of business will we be doing today?\n\n";
	cout<<"1. Recruiting Hentchmen - $10,000 each\n";
	cout<<"2. Selling Hentchmen - $6,000 each\n\n";
	cout<<"Selection (0 to cancel): ";
	//await choice
	cin>>strChoice;
	
	//check choice's validity
	if(strChoice !="1" && strChoice !="2" && strChoice !="0")
	{
		system("cls");
		PrintStats();
		//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
		SetConsoleColors(hConsole, 10, 0);
		cout<<"INVALID SELECTION PLEASE PICK AGAIN!\n\n";
		goto RePrint;
	}
	else
		return (atoi(strChoice.c_str()));

}

//buys and sells hentchmen
void HentchmenMenu()
{
	//Function level declarations
	HANDLE hConsole = CreateFile("CONOUT$", GENERIC_WRITE | GENERIC_READ,
									FILE_SHARE_READ | FILE_SHARE_WRITE, 0, 
									OPEN_EXISTING, 0, 0);
	int intCheck;
	string strChoice;

	//if you have 0 men you can't sell any
	if(profile.Hentchmen==0)
	{
		//print menu
		system("cls");
		PrintStats();
		//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
		SetConsoleColors(hConsole, 10, 0);
		cout<<"How many Hentchmen would you like to buy (MAX: 24)? - $10,000 each\n\n";
		cout<<"Selection (0 to cancel): ";
		//await choice
		cin>>strChoice;

		//if it's a letter send it to the invalid choice menu
		if (atoi(strChoice.c_str())==0 && strChoice !="0")
			strChoice="9999";
		
		//if it's an invalid choice
		while(atoi(strChoice.c_str())*10000>profile.Cash || atoi(strChoice.c_str())<0 || profile.Hentchmen+atoi(strChoice.c_str())>24)
		{
			//print menu
			system("cls");
			PrintStats();
			//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
			SetConsoleColors(hConsole, 10, 0);
			cout<<"INVALID SELECTION PLEASE CHOICE AGAIN!\n\n";
			cout<<"How many Hentchmen would you like to buy (MAX: 24)? - $10,000 each\n\n";
			cout<<"Selection (0 to cancel): ";
			//await choice
			cin>>strChoice;

			//if it's a letter send it to the invalid choice menu
			if (atoi(strChoice.c_str())==0 && strChoice !="0")
				strChoice="9999";
		}

		//rewrite variables to finish sale
		if(strChoice !="0")
		{
			profile.Cash=profile.Cash-(atoi(strChoice.c_str())*10000);
			profile.Hentchmen=profile.Hentchmen+atoi(strChoice.c_str());
			profile.Space=profile.Space+(atoi(strChoice.c_str())*10);
		}
	}
	//if you have 24 men you can't buy any
	else if(profile.Hentchmen==24)
	{
		//print menu
		system("cls");
		PrintStats();
		//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
		SetConsoleColors(hConsole, 10, 0);
		cout<<"How many Hentchmen would you like to sell (MAX: "<<profile.Hentchmen<<")?"<<endl;
		cout<<"\t$6,000 each (costs 10 space per Hentchman)\n\n";
		cout<<"Selection (0 to cancel): ";
		//await choice
		cin>>strChoice;

		//if it's a letter send it to the invalid choice menu
		if (atoi(strChoice.c_str())==0 && strChoice !="0")
			strChoice="9999";
		
		//if it's an invalid choice
		while(atoi(strChoice.c_str())>profile.Hentchmen || atoi(strChoice.c_str())<0 || (profile.Space-(atoi(strChoice.c_str())*10))<0)
		{
			//print menu
			system("cls");
			PrintStats();
			//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
			SetConsoleColors(hConsole, 10, 0);
			cout<<"INVALID SELECTION PLEASE CHOICE AGAIN!\n\n";
			cout<<"How many Hentchmen would you like to sell (MAX: "<<profile.Hentchmen<<")?"<<endl;
			cout<<"\t$6,000 each (costs 10 space per Hentchman)\n\n";
			cout<<"Selection (0 to cancel): ";
			//await choice
			cin>>strChoice;

			//if it's a letter send it to the invalid choice menu
			if (atoi(strChoice.c_str())==0 && strChoice !="0")
				strChoice="9999";
		}

		//rewrite variables to finish sale
		if(strChoice !="0")
		{
			profile.Cash=profile.Cash+(atoi(strChoice.c_str())*6000);
			profile.Hentchmen=profile.Hentchmen-atoi(strChoice.c_str());
			profile.Space=profile.Space-(atoi(strChoice.c_str())*10);
		}
	}
	//check to see what you want to do (buy/sell)
	else
	{
		intCheck=CheckHentchmen();
		//check for cancel signal
		if(intCheck==0)
		{
			goto End_Func;
		}
		//if they choose buy then do that menu
		else if(intCheck==1)
		{
			//print menu
			system("cls");
			PrintStats();
			//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
			SetConsoleColors(hConsole, 10, 0);
			cout<<"How many Hentchmen would you like to buy (MAX: 24)? - $10,000 each\n\n";
			cout<<"Selection (0 to cancel): ";
			//await choice
			cin>>strChoice;

			//if it's a letter send it to the invalid choice menu
			if (atoi(strChoice.c_str())==0 && strChoice !="0")
				strChoice="9999";
			
			//if it's an invalid choice
			while(atoi(strChoice.c_str())*10000>profile.Cash || atoi(strChoice.c_str())<0 || profile.Hentchmen+atoi(strChoice.c_str())>24)
			{
				//print menu
				system("cls");
				PrintStats();
				//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
				SetConsoleColors(hConsole, 10, 0);
				cout<<"INVALID SELECTION PLEASE CHOICE AGAIN!\n\n";
				cout<<"How many Hentchmen would you like to buy (MAX: 24)? - $10,000 each\n\n";
				cout<<"Selection (0 to cancel): ";
				//await choice
				cin>>strChoice;

				//if it's a letter send it to the invalid choice menu
				if (atoi(strChoice.c_str())==0 && strChoice !="0")
					strChoice="9999";
			}

			//rewrite variables to finish sale
			if(strChoice !="0")
			{
				profile.Cash=profile.Cash-(atoi(strChoice.c_str())*10000);
				profile.Hentchmen=profile.Hentchmen+atoi(strChoice.c_str());
				profile.Space=profile.Space+(atoi(strChoice.c_str())*10);
			}
		}
		//if they choose sell then do that menu
		else if(intCheck==2)
		{
			//print menu
			system("cls");
			PrintStats();
			//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
			SetConsoleColors(hConsole, 10, 0);
			cout<<"How many Hentchmen would you like to sell (MAX: "<<profile.Hentchmen<<")?"<<endl;
			cout<<"\t$6,000 each (costs 10 space per Hentchman)\n\n";
			cout<<"Selection (0 to cancel): ";
			//await choice
			cin>>strChoice;

			//if it's a letter send it to the invalid choice menu
			if (atoi(strChoice.c_str())==0 && strChoice !="0")
				strChoice="9999";
			
			//if it's an invalid choice
			while(atoi(strChoice.c_str())>profile.Hentchmen || atoi(strChoice.c_str())<0 || (profile.Space-(atoi(strChoice.c_str())*10))<0)
			{
				//print menu
				system("cls");
				PrintStats();
				//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
				SetConsoleColors(hConsole, 10, 0);
				cout<<"INVALID SELECTION PLEASE CHOICE AGAIN!\n\n";
				cout<<"How many Hentchmen would you like to sell (MAX: "<<profile.Hentchmen<<")?"<<endl;
				cout<<"\t$6,000 each (costs 10 space per Hentchman)\n\n";
				cout<<"Selection (0 to cancel): ";
				//await choice
				cin>>strChoice;

				//if it's a letter send it to the invalid choice menu
				if (atoi(strChoice.c_str())==0 && strChoice !="0")
					strChoice="9999";
			}

			//rewrite variables to finish sale
			if(strChoice !="0")
			{
				profile.Cash=profile.Cash+(atoi(strChoice.c_str())*6000);
				profile.Hentchmen=profile.Hentchmen-atoi(strChoice.c_str());
				profile.Space=profile.Space-(atoi(strChoice.c_str())*10);
			}
		}
	}

End_Func:
	//return to old colors
	SetConsoleColors(hConsole, 15, 0);

	//go back to city
	CityOperations(false);
}

void BuyingDrugs(string Drug, int Price)
{
	//Function level Declarations
	HANDLE hConsole = CreateFile("CONOUT$", GENERIC_WRITE | GENERIC_READ,
									FILE_SHARE_READ | FILE_SHARE_WRITE, 0, 
									OPEN_EXISTING, 0, 0);
	string strAmt;

	//print menu
	system("cls");
	PrintStats();
	//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
	SetConsoleColors(hConsole, 10, 0);
	cout<<"How much "<<Drug<<" you want? ($"<<Price<<" each)"<<endl;
	cout<<"Quantity (0 to cancel): ";
	cin>>strAmt;
	
	while (((atoi(strAmt.c_str())*Price)>profile.Cash) || (atoi(strAmt.c_str())>profile.Space))
	{
		//print menu
		system("cls");
		PrintStats();
		//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
		SetConsoleColors(hConsole, 10, 0);
		cout<<"You don't have enough money or enough space for that much "<<Drug<<"!\n\n";
		cout<<"How much "<<Drug<<" you want? ($"<<Price<<" each)"<<endl;
		cout<<"Quantity (0 to cancel): ";
		cin>>strAmt;
	}

	//updates the space in your inv
	profile.Space=profile.Space-atoi(strAmt.c_str());
	profile.Cash=profile.Cash-(atoi(strAmt.c_str())*Price);

	//fills the drug into the available array slot
	if (atoi(strAmt.c_str()) !=0)
	{
		//add it to drugs that are alrdy there
		for (i=0; i<=11; i++)
		{
			if (strInvArray==Drug)
			{
				//divides the two costs out so that it accurately represents how much you paid for everything
				intInvArray=((intQuantArray*intInvArray)+(Price*atoi(strAmt.c_str())))/(intQuantArray+atoi(strAmt.c_str()));
				intQuantArray=intQuantArray+atoi(strAmt.c_str());
				goto End_If;
			}
		}
		//add it to empty spot if drug wasn't found in inv
		for (i=0; i<=11; i++)
		{
			if (intInvArray==0)
			{
				strInvArray=Drug;
				intInvArray=Price;
				intQuantArray=atoi(strAmt.c_str());
				i=12;
			}
		}
	}
End_If:

	//reverts back to old colors
	SetConsoleColors(hConsole, 10, 0);

	BuyDrugsMenu();
}

void CheckWhichDrug(char chrDrug, int intTemp[12])
{
	//Function level Declarations
	HANDLE hConsole = CreateFile("CONOUT$", GENERIC_WRITE | GENERIC_READ,
									FILE_SHARE_READ | FILE_SHARE_WRITE, 0, 
									OPEN_EXISTING, 0, 0);
	char chrChoice;

RePick:
	system("cls");
	PrintStats();
	//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
	SetConsoleColors(hConsole, 10, 0);

	switch (chrDrug)
	{
		case 'h':
			cout<<"Did you want HASHISH or HERION?\n\n";
			cout<<"1. HASHISH.\n";
			cout<<"2. HERION.\n";
			cout<<"Selection (0 to cancel): ";
			//await choice
			cin>>chrChoice;

			switch (chrChoice)
			{
				case '0':
					BuyDrugsMenu();
				case '1':
					BuyingDrugs("HASHISH", intTemp[3]);
					break;
				case '2':
					BuyingDrugs("HERION", intTemp[4]);
					break;
				default:
					goto RePick;
					break;
			}
			break;

		case 'p':
			cout<<"Did you want PCP or PEYOTE?\n\n";
			cout<<"1. PCP.\n";
			cout<<"2. PEYOTE.\n";
			cout<<"Selection (0 to cancel): ";
			//await choice
			cin>>chrChoice;

			switch (chrChoice)
			{
				case '0':
					BuyDrugsMenu();
				case '1':
					BuyingDrugs("PCP", intTemp[8]);
					break;
				case '2':
					BuyingDrugs("PEYOTE", intTemp[9]);
					break;
				default:
					goto RePick;
					break;
			}
			break;

		case 's':
			cout<<"Did you want SHROOMS or SPEED?\n\n";
			cout<<"1. SHROOMS.\n";
			cout<<"2. SPEED.\n";
			cout<<"Selection (0 to cancel): ";
			//await choice
			cin>>chrChoice;

			switch (chrChoice)
			{
				case '0':
					BuyDrugsMenu();
				case '1':
					BuyingDrugs("SHROOMS", intTemp[10]);
					break;
				case '2':
					BuyingDrugs("SPEED", intTemp[11]);
					break;
				default:
					goto RePick;
					break;
			}
			break;
	}
}

void BuyDrugsMenu()
{
	//Function level Declarations
	char chrChoice;	
	bool oneS=false, twoS=false, oneP=false, twoP=false, oneH=false, twoH=false, boolDrugPresent[6];
	int intTemp[13], TradeIn;
	string buyGun;
	HANDLE hConsole = CreateFile("CONOUT$", GENERIC_WRITE | GENERIC_READ,
									FILE_SHARE_READ | FILE_SHARE_WRITE, 0, 
									OPEN_EXISTING, 0, 0);

	//initialize function level declarations
	for (i=0;i<=6;i++)
		boolDrugPresent=false;

	system("cls");
	PrintStats();
	//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
	SetConsoleColors(hConsole, 10, 0);

	for (i=0; i<=11; i++)
	{
		if ((strDrugArray !=" ") && (strDrugArray !="ERROR: NO_DRUG") && (intDrugArray<=profile.Cash))
			goto SkipFor;
	}
	cout<<"Your broke! Go somewhere else or sell some of your product to make up the $$$.\n\n";
	cout<<"Press any key to return to \""<<loc.Name<<"\"";
	getch();
	goto EndOfFunc;
SkipFor:

	//print menu options
	cout<<"So you wanta buy some dope? Here's your choices...\n\n";
InvalidChoice:
	for (i=0; i<=11; i++)
	{
		if (strDrugArray=="ACID")
		{
			cout<<"A. ACID - $"<<intDrugArray<<endl;
			intTemp[1]=intDrugArray;
			boolDrugPresent[0]=true;
		}
		else if (strDrugArray=="COCAINE")
		{
			cout<<"C. COCAINE - $"<<intDrugArray<<endl;
			intTemp[2]=intDrugArray;
			boolDrugPresent[1]=true;
		}
		else if (strDrugArray=="HASHISH")
		{
			cout<<"H. HASHISH - $"<<intDrugArray<<endl;
			intTemp[3]=intDrugArray;
			oneH=true;
		}
		else if (strDrugArray=="HERION")
		{
			cout<<"H. HERION - $"<<intDrugArray<<endl;
			intTemp[4]=intDrugArray;
			twoH=true;
		}
		else if (strDrugArray=="LUDES")
		{
			cout<<"L. LUDES - $"<<intDrugArray<<endl;
			intTemp[5]=intDrugArray;
			boolDrugPresent[2]=true;
		}
		else if (strDrugArray=="MDA (Ecstasy)")
		{
			cout<<"M. MDA (Ecstasy) - $"<<intDrugArray<<endl;
			intTemp[6]=intDrugArray;
			boolDrugPresent[3]=true;
		}
		else if (strDrugArray=="OPIUM")
		{
			cout<<"O. OPIUM - $"<<intDrugArray<<endl;
			intTemp[7]=intDrugArray;
			boolDrugPresent[4]=true;
		}
		else if (strDrugArray=="PCP")
		{
			cout<<"P. PCP - $"<<intDrugArray<<endl;
			intTemp[8]=intDrugArray;
			oneP=true;
		}
		else if (strDrugArray=="PEYOTE")
		{
			cout<<"P. PEYOTE - $"<<intDrugArray<<endl;
			intTemp[9]=intDrugArray;
			twoP=true;
		}
		else if (strDrugArray=="SHROOMS")
		{
			cout<<"S. SHROOMS - $"<<intDrugArray<<endl;
			intTemp[10]=intDrugArray;
			oneS=true;
		}
		else if (strDrugArray=="SPEED")
		{
			cout<<"S. SPEED - $"<<intDrugArray<<endl;
			intTemp[11]=intDrugArray;
			twoS=true;
		}
		else if (strDrugArray=="WEED")
		{
			cout<<"W. WEED - $"<<intDrugArray<<endl;
			intTemp[12]=intDrugArray;
			boolDrugPresent[5]=true;
		}
	}

	//print gun options and determine price with trade-in value of old gun
	if (boolGun==true)
	{
		boolDrugPresent[6]=true;

		if (profile.Gun=="BARETTA")
			TradeIn=1500;
		if (profile.Gun==".38SPEC")
			TradeIn=1725;
		if (profile.Gun=="RUGER")
			TradeIn=1450;
		if (profile.Gun=="SATNIGHTSPEC")
			TradeIn=1600;
		if (profile.Gun=="NONE")
			TradeIn=0;

		switch (intGun)
		{
			case 1:
				cout<<"\nG. Baretta (Reduces police presence to 13%, Current Rating="<<20-profile.GunRate<<"%) - $3000."<<endl;
				cout<<"\t$"<<3000-TradeIn<<" after the $"<<TradeIn<<" discount for trading in your current gun.\n";
				intTemp[13]=3000-TradeIn;
				buyGun="Baretta";
				break;
			case 2:
				cout<<"\nG. .38 Special (Reduces police presence to 7%, Current Rating="<<20-profile.GunRate<<"%) - $3500."<<endl;
				cout<<"\t$"<<3500-TradeIn<<" after the $"<<TradeIn<<" discount for trading in your current gun.\n";
				intTemp[13]=3500-TradeIn;
				buyGun=".38 Special";
				break;
			case 3:
				cout<<"\nG. Ruger (Reduces police presence to 15%, Current Rating="<<20-profile.GunRate<<"%) - $2900."<<endl;
				cout<<"\t$"<<2900-TradeIn<<" after the $"<<TradeIn<<" discount for trading in your current gun.\n";
				intTemp[13]=2900-TradeIn;
				buyGun="Ruger";
				break;
			case 4:
				cout<<"\nG. Saturday night Special (Reduces police presence to 10%, Current Rating="<<20-profile.GunRate<<"%) - $3100."<<endl;
				cout<<"\t$"<<3100-TradeIn<<" after the $"<<TradeIn<<" discount for trading in your current gun.\n";
				intTemp[13]=3100-TradeIn;
				buyGun="Saturday night Special";
				break;
		}
	}
	cout<<"\nSelection (0 to cancel): ";
	cin>>chrChoice;

	//check for duplicate letters and proceed with purchase
	if ((chrChoice=='A' || chrChoice=='a') && boolDrugPresent[0]==true)
	{
		BuyingDrugs("ACID", intTemp[1]);
	}
	else if (chrChoice=='0')
	{
		CityOperations(false);
	}
	else if ((chrChoice=='C' || chrChoice=='c') && boolDrugPresent[1]==true)
	{
		BuyingDrugs("COCAINE", intTemp[13]);
	}
	else if ((chrChoice=='G' || chrChoice=='g') && boolDrugPresent[6]==true)
	{
		BuyingGun(buyGun, intTemp[13]);
	}
	else if ((chrChoice=='M' || chrChoice=='m') && boolDrugPresent[3]==true)
	{
		BuyingDrugs("MDA (Ecstasy)", intTemp[6]);
	}
	else if ((chrChoice=='L' || chrChoice=='l') && boolDrugPresent[2]==true)
	{
		BuyingDrugs("LUDES", intTemp[5]);
	}
	else if ((chrChoice=='O' || chrChoice=='o') && boolDrugPresent[4]==true)
	{
		BuyingDrugs("OPIUM", intTemp[7]);
	}
	else if ((chrChoice=='W' || chrChoice=='w') && boolDrugPresent[5]==true)
	{
		BuyingDrugs("WEED", intTemp[12]);
	}
	//for duplicate H's
	else if ((chrChoice=='H' || chrChoice=='h') && (oneH==true && twoH==true))
	{
		CheckWhichDrug('h', intTemp);
	}
	//for none duplicate
	else if ((chrChoice=='H' || chrChoice=='h') && (oneH==false || twoH==false))
	{
		for (i=0; i<=11; i++)
		{
			if (strDrugArray=="HASHISH")
			{
				BuyingDrugs("HASHISH", intTemp[3]);
				i=12;
			}
			if (strDrugArray=="HERION")
			{
				BuyingDrugs("HERION", intTemp[4]);
				i=12;
			}
		}
	}
	//for duplicate P's
	else if ((chrChoice=='P' || chrChoice=='p') && (oneP==true && twoP==true))
	{
		CheckWhichDrug('p', intTemp);
	}
	//for none duplicate
	else if ((chrChoice=='P' || chrChoice=='p') && (oneP==false || twoP==false))
	{
		for (i=0; i<=11; i++)
		{
			if (strDrugArray=="PCP")
			{
				BuyingDrugs("PCP", intTemp[8]);
				i=12;
			}
			if (strDrugArray=="PEYOTE")
			{
				BuyingDrugs("PEYOTE", intTemp[9]);
				i=12;
			}
		}
	}
	//for duplicate S's
	else if ((chrChoice=='S' || chrChoice=='s') && (oneS==true && twoS==true))
	{
		CheckWhichDrug('s', intTemp);
	}
	//for none duplicate
	else if ((chrChoice=='S' || chrChoice=='s') && (oneS==false || twoS==false))
	{
		for (i=0; i<=11; i++)
		{
			if (strDrugArray=="SHROOMS")
			{
				BuyingDrugs("SHROOMS", intTemp[10]);
				i=12;
			}
			if (strDrugArray=="SPEED")
			{
				BuyingDrugs("SPEED", intTemp[11]);
				i=12;
			}
		}
	}
	else
	{
		system("cls");
		PrintStats();
		SetConsoleColors(hConsole, 10, 0);
		cout<<"Invalid selection please pick again...\n\n";
		goto InvalidChoice;
	}

EndOfFunc:
	//reverts colors back
	SetConsoleColors(hConsole, 15, 0);

	//go back to city
	CityOperations(false);
}

void BuyingGun(string Gun, int Price)
{
	//Function level Declarations
	HANDLE hConsole = CreateFile("CONOUT$", GENERIC_WRITE | GENERIC_READ,
									FILE_SHARE_READ | FILE_SHARE_WRITE, 0, 
									OPEN_EXISTING, 0, 0);

	//print menu
	system("cls");
	PrintStats();
	//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
	
	if (Price>profile.Cash)
	{
		//print menu
		system("cls");
		PrintStats();
		//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
		SetConsoleColors(hConsole, 10, 0);
		cout<<"You don't have enough money for the "<<Gun<<"!\n\n";
		cout<<"Press any key to return to the Buy Drugs menu."<<endl;
		getch();
		goto Back;
	}

	//updates info
	profile.Cash=profile.Cash-Price;
	if (Gun=="Saturday night Special")
	{
		profile.Gun="SATNIGHTSPEC";
		profile.GunRate=10;
	}
	if (Gun=="Baretta")
	{
		profile.Gun="BARETTA";
		profile.GunRate=13;
	}
	if (Gun==".38 Special")
	{
		profile.Gun=".38SPEC";
		profile.GunRate=7;
	}
	if (Gun=="Ruger")
	{
		profile.Gun="RUGER";
		profile.GunRate=5;
	}

	//reverts back to old colors
	SetConsoleColors(hConsole, 10, 0);

Back:
	BuyDrugsMenu();
}

void ChangeLocMenu()
{
	//Function level Declarations
	string strChoice;	
	HANDLE hConsole = CreateFile("CONOUT$", GENERIC_WRITE | GENERIC_READ,
									FILE_SHARE_READ | FILE_SHARE_WRITE, 0, 
									OPEN_EXISTING, 0, 0);

	system("cls");
	PrintStats();
	//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
	SetConsoleColors(hConsole, 10, 0);
LocPickAgain:
	cout<<"Where would you like to go?\n\n";
	cout<<"1. BRONX\n";
	cout<<"2. GHETTO\n";
	cout<<"3. CENTRAL PARK\n";
	cout<<"4. MANHATTAN\n";
	cout<<"5. CONEY ISLAND\n";
	cout<<"6. BROOKLYN\n";
	cout<<"7. QUEENS\n";
	cout<<"8. STATEN ISLAND\n";
	cout<<"0. Back to "<<loc.Name<<"\n";
	cout<<"Selection: ";
	//await selection
	cin>>strChoice;

	switch (atoi(strChoice.c_str()))
	{
		case BRONX:
			if (profile.Location=="BRONX")
				strChoice="9";
			profile.Location="BRONX";
			loc.Name="BRONX";
			loc.minDrugs=7;
			loc.maxDrugs=12;
			loc.Police=10;
			break;

		case GHETTO:
			if (profile.Location=="GHETTO")
				strChoice="9";
			profile.Location="GHETTO";
			loc.Name="GHETTO";
			loc.minDrugs=8;
			loc.maxDrugs=12;
			loc.Police=5;
			break;

		case CENTRALPARK:
			if (profile.Location=="CENTRALPARK")
				strChoice="9";
			profile.Location="CENTRALPARK";
			loc.Name="CENTRAL PARK";
			loc.minDrugs=6;
			loc.maxDrugs=12;
			loc.Police=15;
			break;

		case MANHATTAN:
			if (profile.Location=="MANHATTAN")
				strChoice="9";
			profile.Location="MANHATTAN";
			loc.Name="MANHATTAN";
			loc.minDrugs=4;
			loc.maxDrugs=12;
			loc.Police=45;
			break;

		case CONEYISLAND:
			if (profile.Location=="CONEYISLAND")
				strChoice="9";
			profile.Location="CONEYISLAND";
			loc.Name="CONEY ISLAND";
			loc.minDrugs=6;
			loc.maxDrugs=12;
			loc.Police=20;
			break;

		case BROOKLYN:
			if (profile.Location=="BROOKLYN")
				strChoice="9";
			profile.Location="BROOKLYN";
			loc.Name="BROOKLYN";
			loc.minDrugs=4;
			loc.maxDrugs=12;
			loc.Police=35;
			break;

		case QUEENS:
			if (profile.Location=="QUEENS")
				strChoice="9";
			profile.Location="QUEENS";
			loc.Name="QUEENS";
			loc.minDrugs=6;
			loc.maxDrugs=12;
			loc.Police=30;
			break;

		case STATENISLAND:
			if (profile.Location=="STATENISLAND")
				strChoice="9";
			profile.Location="STATENISLAND";
			loc.Name="STATEN ISLAND";
			loc.minDrugs=6;
			loc.maxDrugs=12;
			loc.Police=20;
			break;

		case 0:
			break;

		default: 
			system("cls"); 
			PrintStats();
			//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
			SetConsoleColors(hConsole, 10, 0);
			cout<<"Invalid entry please pick again.\n\n";
			goto LocPickAgain;
			break;
	}

	//revert to old colors
	SetConsoleColors(hConsole, 15, 0);

	//if the city never changes then don't penalize with a new day
	if (strChoice=="0")
	{
		CityOperations(false);
	}
	else
	{
		CityOperations(true);
	}
}
void LoanSharkMenu()
{
	//Function level Declarations
	string strChoice, strAmt;
	HANDLE hConsole = CreateFile("CONOUT$", GENERIC_WRITE | GENERIC_READ,
									FILE_SHARE_READ | FILE_SHARE_WRITE, 0, 
									OPEN_EXISTING, 0, 0);
	
	//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
	SetConsoleColors(hConsole, 10, 0);

LoanChoiceAgain:

	//Prints the loan shark welcome msg
	system("cls");
	PrintStats();
	SetConsoleColors(hConsole, 10, 0);
	cout<<"Welcome to Shady Shawn's Shack!\n";
	cout<<"Rates are currently at 12% factored in each Sunday (7th day).\n\n";
	
	//allows you to pay off debt only when you have some
	if(profile.Debt>0)
	{
		//prints menu
		cout<<"1. Pay off debt.\n\n";
		cout<<"Selection (0 to cancel): ";
		//await choice
		cin>>strChoice;

		switch (atoi(strChoice.c_str()))
		{
			//run through pay off options/operations
			case 1:
				system("cls");
				PrintStats();
				SetConsoleColors(hConsole, 10, 0);
PLoanAgain:
				cout<<"Shady Shawn's Shack!\n\n";
				cout<<"Enter Amount to Pay off (0 to cancel): ";
				cin>>strAmt;
				if (atoi(strAmt.c_str())>profile.Cash || atoi(strAmt.c_str())<0 || atoi(strAmt.c_str())>profile.Debt)
				{
					system("cls");
					PrintStats();
					SetConsoleColors(hConsole, 10, 0);
					cout<<"Invalid $ amount please pick again.\n\n";
					goto PLoanAgain;
				}

				//redefines variables appropriatly
				profile.Cash=profile.Cash-atoi(strAmt.c_str());
				profile.Debt=profile.Debt-atoi(strAmt.c_str());

				break;

			//leaves the loan shark and heads back to the city without a day increase
			case 2:
				CityOperations(false);
				break;

			//sends you back to pick again due to invalid entry
			default:
				goto LoanChoiceAgain;
				break;
		}
	}
	else
	{
		//allows you to take out a loan when you have no debt
		cout<<"1. Take out a Loan.\n\n";
		cout<<"Selection (0 to cancel): ";
		//await choice
		cin>>strChoice;

		switch (atoi(strChoice.c_str()))
		{
			//prints options and runs the loan request operations
			case 1:
				system("cls");
				PrintStats();
				SetConsoleColors(hConsole, 10, 0);
PLoanAgain2:
				cout<<"Shady Shawn's Shack!\n\n";
				cout<<"Enter Amount of the Loan (0 to cancel): ";
				//await selection
				cin>>strAmt;

				//can't use negatives
				if (atoi(strAmt.c_str())<0)
				{
					system("cls");
					PrintStats();
					SetConsoleColors(hConsole, 10, 0);
					cout<<"Invalid amount entered, try again man.\n\n";
					goto PLoanAgain2;
				}
				//only loans out up to 30000
				if (atoi(strAmt.c_str())>=30000)
				{
					system("cls");
					PrintStats();
					SetConsoleColors(hConsole, 10, 0);
					cout<<"I only give out Loans of $30,000 and below, try again man.\n\n";
					goto PLoanAgain2;
				}

				//redefines variables appropriatly
				profile.Cash=profile.Cash+atoi(strAmt.c_str());
				profile.Debt=profile.Debt+atoi(strAmt.c_str());

				break;

			//send you back to the city without a day penalty
			case 2:
				CityOperations(false);
				break;

			//sends user through menu again due to invalid entry
			default:
				goto LoanChoiceAgain;
				break;
		}
	}

	//revert to old colors
	SetConsoleColors(hConsole, 15, 0);

	//sends user back to the city without day penalty
	CityOperations(false);
}

//checks to see if the use already has a profile by that name saved
bool CheckSaved()
{
	string Data=strPath + "\\profiles.dat", strTemp;
	ifstream inFile(Data.c_str());

	//check for file existance
	if(!(inFile.good()))
	{
		inFile.close();
		//Create file
		ofstream outFile(Data.c_str());
		outFile.close();
	}

	while (inFile >> Data)
	{
		strTemp="profile.name=" + profile.Name;
		if (Data==strTemp)
		{
			inFile.close();
			return(true);
		}
	};
	
	inFile.close();
	return (false);
}

//rewrites the files needed for saving
void SaveGame()
{
	bool Saved;
	string Data=strPath + "\\profiles.dat", strOldData[100], strOldData2[100], strTemp;
	char chrLine[2000];
	int cnt=0;

	//empty strOldData incase this isn't the first save
	for (i=0; i<=99; i++)
		strOldData=" ";

	//empty strOldData2 incase this isn't the first save
	for (i=0; i<=99; i++)
		strOldData2=" ";

	//check to see if the game is overwritting or a new save
	Saved=CheckSaved();

	if (Saved==false)
	{
		fstream inFile(Data.c_str(), ios::in);

		//store information in file for reprint
		while (! inFile.eof())
		{
			inFile.getline(chrLine,2000);

			//convert to string array
			strOldData[cnt]=chrLine[0];
			for (i=1; i<=1999; i++)
				strOldData[cnt]=strOldData[cnt]+chrLine;

			cnt++;
		};
		inFile.close();
		
		//rewrite the old info
		cnt=1;
		fstream outFile(Data.c_str(), ios::out);
		
		if (!(strOldData[0]==" "))
			outFile<<strOldData[0];
		while (!(strOldData[cnt]==" "))
		{
			outFile<<endl<<strOldData[cnt];
			cnt++;
		};

		//write the new info
		outFile<<endl<<endl;
		outFile<<"profile.name="<<profile.Name<<endl;
		outFile<<"profile.gun="<<profile.Gun<<endl;
		outFile<<"profile.location="<<profile.Location<<endl;
		outFile<<"profile.cash="<<profile.Cash<<endl;
		outFile<<"profile.debt="<<profile.Debt<<endl;
		outFile<<"profile.bank="<<profile.Bank<<endl;
		outFile<<"profile.hentchmen="<<profile.Hentchmen<<endl;
		outFile<<"profile.space="<<profile.Space<<endl;
		outFile<<"profile.day="<<profile.Day<<endl;
		outFile<<"profile.gunrate="<<profile.GunRate<<endl;
		for (i=0;i<=11;i++)
		{
			if (strInvArray !=" ")
				outFile<<strInvArray<<"="<<intQuantArray<<","<<intInvArray<<endl;
		}
		outFile<<"loc.name="<<loc.Name<<endl;
		outFile<<"loc.police="<<loc.Police<<endl;
		outFile<<"loc.mindrugs="<<loc.minDrugs<<endl;
		outFile<<"loc.maxdrugs="<<loc.maxDrugs;	

		outFile.close();
		
	}
	else
	{
		//open file
		fstream inFile(Data.c_str(), ios::in);

		//store information in file before the saved game for reprint
		cnt=0;
		inFile.getline(chrLine,2000);

		//convert to string array
		strOldData[cnt]=chrLine[0];
		for (i=1; i<=1999; i++)
			strOldData[cnt]=strOldData[cnt]+chrLine;

		//load pre-saved game data
		while (strOldData[cnt].find(profile.Name)==std::string::npos)
		{
			cnt++;
			
			inFile.getline(chrLine,2000);

			//convert to string array
			strOldData[cnt]=chrLine[0];
			for (i=1; i<=1999; i++)
				strOldData[cnt]=strOldData[cnt]+chrLine;
		};

		//remove the profile from the pre-saved game data
		strOldData[cnt-1]=" ";
		strOldData[cnt]=" ";

		//if the profile was found on the first getline
		if (strOldData[1]==" ")
			strOldData[0]=" ";

		//store information in file after the saved game for reprint
		inFile.getline(chrLine,2000);

		//convert to string array
		strTemp=chrLine[0];
		for (i=1; i<=1999; i++)
			strTemp=strTemp+chrLine;

		//scan until it finds the line with the last stat in the saved game [loc.maxdrugs=12]
		while (strTemp.find("loc.maxdrugs=12")==std::string::npos)
		{
			inFile.getline(chrLine,2000);
			
			//convert to string array
			strTemp=chrLine[0];
			for (i=1; i<=1999; i++)
				strTemp=strTemp+chrLine;
		};

		//store the rest of the file
		cnt=0;
		while (!(inFile.eof()))
		{
			inFile.getline(chrLine,2000);

			//convert to string array
			strOldData2[cnt]=chrLine[0];
			for (i=1; i<=1999; i++)
				strOldData2[cnt]=strOldData2[cnt]+chrLine;

			cnt++;
		};

		//if the profile was found on the first getline
		if (strOldData2[1]==" ")
			strOldData2[0]=" ";

		inFile.close();
		
		//rewrite the begining old info [1]
		cnt=1;
		fstream outFile(Data.c_str(), ios::out);

		if (!(strOldData[0]==" "))
			outFile<<strOldData[0];

		while (!(strOldData[cnt]==" "))
		{
			outFile<<endl<<strOldData[cnt];
			cnt++;
		};

		//write new saved data
		outFile<<endl<<endl;
		outFile<<"profile.name="<<profile.Name<<endl;
		outFile<<"profile.gun="<<profile.Gun<<endl;
		outFile<<"profile.location="<<profile.Location<<endl;
		outFile<<"profile.cash="<<profile.Cash<<endl;
		outFile<<"profile.debt="<<profile.Debt<<endl;
		outFile<<"profile.bank="<<profile.Bank<<endl;
		outFile<<"profile.hentchmen="<<profile.Hentchmen<<endl;
		outFile<<"profile.space="<<profile.Space<<endl;
		outFile<<"profile.day="<<profile.Day<<endl;
		outFile<<"profile.gunrate="<<profile.GunRate<<endl;
		for (i=0;i<=11;i++)
		{
			if (strInvArray !=" ")
				outFile<<strInvArray<<"="<<intQuantArray<<","<<intInvArray<<endl;
		}
		outFile<<"loc.name="<<loc.Name<<endl;
		outFile<<"loc.police="<<loc.Police<<endl;
		outFile<<"loc.mindrugs="<<loc.minDrugs<<endl;
		outFile<<"loc.maxdrugs="<<loc.maxDrugs<<endl;	

		//rewrite the end old info [2]
		cnt=1;

		if (!(strOldData2[0]==" "))
			outFile<<strOldData2[0];

		while (!(strOldData2[cnt]==" "))
		{
			outFile<<endl<<strOldData2[cnt];
			cnt++;
		};

		outFile.close();
	}

	//resume game
	CityOperations(false);
}

 
 //this class checks for bad convertions with stringify(int x)
 class BadConversion : public std::runtime_error 
 {
 public:
   BadConversion(const std::string& s)
     : std::runtime_error(s)
     { }
 };
 
 //converts ints into strings
 inline std::string stringify(int x)
 {
   std::ostringstream o;
   if (!(o << x))
     throw BadConversion("stringify(int)");
   return o.str();
 }

//Prints the user data on the screen
void PrintStats()
{
	//Function level Declarations
	HANDLE hConsole = CreateFile("CONOUT$", GENERIC_WRITE | GENERIC_READ,
									FILE_SHARE_READ | FILE_SHARE_WRITE, 0, 
									OPEN_EXISTING, 0, 0);
	string st;

	//make stats 'YELLOW' (14) with 'blk bg' (0) [stats std color]
	SetConsoleColors(hConsole, 14, 0);
    
	//print stats
	system("cls");
	cout<<BufferStr("[" + profile.Name + "]",20)<<"Location: "<<profile.Location<<"\n";
	st="Cash: " + stringify(profile.Cash);
	cout<<BufferStr(st,20)<<"Debt: "<<profile.Debt<<"\n";
	st="Bank: " + stringify(profile.Bank);
	cout<<BufferStr(st,20)<<"Hentchmen: "<<profile.Hentchmen<<"\n";
	cout<<BufferStr("Gun: " + profile.Gun,20)<<"Day: "<<profile.Day<<"\n";
	cout<<"Free Space: "<<profile.Space<<"\n\n";

	//revert to old colors
	SetConsoleColors(hConsole, 15, 0);
}

//Fixes text into columns
string BufferStr(string strString, int MAX_LEN)
{
	//Function level delcarations
	int intSpaces;
	string strTemp;
	
	//add proper spaces after the string
	intSpaces=MAX_LEN-strString.length();
	strTemp=strString;
	for (i=1; i<=intSpaces; i++)
		strTemp=strTemp + " ";

	//return new str
	return (strTemp.c_str());
}

//Displays the profiles menu along with scanning the app's dir for the profile files within it.
string ProfileMenu()
{
	//Function level Declarations
	string Profile[100], Data=strPath + "\\profiles.dat", strTemp;
	string strChoice="200";
	int cnt=0, intTemp;
	char chrLine[2000];
	HANDLE hConsole = CreateFile("CONOUT$", GENERIC_WRITE | GENERIC_READ,
									FILE_SHARE_READ | FILE_SHARE_WRITE, 0, 
									OPEN_EXISTING, 0, 0);

	//initialize the profile array
	for (i=0; i<=99; i++)
		Profile=" ";

	//storing the profiles into an array to be printed
	ifstream inFile(Data.c_str());

	//make stats 'RED' (12) with 'blk bg' (0) [warning std color]
	SetConsoleColors(hConsole, 12, 0);
	system("cls");

	//check for file existence
	if(!(inFile.good()))
	{
		//Print menu
		cout<<"Drug Wars --- By: Derik Hammer\n\n";
		cout<<"File 'profiles.dat' was not found no saved games are available.\n\n";
		cout<<"Press any key to return to the Main Menu.";
		getch();
		inFile.close();
		//return to main menu
		system("cls");
		MenuHandler();
	}

	while (!(inFile.eof()))
	{
		inFile.getline(chrLine,2000);
		strTemp=chrLine;
		//look for the name locator
		if(!(strTemp.find("profile.name=")==std::string::npos))
		{
			intTemp=strTemp.find("name=")+5;
			//remake the string with chrLine
			strTemp=chrLine[intTemp];
			for(i=intTemp+1;i<=1999;i++)
				strTemp=strTemp+chrLine;
			Profile[cnt]=strTemp;
			cnt++;
		}
	};

	//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
	SetConsoleColors(hConsole, 10, 0);

	//check for which menu to use
	if (!(Profile[0]==" "))
	{
		//Print menu
		cnt=0;
		system("cls");
		cout<<"Drug Wars --- By: Derik Hammer\n\n";

		while (!(Profile[cnt]==" "))
		{
			cout<<cnt+1<<". "<<Profile[cnt]<<".\n";
			cnt++;
		};

		cout<<"\nSelection (0 to cancel): ";
		//Await choice
		cin>>strChoice;
		strTemp=Profile[atoi(strChoice.c_str())-1];

		//loops if invalid numbers are entered.
		while (strTemp==" ")
		{
			SetConsoleColors(hConsole, 10, 0);
			//Print menu
			cnt=0;
			system("cls");
			cout<<"Drug Wars --- By: Derik Hammer\n\n";

			while (!(Profile[cnt]==" "))
			{
				cout<<cnt+1<<". "<<Profile[cnt]<<".\n";
				cnt++;
			};

			cout<<"\nINVALID SELECTION PLEASE CHOOSE AGAIN!\n";
			cout<<"Selection (0 to cancel): ";
			//Await choice
			cin>>strChoice;
			strTemp=Profile[atoi(strChoice.c_str())];
		}
	}
	else
	{
		//if there's no saved games print this menu
		system("cls");
		cout<<"Drug Wars --- By: Derik Hammer\n\n";
		cout<<"Sorry no saved games were found.\n\n";
		cout<<"Press any key to go back to the Main Menu.";
		strChoice="0";
		getch();
	}

	//revert to old colors
	SetConsoleColors(hConsole, 15, 0);

	//go back to main menu
	if (strChoice=="0")
		return "MainMenu";
	
	//Returns the name of the profile needed to be used
	if (!(strChoice=="200"))
		return(Profile[atoi(strChoice.c_str())-1]);

	//else return an error report
	return "NULL";
}

//gives some background about the game
void ShowInfo()
{
	//Function level Declarations
	HANDLE hConsole = CreateFile("CONOUT$", GENERIC_WRITE | GENERIC_READ,
									FILE_SHARE_READ | FILE_SHARE_WRITE, 0, 
									OPEN_EXISTING, 0, 0);

	//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
	SetConsoleColors(hConsole, 10, 0);

	cout<<"The idea for this game \"Drug Wars\" was thought up a long time ago by a person"<<endl;
	cout<<"unknown to me. Therefore I'm not taking credit for the consept nor for a lot of"<<endl;
	cout<<"the content. I made this program To learn C++ so now you will be playing my"<<endl;
	cout<<"version of \"Drug Wars\"."<<endl<<endl;
	cout<<"THE OBJECTIVE:"<<endl;
	cout<<"You are a drug dealer and you want to make as much money as possible and pay"<<endl;
	cout<<"off all your debt."<<endl<<endl;
	cout<<"HOW THINGS WORK:"<<endl;
	cout<<"In order to build up cash you need to buy and sell drugs. Different cities have"<<endl;
	cout<<"different amounts of drugs along with a better or worse chance of getting"<<endl;
	cout<<"caught by the cops. It's best to take note of which places you get caught at"<<endl;
	cout<<"the most. HINT: guns reduce the probability that you will get caught. Once you"<<endl;
	cout<<"get the hang of buying/selling you'll notice hentchmen and space. The space is"<<endl;
	cout<<"how many drugs you can carry at once and the more hentchmen the more space you"<<endl;
	cout<<"have. You can buy and sell hentchmen but they are expensive and when you find"<<endl;
	cout<<"some rediculously low drug prices you'll need to stock up so be careful with"<<endl;
	cout<<"both buying and selling."<<endl<<endl;

	//make stats 'RED' (12) with 'blk bg' (0) [warning std color]
	SetConsoleColors(hConsole, 12, 0);

	cout<<"Press any key to scroll down..."<<endl<<endl;
	getch();

	//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
	SetConsoleColors(hConsole, 10, 0);

	cout<<"Police, in every game you need to have a bad guy, well here they are. As"<<endl;
	cout<<"printed above, cops appear at different times and more frequently in certain"<<endl;
	cout<<"cities. Guns help but will never make you immune. That's where the bank comes"<<endl;
	cout<<"in. The cops take 20% of your cash as a bride so you don't go to jail. If the"<<endl;
	cout<<"money's in the bank it's safe, however. Hope you enjoy!"<<endl<<endl;

	//make stats 'RED' (12) with 'blk bg' (0) [warning std color]
	SetConsoleColors(hConsole, 12, 0);

	cout<<"Press any key to return to the main menu..."<<endl;
	getch();

	//revert to old colors
	SetConsoleColors(hConsole, 15, 0);
	
	system("cls");
	MenuHandler();
}

//Deletes already saved games
void DeleteProfile()
{
	//Function level Declarations
	string Data=strPath + "\\profiles.dat", strOldData[100], strOldData2[100], strTemp;
	char chrLine[2000];
	int cnt=0;

	//empty strOldData incase this isn't the first save
	for (i=0; i<=99; i++)
		strOldData=" ";

	//empty strOldData2 incase this isn't the first save
	for (i=0; i<=99; i++)
		strOldData2=" ";

	//find out which one to delete
	profile.Name=ProfileMenu();

	//Delete game
	//open file
	fstream inFile(Data.c_str(), ios::in);

	//store information in file before the saved game for reprint
	cnt=0;
	inFile.getline(chrLine,2000);

	//convert to string array
	strOldData[cnt]=chrLine[0];
	for (i=1; i<=1999; i++)
		strOldData[cnt]=strOldData[cnt]+chrLine;

	//load pre-saved game data
	while (strOldData[cnt].find(profile.Name)==std::string::npos)
	{
		cnt++;
			
		inFile.getline(chrLine,2000);

		//convert to string array
		strOldData[cnt]=chrLine[0];
		for (i=1; i<=1999; i++)
			strOldData[cnt]=strOldData[cnt]+chrLine;
	};

	//remove the profile from the pre-saved game data
	strOldData[cnt-1]=" ";
	strOldData[cnt]=" ";

	//if the profile was found on the first getline
	if (strOldData[1]==" ")
		strOldData[0]=" ";

	//store information in file after the saved game for reprint
	inFile.getline(chrLine,2000);

	//convert to string array
	strTemp=chrLine[0];
	for (i=1; i<=1999; i++)
		strTemp=strTemp+chrLine;

	//scan until it finds the line with the last stat in the saved game [loc.maxdrugs=12]
	while (strTemp.find("loc.maxdrugs=12")==std::string::npos)
	{
		inFile.getline(chrLine,2000);
			
		//convert to string array
		strTemp=chrLine[0];
		for (i=1; i<=1999; i++)
			strTemp=strTemp+chrLine;
	};

	//store the rest of the file
	cnt=0;
	while (!(inFile.eof()))
	{
		inFile.getline(chrLine,2000);

		//convert to string array
		strOldData2[cnt]=chrLine[0];
		for (i=1; i<=1999; i++)
			strOldData2[cnt]=strOldData2[cnt]+chrLine;

		cnt++;
	};

	//if the profile was found on the first getline
	if (strOldData2[1]==" ")
		strOldData2[0]=" ";

	inFile.close();
		
	//rewrite the begining old info [1]
	cnt=1;
	fstream outFile(Data.c_str(), ios::out);

	if (!(strOldData[0]==" "))
		outFile<<strOldData[0];

	while (!(strOldData[cnt]==" "))
	{
		outFile<<endl<<strOldData[cnt];
		cnt++;
	};

	//rewrite the end old info [2]
	cnt=1;

	if (!(strOldData2[0]==" "))
		outFile<<strOldData2[0];

	while (!(strOldData2[cnt]==" "))
	{
		outFile<<endl<<strOldData2[cnt];
		cnt++;
	};

	//close file
	outFile.close();

	//return to main menu
	system("cls");
	MenuHandler();
}

//Displays the options for the Main Menu
int MainMenu()
{
	//Function level Declarations
	char chrChoice;
	HANDLE hConsole = CreateFile("CONOUT$", GENERIC_WRITE | GENERIC_READ,
									FILE_SHARE_READ | FILE_SHARE_WRITE, 0, 
									OPEN_EXISTING, 0, 0);

	//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
	SetConsoleColors(hConsole, 10, 0);

	//Print menu
	cout<<"Drug Wars --- By: Derik Hammer\n\n";
	cout<<"1. Application Information.\n";
	cout<<"2. New Game.\n";
	cout<<"3. Load Profile.\n";
	cout<<"4. Delete Profiles.\n";
	cout<<"5. Quit.\n\n";
	cout<<"Selection: ";
	//Await choice
	cin>>chrChoice;
	
CheckAgain:
	switch (chrChoice)
	{
		//Proceed with App info
		case '1':
			//revert to old colors
			SetConsoleColors(hConsole, 15, 0);
			return (1);
			break;

		//Proceed with new game
		case '2':
			//revert to old colors
			SetConsoleColors(hConsole, 15, 0);
			return (2);
			break;

		//Proceed with loading profile menu
		case '3':
			//revert to old colors
			SetConsoleColors(hConsole, 15, 0);
			return (3);
			break;

		//Proceed with loading profile menu
		case '4':
			//revert to old colors
			SetConsoleColors(hConsole, 15, 0);
			return (4);
			break;

		//Proceed with exiting the application
		case '5':
			//revert to old colors
			SetConsoleColors(hConsole, 15, 0);
			return (5);
			break;

		//Clear screen, reprint menu, notify invalid selection, and allow a second choice
		default:
			system("cls");
			cout<<"Drug Wars --- By: Derik Hammer\n\n";
			cout<<"1. Application Information.\n";
			cout<<"2. New Game.\n";
			cout<<"3. Load Profile.\n";
			cout<<"4. Delete Profiles.\n";
			cout<<"5. Quit.\n\n";
			cout<<"INVALID SELECTION PLEASE CHOOSE AGAIN!\n";
			cout<<"Selection: ";
			cin>>chrChoice;
			//make stats 'GREEN' (10) with 'blk bg' (0) [menu std color]
			SetConsoleColors(hConsole, 10, 0);
			goto CheckAgain;
	}

	//revert to old colors
	SetConsoleColors(hConsole, 15, 0);

	return(0);
}

// use Unicode (wide) version of GetModuleFileName
wstring get_module_path_wide(void)
{
	wchar_t wide_buf[65536];
	wstring module_name;

	if(!GetModuleFileNameW(GetModuleHandle(0), wide_buf, 65535))
		return module_name;

	wide_buf[65535] = L'\0';

	module_name = wide_buf;

	size_t pos = module_name.find_last_of(L'\\');

	if(pos != string::npos)
		module_name = module_name.substr(0, pos);

	return module_name;
}

// use this function to convert from wide wstring to ASCII string if need be
string wsts(const wstring &src_string)
{
	size_t src_len = src_string.length();

	if(src_len == 0)
		return "";

	char *buf = new(std::nothrow) char[src_len + 1];

	if(buf == 0)
		return "";

	wcstombs(buf, src_string.c_str(), src_len);
	buf[src_len] = '\0';

	string final_string = buf;

	if(buf != 0)
		delete [] buf;

	return final_string;
}

//Color Change functions
WORD GetConsoleColors(HANDLE hConsole)
{
    // get current console text attributes
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    GetConsoleScreenBufferInfo(hConsole, &csbi);
    return csbi.wAttributes;
}

WORD SetConsoleColors(HANDLE hConsole, WORD wColorText, WORD wColorBkg = 0)
{
    // get old text attributes
    WORD wOldColors = GetConsoleColors(hConsole);

    // set new text attributes
    SetConsoleTextAttribute(hConsole, wColorText | (wColorBkg << 4));
    return wOldColors;
}

Would love to have this finished before i go to the navy on the 31st. Please help.
-Lordoftools"Knowledge is not only a gift it's a responcibility."
Advertisement
Did you really need 3 topics to ask the same question?

This one, plus here, and here?
The reason that there were 3 threads posted is because of different versions of the code and different issues with the code. There have been three major problems with it which unfortunatly havn't changed but i fixed many things and did a lot of coding updating. If i were to just wait on the other threads people may end up fixing thigns i've fixed or suggesting a course of action which may confict with my new code.

-Lordoftools
"Knowledge is not only a gift, it's a responsibility."
-Lordoftools"Knowledge is not only a gift it's a responcibility."

This topic is closed to new replies.

Advertisement