xTetris-Game
Loading...
Searching...
No Matches
manageStruct.c
Go to the documentation of this file.
1#include <stdio.h>
2#include <stdlib.h>
3#include <wchar.h>
4
5#include "manageStruct.h"
6#include "common.h"
7#include "definitions.h"
8#include "struct.h"
9
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}
33
35
36 int i;
37
38 for(i=0; i < HEIGHT; i++){
39 free(board[i]);
40 }
41
42 free(board);
43}
44
45
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}
57
61
62
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}
190
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 WIDTH
Definition definitions.h:6
#define TETRO_ROT
Definition definitions.h:9
#define TETRO_BOX
Definition definitions.h:13
#define N_PIECES
Definition definitions.h:8
#define TETRO_DIM
Definition definitions.h:10
#define EMPTY_BOX
Definition definitions.h:14
#define HEIGHT
Definition definitions.h:5
BoardPtr initializeBoard(void)
Allocate memory for BoardPtr struct.
void destroyTetromino(TetrominoPtr parts)
Free the TetrominoPtr struct passed as parameter.
void destroyBoard(BoardPtr board)
Free the BoardPtr struct passed as parameter.
TetrominoPtr initializeTetrominoes(void)
Allocate memory for TetraminoPtr struct.
MovePtr initializeMove(void)
Allocate memory for MovePtr struct.
void destroyMove(MovePtr storeMove)
Free the MovePtr struct passed as parameter.
Definition struct.h:5
int status
Definition struct.h:6
Definition struct.h:10
int rotation
Definition struct.h:12