Jeg mener ikke der er en egentlig fejl i koden - bare en mindre diskontinuitet.
Problemet er, at hver gang for-loopet begynder, tjekker if for a's værdi, og er den under antalspillere, inkrementeres a. Dette er egentlig meget godt, bortset fra at dette skal springes over i første runde af spillet hver gang, da spiller 1 elelrs først vil komme med i runde 2... lidt svært at forklare, så jeg lægger hele kildekoden ved...
Kort.h:
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <vector>
#include <ctime>
#include <stdlib.h>
using namespace std;
// Used for shuffling cards.
std::vector<int>Kort;
class RandIntClass
{
public:
RandIntClass(){}
int operator() (int aRange)
{
return int((double )rand()/(double(RAND_MAX) + 1)*aRange);
}
};
class Spar
{
public:
void sparEs() { cout << "Spar Es.\\nDrik selv, 1 slurk.";}
void spar2() { cout << "Spar 2.\\nDrik til hojre, 2 slurke.";}
void spar3() { cout << "Spar 3.\\nDrik til venstre, 3 slurke.";}
void spar4() { cout << "Spar 4.\\nFaellesskaal.";}
void spar5() { cout << "Spar 5.\\nKategori. Korttraekkeren vaelger en kategori "
<< "og laegger ud.\\nDen der ikke kan fortsaette, drikker 5.";}
void spar6() { cout << "Spar 6.\\nDel 6 slurke ud.";}
void spar7() { cout << "Spar 7.\\nAlle undtaget korttraekkeren drikker 1.";}
void spar8() { cout << "Spar 8.\\nFaellesskaal * 2.";}
void spar9() { cout << "Spar 9.\\nPis'kort.";}
void spar10() { cout << "Spar 10.\\nRegelkort. Lav en regel, eller anuller en eksisterende.";}
void sparKnaegt() { cout << "Spar Knaegt.\\nDrik selv, 8 slurke.";}
void sparDame() { cout << "Spar Dame.\\nVandfald. Alle drikker, til korttraekkeren stopper.";}
void sparKonge() { cout << "Spar Konge.\\n4. konge bunder i lobet af derpaa folgende runde.";}
};
class Ruder
{
public:
void ruderEs() { cout << "Ruder Es.\\nDrik selv, 1 slurk.";}
void ruder2() { cout << "Ruder 2.\\nDrik til hojre, 2 slurke.";}
void ruder3() { cout << "Ruder 3.\\nDrik til venstre, 3 slurke.";}
void ruder4() { cout << "Ruder 4.\\nFaellesskaal.";}
void ruder5() { cout << "Ruder 5.\\nKategori. Korttraekkeren vaelger en kategori "
<< "og laegger ud.\\nDen der ikke kan fortsaette, drikker 5.";}
void ruder6() { cout << "Ruder 6.\\nDel 6 slurke ud.";}
void ruder7() { cout << "Ruder 7.\\nAlle undtaget korttraekkeren drikker 1.";}
void ruder8() { cout << "Ruder 8.\\nFaellesskaal * 2.";}
void ruder9() { cout << "Ruder 9.\\nPis'kort.";}
void ruder10() { cout << "Ruder 10.\\nRegelkort. Lav en regel, eller anuller en eksisterende.";}
void ruderKnaegt() { cout << "Ruder Knaegt.\\nDrik overfor, 4 slurke "
<< "(deles mellem 2, hvis ulige antal spillere.)";}
void ruderDame() { cout << "Ruder Dame.\\nVandfald. Alle drikker, til korttraekkeren stopper.";}
void ruderKonge() { cout << "Ruder Konge.\\n4. konge bunder i lobet af derpaa folgende runde.";}
};
class Klor
{
public:
void klorEs() { cout << "Klor Es.\\nDrik selv, 1 slurk.";}
void klor2() { cout << "Klor 2.\\nDrik til hojre, 2 slurke.";}
void klor3() { cout << "Klor 3.\\nDrik til venstre, 3 slurke.";}
void klor4() { cout << "Klor 4.\\nFaellesskaal.";}
void klor5() { cout << "Klor 5.\\nKategori. Korttraekkeren vaelger en kategori "
<< "og laegger ud.\\nDen der ikke kan fortsaette, drikker 5.";}
void klor6() { cout << "Klor 6.\\nDel 6 slurke ud.";}
void klor7() { cout << "Klor 7.\\nAlle undtaget korttraekkeren drikker 1.";}
void klor8() { cout << "Klor 8.\\nFaellesskaal * 2.";}
void klor9() { cout << "Klor 9.\\nPis'kort.";}
void klor10() { cout << "Klor 10.\\nRegelkort. Lav en regel, eller anuller en eksisterende.";}
void klorKnaegt() { cout << "Klor Knaegt.\\nDrik til hojre, 2 slurke.";}
void klorDame() { cout << "Klor Dame.\\nVandfald. Alle drikker, til korttraekkeren stopper.";}
void klorKonge() { cout << "Klor Konge.\\n4. konge bunder i lobet af derpaa folgende runde.";}
};
class Hjerter
{
public:
void hjerterEs() { cout << "Hjerter Es.\\nDrik selv, 1 slurk.";}
void hjerter2() { cout << "Hjerter 2.\\nDrik til hojre, 2 slurke.";}
void hjerter3() { cout << "Hjerter 3.\\nDrik til venstre, 3 slurke.";}
void hjerter4() { cout << "Hjerter 4.\\nFaellesskaal.";}
void hjerter5() { cout << "Hjerter 5.\\nKategori. Korttraekkeren vaelger en kategori "
<< "og laegger ud.\\nDen der ikke kan fortsaette, drikker 5.";}
void hjerter6() { cout << "Hjerter 6.\\nDel 6 slurke ud.";}
void hjerter7() { cout << "Hjerter 7.\\nAlle undtaget korttraekkeren drikker 1.";}
void hjerter8() { cout << "Hjerter 8.\\nFaellesskaal * 2.";}
void hjerter9() { cout << "Hjerter 9.\\nPis'kort.";}
void hjerter10() { cout << "Hjerter 10.\\nRegelkort. Lav en regel, "
<< "eller anuller en eksisterende.";}
void hjerterKnaegt() { cout << "Hjerter Knaegt.\\nDrik til venstre, 1 slurk.";}
void hjerterDame() { cout << "Hjerter Dame.\\nVandfald. Alle drikker, "
<< "til korttraekkeren stopper.";}
void hjerterKonge() { cout << "Hjerter Konge.\\n4. konge bunder i lobet af "
<< "derpaa folgende runde.";}
};
Kortspil:
#include "Kort.h"
#include <vector>
using namespace std;
int main(int argc, char *argv[])
{
char restart;
int antalSpillere;
int kortNummer;
int konger = 0;
do {
system("CLS");
cout << "Velkommen til drikkespillet v. 2.0 - \\n";
cout << "Spillet til folk der enten er for dovne, \\n";
cout << "eller ganske enkelt ikke besidder et (komplet) saet spillekort.\\n";
cout << "Nyd turen og LAD VAER' MED AT SPILDE PAA TASTATURET!!!\\n";
cin.get();
do{
system("CLS");
cout << "Indtast antal spillere (2-6): ";
cin >> antalSpillere;
system("CLS");
cin.ignore();
}while(antalSpillere < 2 || antalSpillere > 6);
std::vector<string> spillernavn;
for(int i = 1; i <= antalSpillere; ++i)
{
string name;
cout << "Indtast spiller " << i << "'s navn: ";
getline(cin,name);
spillernavn.push_back(name);
}
// Lav 52 kort.
srand(time(0));
RandIntClass RandInt;
for(int i = 0; i < 52; i++)
Kort.push_back(i);
// Dekrementerer antalSpillere til sammeligning længere nede.
--antalSpillere;
int a = 0;
// Bland kort.
random_shuffle(Kort.begin(), Kort.end(), RandInt);
for(int i = 0; i < 52; i++)
{
// Tildel Kort[i] til int kortNummer.
kortNummer = Kort[ i ];
system("CLS");
// Opret en klasse for hver kulør, med kulørens navn.
Spar Spar;
Ruder Ruder;
Klor Klor;
Hjerter Hjerter;
// Inkrementerer a, så længe a ikke er >= antalSpillere.
// Bruges til at skifte spillernavn ved hvert træk.
if(a >= antalSpillere)
{a = 0;}
else
{a++;}
// Talkode for hvert spillekort. Gentages 52 gange.
switch (kortNummer)
{
case 0:
cout << spillernavn[a] << endl;
Spar.sparEs();
break;
case 1:
cout << spillernavn[a] << endl;
Spar.spar2();
break;
case 2:
cout << spillernavn[a] << endl;
Spar.spar3();
break;
case 3:
cout << spillernavn[a] << endl;
Spar.spar4();
break;
case 4:
cout << spillernavn[a] << endl;
Spar.spar5();
break;
case 5:
cout << spillernavn[a] << endl;
Spar.spar6();
break;
case 6:
cout << spillernavn[a] << endl;
Spar.spar7();
break;
case 7:
cout << spillernavn[a] << endl;
Spar.spar8();
break;
case 8:
cout << spillernavn[a] << endl;
Spar.spar9();
break;
case 9:
cout << spillernavn[a] << endl;
Spar.spar10();
break;
case 10:
cout << spillernavn[a] << endl;
Spar.sparKnaegt();
break;
case 11:
cout << spillernavn[a] << endl;
Spar.sparDame();
break;
case 12:
cout << spillernavn[a] << endl;
konger++;
Spar.sparKonge();
if (konger == 4)
{
cout << "\\nSidste konge. Bund inden naeste runde.\\n";
cin.get();
}
else
cout << "\\nNr. " << konger << " af 4.";
break;
case 13:
cout << spillernavn[a] << endl;
Ruder.ruderEs();
break;
case 14:
cout << spillernavn[a] << endl;
Ruder.ruder2();
break;
case 15:
cout << spillernavn[a] << endl;
Ruder.ruder3();
break;
case 16:
cout << spillernavn[a] << endl;
Ruder.ruder4();
break;
case 17:
cout << spillernavn[a] << endl;
Ruder.ruder5();
break;
case 18:
cout << spillernavn[a] << endl;
Ruder.ruder6();
break;
case 19:
cout << spillernavn[a] << endl;
Ruder.ruder7();
break;
case 20:
cout << spillernavn[a] << endl;
Ruder.ruder8();
break;
case 21:
cout << spillernavn[a] << endl;
Ruder.ruder9();
break;
case 22:
cout << spillernavn[a] << endl;
Ruder.ruder10();
break;
case 23:
cout << spillernavn[a] << endl;
Ruder.ruderKnaegt();
break;
case 24:
cout << spillernavn[a] << endl;
Ruder.ruderDame();
break;
case 25:
cout << spillernavn[a] << endl;
konger++;
Ruder.ruderKonge();
if (konger == 4)
{
cout << "\\nSidste konge. Bund inden naeste runde.\\n";
cin.get();
}
else
cout << "\\nNr. " << konger << " af 4.";
break;
case 26:
cout << spillernavn[a] << endl;
Klor.klorEs();
break;
case 27:
cout << spillernavn[a] << endl;
Klor.klor2();
break;
case 28:
cout << spillernavn[a] << endl;
Klor.klor3();
break;
case 29:
cout << spillernavn[a] << endl;
Klor.klor4();
break;
case 30:
cout << spillernavn[a] << endl;
Klor.klor5();
break;
case 31:
cout << spillernavn[a] << endl;
Klor.klor6();
break;
case 32:
cout << spillernavn[a] << endl;
Klor.klor7();
break;
case 33:
cout << spillernavn[a] << endl;
Klor.klor8();
break;
case 34:
cout << spillernavn[a] << endl;
Klor.klor9();
break;
case 35:
cout << spillernavn[a] << endl;
Klor.klor10();
break;
case 36:
cout << spillernavn[a] << endl;
Klor.klorKnaegt();
break;
case 37:
cout << spillernavn[a] << endl;
Klor.klorDame();
break;
case 38:
cout << spillernavn[a] << endl;
konger++;
Klor.klorKonge();
if (konger == 4)
{
cout << "\\nSidste konge. Bund inden naeste runde.\\n";
cin.get();
}
else
cout << "\\nNr. " << konger << " af 4.";
break;
case 39:
cout << spillernavn[a] << endl;
Hjerter.hjerterEs();
break;
case 40:
cout << spillernavn[a] << endl;
Hjerter.hjerter2();
break;
case 41:
cout << spillernavn[a] << endl;
Hjerter.hjerter3();
break;
case 42:
cout << spillernavn[a] << endl;
Hjerter.hjerter4();
break;
case 43:
cout << spillernavn[a] << endl;
Hjerter.hjerter5();
break;
case 44:
cout << spillernavn[a] << endl;
Hjerter.hjerter6();
break;
case 45:
cout << spillernavn[a] << endl;
Hjerter.hjerter7();
break;
case 46:
cout << spillernavn[a] << endl;
Hjerter.hjerter8();
break;
case 47:
cout << spillernavn[a] << endl;
Hjerter.hjerter9();
break;
case 48:
cout << spillernavn[a] << endl;
Hjerter.hjerter10();
break;
case 49:
cout << spillernavn[a] << endl;
Hjerter.hjerterKnaegt();
break;
case 50:
cout << spillernavn[a] << endl;
Hjerter.hjerterDame();
break;
default:
cout << spillernavn[a] << endl;
konger++;
Hjerter.hjerterKonge();
if (konger == 4)
{
cout << "\\nSidste konge. Bund inden naeste runde.\\n";
cin.get();
}
else
cout << "\\nNr. " << konger << " af 4.";
break;
}
cin.get();
}
system("CLS");
cout << "\\nIgen? (Y/N)\\n";
cin >> restart;
cin.get();
} while(restart == 'Y' || restart == 'y');
return EXIT_SUCCESS;
}
An eye for an eye only ends up making the whole world blind!
[Redigeret d. 12/09-05 22:43:07 af Mikkel Kjeldsen]