Race around the city collecting the flags while avoiding those that stand in the way of your mission. Make no mistake you will need to be quick to outwit your opponents, they are smart and will try to box you in. I wrote this game to prove that writing a game with scrolling scenery is possible even with the limited 6kB of RAM available. I had to compromise sound effects for features, I wanted multiple opponents, I wanted to be able to drop smoke bombs to trap the opponents but all this required memory so the sound effects had to take a back seat.

Dependencies:   mbed

Committer:
taylorza
Date:
Sun Feb 01 00:43:25 2015 +0000
Revision:
1:1b8125937f28
Parent:
0:d85c449aca6d
Minor updates

Who changed what in which revision?

UserRevisionLine numberNew contents of line
taylorza 0:d85c449aca6d 1 #include "Base.h"
taylorza 0:d85c449aca6d 2
taylorza 0:d85c449aca6d 3 #ifndef __CANVAS_H__
taylorza 0:d85c449aca6d 4 #define __CANVAS_H__
taylorza 0:d85c449aca6d 5
taylorza 0:d85c449aca6d 6 template <typename T>
taylorza 0:d85c449aca6d 7 class Canvas
taylorza 0:d85c449aca6d 8 {
taylorza 0:d85c449aca6d 9 public:
taylorza 0:d85c449aca6d 10 Canvas(T *pSurface)
taylorza 0:d85c449aca6d 11 {
taylorza 0:d85c449aca6d 12 _pSurface = pSurface;
taylorza 0:d85c449aca6d 13 }
taylorza 0:d85c449aca6d 14
taylorza 0:d85c449aca6d 15 inline void clear()
taylorza 0:d85c449aca6d 16 {
taylorza 0:d85c449aca6d 17 _pSurface->clear();
taylorza 0:d85c449aca6d 18 }
taylorza 0:d85c449aca6d 19
taylorza 0:d85c449aca6d 20 inline void setPixel(int x, int y, uint16_t color)
taylorza 0:d85c449aca6d 21 {
taylorza 0:d85c449aca6d 22 _pSurface->setPixel(x, y, color);
taylorza 0:d85c449aca6d 23 }
taylorza 0:d85c449aca6d 24
taylorza 0:d85c449aca6d 25 void drawLine(int x1, int y1, int x2, int y2, uint16_t color)
taylorza 0:d85c449aca6d 26 {
taylorza 0:d85c449aca6d 27 int dx = abs(x2 - x1);
taylorza 0:d85c449aca6d 28 int dy = abs(y2 - y1);
taylorza 0:d85c449aca6d 29
taylorza 0:d85c449aca6d 30 if (dx == 0)
taylorza 0:d85c449aca6d 31 {
taylorza 0:d85c449aca6d 32 if (y1 > y2) swap(y1, y2);
taylorza 0:d85c449aca6d 33 drawVertLine(x1, y1, y2, color);
taylorza 0:d85c449aca6d 34 return;
taylorza 0:d85c449aca6d 35 }
taylorza 0:d85c449aca6d 36 else if(dy == 0)
taylorza 0:d85c449aca6d 37 {
taylorza 0:d85c449aca6d 38 if (x1 > x2) swap(x1, x2);
taylorza 0:d85c449aca6d 39 drawHorizLine(x1, y1, x2, color);
taylorza 0:d85c449aca6d 40 return;
taylorza 0:d85c449aca6d 41 }
taylorza 0:d85c449aca6d 42
taylorza 0:d85c449aca6d 43 int sx = (x1 < x2) ? 1 : -1;
taylorza 0:d85c449aca6d 44 int sy = (y1 < y2) ? 1 : -1;
taylorza 0:d85c449aca6d 45 int err = dx - dy;
taylorza 0:d85c449aca6d 46 while(x1 != x2 || y1 != y2)
taylorza 0:d85c449aca6d 47 {
taylorza 0:d85c449aca6d 48 setPixel(x1, y1, color);
taylorza 0:d85c449aca6d 49 int e2 = err << 1;
taylorza 0:d85c449aca6d 50 if (e2 > -dy)
taylorza 0:d85c449aca6d 51 {
taylorza 0:d85c449aca6d 52 err -= dy;
taylorza 0:d85c449aca6d 53 x1 += sx;
taylorza 0:d85c449aca6d 54 }
taylorza 0:d85c449aca6d 55 if (e2 < dx)
taylorza 0:d85c449aca6d 56 {
taylorza 0:d85c449aca6d 57 err += dx;
taylorza 0:d85c449aca6d 58 y1 += sy;
taylorza 0:d85c449aca6d 59 }
taylorza 0:d85c449aca6d 60 }
taylorza 0:d85c449aca6d 61 setPixel(x2, y2, color);
taylorza 0:d85c449aca6d 62 }
taylorza 0:d85c449aca6d 63
taylorza 0:d85c449aca6d 64 void drawRect(int x1, int y1, int x2, int y2, uint16_t color)
taylorza 0:d85c449aca6d 65 {
taylorza 0:d85c449aca6d 66 if (x1 > x2) swap(x1, x2);
taylorza 0:d85c449aca6d 67 if (y1 > y2) swap(y1, y2);
taylorza 0:d85c449aca6d 68
taylorza 0:d85c449aca6d 69 drawHorizLine(x1, y1, x2, color);
taylorza 0:d85c449aca6d 70 drawHorizLine(x1, y2, x2, color);
taylorza 0:d85c449aca6d 71 drawVertLine(x1, y1, y2, color);
taylorza 0:d85c449aca6d 72 drawVertLine(x2, y1, y2, color);
taylorza 0:d85c449aca6d 73 }
taylorza 0:d85c449aca6d 74
taylorza 0:d85c449aca6d 75 void fillRect(int x1, int y1, int x2, int y2, uint16_t color)
taylorza 0:d85c449aca6d 76 {
taylorza 0:d85c449aca6d 77 if (x1 > x2) swap(x1, x2);
taylorza 0:d85c449aca6d 78 if (y1 > y2) swap(y1, y2);
taylorza 0:d85c449aca6d 79
taylorza 0:d85c449aca6d 80 for (int x = x1; x <= x2; ++x)
taylorza 0:d85c449aca6d 81 {
taylorza 0:d85c449aca6d 82 _pSurface->fastVLine(y1, y2, x, color);
taylorza 0:d85c449aca6d 83 }
taylorza 0:d85c449aca6d 84 }
taylorza 0:d85c449aca6d 85
taylorza 0:d85c449aca6d 86 void drawBitmap(int x, int y, T &bmp, int srcX, int srcY, int srcWidth, int srcHeight, bool transparent)
taylorza 0:d85c449aca6d 87 {
taylorza 0:d85c449aca6d 88 _pSurface->drawBitmap(x, y, bmp, srcX, srcY, srcWidth, srcHeight, transparent);
taylorza 0:d85c449aca6d 89 }
taylorza 0:d85c449aca6d 90
taylorza 0:d85c449aca6d 91 private:
taylorza 0:d85c449aca6d 92 void drawHorizLine(int x1, int y1, int x2, uint16_t color)
taylorza 0:d85c449aca6d 93 {
taylorza 0:d85c449aca6d 94 for(int x = x1; x <= x2; ++x) setPixel(x, y1, color);
taylorza 0:d85c449aca6d 95 }
taylorza 0:d85c449aca6d 96
taylorza 0:d85c449aca6d 97 void drawVertLine(int x1, int y1, int y2, uint16_t color)
taylorza 0:d85c449aca6d 98 {
taylorza 0:d85c449aca6d 99 for(int y = y1; y <= y2; ++y) setPixel(x1, y, color);
taylorza 0:d85c449aca6d 100 }
taylorza 0:d85c449aca6d 101
taylorza 0:d85c449aca6d 102 private:
taylorza 0:d85c449aca6d 103 T *_pSurface;
taylorza 0:d85c449aca6d 104 };
taylorza 0:d85c449aca6d 105
taylorza 0:d85c449aca6d 106 #endif // __CANVAS_H__