1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
#include "include/common.h"
/* --- Variables --- */
int gameIsStarted = 0;
sfVideoMode mode = {450, 520, 32};
sfRenderWindow* window;
sfEvent event;
sfText* textScore;
sfFont* font;
char *scoreDisp;
sfRectangleShape* fld[20][10];// Array of fld rectangles
sfVector2f fld_rPos[20][10]; // Array of absolute coordinates of fld
// rectangles
int fld_rOutThick = 1; // Field rectangles outline thickness
sfVector2f fld_rSize; // Field rectangles size variable x/y
sfVector2i actiShPos; // Offset active shape relative to fld
sfVector2i fldSize, fldPos;
sfVector2f textScore_pos;
short arrKeys = 0b00000000; // Arrow keys states byte container
int lvlLatency = 500000;
int scoreCurrent = 0;
/* --- Variables End --- */
int main()
{
initAll();
/* Create main window */
window = sfRenderWindow_create(mode,
windowName_conf,
sfResize | sfClose,
NULL
);
if (!window)
return EXIT_FAILURE;
/* Start the game loop */
while (sfRenderWindow_isOpen(window))
{
/* Process events */
while (sfRenderWindow_pollEvent(window, &event))
{
/* Close window : exit */
if (event.type == sfEvtClosed)
sfRenderWindow_close(window);
}
/* Clear the screen */
sfRenderWindow_clear(window, sfBlack);
if (gameIsStarted == 1) {
tTick();
tKeyCtrl();
scoreDisplay(scoreCurrent, textScore);
/* Colorize active cells of fld */
for(int j=0;j<20;j++){
for(int i=0;i<10;i++){
sfRectangleShape_setFillColor(
fld[j][i],
fld_rAttr[j][i].fColor);
sfRectangleShape_setOutlineColor(
fld[j][i],
fld_rAttr[j][i].oColor);
}
}
/*
* Colorize active cells of active shape (overlay only
* active cells above background of fld)
*
*/
for(int j=0;j<4;j++){
for(int i=0;i<4;i++){
if (activeShape[j][i].a != 0){
sfRectangleShape_setFillColor(
fld[j
+actiShPos.y]
[i+actiShPos.x],
activeShape[j][i].fColor
);
sfRectangleShape_setOutlineColor(
fld[j
+actiShPos.y]
[i+actiShPos.x],
activeShape[j][i].oColor
);
}
}
}
/*
* Draw all fld cells
*
*/
for (int j=0;j<fldSize.y;j++){
for(int i=0;i<fldSize.x;i++){
sfRenderWindow_drawRectangleShape(
window,
fld[j][i],
NULL);
}
}
sfRenderWindow_drawText(window, textScore, NULL);
} else {
menuTick();
if (sfKeyboard_isKeyPressed(sfKeyReturn) == 1) {
gameIsStarted = 1;
initAll();
}
menuTick();
/* Draw all fld cells */
for (int j=0;j<fldSize.y;j++){
for(int i=0;i<fldSize.x;i++){
sfRenderWindow_drawRectangleShape(
window,
fld[j][i],
NULL);
}
}
}
/* Update the window */
sfRenderWindow_display(window);
}
/* Just senseless printf */
printf("%d\n", scoreCurrent);
/* Cleanup resources */
for (int j=0;j<fldSize.y;j++){
for(int i=0;i<fldSize.x;i++){
sfRectangleShape_destroy(fld[j][i]);
}
}
sfRenderWindow_destroy(window);
return EXIT_SUCCESS;
}
|