Advertisement
Mazamin

Tris

Dec 15th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.86 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAX_NAME_LEN 32
  4.  
  5. void show_array(int (*)[3]);
  6. void insert_xo(int (*)[3], int, int);
  7. int check_win(int (*)[3]);
  8. void get_players_name(char (*)[MAX_NAME_LEN+1]);
  9. void init_array(int (*)[3]);
  10. int get_player_move();
  11.  
  12. main(){
  13.     char name[2][MAX_NAME_LEN+1];
  14.     int array[3][3], player_id=0;
  15.     init_array(array);
  16.     get_players_name(name);
  17.     do{
  18.         system("clear");
  19.         printf("%sIt's your turn!\n", name[player_id]);
  20.         show_array(array);
  21.         insert_xo(array, get_player_move(), player_id);
  22.         player_id^=1; /* change player */
  23.     }while((check_win(array))==0);
  24.     system("clear");
  25.     printf("%s won!\n", name[player_id^1]);
  26.     show_array(array);
  27.     return 0;
  28. }
  29.  
  30. void get_players_name(char (*namePtr)[MAX_NAME_LEN+1]){
  31.     puts("Hi player 1, what's your name?");
  32.     fgets(namePtr[0], MAX_NAME_LEN, stdin);
  33.     system("clear");
  34.     puts("Hi player 2, what's your name?");
  35.     fgets(namePtr[1], MAX_NAME_LEN, stdin);
  36. }
  37.  
  38. void init_array(int (*arrayPtr)[3]){
  39.     int i, j;
  40.     for(i=0;i<3;i++)
  41.         for(j=0;j<3;j++)
  42.             arrayPtr[i][j]=-99;
  43. }
  44.  
  45. void show_array(int (*arrayPtr)[3]){
  46.     int i, j;
  47.     for(i=0;i<3;i++){
  48.         printf("|");
  49.         for(j=0;j<3;j++)
  50.             if(arrayPtr[i][j]<0)
  51.                 printf("%d|", 1+j+3*i);
  52.             else if(arrayPtr[i][j]==0)
  53.                 printf("O|");
  54.             else if(arrayPtr[i][j]==1)
  55.                 printf("X|");
  56.            
  57.         puts("");
  58.     }
  59. }
  60.  
  61. int check_win(int (*arrayPtr)[3]){
  62.     int check_rows(int (*)[3]);
  63.     int check_columns(int (*)[3]);
  64.     int check_diags(int (*)[3]);
  65.     return (check_rows(arrayPtr)+check_columns(arrayPtr)+check_diags(arrayPtr));
  66. }
  67.  
  68. int check_rows(int (*arrayPtr)[3]){
  69.     int i, j, flag=0;
  70.     for(i=0;i<3;i++)
  71.         for(j=0;j<2;j++)
  72.             if((arrayPtr[i][0]+arrayPtr[i][1]+arrayPtr[i][2])==(3*j))
  73.                 flag++;
  74.     return flag;
  75. }
  76.  
  77. int check_columns(int (*arrayPtr)[3]){
  78.     int i, j, flag=0;
  79.     for(i=0;i<3;i++)
  80.         for(j=0;j<2;j++)
  81.             if((arrayPtr[0][i]+arrayPtr[1][i]+arrayPtr[2][i])==(3*j))
  82.                 flag++;
  83.     return flag;
  84. }
  85.  
  86. int check_diags(int (*arrayPtr)[3]){
  87.     int i, j, flag=0;
  88.     for(j=0;j<2;j++)
  89.         if((arrayPtr[0][0]+arrayPtr[1][1]+arrayPtr[2][2])==(3*j))
  90.             flag++;
  91.         else if((arrayPtr[2][0]+arrayPtr[1][1]+arrayPtr[2][0])==(3*j))
  92.             flag++;
  93.     return flag;
  94. }
  95.  
  96. void insert_xo(int (*arrayPtr)[3], int n, int id_player){
  97.     int r=0, c=n;
  98.     while( n>3 ){
  99.         r++;
  100.         n-=3;
  101.     }
  102.     c-=3*r+1;
  103.     arrayPtr[r][c]=id_player;
  104. }
  105.  
  106. int get_player_move(){
  107.     int n;
  108.     do{
  109.             scanf("%d", &n);
  110.             if(n<0||n>9)
  111.                 puts("You have to insert a number in the 1-9 range");
  112.         }while(n<0||n>9);
  113.         return n;
  114. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement