xTetris-Game
Loading...
Searching...
No Matches
Functions
manageStruct.h File Reference
#include "struct.h"

Go to the source code of this file.

Functions

BoardPtr initializeBoard (void)
 Allocate memory for BoardPtr struct.
 
void destroyBoard (BoardPtr board)
 Free the BoardPtr struct passed as parameter.
 
MovePtr initializeMove (void)
 Allocate memory for MovePtr struct.
 
void destroyMove (MovePtr storeMove)
 Free the MovePtr struct passed as parameter.
 
TetrominoPtr initializeTetrominoes (void)
 Allocate memory for TetraminoPtr struct.
 
void destroyTetromino (TetrominoPtr parts)
 Free the TetrominoPtr struct passed as parameter.
 

Function Documentation

◆ destroyBoard()

void destroyBoard ( BoardPtr board)

Free the BoardPtr struct passed as parameter.

Parameters
[in]boardStruct that need to be freed.

Definition at line 34 of file manageStruct.c.

34 {
35
36 int i;
37
38 for(i=0; i < HEIGHT; i++){
39 free(board[i]);
40 }
41
42 free(board);
43}
#define HEIGHT
Definition definitions.h:5

◆ destroyMove()

void destroyMove ( MovePtr storeMove)

Free the MovePtr struct passed as parameter.

Parameters
[in]storeMoveStruct that need to be freed.

Definition at line 58 of file manageStruct.c.

58 {
59 free(storeMove);
60}

◆ destroyTetromino()

void destroyTetromino ( TetrominoPtr parts)

Free the TetrominoPtr struct passed as parameter.

Parameters
[in]boardStruct that need to be freed.

Definition at line 191 of file manageStruct.c.

191 {
192
193 int i, j, k;
194
195 for(i=0; i < N_PIECES; i++){
196 for(j=0; j < TETRO_ROT; j++){
197 for(k=0; k < TETRO_DIM; k++){
198 free(parts[i][j][k]);
199 }
200 free(parts[i][j]);
201 }
202 free(parts[i]);
203 }
204 free(parts);
205}
#define TETRO_ROT
Definition definitions.h:9
#define N_PIECES
Definition definitions.h:8
#define TETRO_DIM
Definition definitions.h:10

◆ initializeBoard()

BoardPtr initializeBoard ( void )

Allocate memory for BoardPtr struct.

Parameters
[out]matStruct empty at the start for the tetriminos cells.

Definition at line 10 of file manageStruct.c.

10 {
11
12 int i, j;
13
14 BoardPtr mat = (struct Cell **) malloc(HEIGHT * sizeof(struct Cell *));
15
16 if(mat == NULL) {
17 wprintf(L"Error! memory not allocated.\n");
18 exit(EXIT_FAILURE);
19 }
20
21 for (i = 0; i < HEIGHT; i++) {
22 mat[i] = (struct Cell *) malloc(WIDTH * sizeof(struct Cell));
23 if(mat[i] == NULL) {
24 wprintf(L"Error! memory not allocated.\n");
25 exit(EXIT_FAILURE);
26 }
27 for (j = 0; j < WIDTH; j++)
28 mat[i][j].status = EMPTY_BOX;
29 }
30
31 return mat;
32}
#define WIDTH
Definition definitions.h:6
#define EMPTY_BOX
Definition definitions.h:14
Definition struct.h:5
int status
Definition struct.h:6

◆ initializeMove()

MovePtr initializeMove ( void )

Allocate memory for MovePtr struct.

Parameters
[out]storeMoveStruct that contains all the info about a single move (coordinates, shape and rotation).

Definition at line 46 of file manageStruct.c.

46 {
47
48 MovePtr storeMove = (struct Move *) malloc(sizeof(struct Move));
49
50 if(storeMove == NULL) {
51 wprintf(L"Error! memory not allocated.\n");
53 }
54
55 return storeMove;
56}
Definition struct.h:10
int rotation
Definition struct.h:12

◆ initializeTetrominoes()

TetrominoPtr initializeTetrominoes ( void )

Allocate memory for TetraminoPtr struct.

Parameters
[out]partsStruct that contains all tetrominoes shapes with all possible rotations: [N_PIECES][TETRO_ROT][TETRO_DIM][TETRO_DIM].

Definition at line 63 of file manageStruct.c.

