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