webForumDet fria alternativet

Funkar inte :(

C/C++

7 svar · 257 visningar · startad av Alpha II

Medlem sedan maj 20002 993 inlägg
Frågan#1

Gör ett textbaserat rpg spel... har problem med menyerna... om man går in i inventory menyn åker man direkt ut ifrån den och sen börjas > tecken skrivas hela tiden :(

void Game()
{
	string command;
	int value;

	InitMonsters();
	InitItems();

	system("cls");

	while (1)
	{
		cout << "> ";
		cin >> command >> value;

		if (command == "inventory")
		{
			Inventory();
		}

		if (command == "fight")
		{
			Fight(player, monsterTypes[value]);
		}

		if (command == "exit")
			break;

	}

}
void Inventory()
{
	string command;
	string var1;
	int var2;
	int i;

	system("cls");

	cout << "*****************************************\n";
	cout << "************    INVENTORY    ************\n";
	cout << "*****************************************\n";
	cout << "\n";
	cout << "  " << player.name << "  ";

	switch (player.charClass)
	{
		case 0: cout << "[Barbaian]\n";
		break;
		case 1: cout << "[White Knight]\n";
		break;
		case 2: cout << "[Evil Mage]\n";
		break;
		case 3: cout << "[Choas Dwarf]\n";
		break;
	}

	cout << "\n";
	cout << "  Helm:              " << itemTypes[player.helm].name << "\n";
	cout << "  Chest plate:       " << itemTypes[player.chestPlate].name << "\n";
	cout << "  Weapon:            " << itemTypes[player.weapon].name << "\n";
	cout << "  Ring:              " << itemTypes[player.ring].name << "\n";

	cout << "\n";

	for (i=0;i<10;i++)
	{
		cout << "  Slot #" << i+1 << ": " << itemTypes[player.slot[i]].name << "\n";
	}

	cout << "\n\n\n\n";

	cout << "Command: " << endl;

	cin >> command >> var1 >> var2;

	if (command == "set")
	{
		if (var1 == "helm")
			player.helm = player.slot[var2-1];

		if (var1 == "chestplate")
			player.chestPlate = player.slot[var2-1];

		if (var1 == "weapon")
			player.weapon = player.slot[var2-1];

		if (var1 == "ring")
			player.ring = player.slot[var2-1];

		Inventory();

	}

}
Medlem sedan maj 20021 466 inlägg
#2

Detta har varit uppe många gånger förut. Sök på cin t.ex.

Prova cin.get() efter cin >> x.

Medlem sedan maj 20002 993 inlägg
#3

tack :)

Hur gör jag så att det ska gå att skriva "inventory" utan att behöva skriva ett till ord efteråt eftersom det står cin >> command >> value;?

Medlem sedan maj 20002 993 inlägg
#4

det funkar fortfarande inte :(

efter att inventory är klart flippar spelet ut totallt och skiter i cin

while (1)
{
	if (world[playerPosX][playerPosY].monster > -1)
		Fight(monsterTypes[world[playerPosX][playerPosY].monster]);

	cout << "> ";
	cin >> command >> value;
	cin.get();
	if (command == "go")
	{
		if (value == "north")
			playerPosX = playerPosX - 1;
		if (value == "south")
			playerPosX = playerPosX + 1;
		if (value == "west")
			playerPosY = playerPosY - 1;
		if (value == "east")
			playerPosY = playerPosY + 1;
	}
	if (command == "inventory")
		Inventory();
	if (command == "exit")
		break;
}
Medlem sedan aug. 2001458 inlägg
#5

Du behöver inte posta all din kod varje gång. Posta istället kortast möjliga reproducerbara exempel på problemet så ökar sannolikheten att någon tittar på ditt problem.

Dessutom kommer du själv lättare hitta problemet om du lyckas isolera kod-raden där dett uppstår.

Medlem sedan maj 20002 993 inlägg
#6

Men nu är det väl inte så mycket kod. :)

Varför struntar programmet i cin efter att Inventory() har anropats?

Medlem sedan okt. 20013 217 inlägg
#7

Lämnar programmet Inventory () så den inte fastnar där ?

Medlem sedan maj 20002 993 inlägg
#8

ja

267 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
132 ms — ändringar (db)