need help

Whether you're a newbie or an experienced programmer, any questions, help, or just talk of any language will be welcomed here.

Moderator: Coders of Rage

Post Reply
werdo659
Chaos Rift Newbie
Chaos Rift Newbie
Posts: 15
Joined: Fri Aug 19, 2011 11:37 am
Current Project: A top-down 2D RPG game using C++, and lua
Favorite Gaming Platforms: N64, and PC
Programming Language of Choice: C++, Lua

need help

Post by werdo659 »

ok so my problem is when a user enters a number from choices well it works fine the problem is if they enter a character it gets stuck in a continues loop of what was last outputed on the screen

Code: Select all

// Text Adventure.cpp : main project file.


#include "stdafx.h"
#include <cstdlib>
#include <cstdio>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <limits>


using namespace System;
using namespace std;

int main(array<System::String ^> ^args)
{
int choice = 0;
int monster_crit;
int attack = 1;
int level = 1;
int abp = 1;
int real_damage;
int just_leveled = 1;
int strength = 1;
int exp = 0;
int store1_potions = 10;
int store1_Fire_Swords = 1;
int store1_strength_ups = 1;
int in_shop = 0;
int sword = 0;
int looked = 0;
int health = 100;
int damage = 10;
int world = 1;
int gold = 15;
int torch_lit = 0;
int world_1_swords = 1;
int trout_of_Auzur_hp = 2000;
int trout_of_Auzur = 1;
int potions = 3;
int Dead_Trout_of_Auzur_hp = 999999;
int Dead_Trout_of_Auzur = 1;
int just_killed = 1;
for(;;)
{
	void leveling(int choice, int attack, int level, int abp, int just_leveled, int strength, int exp);
if(world == 1)
{
printf("you are in a dark room what do you do \n 1.Look around \n");
if(looked == 1)
{
if(torch_lit == 0)
{
printf(" 2.Light the torch \n");
}
if(world_1_swords == 1)
{
printf(" 3.Pickup the sword \n");
}
}
if(torch_lit == 1)
{
printf(" 4.Leave the room \n");
}
cin >> choice;
if (choice == 1)
{

}
if(choice == 1)
{
if(sword == 0)
{
printf("You see a sword\n");
}
if(sword == 1)
{
}
if(torch_lit == 0)
{
printf("You see a torch\n\n");
}
if(torch_lit == 1)
{
printf("You see a lit torch\n\n");
}
looked = 1;
}
else if(choice == 2)
{
printf("You light the torch you now see a door would you like to enter it 1.Yes 2.No \n");
torch_lit = 1;
scanf("%d", &choice);
if(choice == 1)
{
world = 2;
}
else if(choice == 2)
{
printf("You stay in the room \n\n");
world = 1;
}
else
{
printf("invalid command\n");
}
}
else if(choice == 3)
{
if(world_1_swords == 1)
{
printf("You have obtained a sword\n\n");
sword = 1;
damage = 100;
world_1_swords = 0;
}
}
else if(choice == 4)
{
if(torch_lit == 1)
{
world = 2;
}
}
}
if(world == 2)
{ 
if(trout_of_Auzur == 1)
{
printf("Old Man: Werdo your there I have a favor to ask will you go to the lake and kill the Trout of Auzur please\n1.Yes\n2.No\n");
scanf("%d", &choice);
if(choice == 1)
{
while(trout_of_Auzur == 1)
{
if(trout_of_Auzur_hp <=0)
{
trout_of_Auzur = 0;
exp += 100;
}
if(trout_of_Auzur == 1)
{
printf("1.Attack\n2.use potion\n");
scanf("%d", &choice);
if(choice == 1)
{
srand ( time(NULL) );
real_damage = rand() % (damage *2) + damage + (strength*2) + (strength*2);
monster_crit = rand() % 2 + 1;
if(monster_crit == 1)
{
	health -= rand() % (10 + 8) *2;
}
else if(monster_crit == 2)
{
	health -= rand() % 10 + 8;
}
else
{

}
trout_of_Auzur_hp -= real_damage;
}
if(choice == 2)
{
if(potions >= 1)
{
health += 75;
monster_crit = rand() % 2 + 1;
if(monster_crit == 1)
{
	health -= rand() % (10 + 8) *2;
}
else if(monster_crit == 2)
{
	health -= rand() % 10 + 8;
}
else
{

}
potions --;
}
if(potions <= 0)
{

}
}
else
{

}
cout << "Trout of Auzur hp: " <<trout_of_Auzur_hp << endl;
cout << "Your hp: " << health << endl;
if(health <= 0)
{
return 0;
}
}
}
}
else if(choice == 2)
{

}
}
if(trout_of_Auzur == 0 && Dead_Trout_of_Auzur == 1)
{
	if(just_killed == 1)
	{
potions += 10;
printf("Old Man: GREAT JOB WERDO!\n");
printf("Trout of Azuar: HISSSSS!\n");
printf("You have been ATTACKED!\n");
just_killed ++;
	}
if(Dead_Trout_of_Auzur == 1)
{
	if(Dead_Trout_of_Auzur_hp >= 1)
	{
		if(health >= 1)
		{
		cout << "Dead Trout of Auzur health: " << Dead_Trout_of_Auzur_hp << endl << "Your Health: " << health << endl;
		printf("Press 1. to attack\nPress 2. to use a potion\n");
		scanf("%d", &choice);
			if(choice == 1)
			{
				Dead_Trout_of_Auzur_hp -= 0;
				health -= 500;
			}
			if(choice == 2)
			{
				printf("The Trout stops you from using the potion\n");
				Dead_Trout_of_Auzur_hp -= 0;
					health -= 500;
			}
		}
		if(health <= 0)
		{
			printf("Dead Trout of Auzur: you fool you should have never come here now you die\n");
			printf("The old man jumps in front of the trouts magic and saves your life\n at the cost of his own ");
			printf("After the Dead Trout of Auzur casts his last magic\nhe explodes and dies ");
			printf("Right before the old man dies he casts a heal spell on you\n\n");
			health += 461;
			Dead_Trout_of_Auzur_hp -= 9999999;
		}
	}
	if(Dead_Trout_of_Auzur_hp <= 0)
	{
		Dead_Trout_of_Auzur --;
		world = 3;
	}
}
while(world == 3)
{
	if(in_shop == 0)
	{
	printf("You have managed to find your way to the town square what would you like to do\n 1. shop\n 2. leave\n");
	scanf("%d", &choice);
	if(choice == 1)
	{
		in_shop = 1;
		while(in_shop == 1)
		{
			printf("press 4 to exit the store\n");
			cout << "You have " << gold << " gold" << endl;
			if(store1_potions >= 1)
			{
				cout << "I have " << store1_potions << " potions press 1 to buy a Potion for 15 gold\n";
			}
			if(store1_potions <= 0)
			{
				printf("I am very sorry to inform you that i have no more Potions\n");
			}
			if(store1_Fire_Swords >= 1)
			{
				cout << "I have " << store1_Fire_Swords << " Fire Swords press 2 to buy 1 for 500 gold\n";
			}
			if(store1_Fire_Swords <= 0)
			{
				printf("I am very sorry to inform you that i have no more Fire Swords\n");
			}
			if(store1_strength_ups >= 1)
			{
				cout << "I have " << store1_strength_ups << " Strength ups in stock press 3 to buy 1 for 1000 gold\n";
			}
			if(store1_strength_ups <= 0)
			{
				printf("I am very sorry to inform you that i have no more Strength ups\n");
			}
			scanf("%d", &choice);
			if(choice == 4)
			{
				in_shop = 0;
				world = 3;
			}
			else if(choice == 1)
			{
				if(gold >= 15)
				{
				store1_potions --;
				potions ++;
				gold -= 15;
				}
				else if(gold <= 14)
				{
					printf("Not enough gold\n");
					potions += 0;
					gold -= 0;
				}
				else
				{
					printf("HOW");
				}
			}
			else
			{
				printf("Invalid command\n");
			}
		}
	}
	else if(choice == 2)
	{
		world = 4;
	}
	else
	{
		printf("Invalid Command");
	}
	}
}
if(world == 4)
{
	printf("how?");
}
}
}
}
    return 0;
}
so lets say you enter w at the first cin/scanf it goes you are in a dark room what do you do press 1. to look around FOREVER
User avatar
short
ES Beta Backer
ES Beta Backer
Posts: 548
Joined: Thu Apr 30, 2009 2:22 am
Current Project: c++, c
Favorite Gaming Platforms: SNES, PS2, SNES, SNES, PC NES
Programming Language of Choice: c, c++
Location: Oregon, US

