public IEnumerator sorcererApprenticeTest() { THHGame game = TestGameflow.initGameWithoutPlayers(null, new GameOption() { shuffle = false }); game.createPlayer(0, "玩家0", game.getCardDefine <TestMaster>(), Enumerable.Repeat(game.getCardDefine <FireBall>(), 29).Cast <CardDefine>() .Concat(Enumerable.Repeat(game.getCardDefine <SorcererApprentice>(), 1).Cast <CardDefine>())); game.createPlayer(1, "玩家1", game.getCardDefine <TestMaster>(), Enumerable.Repeat(game.getCardDefine <FireBall>(), 29).Cast <CardDefine>() .Concat(Enumerable.Repeat(game.getCardDefine <SorcererApprentice>(), 1).Cast <CardDefine>())); game.skipTurnUntil(() => game.currentPlayer == game.players[0] && game.players[0].gem >= game.getCardDefine <SorcererApprentice>().cost&& game.players[0].hand.Any(c => c.define is SorcererApprentice)); Assert.True(game.players[0].hand.Where(c => c.define is FireBall).All(c => c.getCost(game) == 4)); //火球术全是4费 var task = game.players[0].cmdUse(game, game.players[0].hand.getCard <SorcererApprentice>()); //使用哀绿 yield return(TestHelper.waitTask(task)); Assert.True(game.players[0].field.Any(c => c.define is SorcererApprentice)); Assert.True(game.players[0].hand.Where(c => c.define is FireBall).All(c => c.getCost(game) == 3)); //火球术全是3费 task = game.players[0].draw(game); //抽一张火球 yield return(TestHelper.waitTask(task)); Card card = game.players[0].hand.right; Assert.AreEqual(3, card.getCost(game)); task = card.pile.moveTo(game, card, game.players[0].grave);//把火球送入墓地 yield return(TestHelper.waitTask(task)); Assert.AreEqual(4, card.getCost(game)); yield return(game.players[0].field[0].die(game).wait());//杀死哀绿 Assert.True(game.players[0].hand.getCards <FireBall>().All(c => c.getCost(game) == 4)); yield return(game.players[0].draw(game).wait());//再抽一张火球术 Assert.True(game.players[0].hand.getCards <FireBall>().All(c => c.getCost(game) == 4)); }
public static void skipUntilCanUse(this THHGame game, THHPlayer you, Card card) { game.skipTurnUntil(() => game.currentPlayer == you && you.gem >= card.getCost(game)); }