63 {
64
65 int i, j, k, l;
66
67
68 TetrominoPtr parts = (struct TetrominoCell ****) malloc(N_PIECES * sizeof(struct TetrominoCell ***));
69
70 if(parts == NULL) {
71 wprintf(L"Error! memory not allocated.\n");
72 exit(EXIT_FAILURE);
73 }
74 for(i=0; i < N_PIECES; i++){
75 parts[i] = (struct TetrominoCell ***) malloc(TETRO_ROT * sizeof(struct TetrominoCell **));
76 if(parts[i] == NULL) {
77 wprintf(L"Error! memory not allocated.\n");
78 exit(EXIT_FAILURE);
79 }
80 for(j=0; j < TETRO_ROT; j++){
81 parts[i][j] = (struct TetrominoCell **) malloc(TETRO_DIM * sizeof(struct TetrominoCell *));
82 if(parts[i][j] == NULL) {
83 wprintf(L"Error! memory not allocated.\n");
84 exit(EXIT_FAILURE);
85 }
86 for(k=0; k < TETRO_DIM; k++){
87 parts[i][j][k] = (struct TetrominoCell *) malloc(TETRO_DIM * sizeof(struct TetrominoCell));
88 if(parts[i][j][k] == NULL) {
89 wprintf(L"Error! memory not allocated.\n");
90 exit(EXIT_FAILURE);
91 }
92 for(l=0; l < TETRO_DIM; l++){
93 parts[i][j][k][l].status = EMPTY_BOX;
94 }
95 }
96 }
97 }
98
99 /* I SHAPE */
100 for (i=0; i<TETRO_DIM-1; i++){
101 parts[0][0][i][2].status = TETRO_BOX;
102 parts[0][1][2][i].status = TETRO_BOX;
103 parts[0][2][i][2].status = TETRO_BOX;
104 parts[0][3][2][i].status = TETRO_BOX;
105 }
106
107 /* J SHAPE */
108 for (i=1; i<TETRO_DIM-1; i++){
109 parts[1][0][2][i].status = TETRO_BOX;
110 parts[1][1][i][2].status = TETRO_BOX;
111 parts[1][2][2][i].status = TETRO_BOX;
112 parts[1][3][i][2].status = TETRO_BOX;
113 }
114 parts[1][0][1][1].status = TETRO_BOX;
115 parts[1][1][1][3].status = TETRO_BOX;
116 parts[1][2][3][3].status = TETRO_BOX;
117 parts[1][3][3][1].status = TETRO_BOX;
118
119 /* L SHAPE */
120 for (i=1; i<TETRO_DIM-1; i++){
121 parts[2][0][2][i].status = TETRO_BOX;
122 parts[2][1][i][2].status = TETRO_BOX;
123 parts[2][2][2][i].status = TETRO_BOX;
124 parts[2][3][i][2].status = TETRO_BOX;
125 }
126 parts[2][0][1][3].status = TETRO_BOX;
127 parts[2][1][3][3].status = TETRO_BOX;
128 parts[2][2][3][1].status = TETRO_BOX;
129 parts[2][3][1][1].status = TETRO_BOX;
130
131 /* O SHAPE */
132 for (i=0; i<TETRO_ROT; i++){
133 for (j=1; j<TETRO_DIM-2; j++){
134 for (k=1; k<TETRO_DIM-2; k++){
135 parts[3][i][j][k].status = TETRO_BOX;
136 }
137 }
138 }
139
140 /* S SHAPE */
141 for (j=1; j<TETRO_DIM-2; j++){
142 for (k=1; k<TETRO_DIM-1; k++){
143 if(!((j==1 && k==1) || (j==2 && k==3))){
144 parts[4][0][j][k].status = TETRO_BOX;
145 parts[4][2][j][k].status = TETRO_BOX;
146 }
147 }
148 }
149 for (j=1; j<TETRO_DIM-1; j++){
150 for (k=1; k<TETRO_DIM-2; k++){
151 if(!((j==1 && k==2) || (j==3 && k==1))){
152 parts[4][1][j][k].status = TETRO_BOX;
153 parts[4][3][j][k].status = TETRO_BOX;
154 }
155 }
156 }
157
158 /* T SHAPE */
159 for (i=1; i<TETRO_DIM-1; i++){
160 parts[5][0][2][i].status = TETRO_BOX;
161 parts[5][1][i][2].status = TETRO_BOX;
162 parts[5][2][2][i].status = TETRO_BOX;
163 parts[5][3][i][2].status = TETRO_BOX;
164 }
165 parts[5][0][1][2].status = TETRO_BOX;
166 parts[5][1][2][3].status = TETRO_BOX;
167 parts[5][2][3][2].status = TETRO_BOX;
168 parts[5][3][2][1].status = TETRO_BOX;
169
170 /* Z SHAPE */
171 for (j=1; j<TETRO_DIM-2; j++){
172 for (k=1; k<TETRO_DIM-1; k++){
173 if(!((j==2 && k==1) || (j==1 && k==3))){
174 parts[6][0][j][k].status = TETRO_BOX;
175 parts[6][2][j][k].status = TETRO_BOX;
176 }
177 }
178 }
179 for (j=1; j<TETRO_DIM-1; j++){
180 for (k=1; k<TETRO_DIM-2; k++){
181 if(!((j==1 && k==1) || (j==3 && k==2))){
182 parts[6][1][j][k].status = TETRO_BOX;
183 parts[6][3][j][k].status = TETRO_BOX;
184 }
185 }
186 }
187
188 return parts;
189}
#define TETRO_BOX
Definition definitions.h:13