webForumDet fria alternativet

Problem med enkelt program.

4 svar · 302 visningar · startad av Napoleon

NapoleonMedlem sedan nov. 200321 inlägg
#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!

PeWMedlem sedan juni 20006 839 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?

LaspMedlem sedan juli 200010 197 inlägg
#3

Kul problem och välkommen till wF Napoleon.

PeWMedlem sedan juni 20006 839 inlägg
#4

Javisstja! Välkommen Napoleon! :D

NapoleonMedlem sedan nov. 200321 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 :)

131 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
124 ms — hämta tråd, inlägg och bilagor (db)