Re: need help

Post by short »

It's way to poorly formatted to be able to read.
My github repository contains the project I am currently working on,
link: https://github.com/bjadamson
User avatar
ultimatedragoon69
Chaos Rift Regular
Chaos Rift Regular
Posts: 122
Joined: Tue Oct 28, 2008 1:57 pm
Current Project: Pangea's quest (text ~tile~ based rpg)
Favorite Gaming Platforms: Dreamcast, PC, playstation 1, Virtual Boy, Snes
Programming Language of Choice: c++
Contact:

Re: need help

Post by ultimatedragoon69 »

I'll try and help you out with formatting unfortunately don't have time to look through code

Code: Select all

	// Text Adventure.cpp : main project file.


#include "stdafx.h"
#include <cstdlib>
#include <cstdio>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <limits>


using namespace System;
using namespace std;

int main(array<System::String ^> ^args)
{
	int choice = 0;
	int monster_crit;
	int attack = 1;
	int level = 1;
	int abp = 1;
	int real_damage;
	int just_leveled = 1;
	int strength = 1;
	int exp = 0;
	int store1_potions = 10;
	int store1_Fire_Swords = 1;
	int store1_strength_ups = 1;
	int in_shop = 0;
	int sword = 0;
	int looked = 0;
	int health = 100;
	int damage = 10;
	int world = 1;
	int gold = 15;
	int torch_lit = 0;
	int world_1_swords = 1;
	int trout_of_Auzur_hp = 2000;
	int trout_of_Auzur = 1;
	int potions = 3;
	int Dead_Trout_of_Auzur_hp = 999999;
	int Dead_Trout_of_Auzur = 1;
	int just_killed = 1;
	for(;;)
	{
		void leveling(int choice, int attack, int level, int abp, int just_leveled, int strength, int exp);

		if(world == 1)
		{
			printf("you are in a dark room what do you do \n 1.Look around \n");
			if(looked == 1)
			{
				if(torch_lit == 0)
				{
					printf(" 2.Light the torch \n");
				}
				if(world_1_swords == 1)
				{
					printf(" 3.Pickup the sword \n");
				}
			}
			if(torch_lit == 1)
			{
				printf(" 4.Leave the room \n");
			}
			cin >> choice;
			if (choice == 1)
			{

			}
			if(choice == 1)
			{
				if(sword == 0)
				{
					printf("You see a sword\n");
				}
				if(sword == 1)
				{
				}
				if(torch_lit == 0)
				{
					printf("You see a torch\n\n");
				}
				if(torch_lit == 1)
				{
					printf("You see a lit torch\n\n");
				}
				looked = 1;
			}
			else if(choice == 2)
			{
				printf("You light the torch you now see a door would you like to enter it 1.Yes 2.No \n");
				torch_lit = 1;
				scanf("%d", &choice);
				if(choice == 1)
				{
					world = 2;
				}
				else if(choice == 2)
				{
					printf("You stay in the room \n\n");
					world = 1;
				}
				else
				{
					printf("invalid command\n");
				}
			}
			else if(choice == 3)
			{
				if(world_1_swords == 1)
				{
					printf("You have obtained a sword\n\n");
					sword = 1;
					damage = 100;
					world_1_swords = 0;
				}
			}
			else if(choice == 4)
			{
				if(torch_lit == 1)
				{
					world = 2;
				}
			}
		}
		if(world == 2)
		{ 
			if(trout_of_Auzur == 1)
			{
				printf("Old Man: Werdo your there I have a favor to ask will you go to the lake and kill the Trout of Auzur please\n1.Yes\n2.No\n");
				scanf("%d", &choice);
				if(choice == 1)
				{
					while(trout_of_Auzur == 1)
					{
						if(trout_of_Auzur_hp <=0)
						{
							trout_of_Auzur = 0;
							exp += 100;
						}
						if(trout_of_Auzur == 1)
						{
							printf("1.Attack\n2.use potion\n");
							scanf("%d", &choice);
							if(choice == 1)
							{
								srand ( time(NULL) );
								real_damage = rand() % (damage *2) + damage + (strength*2) + (strength*2);
								monster_crit = rand() % 2 + 1;
								if(monster_crit == 1)
								{
									health -= rand() % (10 + 8) *2;
								}
								else if(monster_crit == 2)
								{
									health -= rand() % 10 + 8;
								}
								else
								{
									
								}
								trout_of_Auzur_hp -= real_damage;
							}
							if(choice == 2)
							{
								if(potions >= 1)
								{
									health += 75;
									monster_crit = rand() % 2 + 1;
									if(monster_crit == 1)
									{
										health -= rand() % (10 + 8) *2;
									}
									else if(monster_crit == 2)
									{
										health -= rand() % 10 + 8;
									}
									else
									{

									}
									potions --;
								}
								if(potions <= 0)
								{

								}
							}
							else
							{

							}
							cout << "Trout of Auzur hp: " <<trout_of_Auzur_hp << endl;
							cout << "Your hp: " << health << endl;
							if(health <= 0)
							{
								return 0;
							}
						}
					}
				}
				else if(choice == 2)
				{

				}
			}
			if(trout_of_Auzur == 0 && Dead_Trout_of_Auzur == 1)
			{
				if(just_killed == 1)
				{
					potions += 10;
					printf("Old Man: GREAT JOB WERDO!\n");
					printf("Trout of Azuar: HISSSSS!\n");
					printf("You have been ATTACKED!\n");
					just_killed ++;
				}
					if(Dead_Trout_of_Auzur == 1)
					{
						if(Dead_Trout_of_Auzur_hp >= 1)
						{
							if(health >= 1)
							{
								cout << "Dead Trout of Auzur health: " << Dead_Trout_of_Auzur_hp << endl << "Your Health: " << health << endl;
								printf("Press 1. to attack\nPress 2. to use a potion\n");
								scanf("%d", &choice);
								if(choice == 1)
								{
									Dead_Trout_of_Auzur_hp -= 0;
									health -= 500;
								}
								if(choice == 2)
								{
									printf("The Trout stops you from using the potion\n");
									Dead_Trout_of_Auzur_hp -= 0;
									health -= 500;
							}
						}
						if(health <= 0)
						{
							printf("Dead Trout of Auzur: you fool you should have never come here now you die\n");
							printf("The old man jumps in front of the trouts magic and saves your life\n at the cost of his own ");
							printf("After the Dead Trout of Auzur casts his last magic\nhe explodes and dies ");
							printf("Right before the old man dies he casts a heal spell on you\n\n");
							health += 461;
							Dead_Trout_of_Auzur_hp -= 9999999;
						}
					}
					if(Dead_Trout_of_Auzur_hp <= 0)
					{
						Dead_Trout_of_Auzur --;
						world = 3;
					}
				}
				while(world == 3)
				{
					if(in_shop == 0)
					{
						printf("You have managed to find your way to the town square what would you like to do\n 1. shop\n 2. leave\n");
						scanf("%d", &choice);
						if(choice == 1)
						{
							in_shop = 1;
							while(in_shop == 1)
							{
								printf("press 4 to exit the store\n");
								cout << "You have " << gold << " gold" << endl;
								if(store1_potions >= 1)
								{
									cout << "I have " << store1_potions << " potions press 1 to buy a Potion for 15 gold\n";
								}
								if(store1_potions <= 0)
								{
									printf("I am very sorry to inform you that i have no more Potions\n");
								}
								if(store1_Fire_Swords >= 1)
								{
									cout << "I have " << store1_Fire_Swords << " Fire Swords press 2 to buy 1 for 500 gold\n";
								}
								if(store1_Fire_Swords <= 0)
								{
									printf("I am very sorry to inform you that i have no more Fire Swords\n");
								}
								if(store1_strength_ups >= 1)
								{
									cout << "I have " << store1_strength_ups << " Strength ups in stock press 3 to buy 1 for 1000 gold\n";
								}
								if(store1_strength_ups <= 0)
								{
									printf("I am very sorry to inform you that i have no more Strength ups\n");
								}
								scanf("%d", &choice);
								if(choice == 4)
								{
									in_shop = 0;
									world = 3;
								}
								else if(choice == 1)
								{
									if(gold >= 15)
									{
										store1_potions --;
										potions ++;
										gold -= 15;
									}
									else if(gold <= 14)
									{
										printf("Not enough gold\n");
										potions += 0;
										gold -= 0;
									}
									else
									{
										printf("HOW");
									}
								}
								else
								{
									printf("Invalid command\n");
								}
							}
						}
						else if(choice == 2)
						{
							world = 4;
						}
						else
						{
							printf("Invalid Command");
						}
					}
				}
				if(world == 4)
				{
					printf("how?");
				}
			}
		}
	}
    return 0;
}

}
techboy123
Chaos Rift Newbie
Chaos Rift Newbie
Posts: 12
Joined: Sat Feb 20, 2010 11:37 am
Favorite Gaming Platforms: PC, PS3, Dreamcast, DS, Wii
Programming Language of Choice: C++
Location: UK

