Advertisement
Guest User

Untitled

a guest
Mar 29th, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.31 KB | None | 0 0
  1. #include "primlib.h"
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. #define PEGS 3
  6. #define DISCS 3
  7.  
  8. #define DISTANCE_BETWEEN_PEGS (screenWidth()/PEGS+1)
  9.  
  10. #define SDLKTODECIMAL -49
  11. #define ZEROTOTEN 10
  12.  
  13. //Global Variables
  14. float MULTIPLIER = 0.9;
  15. int POWEROFDISCS = DISCS - 1;
  16.  
  17. void STARTING_GAME (int GAME[][DISCS]);
  18. void MOVE_DISC (int GAME[][DISCS]);
  19. int CHECK_KEY (int key, int GAME[][DISCS]);
  20. void check (int GAME[][DISCS]);
  21.  
  22. int main(int argc, char* argv[])
  23. {
  24.    
  25.     int GAME[PEGS][DISCS];
  26.     if(initGraph())
  27.     {
  28.         exit(3);
  29.     }
  30.     STARTING_GAME (GAME);
  31.     check (GAME);
  32.     do
  33.     {
  34.         MOVE_DISC(GAME);
  35.         check (GAME);
  36.     }while (GAME[PEGS-1][0] != 0);
  37.  
  38.     return 0;
  39. }
  40.  
  41.  
  42. void STARTING_GAME (int GAME[][DISCS])
  43. {
  44.     int i, j;
  45.     float changer = DISTANCE_BETWEEN_PEGS;
  46.     for (i=0;i<PEGS;i++)
  47.     {
  48.         for (j=0;j<DISCS;j++)
  49.         {
  50.             if(j==0)
  51.             {
  52.                 GAME[i][j] = changer*pow(MULTIPLIER, POWEROFDISCS)*1.0;
  53.                 POWEROFDISCS--;
  54.             }
  55.             else
  56.             {
  57.                 GAME[i][j] = 0;
  58.             }
  59.         }
  60.     }
  61. }
  62.  
  63. void MOVE_DISC (int GAME[][DISCS])
  64. {
  65.     int from, to, i, j;
  66.     do
  67.     {
  68.         do
  69.         {
  70.             from=getkey();
  71.             from=CHECK_KEY(from, GAME);
  72.             printf ("from = %d\n", from);
  73.         }while(from<0 || from>PEGS-1 || from != SDLK_RETURN);
  74.         do
  75.         {
  76.             to=getkey();
  77.             to=CHECK_KEY(from, GAME);
  78.             printf ("to = %d\n", to);
  79.         }while(to<0 || to>PEGS-1 || to != SDLK_RETURN);
  80.     }while (from != to);
  81.  
  82.     for (i=0;i<DISCS;i++)
  83.     {
  84.         if(GAME[from][i] > 0)
  85.         {
  86.             for (j=0;j<DISCS;j++)
  87.             {
  88.                 if ((GAME[to][j+1] != 0 && GAME[to][j+1] > GAME[from][i]) || GAME[to][DISCS-1] == 0)
  89.                 {
  90.                     GAME[to][j] = GAME[from][i];
  91.                     GAME[from][i] = 0;
  92.                     break;
  93.                 }
  94.             }
  95.             break;
  96.         }
  97.     }
  98. }
  99.  
  100. int CHECK_KEY (int key, int GAME[][DISCS])
  101. {
  102.     if (key == SDLK_RETURN)
  103.     {
  104.         STARTING_GAME(GAME);
  105.     }
  106.     else if (key == SDLK_ESCAPE)
  107.     {
  108.         filledRect(0,0,screenWidth(),screenHeight(),BLACK);
  109.         textout(screenWidth()/2, screenHeight()/2, "Try again", RED);
  110.         updateScreen();
  111.         getkey();
  112.         exit(3);
  113.     }
  114.     else if (key >= SDLK_1 && key <= SDLK_9)
  115.     {
  116.         return key + SDLKTODECIMAL;
  117.     }
  118.     else if (key == SDLK_0)
  119.     {
  120.         key = key + ZEROTOTEN;
  121.         return key + SDLKTODECIMAL;
  122.     }
  123.     else
  124.     {
  125.         return key;
  126.     }
  127. }
  128.  
  129. void check (int GAME[][DISCS])
  130. {
  131.     int i, j;
  132.     for (i=0;i<PEGS;i++)
  133.     {
  134.         for (j=0;j<DISCS;j++)
  135.         {
  136.             printf ("[%d]\t", GAME[i][j]);
  137.         }
  138.     printf ("\n");
  139.     }
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement