Guest User

Untitled

a guest
Jan 20th, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.31 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. #define ROWS 2
  6. #define COLUMNS 6
  7. #define NUM_OF_CARDS 12
  8. #define CARD_BACK_SYMBOL 88
  9. #define GAMEBOARD_WALLS 124
  10. #define GAMEBOARD_FLOOR_ROOF 45
  11.  
  12. typedef char symbol, number;
  13. typedef unsigned short unShort;
  14.  
  15. typedef struct card
  16. {
  17.     number idNumber;
  18.     number cardFacedUp;
  19.     symbol cardBackSymbol;
  20.     symbol cardFaceSymbol;
  21. }memory;
  22.  
  23. typedef struct player
  24. {
  25.     symbol name[20];
  26.     number points;
  27.     number myTurn;
  28.     number cpu;
  29. }memoryPlayer;
  30.  
  31. void title(void);
  32. unShort meny(void);
  33. void humanVsCpu(void);
  34. void decideWhoWillStart(memoryPlayer *player1, memoryPlayer *player2);
  35. void defineCards(memory cards[]);
  36. void shuffleCards(memory cards[]);
  37. void defineGameBoard(memory gameBoard[][COLUMNS], memory cards[]);
  38. void printGameBoard(memory gameBoard[][COLUMNS]);
  39. void play(memory gameBoard[][COLUMNS], memoryPlayer *player1, memoryPlayer *player2, number *pairs);
  40. void errorMSG(void);
  41.  
  42. number quit;
  43.  
  44. int main(void)
  45. {
  46.     enum {HumVsCpu=1, HumVsHum, Rules, Quit};
  47.     quit=0;
  48.  
  49.     while(!quit)
  50.     {
  51.         title();
  52.         switch(meny())
  53.         {
  54.             case HumVsCpu:
  55.             {
  56.                 printf("You picked Human VS CPU!\n");
  57.                 humanVsCpu();
  58.  
  59.             }
  60.             break;
  61.  
  62.             case HumVsHum:
  63.             {
  64.  
  65.             }
  66.             break;
  67.  
  68.             case Rules:
  69.             {
  70.  
  71.             }
  72.             break;
  73.  
  74.             case Quit:
  75.             {
  76.                 quit=1;
  77.             }
  78.             break;
  79.         }
  80.     }
  81.     return 0;
  82. }
  83. void title(void)
  84. {
  85.     printf("\t-=The awesome Memory game=-\n"
  86.            "\t---------------------------\n\n");
  87. }
  88. unShort meny(void)
  89. {
  90.     unShort choice;
  91.  
  92.     do
  93.     {
  94.         printf("[1] - Human VS CPU\n"
  95.                "[2] - Human VS Human\n"
  96.                "[3] - Rules\n"
  97.                "[4] - Quit\n"
  98.                ": ");
  99.         scanf("%hu", &choice);
  100.         getchar();
  101.         fflush(stdin);
  102.         if(choice<1 || choice>4)
  103.         {
  104.             errorMSG();
  105.         }
  106.     }while(choice<1 || choice>4);
  107.  
  108.     return choice;
  109. }
  110. void humanVsCpu(void)
  111. {
  112.     memory cards[NUM_OF_CARDS];
  113.     memory gameBoard[ROWS][COLUMNS];
  114.     number pairs=NUM_OF_CARDS/2;
  115.     memoryPlayer p1, cpu;
  116.  
  117.  
  118. //    p1.name;
  119.     p1.points=0;
  120.     p1.myTurn=0;
  121.     p1.cpu=0;
  122.  
  123.   //  cpu.name;
  124.     cpu.points=0;
  125.     cpu.myTurn=0;
  126.     cpu.cpu=1;
  127.  
  128.     defineCards(cards);
  129.     shuffleCards(cards);
  130.     defineGameBoard(gameBoard,cards);
  131.     decideWhoWillStart(&p1, &cpu);
  132.     printGameBoard(gameBoard);
  133.     play(gameBoard, &p1, &cpu, &pairs);
  134.  
  135. }
  136. void defineCards(memory cards[])
  137. {
  138.     srand(time(NULL));
  139.  
  140.     unShort numberOfPairs=NUM_OF_CARDS/2;
  141.     symbol pairFaceSymbol[numberOfPairs];
  142.     unShort stepThrou_pairFaceSymbol;
  143.     unShort indexCard;
  144.     symbol setPairSymbol;
  145.     unShort approvedSymbol;
  146.  
  147.     /* setting random symbols to pairFaceSymbol */
  148.     stepThrou_pairFaceSymbol=0;
  149.     while(stepThrou_pairFaceSymbol<numberOfPairs)
  150.     {
  151.         approvedSymbol=1;
  152.         indexCard=0;
  153.         /* Random symbol between 33-126 */
  154.         setPairSymbol=33+rand()%96;
  155.         /* Se if setPairSymbol contains an approved symbol */
  156.         while(indexCard<numberOfPairs)
  157.         {
  158.             if((setPairSymbol==pairFaceSymbol[indexCard])
  159.                ||(setPairSymbol==GAMEBOARD_FLOOR_ROOF)
  160.                ||(setPairSymbol==GAMEBOARD_WALLS)
  161.                ||(setPairSymbol==CARD_BACK_SYMBOL))
  162.             {
  163.                 approvedSymbol=0;
  164.                 indexCard=numberOfPairs;
  165.             }
  166.             indexCard++;
  167.         }
  168.         if(approvedSymbol)
  169.         {
  170.             /* Set setPairSymbol to pairFaceSymbol */
  171.             pairFaceSymbol[stepThrou_pairFaceSymbol]=setPairSymbol;
  172.             stepThrou_pairFaceSymbol++;
  173.         }
  174.     }/* END - setting random symbols to pairFaceSymbol */
  175.  
  176.     /* define cards with symbols back/front and giving
  177.        every card a unique number */
  178.     for(indexCard=0;indexCard<NUM_OF_CARDS;indexCard++)
  179.     {
  180.         cards[indexCard].idNumber=indexCard;
  181.         cards[indexCard].cardFacedUp=0;
  182.         cards[indexCard].cardBackSymbol=CARD_BACK_SYMBOL;
  183.         cards[indexCard].cardFaceSymbol=pairFaceSymbol[indexCard%numberOfPairs];
  184.     }
  185. }
  186.  
  187. void shuffleCards(memory cards[])
  188. {
  189.     /* Shuffle Cards */
  190.     struct card temp[NUM_OF_CARDS];
  191.     unShort randomNumber=0;
  192.     unShort verifyNumber=0;
  193.     unShort index=0;
  194.     unShort counter=0;
  195.     srand(time(NULL));
  196.  
  197.     while(counter<NUM_OF_CARDS)
  198.     {
  199.         verifyNumber=1;
  200.         index=0;
  201.         randomNumber=rand()%NUM_OF_CARDS;
  202.  
  203.         while(index<NUM_OF_CARDS)
  204.         {
  205.             if(randomNumber==temp[index].idNumber)
  206.             {
  207.                 verifyNumber=0;
  208.                 index=NUM_OF_CARDS;
  209.             }
  210.             index++;
  211.         }
  212.         if(verifyNumber)
  213.         {
  214.             /* Set in the card in temp */
  215.             temp[counter]=cards[randomNumber];
  216.             counter++;
  217.         }
  218.     }
  219.     /* Copy back temp to cards */
  220.     index=0;
  221.     for(index=0;index<NUM_OF_CARDS;index++)
  222.     {
  223.         cards[index]=temp[index];
  224.     }
  225. }
  226. void defineGameBoard(memory gameBoard[][COLUMNS], memory cards[])
  227. {
  228.     unShort gameBoardX, gameBoardY, indexCard;
  229.     indexCard=0;
  230.     for(gameBoardY=0;gameBoardY<ROWS;gameBoardY++)
  231.     {
  232.         for(gameBoardX=0;gameBoardX<COLUMNS;gameBoardX++)
  233.         {
  234.             gameBoard[gameBoardY][gameBoardX]=cards[indexCard];
  235.             indexCard++;
  236.         }
  237.     }
  238.  
  239. }
  240. void decideWhoWillStart(memoryPlayer *player1, memoryPlayer *player2)
  241. {
  242.     number choicePlayer;
  243.     srand(time(NULL));
  244.     choicePlayer=1+rand()%2; /* choice 1 or 2 */
  245.     if(choicePlayer==1)
  246.     {
  247.         player1->myTurn=1;
  248.     }
  249.     else
  250.     {
  251.         player2->myTurn=1;
  252.     }
  253. }
  254. void printGameBoard(memory gameBoard[][COLUMNS])
  255. {
  256.     unShort gameBoardX, gameBoardY;
  257.     symbol xSymbol, ySymbol;
  258.     ySymbol=49; /* ASCII-code for 1 */
  259.     xSymbol=65; /* ASCII-code for A */
  260.     printf("   ");
  261.     for(xSymbol=65;xSymbol<COLUMNS;xSymbol++)
  262.     {
  263.         printf("%c ", xSymbol);
  264.     }
  265.     printf("\n");
  266.     for(gameBoardY=0, ySymbol=49;gameBoardY<ROWS;gameBoardY++, ySymbol++)
  267.     {
  268.         printf("%c:", ySymbol);
  269.         for(gameBoardX=0;gameBoardX<COLUMNS;gameBoardX++)
  270.         {
  271.             printf(" ");
  272.             if(gameBoard[gameBoardY][gameBoardX].cardFacedUp)
  273.             {
  274.                 printf("%c", gameBoard[gameBoardY][gameBoardX].cardFaceSymbol);
  275.             }
  276.             else
  277.             {
  278.                 printf("%c", gameBoard[gameBoardY][gameBoardX].cardBackSymbol);
  279.             }
  280.         }
  281.         printf("\n");
  282.     }
  283. }
  284. void play(memory gameBoard[][COLUMNS], memoryPlayer *player1, memoryPlayer *player2, number *pairs)
  285. {
  286.     if(player1->myTurn)
  287.     {
  288.         if(player1->cpu)
  289.         {
  290.             printf("It's CPU's turn\n");
  291.         }
  292.         else
  293.         {
  294.             printf("It's Player1's turn\n");
  295.         }
  296.     }
  297.     else if(player2->myTurn)
  298.     {
  299.         if(player2->cpu)
  300.         {
  301.             printf("It's CPU's turn\n");
  302.         }
  303.         else
  304.         {
  305.             printf("It's Player's turn\n");
  306.         }
  307.     }
  308.  
  309. }
  310. void errorMSG(void)
  311. {
  312.     printf("Invalid input! Please try again.\n");
  313. }
Add Comment
Please, Sign In to add comment