00001 //---------------------------------------------------------------------------- 00002 /** @file GoMotive.h 00003 Enumerations GoMotive and GoModifier. */ 00004 //---------------------------------------------------------------------------- 00005 00006 #ifndef GO_MOTIVE_H 00007 #define GO_MOTIVE_H 00008 00009 #include <bitset> 00010 #include <iosfwd> 00011 00012 //---------------------------------------------------------------------------- 00013 00014 /** Move motives. 00015 These motives were originally used in the Explorer Go program. */ 00016 enum GoMotive 00017 { 00018 /** Dummy motive used as placeholder */ 00019 GO_MOT_NONE, 00020 00021 /** Random move. currently unused. */ 00022 GO_MOT_RANDOM, 00023 00024 /** Capture block tactically. */ 00025 GO_MOT_CAPTURE, 00026 00027 /** Escape with block tactically. */ 00028 GO_MOT_ESCAPE, 00029 00030 /** Connect blocks or chains */ 00031 GO_MOT_CONNECT, 00032 00033 /** Cut chains. */ 00034 GO_MOT_CUT, 00035 00036 /** Move to divide area */ 00037 GO_MOT_TO_DIVIDE, 00038 00039 /** Urgent pattern move */ 00040 GO_MOT_URGENT, 00041 00042 /** Expand group or zone */ 00043 GO_MOT_EXPAND, 00044 00045 /** Stabilize block */ 00046 GO_MOT_STABILIZE, 00047 00048 /** Reduce zone (or group?) */ 00049 GO_MOT_REDUCE, 00050 00051 /** Defend zone */ 00052 GO_MOT_DEFEND, 00053 00054 /** Invade zone */ 00055 GO_MOT_INVADE, 00056 00057 /** Sente endgame move */ 00058 GO_MOT_SENTE, 00059 00060 /** Forced reply or forced pattern move */ 00061 GO_MOT_FORCED, 00062 00063 /** Move to make one eye */ 00064 GO_MOT_ONEYE, 00065 00066 /** Move to make two eyes */ 00067 GO_MOT_TWOEYE, 00068 00069 /** Endgame move */ 00070 GO_MOT_YOSE, 00071 00072 /** Attack group */ 00073 GO_MOT_ATTACK, 00074 00075 /** Defend group */ 00076 GO_MOT_SAVE, 00077 00078 /** Double atari */ 00079 GO_MOT_DOUBLEATARI, 00080 00081 /** Dtari or other tactical threat */ 00082 GO_MOT_ATARI, 00083 00084 /** Ko threat */ 00085 GO_MOT_KOTHREAT, 00086 00087 /** Total number of motives */ 00088 _GO_NU_MOTIVE 00089 }; 00090 00091 typedef std::bitset<_GO_NU_MOTIVE> GoMotives; 00092 00093 std::ostream& operator<<(std::ostream& out, GoMotive motive); 00094 00095 //---------------------------------------------------------------------------- 00096 00097 /** Move motive modifier. */ 00098 enum GoModifier 00099 { 00100 GO_MOD_NORMAL, 00101 00102 GO_MOD_VERY_BIG, 00103 00104 GO_MOD_BIG, 00105 00106 GO_MOD_SMALL, 00107 00108 GO_MOD_VERY_SMALL, 00109 00110 _GO_NU_MODIFIER 00111 }; 00112 00113 std::ostream& operator<<(std::ostream& out, GoModifier modifier); 00114 00115 //---------------------------------------------------------------------------- 00116 00117 #endif // GO_MOTIVE_H