00001
00002
00003 #include "osl/eval/progressEval.h"
00004 #include "osl/eval/experimental/midgameEval.h"
00005 #include "osl/eval/ppair/piecePairPieceEval.h"
00006 #include "osl/record/csaRecord.h"
00007 #include "osl/state/numEffectState.h"
00008 #include "osl/apply_move/applyMove.h"
00009 #include "osl/oslConfig.h"
00010 #include <iostream>
00011 #include <iomanip>
00012 #include <cstdlib>
00013 #include <unistd.h>
00014
00015 using namespace osl;
00016 using namespace osl::eval;
00017
00018 void usage(const char *prog)
00019 {
00020 using namespace std;
00021 cerr << "Usage: " << prog << " csa-filename"
00022 << endl;
00023 exit(1);
00024 }
00025
00026 void show(const char *filename);
00027 int verbose = 0;
00028 int max_progress = 8;
00029
00030 int main(int argc, char **argv)
00031 {
00032 const char *program_name = argv[0];
00033 bool error_flag = false;
00034
00035 extern char *optarg;
00036 extern int optind;
00037 char c;
00038 while ((c = getopt(argc, argv, "vh")) != EOF)
00039 {
00040 switch(c)
00041 {
00042 default: error_flag = true;
00043 }
00044 }
00045 argc -= optind;
00046 argv += optind;
00047
00048 if (error_flag)
00049 usage(program_name);
00050
00051 eval::ProgressEval::setUp();
00052 eval::PiecePairPieceEval::setUp();
00053
00054 for (int i=0; i<argc; ++i)
00055 {
00056 show(argv[i]);
00057 }
00058 }
00059
00060 void show(const NumEffectState& state)
00061 {
00062 const progress::Effect5x3 progress(state);
00063 if (progress.progress16().value() > max_progress)
00064 return;
00065 if (verbose)
00066 std::cout << state;
00067 const eval::ProgressEval eval(state);
00068 const PieceEval piece(state);
00069 const eval::PiecePairPieceEval ppair(state);
00070 const eval::experimental::MidgameEval mid(state);
00071
00072 if (verbose)
00073 std::cout << "progress piece ppair midgame neighbor ppos kingarea endgame safety pieceadjust total\n";
00074 std::cout << progress.progress16().value()
00075 << " " << piece.value() << " " << ppair.value() << " " << mid.value()
00076 << " " << mid.elementValue(0)
00077 << " " << mid.elementValue(1)
00078 << " " << mid.elementValue(2)
00079 << " " << eval.endgameValue()
00080 << " " << eval.attackDefenseBonus() << " " << eval.minorPieceValue()
00081 << " " << eval.value() << "\n";
00082 }
00083
00084 void show(const char *filename)
00085 {
00086 CsaFile file(filename);
00087 const vector<osl::Move> moves = file.getRecord().getMoves();
00088 NumEffectState state(file.getInitialState());
00089 for (unsigned int i=0; i<moves.size(); i++)
00090 {
00091 show(state);
00092 const Move m = moves[i];
00093 ApplyMoveOfTurn::doMove(state, m);
00094 }
00095 show(state);
00096 }
00097
00098
00099
00100
00101
00102