Subversion Repositories Kolibri OS

Rev

Rev 9011 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 9011 Rev 9046
Line 33... Line 33...
33
};
33
};
Line 34... Line 34...
34
 
34
 
35
class Bird
35
class Bird
36
{
36
{
37
public:
37
public:
38
	static const int sizeX = 17;
38
	static const int sizeX = 19;
39
	static const int sizeY = 12;
39
	static const int sizeY = 20;
40
	static const int x = 100;
40
	static const int x = 100;
41
	int prev_y;
41
	int prev_y;
42
	int y;
42
	int y;
Line 89... Line 89...
89
			randomize();
89
			randomize();
90
	}
90
	}
Line 91... Line 91...
91
 
91
 
92
	void draw()
92
	void draw()
-
 
93
	{
-
 
94
		//cleanup
-
 
95
		int pixels = (WINDOW_WIDTH - (BORDER_LEFT + BORDER_RIGHT - 1)) - (x + width + 2);
-
 
96
		if (pixels >= -1)
-
 
97
		{
-
 
98
			pixels = (pixels == -1) ? 1 : 2;
-
 
99
			kos_DrawBar(x + width, gapY - headHeight, pixels, headHeight, 0x00FFFF);
-
 
100
			kos_DrawBar(x + width, gapY + gapHeight, pixels, headHeight, 0x00FFFF);
-
 
101
		}
93
	{
102
 
94
		int offset = x >= 0 ? 0 : -x;
103
		int offset = x >= 0 ? 0 : -x;
95
		int trim = x + width >= WINDOW_WIDTH - (BORDER_LEFT + BORDER_RIGHT - 1) ? WINDOW_WIDTH - x - width - (BORDER_LEFT + BORDER_RIGHT - 1) : 0;
104
		int trim = x + width >= WINDOW_WIDTH - (BORDER_LEFT + BORDER_RIGHT - 1) ? WINDOW_WIDTH - x - width - (BORDER_LEFT + BORDER_RIGHT - 1) : 0;
Line 96... Line 105...
96
		int trimHead = x + width + 2 >= WINDOW_WIDTH - (BORDER_LEFT + BORDER_RIGHT - 1) ? WINDOW_WIDTH - x - width - 2 - (BORDER_LEFT + BORDER_RIGHT - 1) : 0;
105
		int trimHead = x + width >= WINDOW_WIDTH - (BORDER_LEFT + BORDER_RIGHT - 1) ? WINDOW_WIDTH - x - width - (BORDER_LEFT + BORDER_RIGHT - 1) : 0;
97
 
106
 
98
		//top
107
		//top
99
		for (int y = 0; y < gapY - headHeight; ++y)
108
		for (int y = 0; y < gapY - headHeight; ++y)
100
			kos_PutImage(tubeBodyImage + offset, width - offset + trim, 1, x + offset, y);
109
			kos_PutImage(tubeBodyImage + offset, width - offset + trim, 1, x + offset, y);
101
		//head top
110
		//head top
102
		for (int y = gapY - headHeight; y < gapY; ++y)
111
		for (int y = gapY - headHeight; y < gapY; ++y)
103
			kos_PutImage(tubeHeadImage + (width + 2) * (y - (gapY - headHeight)) + offset, (width + 2) - offset + trimHead, 1, x + offset, y);
112
			kos_PutImage(tubeHeadImage + width * (y - (gapY - headHeight)) + offset, width - offset + trimHead, 1, x + offset, y);
104
		//head down
113
		//head down
105
		for (int y = gapY + gapHeight; y < gapY + gapHeight + headHeight; ++y)
114
		for (int y = gapY + gapHeight; y < gapY + gapHeight + headHeight; ++y)
106
			kos_PutImage(tubeHeadImage + (width + 2) * (y - (gapY + gapHeight)) + offset, (width + 2) - offset + trimHead, 1, x + offset, y);
115
			kos_PutImage(tubeHeadImage + width * (y - (gapY + gapHeight)) + offset, width - offset + trimHead, 1, x + offset, y);
107
		//down
116
		//down
Line 108... Line 117...
108
		for (int y = gapY + gapHeight + headHeight; y < WINDOW_HEIGHT - (BORDER_TOP + BORDER_DOWN - 1); ++y)
117
		for (int y = gapY + gapHeight + headHeight; y < WINDOW_HEIGHT - (BORDER_TOP + BORDER_DOWN - 1); ++y)
Line 332... Line 341...
332
	}
341
	}
