Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <math.h>
- #include <string.h>
- #include <stdlib.h>
- const char ranks[] = {'2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K', 'A'};
- const char suits[] = {'H', 'D', 'S', 'C'};
- //Function that gets the index of input character rank.
- int getRankIndex(char c){
- int arrlength = (sizeof(ranks) / sizeof(ranks[0]));
- for(int i = 0;i<arrlength;i++ ){
- if(c==ranks[i]){
- return i;
- }
- }
- }
- /*
- Function that checks if a character is a valid rank or not
- */
- //function that compares the 4 cards and returns 1 if player 1 wins, 2 if player 2 etc.
- int compareCards(char rank1, char rank2, char suit1, char suit2, char rank3, char suit3, char rank4, char suit4, char trumpsuit){
- if( (suit1==trumpsuit) && (suit2!= trumpsuit) && (suit3!= trumpsuit) && (suit4!= trumpsuit) )
- {
- return 1;
- //suit1 won
- } else if( (suit1!=trumpsuit) && (suit2== trumpsuit) && (suit3!= trumpsuit) && (suit4!= trumpsuit) )
- {
- return 2;
- //suit2 won
- } else if( (suit1!=trumpsuit) && (suit2!= trumpsuit) && (suit3== trumpsuit) && (suit4!= trumpsuit) )
- {
- return 3;
- //suit3 won
- } else if( (suit1!=trumpsuit) && (suit2!= trumpsuit) && (suit3!= trumpsuit) && (suit4== trumpsuit) ){
- return 4;
- //suit4 won
- //the else nested inside makes it so if suit1==suit2 and rank1==rank2 1 wins because of suit led logic as specified in question 8
- }else if((suit1==suit2) && (suit2==suit3)){
- if(getRankIndex(rank2)>getRankIndex(rank1)){
- if(getRankIndex(rank3)>getRankIndex(rank2)){
- return 3;
- }
- else if(getRankIndex(rank2)>getRankIndex(rank3)){
- return 2;
- }
- }
- else if(getRankIndex(rank3)>getRankIndex(rank1)){
- return 3;
- }
- else if(getRankIndex(rank3)<getRankIndex(rank1)){
- return 1;
- }
- }
- else if((suit1==suit2) && (suit2==suit3) && (suit3==suit4)){
- if(getRankIndex(rank2)>getRankIndex(rank1)){
- if((getRankIndex(rank3)>getRankIndex(rank2)) && (getRankIndex(rank3)>getRankIndex(rank4))){
- return 3;
- }
- else if((getRankIndex(rank2)>getRankIndex(rank3)) && (getRankIndex(rank2)>getRankIndex(rank4))){
- return 2;
- }
- }
- else if(getRankIndex(rank3)>getRankIndex(rank1)){
- return 3;
- }
- else if(getRankIndex(rank3)<getRankIndex(rank1)){
- return 1;
- }
- }
- else if( suit1==suit2 )
- {
- if(getRankIndex(rank2)>getRankIndex(rank1)){
- return 2;
- }
- else {
- return 1;
- }
- } else if( suit1==suit3 ){
- if(getRankIndex(rank1)<getRankIndex(rank3)){
- return 3;
- }
- else {
- return 1;
- }
- } else if( suit1==suit4 ){
- if(getRankIndex(rank1)>getRankIndex(rank4)){
- return 4;
- }
- else {
- return 1;
- }
- } else if( suit2==suit3 ){
- if(getRankIndex(rank2)>getRankIndex(rank3)){
- return 2;
- }
- else {
- return 3;
- }
- } else if( suit2==suit4 ){
- if(getRankIndex(rank2)>getRankIndex(rank4)){
- return 2;
- }
- else{
- return 4;
- }
- } else if( suit3==suit4 ){
- if(getRankIndex(rank3)>getRankIndex(rank4)){
- return 3;
- }
- else{
- return 4;
- }
- }
- } // end of function compareCards
- //Function to check if a character is a valid rank.
- char isValidRank(char c){
- char result='0';
- int lengthofranks = sizeof(ranks) / sizeof(ranks[0]);
- int i = 0;
- int found = 0;
- while (i<lengthofranks & !found)
- {
- if(c==ranks[i]){
- result = '1';
- found = 1;
- }
- i++;
- }
- //returns '1' if char c is in ranks[], '0' if it isnt.
- return result;
- }
- /*
- Function that checks if a character is a valid suit or not
- */
- char isValidSuit(char c){
- char result='0';
- int lengthofsuits = sizeof(suits) / sizeof(suits[0]);
- int i = 0;
- int found = 0;
- while (i<lengthofsuits & !found)
- {
- if(c==suits[i]){
- result = '1';
- found = 1;
- }
- i++;
- }
- //returns 1 if 'c' is in suit[], 0 if it isnt.
- return result;
- }
- /*
- Returns char if valid suit is entered
- */
- char getTrump(){
- int errormsg = 0;
- int flagforisvalidsuit;
- char trumpsuit[10];
- char trump_suit;
- char flag1;
- do{
- if(errormsg){
- printf("Try again please.. you entered a invalid suit\n");
- }
- printf("What is the trump suit?\n");
- scanf(" %s", trumpsuit);
- trump_suit = trumpsuit[0];
- flag1 = isValidSuit(trump_suit);
- if(flag1=='0' || (strlen(trumpsuit) != 1)){
- flagforisvalidsuit = 1;
- errormsg = 1;
- } else if((flag1 == '1') && (strlen(trumpsuit) == 1)){
- flagforisvalidsuit = 0;
- printf("Successfully added %c as trump suit.\n",trumpsuit[0]);
- return trump_suit;
- }
- } while(flagforisvalidsuit);
- // never gets out of while loop, just used this for debugging.
- printf("out of while loop");
- } // end of function getTrump
- int main()
- {
- char trump_suit = getTrump();
- char player1_card[2];
- char player2_card[2];
- char player3_card[2];
- char player4_card[2];
- char player1_rank;
- char player1_suit;
- char player2_rank;
- char player2_suit;
- char player3_rank;
- char player3_suit;
- char player4_rank;
- char player4_suit;
- char flagforrank;
- char flagforsuit;
- int question1flag = 1;
- int question2flag = 0;
- int question3flag = 0;
- int question4flag = 0;
- int flagloop = 1;
- while(flagloop){
- if(question1flag){
- printf("Enter player 1's card(Rank followed by suit): \n");
- scanf(" %s",player1_card);
- flagforrank = isValidRank(player1_card[0]);
- flagforsuit = isValidSuit(player1_card[1]);
- if(player1_card[0] == '.'){
- exit(0);
- }
- if((flagforrank=='0') || (flagforsuit=='0') || (strlen(player1_card)!=2)){
- printf("Invalid Card Please Re Enter.");
- } else{
- player1_rank = player1_card[0];
- player1_suit = player1_card[1];
- question1flag = 0;
- question2flag = 1;
- }
- }
- if(question2flag){
- printf("Enter player 2's card(Rank followed by suit): \n");
- scanf(" %s",player2_card);
- flagforrank = isValidRank(player2_card[0]);
- flagforsuit = isValidSuit(player2_card[1]);
- if(player2_card[0] == '.'){
- exit(0);
- }
- if((flagforrank=='0') || (flagforsuit=='0') || (strlen(player2_card)!=2)){
- printf("Invalid Card Please Re Enter.");
- } else{
- player2_rank = player2_card[0];
- player2_suit = player2_card[1];
- question2flag = 0;
- question3flag = 1;
- }
- }
- if(question3flag){
- printf("Enter player 3's card(Rank followed by suit): \n");
- scanf(" %s",player3_card);
- flagforrank = isValidRank(player3_card[0]);
- flagforsuit = isValidSuit(player3_card[1]);
- if(player3_card[0] == '.'){
- exit(0);
- }
- if((flagforrank=='0') || (flagforsuit=='0') || (strlen(player3_card)!=2)){
- printf("Invalid Card Please Re Enter.");
- } else{
- player3_rank = player3_card[0];
- player3_suit = player3_card[1];
- question3flag = 0;
- question4flag = 1;
- }
- }
- if(question4flag){
- printf("Enter player 4's card(Rank followed by suit): \n");
- scanf(" %s",player4_card);
- flagforrank = isValidRank(player4_card[0]);
- flagforsuit = isValidSuit(player4_card[1]);
- if(player4_card[0] == '.'){
- exit(0);
- }
- if((flagforrank=='0') || (flagforsuit=='0') || (strlen(player4_card)!=2)){
- printf("Invalid Card Please Re Enter.");
- } else{
- player4_rank = player4_card[0];
- player4_suit = player4_card[1];
- question4flag = 0;
- flagloop = 0;
- }
- }
- } // end while loop
- printf("%c%c, ",player1_card[0],player1_card[1]);
- printf("%c%c, ",player2_card[0],player2_card[1]);
- printf("%c%c, ",player3_card[0],player3_card[1]);
- printf("%c%c, \n",player4_card[0],player4_card[1]);
- int player_win = compareCards(player1_rank,player2_rank,player1_suit,player2_suit,player3_rank,player3_suit,player4_rank,player4_suit,trump_suit);
- if(player_win==1){
- printf("Winning cards : %c%c",player1_card[0],player1_card[1]);
- }
- else if(player_win==2){
- printf("Winning cards : %c%c",player2_card[0],player2_card[1]);
- }
- else if(player_win==3){
- printf("Winning cards : %c%c",player3_card[0],player3_card[1]);
- }
- else if(player_win==4){
- printf("Winning cards : %c%c",player4_card[0],player4_card[1]);
- }
- return 0;
- } // end of fund player_win
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement