Jump to content

  • Log In with Google      Sign In   
  • Create Account


#ActualVladimirMarenus

Posted 13 November 2012 - 07:32 AM

I am having an issue getting a vector-based inventory system to work. I am able to list the items in the inventory, but not able to allow a user-selected item to be accessed. Here is the code:

struct aItem
{
	string  itemName;
	int	 damage;
	bool operator==(aItem other)
	{
		if (itemName == other.itemName)
			return true;
		else
			return false;
	}
};
int main()
{
	int selection = 0;

	aItem healingPotion;
	healingPotion.itemName = "Healing Potion";
	healingPotion.damage= 6;
	aItem fireballPotion;
	fireballPotion.itemName = "Potion of Fiery Balls";
	fireballPotion.damage = -2;
	aItem testPotion;
	testPotion.itemName = "I R NOT HERE";
	testPotion.damage = 9001;
	int choice = 0;
	vector<aItem> inventory;
	inventory.push_back(healingPotion);
	inventory.push_back(healingPotion);
	inventory.push_back(healingPotion);
	inventory.push_back(fireballPotion);
	cout << "This is a test game to use inventory items. Woo!" << endl;
	cout << "You're an injured fighter in a fight- real original, I know." << endl;
	cout << "1) Use an Item. 2) ...USE AN ITEM." << endl;
        cin >> selection;
switch (selection)
	{
	case 1:
		cout << "Which item would you like to use?" << endl;
		int a = 1;
		for( vector<aItem>::size_type index = 0; index < inventory.size(); index++ )
		{
			cout << "Item " << a << ": " <<  inventory[index].itemName << endl;
			a+= 1;
		}
		cout << "MAKE YOUR CHOICE." << endl << "Choice: ";
		cin >> choice;

^^^^ Everything above this line, works. I assume that my problem is the if statement, but I cannot figure out where I am going wrong in my syntax, or if there is a better way to do what I am doing.

if (find(inventory.begin(), inventory.at(choice), healingPotion.itemName) != inventory.end())
			cout << "You used a healing potion!";
		else
			cout << "FIERY BALLS OF JOY!";
		break;
	case 2:
		cout << "Such a jerk, you are." << endl;
			break;
	}

I need for the player's choice to affect the message displayed. Here's a sample output of the 1st snippet:

Item 1: Healing Potion
Item 2: Healing Potion
Item 3: Healing Potion
Item 4: Potion of Fiery Balls
MAKE YOUR CHOICE.
Choice:

From there, the player can type 1-4, and what I would like is for the number (minus 1, to reflect the vector starting at zero) to be passed to the find, which would then determine (in this small example) if the item at inventory[choice - 1] is a healing potion. If so, display "You used a healing potion!" and if it is not, to display "Fiery balls of joy". Obviously, to turn this into a "real" inventory system, it'll need much more tweaking- this excercise is to help me learn how to search vectors... next will be removing the item once it is used (really looking forward to that, too... )

Any advice you can offer would be awesome. Thanks for slogging through all this!

#5VladimirMarenus

Posted 13 November 2012 - 07:32 AM

I am having an issue getting a vector-based inventory system to work. I am able to list the items in the inventory, but not able to allow a user-selected item to be accessed. Here is the code:

struct aItem
{
	string  itemName;
	int	 damage;
	bool operator==(aItem other)
	{
		if (itemName == other.itemName)
			return true;
		else
			return false;
	}
};
int main()
{
	int selection = 0;

	aItem healingPotion;
	healingPotion.itemName = "Healing Potion";
	healingPotion.damage= 6;
	aItem fireballPotion;
	fireballPotion.itemName = "Potion of Fiery Balls";
	fireballPotion.damage = -2;
	aItem testPotion;
	testPotion.itemName = "I R NOT HERE";
	testPotion.damage = 9001;
	int choice = 0;
	vector<aItem> inventory;
	inventory.push_back(healingPotion);
	inventory.push_back(healingPotion);
	inventory.push_back(healingPotion);
	inventory.push_back(fireballPotion);
	cout << "This is a test game to use inventory items. Woo!" << endl;
	cout << "You're an injured fighter in a fight- real original, I know." << endl;
	cout << "1) Use an Item. 2) ...USE AN ITEM." << endl;
        cin >> selection;
switch (selection)
	{
	case 1:
		cout << "Which item would you like to use?" << endl;
		int a = 1;
		for( vector<aItem>::size_type index = 0; index < inventory.size(); index++ )
		{
			cout << "Item " << a << ": " <<  inventory[index].itemName << endl;
			a+= 1;
		}
		cout << "MAKE YOUR CHOICE." << endl << "Choice: ";
		cin >> choice;

^^^^ Everything above this line, works. I assume that my problem is the if statement, but I cannot figure out where I am going wrong in my syntax, or if there is a better way to do what I am doing.

if (find(inventory.begin(), inventory.at(choice), healingPotion.itemName) != inventory.end())
			cout << "You used a healing potion!";
		else
			cout << "FIERY BALLS OF JOY!";
		break;
	case 2:
		cout << "Such a jerk, you are." << endl;
			break;
	}

I need for the player's choice to affect the message displayed. Here's a sample output of the 1st snippet:

Item 1: Healing Potion
Item 2: Healing Potion
Item 3: Healing Potion
Item 4: Potion of Fiery Balls
MAKE YOUR CHOICE.
Choice:

From there, the player can type 1-4, and what I would like is for the number (minus 1, to reflect the vector starting at zero) to be passed to the find, which would then determine (in this small example) if the item at inventory[choice - 1] is a healing potion. If so, display "You used a healing potion!" and if it is not, to display "Fiery balls of joy". Obviously, to turn this into a "real" inventory system, it'll need much more tweaking- this excercise is to help me learn how to search vectors... next will be removing the item once it is used (really looking forward to that, too... )

Any advice you can offer would be awesome. Thanks for slogging through all this!

#4VladimirMarenus

Posted 13 November 2012 - 07:32 AM

I am having an issue getting a vector-based inventory system to work. I am able to list the items in the inventory, but not able to allow a user-selected item to be accessed. Here is the code:

struct aItem
{
	string  itemName;
	int	 damage;
	bool operator==(aItem other)
	{
		if (itemName == other.itemName)
			return true;
		else
			return false;
	}
};
int main()
{
	int selection = 0;

	aItem healingPotion;
	healingPotion.itemName = "Healing Potion";
	healingPotion.damage= 6;
	aItem fireballPotion;
	fireballPotion.itemName = "Potion of Fiery Balls";
	fireballPotion.damage = -2;
	aItem testPotion;
	testPotion.itemName = "I R NOT HERE";
	testPotion.damage = 9001;
	int choice = 0;
	vector<aItem> inventory;
	inventory.push_back(healingPotion);
	inventory.push_back(healingPotion);
	inventory.push_back(healingPotion);
	inventory.push_back(fireballPotion);
	cout << "This is a test game to use inventory items. Woo!" << endl;
	cout << "You're an injured fighter in a fight- real original, I know." << endl;
	cout << "1) Use an Item. 2) ...USE AN ITEM." << endl;
        cin >> selection;
switch (selection)
	{
	case 1:
		cout << "Which item would you like to use?" << endl;
		int a = 1;
		for( vector<aItem>::size_type index = 0; index < inventory.size(); index++ )
		{
			cout << "Item " << a << ": " <<  inventory[index].itemName << endl;
			a+= 1;
		}
		cout << "MAKE YOUR CHOICE." << endl << "Choice: ";
		cin >> choice;

^^^^ Everything above this line, works. I assume that my problem is the if statement, but I cannot figure out where I am going wrong in my syntax, or if there is a better way to do what I am doing.

if (find(inventory.begin(), inventory.at(choice), healingPotion.itemName) != inventory.end())
			cout << "You used a healing potion!";
		else
			cout << "FIERY BALLS OF JOY!";
		break;
	case 2:
		cout << "Such a jerk, you are." << endl;
			break;
	}

I need for the player's choice to affect the message displayed. Here's a sample output of the 1st snippet:

Item 1: Healing Potion
Item 2: Healing Potion
Item 3: Healing Potion
Item 4: Potion of Fiery Balls
MAKE YOUR CHOICE.
Choice:

From there, the player can type 1-4, and what I would like is for the number (minus 1, to reflect the vector starting at zero) to be passed to the find, which would then determine (in this small example) if the item at inventory[choice - 1] is a healing potion. If so, display "You used a healing potion!" and if it is not, to display "Fiery balls of joy". Obviously, to turn this into a "real" inventory system, it'll need much more tweaking- this excercise is to help me learn how to search vectors... next will be removing the item once it is used (really looking forward to that, too... )

Any advice you can offer would be awesome. Thanks for slogging through all this!

#3VladimirMarenus

Posted 13 November 2012 - 07:31 AM

I am having an issue getting a vector-based inventory system to work. I am able to list the items in the inventory, but not able to allow a user-selected item to be accessed. Here is the code:

struct aItem
{
	string  itemName;
	int	 damage;
	bool operator==(aItem other)
	{
		if (itemName == other.itemName)
			return true;
		else
			return false;
	}
};
int main()
{
	int selection = 0;

	aItem healingPotion;
	healingPotion.itemName = "Healing Potion";
	healingPotion.damage= 6;
	aItem fireballPotion;
	fireballPotion.itemName = "Potion of Fiery Balls";
	fireballPotion.damage = -2;
	aItem testPotion;
	testPotion.itemName = "I R NOT HERE";
	testPotion.damage = 9001;
	int choice = 0;
	vector<aItem> inventory;
	inventory.push_back(healingPotion);
	inventory.push_back(healingPotion);
	inventory.push_back(healingPotion);
	inventory.push_back(fireballPotion);
	cout << "This is a test game to use inventory items. Woo!" << endl;
	cout << "You're an injured fighter in a fight- real original, I know." << endl;
	cout << "1) Use an Item. 2) ...USE AN ITEM." << endl;
        cin >> selection;
switch (selection)
	{
	case 1:
		cout << "Which item would you like to use?" << endl;
		int a = 1;
		for( vector<aItem>::size_type index = 0; index < inventory.size(); index++ )
		{
			cout << "Item " << a << ": " <<  inventory[index].itemName << endl;
			a+= 1;
		}
		cout << "MAKE YOUR CHOICE." << endl << "Choice: ";
		cin >> choice;

^^^^ Everything above this line, works. I assume that my problem is the if statement, but I cannot figure out where I am going wrong in my syntax, or if there is a better way to do what I am doing.

if (find(inventory.begin(), inventory.at(choice), healingPotion.itemName) != inventory.end())
			cout << "You used a healing potion!";
		else
			cout << "FIERY BALLS OF JOY!";
		break;
	case 2:
		cout << "Such a jerk, you are." << endl;
			break;
	}

I need for the player's choice to affect the message displayed. Here's a sample output of the 1st snippet:

Item 1: Healing Potion
Item 2: Healing Potion
Item 3: Healing Potion
Item 4: Potion of Fiery Balls
MAKE YOUR CHOICE.
Choice:

From there, the player can type 1-4, and what I would like is for the number (minus 1, to reflect the vector starting at zero) to be passed to the find, which would then determine (in this small example) if the item at inventory[choice - 1] is a healing potion. If so, display "You used a healing potion!" and if it is not, to display "Fiery balls of joy". Obviously, to turn this into a "real" inventory system, it'll need much more tweaking- this excercise is to help me learn how to search vectors... next will be removing the item once it is used (really looking forward to that, too... )

Any advice you can offer would be awesome. Thanks for slogging through all this!

#2VladimirMarenus

Posted 13 November 2012 - 07:30 AM

I am having an issue getting a vector-based inventory system to work. I am able to list the items in the inventory, but not able to allow a user-selected item to be accessed. Here is the code:

struct aItem
{
	string  itemName;
	int	 damage;
	bool operator==(aItem other)
	{
		if (itemName == other.itemName)
			return true;
		else
			return false;
	}
};
int main()
{
	int selection = 0;

	aItem healingPotion;
	healingPotion.itemName = "Healing Potion";
	healingPotion.damage= 6;
	aItem fireballPotion;
	fireballPotion.itemName = "Potion of Fiery Balls";
	fireballPotion.damage = -2;
	aItem testPotion;
	testPotion.itemName = "I R NOT HERE";
	testPotion.damage = 9001;
	int choice = 0;
	vector<aItem> inventory;
	inventory.push_back(healingPotion);
	inventory.push_back(healingPotion);
	inventory.push_back(healingPotion);
	inventory.push_back(fireballPotion);
	cout << "This is a test game to use inventory items. Woo!" << endl;
	cout << "You're an injured fighter in a fight- real original, I know." << endl;
	cout << "1) Use an Item. 2) ...USE AN ITEM." << endl;
    cin >> selection;
switch (selection)
	{
	case 1:
		cout << "Which item would you like to use?" << endl;
		int a = 1;
		for( vector<aItem>::size_type index = 0; index < inventory.size(); index++ )
		{
			cout << "Item " << a << ": " <<  inventory[index].itemName << endl;
			a+= 1;
		}
		cout << "MAKE YOUR CHOICE." << endl << "Choice: ";
		cin >> choice;

^^^^ Everything above this line, works. I assume that my problem is the if statement, but I cannot figure out where I am going wrong in my syntax, or if there is a better way to do what I am doing.

if (find(inventory.begin(), inventory.at(choice), healingPotion.itemName) != inventory.end())
			cout << "You used a healing potion!";
		else
			cout << "FIERY BALLS OF JOY!";
		break;
	case 2:
		cout << "Such a jerk, you are." << endl;
			break;
	}

I need for the player's choice to affect the message displayed. Here's a sample output of the 1st snippet:

Item 1: Healing Potion
Item 2: Healing Potion
Item 3: Healing Potion
Item 4: Potion of Fiery Balls
MAKE YOUR CHOICE.
Choice:

From there, the player can type 1-4, and what I would like is for the number (minus 1, to reflect the vector starting at zero) to be passed to the find, which would then determine (in this small example) if the item at inventory[choice - 1] is a healing potion. If so, display "You used a healing potion!" and if it is not, to display "Fiery balls of joy". Obviously, to turn this into a "real" inventory system, it'll need much more tweaking- this excercise is to help me learn how to search vectors... next will be removing the item once it is used (really looking forward to that, too... )

Any advice you can offer would be awesome. Thanks for slogging through all this!

#1VladimirMarenus

Posted 13 November 2012 - 06:50 AM

I am having an issue getting a vector-based inventory system to work. I am able to list the items in the inventory, but not able to allow a user-selected item to be accessed. Here is the code:

struct aItem
{
	string  itemName;
	int	 damage;
	bool operator==(aItem other)
	{
		if (itemName == other.itemName)
			return true;
		else
			return false;
	}
};
int main()
{
	int selection = 0;

	aItem healingPotion;
	healingPotion.itemName = "Healing Potion";
	healingPotion.damage= 6;
	aItem fireballPotion;
	fireballPotion.itemName = "Potion of Fiery Balls";
	fireballPotion.damage = -2;
	aItem testPotion;
	testPotion.itemName = "I R NOT HERE";
	testPotion.damage = 9001;
	int choice = 0;
	vector<aItem> inventory;
	inventory.push_back(healingPotion);
	inventory.push_back(healingPotion);
	inventory.push_back(healingPotion);
	inventory.push_back(fireballPotion);
	cout << "This is a test game to use inventory items. Woo!" << endl;
	cout << "You're an injured fighter in a fight- real original, I know." << endl;
	cout << "1) Use an Item. 2) ...USE AN ITEM." << endl;
switch (selection)
	{
	case 1:
		cout << "Which item would you like to use?" << endl;
		int a = 1;
		for( vector<aItem>::size_type index = 0; index < inventory.size(); index++ )
		{
			cout << "Item " << a << ": " <<  inventory[index].itemName << endl;
			a+= 1;
		}
		cout << "MAKE YOUR CHOICE." << endl << "Choice: ";
		cin >> choice;

^^^^ Everything above this line, works. I assume that my problem is the if statement, but I cannot figure out where I am going wrong in my syntax, or if there is a better way to do what I am doing.

if (find(inventory.begin(), inventory.at(choice), healingPotion.itemName) != inventory.end())
			cout << "You used a healing potion!";
		else
			cout << "FIERY BALLS OF JOY!";
		break;
	case 2:
		cout << "Such a jerk, you are." << endl;
			break;
	}

I need for the player's choice to affect the message displayed. Here's a sample output of the 1st snippet:

Item 1: Healing Potion
Item 2: Healing Potion
Item 3: Healing Potion
Item 4: Potion of Fiery Balls
MAKE YOUR CHOICE.
Choice:

From there, the player can type 1-4, and what I would like is for the number (minus 1, to reflect the vector starting at zero) to be passed to the find, which would then determine (in this small example) if the item at inventory[choice - 1] is a healing potion. If so, display "You used a healing potion!" and if it is not, to display "Fiery balls of joy". Obviously, to turn this into a "real" inventory system, it'll need much more tweaking- this excercise is to help me learn how to search vectors... next will be removing the item once it is used (really looking forward to that, too... )

Any advice you can offer would be awesome. Thanks for slogging through all this!

PARTNERS