jag

tetoris_c

public

Small block game in C

Star0
Watch0
6642d1d9ca12fe4a7b7732a94430c68fb49956ce
1
ssh://git@git.jaglekon.de:30/jag/tetoris_c.git
draw.cC104 lines2.1 KB
1
#include "main.h"
2
3
4
#define RED "\033[38;2;255;0;0m"
5
#define GREEN "\033[38;2;0;255;0m"
6
#define BLUE "\033[38;2;0;0;255m"
7
#define YELLOW "\033[38;2;255;255;0m"
8
#define MAGENTA "\033[38;2;255;0;255m"
9
#define TEAL "\033[38;2;0;255;255m"
10
#define PURPLE "\033[38;2;127;0;255m"
11
#define WHITE "\033[38;2;255;255;255m"
12
13
14
void draw_color (tetromino current_square) {
15
  switch (current_square) {
16
    case I_PIECE:
17
      printf("%s", RED);
18
      break;
19
    case J_PIECE:
20
      printf("%s", GREEN);
21
      break;
22
    case L_PIECE:
23
      printf("%s", BLUE);
24
      break;
25
    case O_PIECE:
26
      printf("%s", YELLOW);
27
      break;
28
    case S_PIECE:
29
      printf("%s", MAGENTA);
30
      break;
31
    case T_PIECE:
32
      printf("%s", TEAL);
33
      break;
34
    case Z_PIECE:
35
      printf("%s", PURPLE);
36
      break;
37
  } 
38
}
39
40
41
void draw_board(piece current_piece, bool *blink, bool is_piece) {
42
43
  uint8_t i, j;
44
45
46
  printf("\033[H");
47
  printf("┏");
48
  for (i = 0; i < FIELD_WIDTH; i++)
49
    printf("━━");
50
  printf("┓\n");
51
52
53
  for (i = 0; i < FIELD_HEIGHT; i++) {
54
    
55
    printf("┃");
56
57
    for (j = 0; j < FIELD_WIDTH; j++) {
58
      
59
      if ( blink != NULL && blink[i]) {
60
  
61
        printf("%s", WHITE);
62
      } else {
63
64
65
        tetromino current_square = current_square = playfield[i][j + BORDER_WIDTH];
66
67
        if (is_piece) {
68
69
          uint8_t k, l;
70
          
71
          for (k = 0; k < current_piece.size; k++) {
72
            for (l = 0; l < current_piece.size; l++) {
73
74
              coord points = find_direction(current_piece, l, k);
75
76
              if (
77
                i == current_piece.y + points.y && 
78
                j == current_piece.x + points.x - BORDER_WIDTH && 
79
                current_piece.piece[k][l]) 
80
              {
81
                current_square = current_piece.name;
82
              }
83
            }
84
          }
85
        }
86
87
        if (current_square <= EMPTY || current_square > Z_PIECE) {
88
          printf("· ");
89
          continue;
90
        }
91
92
        draw_color(current_square);
93
      }
94
        
95
      printf("██\033[0m");
96
    }
97
    printf("┃\n");
98
  }
99
100
  printf("┗");
101
  for (i = 0; i < FIELD_WIDTH; i++)
102
    printf("━━");
103
  printf("┛\n");
104
}