333
}
342
}
Line 334... Line 343...
334
 
343
 
335
void drawGameWindow()
344
void drawGameWindow()
336
{
-
 
337
	kos_WindowRedrawStatus(1);
345
{
338
	kos_DefineAndDrawWindow(windowX, windowY, WINDOW_WIDTH, WINDOW_HEIGHT, 0x33, 0x00FFFF, 0, 0, (Dword)HEADER_STRING);
346
	kos_DefineAndDrawWindow(windowX, windowY, WINDOW_WIDTH, WINDOW_HEIGHT, 0x33, 0x00FFFF, 0, 0, (Dword)HEADER_STRING);
339
	bird.draw();
347
	bird.draw();
340
	for (int i = 0; i < tubeNumber; ++i)
348
	for (int i = 0; i < tubeNumber; ++i)
341
		tubes[i].draw();
349
		tubes[i].draw();
342
	kos_WriteTextToWindow(10, 10, 0x81, 0x000000, scoreString, 0);
350
	kos_WriteTextToWindow(10, 10, 0x81, 0x000000, scoreString, 0);
343
	kos_WriteTextToWindow(10, 30, 0x81, 0x000000, CONTROL_STRING, 0);
-
 
344
	kos_WindowRedrawStatus(2);
351
	kos_WriteTextToWindow(10, 30, 0x81, 0x000000, CONTROL_STRING, 0);
345
}
352
}
346
void redrawGameWindow()
353
void redrawGameWindow()
347
{
-
 
348
	kos_WindowRedrawStatus(1);
-
 
349
 
354
{
350
	//cleaning the screen
355
	//cleaning the screen
351
	if (scoreChanged)
356
	if (scoreChanged)
352
		kos_DrawBar(80, 10, 50, 15, 0x00FFFF);
357
		kos_DrawBar(80, 10, 50, 15, 0x00FFFF);
353
	if (bird.y > bird.prev_y)
358
	if (bird.y > bird.prev_y)
Line 359... Line 364...
359
	for (int i = 0; i < tubeNumber; ++i)
364
	for (int i = 0; i < tubeNumber; ++i)
360
		tubes[i].draw();
365
		tubes[i].draw();
Line 361... Line 366...
361
 
366
 
362
	kos_WriteTextToWindow(10, 10, 0x81, 0x000000, scoreString, 0);
367
	kos_WriteTextToWindow(10, 10, 0x81, 0x000000, scoreString, 0);
363
	kos_WriteTextToWindow(10, 30, 0x81, 0x000000, CONTROL_STRING, 0);
-
 
364
	kos_WindowRedrawStatus(2);
368
	kos_WriteTextToWindow(10, 30, 0x81, 0x000000, CONTROL_STRING, 0);
Line 365... Line 369...
365
}
369
}
366
 
370
 
367
void drawGameoverWindow()
-
 
368
{
371
void drawGameoverWindow()
369
	kos_WindowRedrawStatus(1);
372
{
370
	kos_DefineAndDrawWindow(windowX, windowY, WINDOW_WIDTH, WINDOW_HEIGHT, 0x33, 0x000000, 0, 0, (Dword)HEADER_STRING);
373
	kos_DefineAndDrawWindow(windowX, windowY, WINDOW_WIDTH, WINDOW_HEIGHT, 0x33, 0x000000, 0, 0, (Dword)HEADER_STRING);
371
	kos_WriteTextToWindow(125, 50, 0x82, 0xFFFFFF, GAMEOVER_STRING, 0);
374
	kos_WriteTextToWindow(125, 50, 0x82, 0xFFFFFF, GAMEOVER_STRING, 0);
372
	kos_WriteTextToWindow(135, 100, 0x81, 0xFFFFFF, scoreString, 0);
-
 
373
	kos_WriteTextToWindow(50, 150, 0x81, 0xFFFFFF, ANY_KEY_STRING, 0);
375
	kos_WriteTextToWindow(135, 100, 0x81, 0xFFFFFF, scoreString, 0);
Line 374... Line 376...
374
	kos_WindowRedrawStatus(2);
376
	kos_WriteTextToWindow(50, 150, 0x81, 0xFFFFFF, ANY_KEY_STRING, 0);
375
}
377
}
376
 
