c72692b7012aa350d70ce5f93e14626620e320f3
Stefan Schuermans begin of Pong game

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_PONG_H
7) #define BLINKER_PONG_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 "Game.h"
20) #include "Mgrs.h"
21) #include "Module.h"
22) #include "OutStreamFile.h"
Stefan Schuermans pong: make ball move

Stefan Schuermans authored 5 years ago

23) #include "Time.h"
24) #include "TimeCallee.h"
Stefan Schuermans begin of Pong game

Stefan Schuermans authored 5 years ago

25) 
26) namespace Blinker {
27) 
28) /// pong game
Stefan Schuermans pong: make ball move

Stefan Schuermans authored 5 years ago

29) class Pong: public Game, public TimeCallee
Stefan Schuermans begin of Pong game

Stefan Schuermans authored 5 years ago

30) {
31) public:
32)   /**
33)    * @brief constructor
34)    * @param[in] name module name
35)    * @param[in] mgrs managers
36)    * @param[in] dirBase base directory
37)    */
38)   Pong(const std::string &name, Mgrs &mgrs, const Directory &dirBase);
39) 
40)   /// virtual destructor
41)   virtual ~Pong();
42) 
43) private:
44)   /// copy constructor disabled
45)   Pong(const Pong &that);
46) 
47)   /// assignment operator disabled
48)   const Pong & operator=(const Pong &that);
49) 
50) public:
51)   /// check for update of configuration (derived game), return true on update
52)   virtual bool updateConfigGame();
53) 
54) protected:
55)   /// re-initialize game (e.g. due to config change)
56)   virtual void reinitialize();
57) 
58)   /// redraw current game image, expected to call sendFrame() at end
59)   virtual void redraw();
60) 
Stefan Schuermans pong: make ball move

Stefan Schuermans authored 5 years ago

61)   /// callback when requested time reached
62)   virtual void timeCall();
63) 
Stefan Schuermans pong: make computer slow

Stefan Schuermans authored 5 years ago

64)   /**
65)    * @brief delay processing for computer players
66)    * @param[in,out] delay delay variable of computer player
67)    * @return whether computer player is allowed to move
68)    */
69)   bool computerDelay(int &delay) const;
70) 
Stefan Schuermans pong: make computer perfect

Stefan Schuermans authored 5 years ago

71)   /**
72)    * @brief computation of ideal pad position for computer players
73)    * @param[in] padBallX x coordinate of position of ball when hitting the pad
74)    * @param[in] padY current y coordinate of pad
75)    * @param[out] padYmin minimum ideal y position of pad
76)    * @param[out] padYmax maximum ideal y position of pad
77)    */
78)   void computerComputePadPos(int padBallX, int padY,
79)                              int &padYmin, int &padYmax) const;
80) 
81)   /**
82)    * @brief move pad for computer players
83)    * @param[in] padYmin minimum desired y position of pad
84)    * @param[in] padYmax maximum desired y position of pad
85)    * @param[in,out] padPosY y position of pad
86)    */
87)   void computerMovePad(int padYmin, int padYmax, int &padPosY) const;
88) 
Stefan Schuermans implement simple, fast comp...

Stefan Schuermans authored 5 years ago

89)   /// computer player for left pad
90)   void computerLeft();
91) 
92)   /// computer player for right pad
93)   void computerRight();
94) 
Stefan Schuermans pong: split large time func...

Stefan Schuermans authored 5 years ago

95)   /// bounce ball
96)   void bounceBall();
97) 
98)   /// bounce ball at sides
99)   void bounceBallSide();
100) 
101)   /// bounce ball at left pad
102)   void bounceBallLeft();
103) 
104)   /// bounce ball at right pad
105)   void bounceBallRight();
106) 
107)   /// request next time call - or cancel request if not needed
108)   void planTimeCall();
109) 
Stefan Schuermans pong: make ball move

Stefan Schuermans authored 5 years ago

110)   /// move ball out of the field and halt it
111)   void hideBall();
112) 
113)   /// start ball
114)   void startBall();
115) 
Stefan Schuermans begin of Pong game

Stefan Schuermans authored 5 years ago

116) protected:
Stefan Schuermans pong: make ball move

Stefan Schuermans authored 5 years ago

117)   ColorFile m_fileBallColor; ///< color file for ball color
118)   ColorFile m_fileLineColor; ///< color file for center line
Stefan Schuermans pong: add pads

Stefan Schuermans authored 5 years ago

119)   ColorFile m_filePadColor;  ///< color file for player pad
Stefan Schuermans pong: make ball move

Stefan Schuermans authored 5 years ago

120)   ColorData m_ballColor;     ///< ball color
121)   ColorData m_lineColor;     ///< center line color
Stefan Schuermans pong: add pads

Stefan Schuermans authored 5 years ago

122)   ColorData m_padColor;      ///< player pad color
Stefan Schuermans pong: make ball move

Stefan Schuermans authored 5 years ago

123)   int       m_ballPosX;      ///< ball position X
124)   int       m_ballPosY;      ///< ball position Y
125)   int       m_ballDirX;      ///< ball direction X
126)   int       m_ballDirY;      ///< ball direction Y
Stefan Schuermans pong: add pads

Stefan Schuermans authored 5 years ago

127)   int       m_padSize;       ///< size of player pads
128)   int       m_leftPosY;      ///< position of top pixel of left pad
Stefan Schuermans pong: fix comments

Stefan Schuermans authored 5 years ago

129)   int       m_rightPosY;     ///< position of top pixel of right pad
130)   int       m_leftDelay;     ///< delay for computer moving left pad
131)   int       m_rightDelay;    ///< delay for computer moving right pad