Re: need help

Post by techboy123 »

Reading the value of std::cin straight into an integer is generally a bad idea (as various jumbles of text looping for an eternity has taught me.) A much safer, less error prone way to go about this is to input the values into a stringstream before hand and then stream into the variable like so.

Code: Select all

#include <iostream>
#include <string>
#include <sstream>

int main() 
{
    int choice = 0;
    std::string buffer;
    std::stringstream ss;

    std::cin >> buffer;
    ss << buffer;
    ss >> choice;
    ss.str(""); //This clears the streams contents. You'll need to do this every time you want to reuse it.
  

   if(ss.fail() ) {
      //Do something about it
    }

    //And so on..

    return 0;
}
There could be a much better way to go about it but that code will be sufficient for your needs. More info on stringstreams can be found at http://www.cplusplus.com/reference/iost ... ingstream/.

And please add some indentation to your code. It takes a tad more effort ( namely pressing tab and space... ) but if I can give a solution with correct spelling after just waking up then you can press those damn keys ;)
Heck. Most IDEs let you highlight a block of text and indent it all at once.

I hope this post helps ( and improves the style of code.)

EDIT: Okay. So it seems being half awake led me to right some potentially non-working code so here's a quick edit. Consider looking into a better way of swapping data between the streams than a std::string acting as a buffer.
User avatar
short
ES Beta Backer
ES Beta Backer
Posts: 548
Joined: Thu Apr 30, 2009 2:22 am
Current Project: c++, c
Favorite Gaming Platforms: SNES, PS2, SNES, SNES, PC NES
Programming Language of Choice: c, c++
Location: Oregon, US

