1 /* braincurses.h
2  * Copyright © 2002, Brian Derr <brian@derrclan.com>
3  */
4 
5 #ifndef BRAINCURSES_H
6 #define BRAINCURSES_H
7 
8 #include <ncurses.h>
9 #include <string>
10 #include <unordered_map>
11 #include <vector>
12 
13 #include "code.h"
14 
15 const int kInputLength = 7;
16 const std::string kGameName = "BrainCurses";
17 
18 const std::string kCodeWindow = "code";
19 const std::string kGuessWindow = "guess";
20 const std::string kHeaderWindow = "header";
21 const std::string kInfoWindow = "info";
22 const std::string kInputWindow = "input";
23 const std::string kMarkerWindow = "marker";
24 const std::string kWatermarkWindow = "watermark";
25 
26 
27 class Braincurses {
28   public:
29     Braincurses(int code_length, int guesses);
30     bool GameOverPlayAgain(bool winner);
Initialized()31     bool Initialized() const { return initialized_; };
32     bool PlayGame();
33 
34   private:
35     void CleanUpWindow(WINDOW* window);
36     WINDOW *CreateWindow(int height, int width, int starty, int startx);
37     void DisplayCode(bool colored);
38     void DisplayGuess(int y, std::vector<int> guess);
39     void DisplayMarkers(int y, std::vector<int> correct);
40     std::vector<int> GetInput();
41     void InitializeNcurses();
42     bool IsWinner(std::vector<int> guess);
43     bool PlayAgain();
44     void PrepareBoard();
45     void WipeBoard();
46 
47     Code code_;
48     int guesses_;
49     bool initialized_;
50     std::unordered_map<std::string, WINDOW*> windows_;
51 };
52 
53 void endwin_handler(void);
54 
55 #endif  // BRAINCURSES_H
56