378
 
Line 383... Line 385...
383
	kos_WriteTextToWindow(x, y, fontType, textColor, textPtr, textLen);
385
	kos_WriteTextToWindow(x, y, fontType, textColor, textPtr, textLen);
384
}
386
}
Line 385... Line 387...
385
 
387
 
386
void drawMenuWindow()
388
void drawMenuWindow()
387
{
-
 
388
	kos_WindowRedrawStatus(1);
389
{
Line 389... Line 390...
389
	kos_DefineAndDrawWindow(windowX, windowY, WINDOW_WIDTH, WINDOW_HEIGHT, 0x33, 0x00FFFF, 0, 0, (Dword)HEADER_STRING);
390
	kos_DefineAndDrawWindow(windowX, windowY, WINDOW_WIDTH, WINDOW_HEIGHT, 0x33, 0x00FFFF, 0, 0, (Dword)HEADER_STRING);
390
	
391
	
Line 391... Line 392...
391
	WriteBorderedText(85, 40, 0x4, 0xFFFFFF, HEADER_STRING, 6, 0x000000, 2);
392
	WriteBorderedText(85, 40, 0x4, 0xFFFFFF, HEADER_STRING, 6, 0x000000, 2);
392
	WriteBorderedText(185, 80, 0x84, 0xFFFFFF, HEADER_STRING + 7, 0, 0x000000, 2);
393
	WriteBorderedText(185, 80, 0x84, 0xFFFFFF, HEADER_STRING + 7, 0, 0x000000, 2);
393
 
394
 
394
	RGB* pos = &tubeHeadImage[0];
395
	RGB* pos = &tubeHeadImage[0];
395
	for (int x = 100 - 1; x >= 100 - Tube::headHeight; --x)
396
	for (int x = 100 - 1; x >= 100 - Tube::headHeight; --x)
396
		for (int y = 170; y < 170 + Tube::width + 2; ++y)
397
		for (int y = 170; y < 170 + Tube::width; ++y)
397
		{
398
		{
398
			kos_PutPixel(x, y, (pos->r << 16) + (pos->g << 8) + (pos->b));	//first tube
399
			kos_PutPixel(x, y, (pos->r << 16) + (pos->g << 8) + (pos->b));	//first tube
Line 407... Line 408...
407
	
408
	
408
	//Second button
409
	//Second button
409
	for (int x = 100; x < WINDOW_WIDTH - (BORDER_LEFT + BORDER_RIGHT - 1); ++x)
410
	for (int x = 100; x < WINDOW_WIDTH - (BORDER_LEFT + BORDER_RIGHT - 1); ++x)
410
		kos_PutImage(tubeBodyImage, 1, Tube::width, x, 270);
411
		kos_PutImage(tubeBodyImage, 1, Tube::width, x, 270);
411
	WriteBorderedText(140, 285, 0x82, 0x000000, SLOW_STRING, 0, 0xFFFFFF, 1);
-
 
412
 
-
 
413
	kos_WindowRedrawStatus(2);
412
	WriteBorderedText(140, 285, 0x82, 0x000000, SLOW_STRING, 0, 0xFFFFFF, 1);
Line 414... Line 413...
414
}
413
}
415
 
414
 
-
 
415
inline bool checkCollision(Tube tube)
416
inline bool checkCollision(Tube tube)
416
{
417
{
417
	return ((tube.x <= (bird.x + bird.sizeX) && tube.x + tube.width >= bird.x)
Line 418... Line 418...
418
	return ((tube.x <= (bird.x + bird.sizeX) && tube.x + tube.width >= bird.x) && (bird.y <= tube.gapY || bird.y + bird.sizeY >= tube.gapY + tube.gapHeight));
418
		&& (bird.y <= tube.gapY || bird.y + bird.sizeY >= tube.gapY + tube.gapHeight));
419
}
419
}
420
 
420