Re: need help

Post by short »

What really is happening (in your original code) is that when the user enters a character, characters are really integers. You can see each characters corresponding value on the ascii table http://www.asciitable.com/

Once the user enters a character, it never satisfies the if statements you have an loops forever because of your for(;;) statements.
My github repository contains the project I am currently working on,
link: https://github.com/bjadamson
werdo659
Chaos Rift Newbie
Chaos Rift Newbie
Posts: 15
Joined: Fri Aug 19, 2011 11:37 am
Current Project: A top-down 2D RPG game using C++, and lua
Favorite Gaming Platforms: N64, and PC
Programming Language of Choice: C++, Lua

Re: need help

Post by werdo659 »

So sorry bout poor format i switch houses alot so i need to email my self the code and then it kinda gets rid of all my tabs and messes up how everything is placed
User avatar
k1net1k
Chaos Rift Maniac
Chaos Rift Maniac
Posts: 563
Joined: Sun Nov 07, 2010 2:58 pm
Contact:

Re: need help

Post by k1net1k »

werdo659 wrote:So sorry bout poor format i switch houses alot so i need to email my self the code and then it kinda gets rid of all my tabs and messes up how everything is placed
get yourself a login for dropbox. you get 2gb free and its a nice way for quick access to your files, and more importantly as a backup
User avatar
dr-snipe
Chaos Rift Newbie
Chaos Rift Newbie
Posts: 42
Joined: Sun Dec 19, 2010 10:09 pm
Programming Language of Choice: C++, Java, PHP
Contact:

Re: need help

Post by dr-snipe »

My friend had a problem with something similar as well. To fix it, just set it's value to NULL after you're done using it. I believe that's how we fixed it
werdo659
Chaos Rift Newbie
Chaos Rift Newbie
Posts: 15
Joined: Fri Aug 19, 2011 11:37 am
Current Project: A top-down 2D RPG game using C++, and lua
Favorite Gaming Platforms: N64, and PC
Programming Language of Choice: C++, Lua

I fixed it

Post by werdo659 »

I fixed it all i had to do is set choice to a string and evaluate the numbers as strings and it fixed it so I'm all good
User avatar
superLED
Chaos Rift Junior
Chaos Rift Junior
Posts: 303
Joined: Sun Nov 21, 2010 10:56 am
Current Project: Engine
Favorite Gaming Platforms: N64
Programming Language of Choice: C++, PHP
Location: Norway

Re: need help

Post by superLED »

I think I would use Strings for that job. And to get the string in a char, just write: myChar = str.c_str();
Post Reply