Programmera spel i C++ för nybörjare/Dra kort

Från Wikibooks

Många spel bygger på att använda en kortlek, och att programmera kortspel är faktiskt ett riktigt bra sätt att skapa spel eftersom man kan testa det "live" med en riktig kortlek för att se hur reglerna fungerar i verkligheten. Dessutom kan de lätt byggas ut till ett grafiskt användargränssnitt eftersom det är så få saker som rör på sig i ett kortspel.

Här är en kod jag glatt stulit från ett forum:

http://www.pluggakuten.se/forumserver/viewtopic.php?id=10925


Jag har sedan ombearbetat koden så att den fungerar men för att ära originalförfattaren har jag enbart kommenterat bort den kod han/hon lagt in och som inte behövs, inte raderat den. Uppenbarligen var projektet tänkt att bli mycket, mycket större. I min enkla version blandar man bara kortleken en enda gång och sedan drar datorn och spelaren varsitt kort. Den som får högst kort får ett poäng. Det är bara kortens poängvärde/valör som räknas, inte deras färger. Men att räkna med färgerna också är väl något du som läsare lätt kan programmera in?

Kodens egentliga värde är att man kan se hur en vanlig kortlek skapas och hur man kan blanda den. Från den kortleken kan man sedan skapa i princip vilket kortspel som helst.

//Råkoden kopierad från 
// http://www.pluggakuten.se/forumserver/viewtopic.php?id=10925

//Skriv ut alla char tecken
//Kan vara bra att ha med
//för att kontrollera värdet för de olika kortvalörerna

#include <iostream>
#include <ctime>
#include <string>
#include <sstream>
using namespace std;

struct card {
	string suite;
	int value;
	string name;
};


int main ()
{
	card cards[52] = {
		{"hearts", 2, "Two of Hearts"},
		{"hearts", 3, "Three of Hearts"},
		{"hearts", 4, "Four of Hearts"},
		{"hearts", 5, "Five of Hearts"},
		{"hearts", 6, "Six of Hearts"},
		{"hearts", 7, "Seven of Hearts"},
		{"hearts", 8, "Eight of Hearts"},
		{"hearts", 9, "Nine of Hearts"},
		{"hearts", 10, "Ten of Hearts"},
		{"hearts", 11, "Jack of Hearts"},
		{"hearts", 12, "Queen of Hearts"},
		{"hearts", 13, "King of Hearts"},
		{"hearts", 14, "Ess of Hearts"},
		{"spades", 2, "Two of Spades"},
		{"spades", 3, "Three of Spades"},
		{"spades", 4, "Four of Spades"},
		{"spades", 5, "Five of Spades"},
		{"spades", 6, "Six of Spades"},
		{"spades", 7, "Seven of Spades"},
		{"spades", 8, "Eight of Spades"},
		{"spades", 9, "Nine of Spades"},
		{"spades", 10, "Ten of Spades"},
		{"spades", 11, "Jack of Spades"},
		{"spades", 12, "Queen of Spades"},
		{"spades", 13, "King of Spades"},
		{"spades", 14, "Ess of Spades"},
		{"diamonds", 2, "Two of Diamonds"},
		{"diamonds", 3, "Three of Diamonds"},
		{"diamonds", 4, "Four of Diamonds"},
		{"diamonds", 5, "Five of Diamonds"},
		{"diamonds", 6, "Six of Diamonds"},
		{"diamonds", 7, "Seven of Diamonds"},
		{"diamonds", 8, "Eight of Diamonds"},
		{"diamonds", 9, "Nine of Diamonds"},
		{"diamonds", 10, "Ten of Diamonds"},
		{"diamonds", 11, "Jack of Diamonds"},
		{"diamonds", 12, "Queen of Diamonds"},
		{"diamonds", 13, "King of Diamonds"},
		{"diamonds", 14, "Ess of Diamonds"},
		{"clubs", 2, "Two of Clubs"},
		{"clubs", 3, "Three of Clubs"},
		{"clubs", 4, "Four of Clubs"},
		{"clubs", 5, "Five of Clubs"},
		{"clubs", 6, "Six of Clubs"},
		{"clubs", 7, "Seven of Clubs"},
		{"clubs", 8, "Eight of Clubs"},
		{"clubs", 9, "Nine of Clubs"},
		{"clubs", 10, "Ten of Clubs"},
		{"clubs", 11, "Jack of Clubs"},
		{"clubs", 12, "Queen of Clubs"},
		{"clubs", 13, "King of Clubs"},
		{"clubs", 14, "Ess of Clubs"},

	};


	bool used[52]; //mitt försök till slumpa kort och lägga de dragna korten åt sidan.
	for(int x = 0; x<52; x++)
	{
		used[x] = false;
	}
	

	srand(time(NULL));
	int slumptal = rand() % 52;
	int slumptal2 = rand() % 52;

	int highestCardPlayer;
	int highestCardComputer;
	highestCardPlayer = slumptal;
	if(used[slumptal]==true)
	{

	}

	highestCardComputer = slumptal2;
	if(used[slumptal2]==true)
	{

	}

	string player1;
	string computer ="computer";

	cout << "Welcome to this card game!" <<"\n" << endl;
	cout << "Player1 , please type in your name;" << "\n" <<endl;
	cin >>player1;
	cout<< " Welcome " <<player1<<"."<<endl<< endl;
	cout << " Let the game begin!"<<endl<<endl;
	cin.get();
	
	bool loop=true;
	int playerwins=0;
	int computerwins=0;
	int playerloses=0;
	int computerloses=0;
	bool omstartloop=true;
	
	while(omstartloop==true)
	{

		while(loop==true)
		{
			cout << "Here comes your card!" << "\n" <<endl;
			cout << "Card: " << cards[slumptal].name << endl;
			cout <<player1 << ", You get the card: " <<cards[highestCardPlayer].name <<endl;
			cin.ignore();

			cout <<computer<<", here comes your card! "<<"\n"<<endl;
			cout << "Card: " << cards[slumptal2].name << endl;
			cout <<computer << " You get the card: " <<cards[highestCardComputer].name <<endl;
			cin.ignore();
			cin.get();

			if(cards[highestCardPlayer].value>cards[highestCardComputer].value)
			{
				cout <<player1 << " You win! Maybe you win will win it all! " <<endl;
				playerwins++;
				computerloses++;

				cin.ignore();
				cin.get();
			}
			else if(cards[highestCardPlayer].value<cards[highestCardComputer].value)
			{
				cout <<player1 << " You lost! Watch out, maybe you will lose the game" <<endl;
				computerwins++;
				playerloses++;

				cin.ignore();
				cin.get();
			}
			else
			{
				{
					cout <<player1 << " Its a draw!" <<endl;
				}

				cin.ignore();
				cin.get();
			}
			
			if(playerwins==2)
			{
				cout <<player1 << " You have won the whole game! Good for you! ";
			}
			
			if (computerwins==2)
			{
				cout << "You lost the game! Better luck next time!" <<endl;
			}
			
			cout <<player1 << " Your total wins are: "<<playerwins<<"" << endl;
			cout <<player1 << " Your total loses are: "<<playerloses<<"" << endl;
			cout <<computer <<" Your total wins are: " <<computerwins<<"" <<endl;
			cout <<computer <<" Your total loses are: "<<computerloses<<"" <<endl;

			cout << "Do you want to play again? y/n?" <<endl;
			char omstartinput;
			cin >> omstartinput;
			
			if(omstartinput=='y')
			{
			
			}
			else
			{
				loop=false;
			}
		}
	}
}