public bool IsTsumi() { if (gamestate == GameState.over) { return(false); } List <Te> posste = PossTe(); int n = posste.Count; if (n == 0) { return(false); } foreach (var te in posste) { Game game = Clone(); te.Go(game); if (game.gamestate == GameState.over) { return(false); } else { bool lose = false; foreach (var te2 in game.PossTe()) { Game game2 = game.Clone(); te2.Go(game2); if (game2.gamestate == GameState.over) { lose = true; } } if (!lose) { return(false); } } } return(true); }
public static int Check(Te te, Game game, int depth) { te.Go(game); if (game.gamestate == GameState.over) { return(big); } if (depth >= 1) { List <Koma> mochi = game.gamestate == GameState.turnB ? game.mochias : game.mochibs; int res = 0; foreach (var k in mochi) { res += Point(k); } foreach (var k in game.onboards) { if (k == null) { continue; } if (k.state == ((game.gamestate == GameState.turnB) ? KomaState.OnA : KomaState.OnB)) { res += Point(k); } } return(res); } int ans = big; var aitete = game.PossTe(); if (depth > 0) { int c = 0; Te aitete0 = new Te(); foreach (var te2 in aitete) { int d = Check(te2, game.Clone(), big); if (c < d) { c = d; aitete0 = te2; } } aitete.Clear(); aitete.Add(aitete0); } foreach (var te2 in aitete) { int res = 0; Game game2 = game.Clone(); te2.Go(game2); if (game2.gamestate == GameState.over) { ans = 0; continue; } var jibunte = game2.PossTe(); if (depth == 1) { int c = 0; Te jibunte0 = new Te(); foreach (var te3 in jibunte) { int d = Check(te3, game2.Clone(), big); if (c < d) { c = d; jibunte0 = te3; } } jibunte.Clear(); jibunte.Add(jibunte0); } res = 0; foreach (var te3 in jibunte) { int c = Check(te3, game2.Clone(), depth + 1); if (res < c) { res = c; } } ans = Math.Min(ans, res); } return(ans); }
public static int Check(Te te, Game game, int depth) { te.Go(game); if (game.gamestate == GameState.over) { return big; } if (depth >= 1) { List<Koma> mochi = game.gamestate == GameState.turnB ? game.mochias : game.mochibs; int res = 0; foreach (var k in mochi) res += Point(k); foreach (var k in game.onboards) { if (k == null) continue; if (k.state == ((game.gamestate == GameState.turnB) ? KomaState.OnA : KomaState.OnB)) { res += Point(k); } } return res; } int ans = big; var aitete = game.PossTe(); if (depth > 0) { int c = 0; Te aitete0 = new Te(); foreach (var te2 in aitete) { int d = Check(te2, game.Clone(), big); if (c < d) { c = d; aitete0 = te2; } } aitete.Clear(); aitete.Add(aitete0); } foreach (var te2 in aitete) { int res = 0; Game game2 = game.Clone(); te2.Go(game2); if (game2.gamestate == GameState.over) { ans = 0; continue; } var jibunte = game2.PossTe(); if (depth == 1) { int c = 0; Te jibunte0 = new Te(); foreach (var te3 in jibunte) { int d = Check(te3, game2.Clone(), big); if (c < d) { c = d; jibunte0 = te3; } } jibunte.Clear(); jibunte.Add(jibunte0); } res = 0; foreach (var te3 in jibunte) { int c = Check(te3, game2.Clone(), depth + 1); if (res < c) { res = c; } } ans = Math.Min(ans, res); } return ans; }