Você está na página 1de 6

/* Michael Dinh Nguyen, Shayon Zadeh, and Sahil Sharma Mrs.

Petr, Computer Programming 1, Period 3 3/22/12 This program will simulate a game of Uno */ #include<conio.h> #include<iostream> #include<string> #include<vector> #include<ctime> using namespace std; struct Card { string color, status; int number; }; void CreateDeck(vector<Card> &drawPile); void Shuffle(vector<Card> &drawPile); void ShowCard(const Card &card); void ShowStack(const vector<Card> &stack); void DealHand(vector<Card> &drawPile, vector<Card> hand); void NewGame(vector<Card> &discardPile, vector<Card> &drawPile, vector<Card> &userHand, vector<Card> &computerHand); void UpdateHand(vector<Card> &hand, int i, vector<Card> &discardPile); void PlayerTurn(vector<Card> &hand, vector<Card> &discardPile, vector<Card> &drawPile); void FinishActions(vector<Card> &discardPile, vector<Card> &drawPile, vector<Card> &hand, int &turn); void ComputerTurn(vector<Card> &discardPile, vector<Card> &drawPile, vector<Card> &computerHand); void Transfer(vector<Card> &drawPile, vector<Card> &discardPile); int main() { srand(time(0)); string cont="yes"; Card card; int turn=1; vector<Card> discardPile; vector<Card> drawPile; vector<Card> userHand; vector<Card> computerHand; while(cont=="yes") { NewGame(discardPile, drawPile, userHand, computerHand); while(userHand.size()>0 || computerHand.size()>0) { if(turn==1) { PlayerTurn(userHand, discardPile, drawPile); FinishActions(discardPile, drawPile, userHand, turn); system("cls"); }

else { ComputerTurn(discardPile, drawPile, computerHand); FinishActions(discardPile, drawPile, userHand, turn); } if(drawPile.size()==0) Transfer(drawPile, discardPile); } cout << "Type ""yes"" to play again and ""no"" to stop"; getline(cin, cont); system("cls"); } } void CreateDeck(vector<Card> &drawPile) { Card card; int col=1; int number; for(int i=0; i<4; i++) { card.status=""; switch(col) { case 1: card.color="Blue"; break; case 2: card.color="Green"; break; case 3: card.color="Red"; break; default: card.color="Yellow"; } for(int j=0; j<19; j++)//This generates the number cards { if(j==0) card.number=j; else { number=j+1; card.number=number/2; } drawPile.push_back(card); } for(int j=0; j<2; j++)//this generates the draw two cards { card.status="draw two"; card.number=-1; drawPile.push_back(card); } for(int j=0; j<2; j++)//this generates the draw skip cards { card.status="skip"; card.number=-1; drawPile.push_back(card);

} col++; card.status="wild";//This will make the wild card card.color=""; card.number=-1; drawPile.push_back(card); card.status="wild";//This will make the wild draw four card card.color="draw four"; card.number=-1; drawPile.push_back(card); } } void Shuffle(vector<Card> &drawPile) { int current; int number; Card hold; for(int i=0; i<2; i++) { for(int i=0; i<drawPile.size(); i++) { int number=rand()%drawPile.size(); hold=drawPile[i]; drawPile[i]=drawPile[number]; drawPile[number]=hold; } } } void ShowCard(const Card &card) { if(card.number!=-1) cout <<"["<< card.number <<" "<< card.color <<" ]"<< endl; else cout <<"["<< card.status <<" "<< card.color <<" ]"<< endl; } void ShowStack(const vector<Card> &stack) { for(int i=0; i<stack.size(); i++) { cout <<"["<< i <<"]"; ShowCard(stack[i]); } } void DealHand(vector<Card> &drawPile, vector<Card> hand) { for(int i=0; i<7; i++) { hand.push_back(drawPile.back()); drawPile.pop_back(); } }

void NewGame(vector<Card> &discardPile, vector<Card> &drawPile, vector<Card> &userHand, vector<Card> &computerHand) { discardPile.clear(); drawPile.clear(); userHand.clear(); computerHand.clear(); CreateDeck(drawPile); DealHand(drawPile, userHand); DealHand(drawPile, computerHand); discardPile.push_back(drawPile.back()); } void UpdateHand(vector<Card> &hand, int i, vector<Card> &discardPile) { discardPile.push_back(hand[i]); hand.erase(hand.begin()+i); } void PlayerTurn(vector<Card> &hand, vector<Card> &discardPile, vector<Card> &drawPile) { int card; string color; int valid=0; Card topCard=discardPile.back(); cout <<"Hand: "<< endl; ShowStack(hand); cout << endl; cout <<"Top Card: "<< endl; ShowCard(discardPile.back()); cout << endl; while(valid==0) { cout <<"Which card to discard? (-1 to draw instead): "; cin >> card; cin.ignore(); if(hand[card].status=="") { if(hand[card].color!=topCard.color || hand[card].number!=topCard.number) { cout <<"Invalid match - choose again."<< endl; valid=0; } else { UpdateHand(hand, card, discardPile); valid=1; } } else { if(hand[card].status=="skip") { if(hand[card].color!=topCard.color || hand[card].number!=topCard.number) { cout <<"Invalid match - choose again."<< endl;

valid=0; } else { UpdateHand(hand, card, discardPile); valid=1; } } else { UpdateHand(hand, card, discardPile); cout <<"Color of the Wild Card(Blue, Green, Red, Yellow): "; getline(cin, color); discardPile[discardPile.size()-1].color==color; valid=1; } } } } void FinishActions(vector<Card> &discardPile, vector<Card> &drawPile, vector<Card> &hand, int&turn) { Card topCard=discardPile.back(); if(topCard.status=="") { } if(topCard.status!="skip") { if(turn==2) turn-=1; else turn+=1; } if(topCard.number=="draw four") { for(int i=0; i<4; i++) { hand.push_back(drawPile[drawPile.size()-1]); drawPile.pop_back(); } } } void ComputerTurn(vector<Card> &discardPile, vector<Card> &drawPile, vector<Card> &computerHand) { int size=computerHand.size(); int i=0; int pos; } void Transfer(vector<Card> &drawPile, vector<Card> &discardPile) { vector<Card> newPile=discardPile; newPile.pop_back(); drawPile=newPile;

discardPile.erase(discardPile.begin(), discardPile.size()-2); Shuffle(drawPile); }

Você também pode gostar