if (in_opening_stage)
{
+#ifndef MINISHOGI
+/* FIXME: [HGM] The 3rd-rank Pawn section is meaningless in mini-Shogi,
+ * (which does not have opposing Pawns), and can do out-of-bound access,
+ * as the promotion zone is only 1 rank, so Pawns can be closer than 3 ranks
+ * to the board edge.
+ */
if (crow(c1, sq) == 2) /* pawn on 3d rank */
{
if (board[(c1 == black) ?
}
}
+/* FIXME: calculations below are wrong for minishogi, all done for 9x9
+ * board - and anyway we don't know the stage really :)
+ */
if ((GameType[c1] == STATIC_ROOK) && (sq == csquare(c1, 43)))
{
if ((atk2[csquare(c1, 52)] & CNT_MASK) < 2)
s += (ds = -2 * fv1[ATTACKED]);
}
}
+#endif
}
return s;
if (in_opening_stage)
{
+#ifndef MINISHOGI
+/* FIXME: calculations below are wrong for minishogi, all done for 9x9
+ * board - and anyway we don't know the stage really :)
+ */
if (GameType[c1] == STATIC_ROOK)
{
if (csquare(c1, sq) == 12)
}
}
}
+#endif
}
else
{
if (in_opening_stage)
{
+#ifndef MINISHOGI
+/* FIXME: calculations below are wrong for minishogi, all done for 9x9
+ * board - and anyway we don't know the stage really :)
+ */
if ((GameType[c1] == STATIC_ROOK) && (GameType[c2] != STATIC_ROOK))
{
if (Mvboard[csquare(c1, 3)])
s += (ds = -2 * fv1[OPENWRONG]);
}
}
+#endif
}
else
{
if (in_opening_stage)
{
+#ifndef MINISHOGI
+/* FIXME: calculations below are wrong for minishogi, all done for 9x9
+ * board - and anyway we don't know the stage really :)
+ */
if (GameType[c1] == RANGING_ROOK)
{
/* Bishops diagonal should not be open */
s += (ds = -fv1[OPENWRONG]);
}
}
+#endif
}
else
{
if (in_opening_stage)
{
+#ifndef MINISHOGI
+/* FIXME: calculations below are wrong for minishogi, all done for 9x9
+ * board - and anyway we don't know the stage really :)
+ */
short WRONG = fv1[OPENWRONG], OPOK = WRONG / 3;
if (GameType[c1] == STATIC_ROOK)
}
}
}
+#endif
}
else
{
if (fv1[KSFTY] != 0)
s += KingScan(sq);
+#ifndef MINISHOGI
+/* FIXME: calculations below are wrong for minishogi, all done for 9x9
+ * board - and anyway we don't know the stage really :)
+ */
if (in_opening_stage)
{
if ((GameType[c1] != UNKNOWN) && (ccolumn(c1, sq) == 4))
s += (ds = -fv1[OPENWRONG] / 2);
}
}
+#endif
/* CHECKME: is this correct? */
if ((ds = fv1[HOPN]))
ScoreCaptures();
}
+#ifndef MINISHOGI
+# define BLACKHOME_START 0
+# define BLACKHOME_END 26
+# define MIDDLEROW_START 36
+# define MIDDLEROW_END 44
+# define WHITEHOME_START 54
+# define WHITEHOME_END 80
+#else
+# define BLACKHOME_START 0
+# define BLACKHOME_END 4
+# define MIDDLEROW_START 10
+# define MIDDLEROW_END 14
+# define WHITEHOME_START 19
+# define WHITEHOME_END 24
+#endif
for (c1 = black, c2 = white; c1 <= white; c1++, c2--)
{
short n;
fv1 = fvalue[c1];
/* Score fifth rank */
- for (sq = 36, n = 0; sq <= 44; sq++)
+ for (sq = MIDDLEROW_START, n = 0; sq <= MIDDLEROW_END; sq++)
{
if ((color[sq] == c1) || (attack[c1][sq] != 0))
n++;
}
/* Score holes */
- for (sq = ((c1 == black) ? 0 : 54), n = 0;
- sq <= ((c1 == black) ? 26 : 80);
+ for (sq = ((c1 == black) ? BLACKHOME_START : WHITEHOME_START), n = 0;
+ sq <= ((c1 == black) ? BLACKHOME_END : WHITEHOME_END);
sq++)
{
if (board[sq] == no_piece && attack[c1][sq] == 0)
* Try to determine the game type of "side".
*/
+#ifndef MINISHOGI
inline static void
GuessGameType(short side_to_move)
{
}
}
}
+#endif
{
short side;
+#ifndef MINISHOGI
+ /* FIXME: calculations below are wrong for minishogi, all done for 9x9 */
GuessGameType(side_to_move);
+#else
+ GameType[black] = UNKNOWN;
+ GameType[white] = UNKNOWN;
+#endif
array_zero(Mpawn, sizeof(Mpawn));
#ifndef MINISHOGI
+/* FIXME: calculations below are wrong for minishogi, all done for 9x9 */
void
DetermineStage(short side)
{