void input(char prompt[], char line[], uint8_t asciistart, uint8_t asciiend, uint8_t maxlength){ setSystemFont(); inputInit(prompt, line, maxlength, asciistart, asciiend); while (!s_input.done) { inputDraw(); lcdDisplay(); inputMove(); } inputClean(); return; }
/** * ユーザからのコマンド入力を受け付けます。 */ ConsoleManager::CommandResult ConsoleManager::inputCommand() { char line[1024]; std::cout << "> "; // コマンド受付 std::cin.getline(line, sizeof(line)); if (std::cin.eof()) { return CommandResult::Quit; } // コマンドの解析 Command command = parseCommand(line); // quit if (command == Command::Quit) { return CommandResult::Quit; } // 入力がないときは直前のコマンドを繰り返す。 if (command == Command::Empty) { command = prevCommand_; } prevCommand_ = Command::Empty; switch (command) { case Command::Empty: // 入力なし return CommandResult::None; case Command::Help: // ヘルプを表示 showHelp(); return CommandResult::None; case Command::Prev: // 1手戻る。 if (!record_.unmakeMove()) { std::cout << "There is no previous move.\n"; return CommandResult::None; } if (config_.autoBlack || config_.autoWhite) { // コンピュータの手番はスキップ record_.unmakeMove(); } prevCommand_ = Command::Prev; return CommandResult::Changed; case Command::Next: // 1手進む。 if (!record_.makeMove()) { std::cout << "There is no next move.\n"; return CommandResult::None; } if (config_.autoBlack || config_.autoWhite) { // コンピュータの手番はスキップ record_.makeMove(); } prevCommand_ = Command::Next; return CommandResult::Changed; case Command::Top: // 開始局面に戻る。 if (!record_.unmakeMove()) { std::cout << "There is no previous move.\n"; return CommandResult::None; } while (record_.unmakeMove()) ; return CommandResult::Changed; case Command::End: // 最終局面まで進む。 if (!record_.makeMove()) { std::cout << "There is no next move.\n"; return CommandResult::None; } while (record_.makeMove()) ; return CommandResult::Changed; case Command::Search: // 探索 search(false); return CommandResult::None; case Command::Moves: // 合法手生成 showMoves(); return CommandResult::None; case Command::Book: // 定跡検索 probeBook(); return CommandResult::None; case Command::ClearTT: // TTクリア searcher_.clearTT(); return CommandResult::None; case Command::ClearHistory: // Historyクリア searcher_.clearHistory(); return CommandResult::None; default: { // 指し手入力 Move move; if (!inputMove(line, record_.getBoard(), move)) { std::cout << "unknown command!!\n"; return CommandResult::None; } if (!record_.makeMove(move)) { std::cout << "illegal move!!\n"; return CommandResult::None; } std::cout << "Move:\n"; std::cout << " " << move.toString() << '\n'; std::cout << std::endl; return CommandResult::Changed; } } }