Advertisement
Guest User

Untitled

a guest
Jul 28th, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.39 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdbool.h>
  3. #include <assert.h>
  4.  
  5. #define countof(a) (sizeof(a) / sizeof((a)[0]))
  6.  
  7. static char field[3][3];
  8.  
  9. static_assert(countof(field) == countof(field[0]), \
  10.     "Game field must be square");
  11.  
  12. static bool check_combos(size_t x, size_t y, char mark)
  13. {
  14.     const size_t size = countof(field[0]);
  15.    
  16.     // Всегда проверяем текущие строку и столбец.
  17.     bool horz = true;
  18.     bool vert = true;
  19.    
  20.     // Проверяем диагонали, только если попали на диагональ.
  21.     bool maindiag = (x == y);
  22.     bool antidiag = (size - x - 1 == y);
  23.  
  24.     for (size_t i = 0; i < size; i++) {
  25.         // Прячем некрасивые if.
  26.         horz = horz && (field[y][i] == mark);
  27.         vert = vert && (field[i][x] == mark);
  28.         maindiag = maindiag && (field[i][i] == mark);
  29.         antidiag = antidiag && (field[i][size - i - 1] == mark);
  30.     }
  31.    
  32.     if (horz) {
  33.         printf("Player %c completes line %zu!\n", mark, y + 1);
  34.     }
  35.    
  36.     if (vert) {
  37.         printf("Player %c completes column %zu!\n", mark, x + 1);
  38.     }
  39.    
  40.     if (maindiag) {
  41.         printf("Player %c completes main diagonal!\n", mark);
  42.     }
  43.    
  44.     if (antidiag) {
  45.         printf("Player %c completes second diagonal!\n", mark);
  46.     }
  47.    
  48.     return horz || vert || maindiag || antidiag;
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement