1 #ifndef BYOSNAKE_H
2 #define BYOSNAKE_H
3 
4 #include <wx/font.h>
5 #include <wx/timer.h>
6 #include "byogamebase.h"
7 
8 class wxPaintEvent;
9 class wxTimerEvent;
10 class wxEraseEvent;
11 
12 /** \brief Game with traditional snake eating something */
13 class byoSnake : public byoGameBase
14 {
15     public:
16 
17         /** \brief Ctor */
18         byoSnake(wxWindow* parent,const wxString& GameName);
19 
20         /** \brief Dctor */
21         virtual ~byoSnake();
22 
23     private:
24 
25         static const int m_FieldHoriz = 30;
26         static const int m_FieldVert = 15;
27         static const int m_FieldTotal = m_FieldHoriz * m_FieldVert;
28         static const int m_BorderColour = 0;
29         static const int m_SnakeColour = 1;
30         static const int m_AppleColour = 2;
31         static const int m_MaxKillCnt = 2;
32 
33         enum Direction
34         {
35             dLeft, dRight, dUp, dDown
36         };
37 
38         int m_AppleX;
39         int m_AppleY;
40 
41         int m_SnakeX[m_FieldTotal+2];
42         int m_SnakeY[m_FieldTotal+2];
43         int m_SnakeLen;
44         bool m_Field[m_FieldHoriz][m_FieldVert];
45 
46         int m_Delay;
47         int m_Lives;
48         int m_Score;
49         int m_InitialSlowdownCnt;
50         int m_KillCnt;
51         wxFont m_Font;
52 
53         wxTimer m_Timer;
54 
55         Direction m_Direction;
56 
57         void OnKeyDown(wxKeyEvent& event);
58         void OnPaint(wxPaintEvent& event);
59         void OnTimer(wxTimerEvent& event);
60         void OnEraseBack(wxEraseEvent& event);
61 
62         void InitializeSnake();
63         void RandomizeApple();
64         void StartSnake();
65         void RebuildField();
66         void Move();
67         void Died();
68         void GameOver();
69         void GetsBigger();
70         void UpdateSpeed();
71 
72         void DrawBorder(wxDC* DC);
73         void DrawSnake(wxDC* DC);
74         void DrawApple(wxDC* DC);
75         void DrawStats(wxDC* DC);
76 
77         DECLARE_EVENT_TABLE()
78 };
79 
80 #endif
81