summaryrefslogtreecommitdiff
path: root/src/main.c
blob: 3d77415c41eb047bf5442b7bd271bc7859e5a46c (plain)
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
#include "include/common.h"

/* --- Variables --- */
int gameIsStarted = 0;
sfVideoMode mode = {450, 520, 32};
sfRenderWindow* window;
sfEvent event;
sfText* textScore;
sfFont* font;
char *scoreDisp;

sfRectangleShape* field[20][10];	// Array of field rectangles
sfVector2f field_rPos[20][10];		// Array of absolute coordinates of field rectangles

int field_rOutThick = 1; 	// Field rectangles outline thickness	
sfVector2f field_rSize;		// Field rectangles size variable x/y
sfVector2i offsetActiveShape;   // Offset active shape relative to field
sfVector2i fieldSize, fieldPos;
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();

			/* Colorize active cells of field */
			for(int j=0;j<20;j++){
				for(int i=0;i<10;i++){
					sfRectangleShape_setFillColor(field[j][i], field_rAttr[j][i].fColor);
					sfRectangleShape_setOutlineColor(field[j][i], field_rAttr[j][i].oColor);
				}
			}
			
			
			/* Colorize active cells of active shape (overlay only active cells above background of field) */
			for(int j=0;j<4;j++){
				for(int i=0;i<4;i++){
					if (activeShape[j][i].a != 0){
						sfRectangleShape_setFillColor(field[j+offsetActiveShape.y][i+offsetActiveShape.x], activeShape[j][i].fColor);
						sfRectangleShape_setOutlineColor(field[j+offsetActiveShape.y][i+offsetActiveShape.x], activeShape[j][i].oColor);
					}
				}
			}
			
			/* Draw all field cells */
			for (int j=0;j<fieldSize.y;j++){
				for(int i=0;i<fieldSize.x;i++){
					sfRenderWindow_drawRectangleShape(window, field[j][i], NULL);
				}
			}
			sfRenderWindow_drawText(window, textScore, NULL);
		} 
		else {
			menuTick();
			if (sfKeyboard_isKeyPressed(sfKeyReturn) == 1) {
				gameIsStarted = 1;
				initAll();
			}
			menuTick();

			/* Draw all field cells */
			for (int j=0;j<fieldSize.y;j++){
				for(int i=0;i<fieldSize.x;i++){
					sfRenderWindow_drawRectangleShape(window, field[j][i], NULL);
				}
			}
		}
		/* Update the window */
		sfRenderWindow_display(window);
	}

	/* Just senseless printf */
	printf("%d\n", scoreCurrent);

	/* Cleanup resources */
	for (int j=0;j<fieldSize.y;j++){
		for(int i=0;i<fieldSize.x;i++){
			sfRectangleShape_destroy(field[j][i]);
		}
	}

	sfRenderWindow_destroy(window);

	return EXIT_SUCCESS;
}