説明を見る。00001
00002
00003 #include "osl/numEffectState.h"
00004 #include "osl/effect_util/effectUtil.h"
00005 #include "osl/csa.h"
00006 #include <string>
00007 #include <iostream>
00008 #include <sys/time.h>
00009 using namespace osl;
00010
00015 void showState(const NumEffectState& state)
00016 {
00017 std::cout << state << std::endl;
00018 #if 0
00019 KanjiPrint printer(std::cout);
00020 printer.print(state);
00021 #endif
00022 }
00023
00027 Move selectMove(const NumEffectState& state, const MoveVector& moves)
00028 {
00029 static std::mt19937 generator(random());
00030 return moves[generator() % moves.size()];
00031 #if 0
00032 boost::uniform_int<boost::mt11213b> random(generator, 0, moves.size());
00033 return moves[random()];
00034 #endif
00035 }
00036
00040 bool isMated(const NumEffectState& state)
00041 {
00042 return state.inCheck(alt(state.turn()));
00043 }
00044
00045 int main()
00046 {
00047 srandom(time(0));
00048
00049 NumEffectState state((SimpleState(HIRATE)));
00050 std::string line;
00051 while (true)
00052 {
00053
00054 MoveVector moves;
00055 state.generateLegal(moves);
00056 if (moves.empty())
00057 {
00058 std::cerr << "make masita\n";
00059 break;
00060 }
00061 const Move my_move = selectMove(state, moves);
00062 assert(state.isValidMove(my_move));
00063 state.makeMove(my_move);
00064
00065 showState(state);
00066 std::cout << csa::show(my_move) << "\n";
00067
00068 if (isMated(state))
00069 {
00070 std::cerr << "checkmate!";
00071 break;
00072 }
00073
00074
00075 if (! std::getline(std::cin, line))
00076 break;
00077
00078 const Move op_move=csa::strToMove(line, state);
00079 if (! state.isValidMove(op_move))
00080 break;
00081
00082 state.makeMove(op_move);
00083
00084 showState(state);
00085 std::cout << csa::show(op_move) << "\n";
00086 }
00087 }
00088
00089
00090
00091
00092
00093
00094
00095