webForumDet fria alternativet

Problem med enkelt program.

C/C++

4 svar · 304 visningar · startad av Napoleon

Medlem sedan nov. 200322 inlägg
Frågan#1

Jag behöver hjälp med en liten version av svälta räv. Spelarna är kortlekar. Först läggs ett kort ut som man sedan ska lägga över för att ta korten. Man lägger vartannat kort. Ess räknas som ett om det läggs ut först och som 14 om det läggs på ett annat kort.

Problemet är att Klover verkar vara som en trumf färg. Varje kort beskrivs med en farg vilken har typen enum Kortfarg {hjarter, spader, klover, ruter} och med en valör av typen int.

int main()
{
	Kortbunt spelare[2], leken;
	leken.ny_kortlek();
	leken.blanda();
	for (int i=1; i < 53; i++)
	{
		spelare[i%2].lagg_overst(leken.ge_oversta());
	}
	int nasta=1;
	while (spelare[0].antal_kort() > 0 && spelare[1].antal_kort() > 0)
	{
		Kort k, forsta;
		if (leken.antal_kort()==0)
		{
			forsta=spelare[nasta].ge_oversta();
			cout << "Spelare " << nasta+1 << " lagger "; forsta.skriv_ut(); cout << "\n\nForsta\n\n";
			leken.lagg_overst(forsta);
			nasta=(nasta+1)%2;
		}
		else
		{
			k=spelare[nasta].ge_oversta();
			cout << "Spelare " << nasta+1 << " lagger "; k.skriv_ut();
			leken.lagg_overst(k);
			if (k.farg() == forsta.farg() && (k.valor()>forsta.valor() || k.valor()==1))
			{
				cout << "Spelare " << nasta+1 << " tar korten.";
				spelare[nasta].lagg_till_bunt(leken);
				cout << "Spelare 1 har nu " << spelare[0].antal_kort() << " kort.\nSpelare 2 har nu " << spelare[1].antal_kort()
				<< " kort";
			}
			else
			nasta=(nasta+1)%2;
		}
	}
	if (spelare[1].antal_kort() == 0)
		cout << "spelare 2 har vunnit!";
	else
		cout << "spelare 1 har vunnit!";
}

Tack på förhand!

Medlem sedan juni 200010 432 inlägg
#2

Lättaste sättet att reda ut sådana problem är att smacka in lite spårutskrifter.
Utan att kolla närmare så är ju ivf Klöver detsamma som talet 2 i din enum. Du har inte råkat förväxla nån logik nånstans så att det alltid blir 2 när det ska vara nåt annat?

Medlem sedan juli 200012 978 inlägg
#3

Kul problem och välkommen till wF Napoleon.

Medlem sedan juni 200010 432 inlägg
#4

Javisstja! Välkommen Napoleon! :D

Medlem sedan nov. 200322 inlägg
#5

Det löste sig!

while (spelare[0].antal_kort() > 0 && spelare[1].antal_kort() > 0)
	{
               Kort k, forsta;

Här var felet. Det skulle vara:

Kort k, forsta;
while (spelare[0].antal_kort() > 0 && spelare[1].antal_kort() > 0)
	{

Annars anropades konstruktorn (som hade default värdet klover ess dvs ett kort som kan tas av alla klover) för forsta och kort varje gång loopen kördes, jag hade fått för mig att så inte var fallet av någon anledning.

Jag har kollat runt lite i forumet tidigare men nu har jag äntligen tagit mig för att registrera mig :)

310 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
175 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
175 ms — ändringar (db)