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 |