3e790c77486205e58a0bb765ac95289617e5b3b5
Stefan Schuermans base class for games

Stefan Schuermans authored 5 years ago

1) /* Blinker
2)    Copyright 2011-2019 Stefan Schuermans <stefan@blinkenarea.org>
3)    Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html
4)    a blinkenarea.org project */
5) 
6) #ifndef BLINKER_GAME_H
7) #define BLINKER_GAME_H
8) 
9) #include <string>
10) #include <vector>
11) 
12) #include <BlinkenLib/BlinkenFrame.h>
13) 
14) #include "Color.h"
15) #include "ColorFile.h"
16) #include "File.h"
17) #include "Format.h"
18) #include "FormatFile.h"
19) #include "Mgrs.h"
20) #include "Module.h"
21) #include "OutStreamFile.h"
22) 
23) namespace Blinker {
24) 
25) /// base class for games
26) class Game: public Module
27) {
28) protected:
29)   /// raw color data matching image buffer
30)   typedef std::vector<unsigned char> ColorData;
31) 
32) public:
33)   /**
34)    * @brief constructor
35)    * @param[in] name module name
36)    * @param[in] mgrs managers
37)    * @param[in] dirBase base directory
38)    */
39)   Game(const std::string &name, Mgrs &mgrs, const Directory &dirBase);
40) 
41)   /// virtual destructor
42)   virtual ~Game();
43) 
44) private:
45)   /// copy constructor disabled
46)   Game(const Game &that);
47) 
48)   /// assignment operator disabled
49)   const Game & operator=(const Game &that);
50) 
51) public:
52)   /// check for update of configuration
Stefan Schuermans begin of Pong game

Stefan Schuermans authored 5 years ago

53)   virtual void updateConfig() final;
54) 
55)   /// check for update of configuration (derived game), return true on update
56)   virtual bool updateConfigGame() = 0;
Stefan Schuermans base class for games

Stefan Schuermans authored 5 years ago

57) 
58) protected:
59)   /// re-initialize game (e.g. due to config change)
60)   virtual void reinitialize() = 0;
61) 
62)   /// redraw current game image, expected to call sendFrame() at end
63)   virtual void redraw() = 0;
64) 
65)   /// activate game: set up image buffer, call redraw()
66)   void activate();
67) 
68)   /// deactivate game: tear down image buffer, deactivate output
69)   void deactivate();
70) 
Stefan Schuermans pong: activate when player...

Stefan Schuermans authored 5 years ago

71)   /// check if game is active
72)   bool isActive() const;
73) 
Stefan Schuermans base class for games

Stefan Schuermans authored 5 years ago

74)   /// check if integer is between minimum and maximum values
75)   static bool checkLimitInt(int i, int min, int max)
76)   {
77)     return i >= min && i <= max;
78)   }
79) 
80)   /// limit integer to minimum and maximum values
81)   static void limitInt(int &i, int min, int max)
82)   {
83)     if (i < min) {
84)       i = min;
85)     }
86)     if (i > max) {
87)       i = max;
88)     }
89)   }
90) 
91)   /// check if range of two integers is nonEmpty and limit the integers
92)   static bool checkIntRangeLimit(int &i1, int &i2, int min, int max)
93)   {
94)     if (i1 > i2) {
95)       return false;
96)     }
97)     limitInt(i1, min, max);
98)     limitInt(i2, min, max);
99)     return true;
100)   }
101) 
102)   /// set pixel in image buffer
103)   void pixel(int y, int x, ColorData const &cd);
104) 
105)   /// draw horizontal line to image buffer
106)   void lineHor(int y, int x1, int x2, ColorData const &cd);
107) 
108)   /// draw vertical line to image buffer
109)   void lineVert(int y1, int y2, int x, ColorData const &cd);
110) 
111)   /// draw non-filled rectangle to image buffer
112)   void rect(int y1, int y2, int x1, int x2, ColorData const &cd);
113) 
114)   /// draw filled rectangle to image buffer
115)   void rectFill(int y1, int y2, int x1, int x2, ColorData const &cd);
116) 
Stefan Schuermans pong: display score

Stefan Schuermans authored 5 years ago

117)   /**
118)    * @brief draw a small digit (3x5 pixels) to image buffer
119)    * @param[in] topY y coordinate of top of digit
120)    * @param[in] leftX x coordinate of left of digit
121)    * @param[in] digit to draw ('0'..'9')
122)    * @param[in] cd color to use for drawing
123)    */
124)   void digit3x5(int topY, int leftX, char digit, ColorData const &cd);
125) 
126)   /**
127)    * @brief draw small digits (3x5 each, 1 pixel gap) to image buffer
128)    * @param[in] topY y coordinate of top of digits
129)    * @param[in] leftX x coordinate of left of digits
130)    * @param[in] digits to draw (string of '0'..'9')
131)    * @param[in] cd color to use for drawing
132)    */
133)   void digits3x5(int topY, int leftX, std::string const &digits,
134)                  ColorData const &cd);
135) 
136)   /**
137)    * @brief draw number using 3x5 digits to image buffer
138)    * @param[in] anchorY y coordinate of anchor point
139)    * @param[in] anchorX x coordinate of anchor point
140)    * @param[in] alignY y alignment, -1 for top, 0 for center, 1 for bottom
141)    * @param[in] alignX x alignment, -1 for left, 0 for center, 1 for right
142)    * @param[in] number non-negative number to draw
143)    * @param[in] cd color to use for drawing
144)    */
145)   void number3x5(int anchorY, int anchorX, int alignY, int alignX,
146)                  int number, ColorData const &cd);
147) 
Stefan Schuermans begin of Pong game

Stefan Schuermans authored 5 years ago

148)   /// process update of color file, return true on update
149)   bool colorUpdate(ColorFile &colorFile, ColorData &data) const;
150) 
Stefan Schuermans base class for games

Stefan Schuermans authored 5 years ago

151)   /// convert color to raw color data
Stefan Schuermans begin of Pong game

Stefan Schuermans authored 5 years ago

152)   void color2data(ColorFile const &colorFile, ColorData &data) const;