summaryrefslogtreecommitdiff
path: root/src/main.c
blob: 0d838a67d15ff1f88647f0143e7e7630290c6b75 (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
115
116
#include "include/common.h"
#include "include/functions.h"

/* --- Variables --- */
int gameIsStarted = 0;
sfVideoMode mode = {450, 520, 32};
sfRenderWindow* window;
sfEvent event;

sfText *textMenu1;
sfVector2f textMenu1_pos;

sfFont *fontScore;
sfText *textScore;
sfVector2f textScore_pos;
char *scoreDisp;
int scoreCurrent = 0;

sfRectangleShape* ns[4][4];   // Array of next shape image rectangles
sfRectangleShape* fld[25][10];  // Array of fld rectangles
sfVector2f fldCPos[25][10];	// Array of absolute coordinates of fld
 				// rectangles
sfRectangleShape* ns[4][4];   // Array of next shape image rectangles
sfVector2f nsCSize; // Next shape rectangles size variable x/y
int fldCOutThick = 1; 	// Field rectangles outline thickness
sfVector2f fldCSize;	// Field rectangles size variable x/y
sfVector2i fldSize;
sfVector2i fldPos;

uint8_t arrKeys = 0b00000000; // Arrow keys states byte container

int lvlLatency = 500000;
/* --- Variables End --- */

int main()
{

	initAll();

	/*
	 * Menu texts
	 *
	 */
	textMenu1_pos.x = 10+250+30;
	textMenu1_pos.y = 100;
	textMenu1 = sfText_create();
	sfText_setFont(textMenu1, fontScore);
	sfText_setCharacterSize(textMenu1, 36);
	sfText_setPosition(textMenu1, textMenu1_pos);
	char b[7];
	sprintf(b, "TETRIS");
	sfText_setString(textMenu1, (char *)&b);

	/* Create main window */
	window = sfRenderWindow_create(mode,
					windowName_conf,
					sfResize | sfClose,
					NULL);
	if (!window)
		return EXIT_FAILURE;

	/* colorize field once at start */
	colorizeRandom();

	/* 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);
			colorizeFld();
			colorizeActiSh();
			drawFld(window);
			drawNextShape(window);

			sfRenderWindow_drawText(window, textScore, NULL);
		} else {
			menuTick();
			/* Draw all fld cells */
			drawFld(window);
			sfRenderWindow_drawText(window, textMenu1, NULL);

			if (sfKeyboard_isKeyPressed(sfKeyS) == 1) {
				gameIsStarted = 1;
				initAll();
			}
		}
		/* 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;
}