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