public void sanaeSkillTest() { THHGame game = TestGameflow.initStandardGame(null, new int[] { 0, 1 }, Enumerable.Repeat(new Sanae(), 2).ToArray(), Enumerable.Repeat(Enumerable.Repeat(new RashFairy(), 30).ToArray(), 2).ToArray(), new GameOption() { }); game.run(); game.sortedPlayers[0].cmdInitReplace(game); game.sortedPlayers[1].cmdInitReplace(game); game.sortedPlayers[0].cmdUse(game, game.sortedPlayers[0].hand[0], 0); game.sortedPlayers[0].cmdAttack(game, game.sortedPlayers[0].field[0], game.sortedPlayers[1].master); game.sortedPlayers[0].cmdTurnEnd(game); game.sortedPlayers[1].cmdTurnEnd(game); game.sortedPlayers[0].cmdTurnEnd(game); game.sortedPlayers[1].cmdUse(game, game.sortedPlayers[1].skill, 0, game.sortedPlayers[1].master); THHCard.HealEventArg heal = game.triggers.getRecordedEvents().LastOrDefault(e => e is THHCard.HealEventArg) as THHCard.HealEventArg; Assert.AreEqual(1, heal.cards.Length); Assert.AreEqual(2, heal.value); Assert.AreEqual(1, heal.infoDic[game.sortedPlayers[1].master].healedValue); }
public IEnumerator useTest() { THHGame game = TestGameflow.initStandardGame(); _ = game.run(); yield return(new WaitForSeconds(.1f)); game.players[0].cmdInitReplace(game); game.players[1].cmdInitReplace(game); yield return(new WaitForSeconds(.1f)); game.sortedPlayers[0].cmdUse(game, game.sortedPlayers[0].hand[0], 0); yield return(new WaitForSeconds(.1f)); THHPlayer.UseEventArg use = game.triggers.getRecordedEvents().FirstOrDefault(e => e is THHPlayer.UseEventArg) as THHPlayer.UseEventArg; Assert.NotNull(use); Assert.AreEqual(game.sortedPlayers[0], use.player); Assert.AreEqual(game.sortedPlayers[0].field[0], use.card); Assert.AreEqual(TestServant.ID, use.card.define.id); Assert.AreEqual(0, use.position); Assert.AreEqual(0, use.targets.Length); THHPlayer.SetGemEventArg setGem = game.triggers.getRecordedEvents().LastOrDefault(e => e is THHPlayer.SetGemEventArg) as THHPlayer.SetGemEventArg; Assert.AreEqual(0, setGem.value); THHPlayer.MoveEventArg summon = game.triggers.getRecordedEvents().LastOrDefault(e => e is THHPlayer.MoveEventArg) as THHPlayer.MoveEventArg; Assert.NotNull(summon); Assert.AreEqual(game.sortedPlayers[0], summon.player); Assert.AreEqual(TestServant.ID, summon.card.define.id); Assert.AreEqual(0, summon.position); game.Dispose(); }
public IEnumerator fatigueTest() { THHGame game = TestGameflow.initStandardGame(deckCount: 10); _ = game.run(); yield return(new WaitForSeconds(.1f)); game.players[0].cmdInitReplace(game); game.players[1].cmdInitReplace(game); yield return(new WaitForSeconds(.1f)); for (int i = 0; i < 7; i++) { game.sortedPlayers[0].cmdTurnEnd(game); yield return(new WaitForSeconds(.1f)); game.sortedPlayers[1].cmdTurnEnd(game); yield return(new WaitForSeconds(.1f)); } THHPlayer.FatigueEventArg fatigue = game.triggers.getRecordedEvents().LastOrDefault(e => e is THHPlayer.FatigueEventArg) as THHPlayer.FatigueEventArg; Assert.NotNull(fatigue); Assert.AreEqual(game.sortedPlayers[0], fatigue.player); THHCard.DamageEventArg damage = game.triggers.getRecordedEvents().LastOrDefault(e => e is THHCard.DamageEventArg) as THHCard.DamageEventArg; Assert.NotNull(damage); Assert.AreEqual(game.sortedPlayers[0].master, damage.cards[0]); Assert.AreEqual(1, damage.value); game.Dispose(); }
public IEnumerator burnTest() { THHGame game = TestGameflow.initStandardGame(); _ = game.run(); yield return(new WaitForSeconds(.1f)); game.players[0].cmdInitReplace(game); game.players[1].cmdInitReplace(game); yield return(new WaitForSeconds(.1f)); for (int i = 0; i < 7; i++) { game.sortedPlayers[0].cmdTurnEnd(game); yield return(new WaitForSeconds(.1f)); game.sortedPlayers[1].cmdTurnEnd(game); yield return(new WaitForSeconds(.1f)); } THHPlayer.BurnEventArg burn = game.triggers.getRecordedEvents().LastOrDefault(e => e is THHPlayer.BurnEventArg) as THHPlayer.BurnEventArg; Assert.NotNull(burn); Assert.AreEqual(game.sortedPlayers[0], burn.player); Assert.AreEqual(game.sortedPlayers[0].grave[0], burn.card); game.Dispose(); }
public IEnumerator winTest() { THHGame game = TestGameflow.initStandardGame(); _ = game.run(); yield return(new WaitForSeconds(.1f)); game.players[0].cmdInitReplace(game); game.players[1].cmdInitReplace(game); yield return(new WaitForSeconds(.1f)); game.sortedPlayers[0].cmdUse(game, game.sortedPlayers[0].hand[0], 0); yield return(new WaitForSeconds(.1f)); for (int i = 0; i < 15; i++) { game.sortedPlayers[0].cmdTurnEnd(game); yield return(new WaitForSeconds(.1f)); game.sortedPlayers[1].cmdTurnEnd(game); yield return(new WaitForSeconds(.1f)); game.sortedPlayers[0].cmdAttack(game, game.sortedPlayers[0].field[0], game.sortedPlayers[1].master); yield return(new WaitForSeconds(.1f)); } THHCard.AttackEventArg attack = game.triggers.getRecordedEvents().LastOrDefault(e => e is THHCard.AttackEventArg) as THHCard.AttackEventArg; Assert.NotNull(attack); THHGame.GameEndEventArg gameEnd = game.triggers.getRecordedEvents().LastOrDefault(e => e is THHGame.GameEndEventArg) as THHGame.GameEndEventArg; Assert.AreEqual(game.sortedPlayers[0], gameEnd.winners[0]); game.Dispose(); }
public void flameFairyTest() { THHGame game = TestGameflow.initGameWithoutPlayers(null, new GameOption() { shuffle = false }); //首先,上来先新建一个不带玩家的游戏 game.createPlayer(0, "玩家0", game.getCardDefine <Reimu>(), Enumerable.Repeat(game.getCardDefine <FlameFairy>() as CardDefine, 30)); //创建两个玩家,给他们设置初始英雄,套牌 game.createPlayer(1, "玩家1", game.getCardDefine <Reimu>(), Enumerable.Repeat(game.getCardDefine <FlameFairy>() as CardDefine, 30)); game.run(); //运行游戏 //炎之妖精 战吼:对一个随机敌方随从造成1点伤害 //那么我们要测试这个战吼内容 game.skipTurnWhen(() => game.sortedPlayers[0].gem < 1); game.sortedPlayers[0].cmdUse(game, game.sortedPlayers[0].hand[0], 0); //第一个行动的玩家使用手上的第一张牌,反正满手都是炎之妖精随便用 Assert.IsInstanceOf <FlameFairy>(game.sortedPlayers[0].field[0].define); //预期场上拍了一个炎之妖精 //不过因为对方场上没有随从,所以啥事也没发生。 game.sortedPlayers[0].cmdTurnEnd(game); //第一个行动的玩家回合结束 game.sortedPlayers[1].cmdUse(game, game.sortedPlayers[1].hand[0], 0); Assert.IsInstanceOf <FlameFairy>(game.sortedPlayers[1].field[0].define); //第二个行动的玩家拍一个炎之妖精,这个时候应该触发战吼的 Assert.AreEqual(0, game.sortedPlayers[0].field.count); //对面的妖精应该被打死了 var damage = game.triggers.getRecordedEvents().LastOrDefault(e => e is THHCard.DamageEventArg) as THHCard.DamageEventArg; //这会产生一个伤害事件 Assert.AreEqual(1, damage.value); //伤害值为1 //大概就是这样了,稍微测试一下保证每一张卡都在正常工作吧,能减少很多bug。 //出了个随从重名的小问题,测试结果看看Log还是挺正常的,那就没有问题了。 //做这个测试是为了防止以后对系统的改动导致已经做好的卡失效,这样能防止很多bug。 }
public IEnumerator rifleHunterTest() { THHGame game = TestGameflow.initStandardGame(null, new int[] { 0, 1 }, Enumerable.Repeat(new Reimu(), 2).ToArray(), Enumerable.Repeat(Enumerable.Repeat(new RifleHunter(), 30).ToArray(), 2).ToArray(), new GameOption() { }); game.run(); yield return(new WaitForSeconds(.1f)); game.sortedPlayers[0].cmdInitReplace(game); game.sortedPlayers[1].cmdInitReplace(game); yield return(new WaitForSeconds(.1f)); game.sortedPlayers[0].cmdTurnEnd(game); yield return(new WaitForSeconds(.1f)); game.sortedPlayers[1].cmdTurnEnd(game); yield return(new WaitForSeconds(.1f)); game.sortedPlayers[0].cmdTurnEnd(game); yield return(new WaitForSeconds(.1f)); game.sortedPlayers[1].cmdTurnEnd(game); yield return(new WaitForSeconds(.1f)); game.sortedPlayers[0].cmdUse(game, game.sortedPlayers[0].hand[0], 0, game.sortedPlayers[1].master); yield return(new WaitForSeconds(.1f)); Assert.AreEqual(28, game.sortedPlayers[1].master.getCurrentLife()); }
public void missingSpecterTest() { THHGame game = TestGameflow.initStandardGame(null, new int[] { 0, 1 }, Enumerable.Repeat(new Reimu(), 2).ToArray(), Enumerable.Repeat(Enumerable.Repeat(new MissingSpecter(), 30).ToArray(), 2).ToArray(), new GameOption() { }); game.run(); game.sortedPlayers[0].cmdInitReplace(game); game.sortedPlayers[1].cmdInitReplace(game); game.sortedPlayers[0].cmdTurnEnd(game); game.sortedPlayers[1].cmdTurnEnd(game); game.sortedPlayers[0].cmdTurnEnd(game); game.sortedPlayers[1].cmdTurnEnd(game); game.sortedPlayers[0].cmdTurnEnd(game); game.sortedPlayers[1].cmdTurnEnd(game); game.sortedPlayers[0].cmdTurnEnd(game); game.sortedPlayers[1].cmdTurnEnd(game); game.sortedPlayers[0].cmdUse(game, game.sortedPlayers[0].hand[0], 0); game.sortedPlayers[0].cmdTurnEnd(game); game.sortedPlayers[1].cmdUse(game, game.sortedPlayers[1].hand[0], 0); game.sortedPlayers[1].cmdTurnEnd(game); game.sortedPlayers[0].cmdAttack(game, game.sortedPlayers[0].field[0], game.sortedPlayers[1].field[0]); Assert.AreEqual(1, game.sortedPlayers[0].field.count); Assert.AreEqual(1, game.sortedPlayers[1].field.count); }
public void PatchouliAgniShineTest() { TouhouCardEngine.CardDefine[][] decks = new TouhouCardEngine.CardDefine[][] { Enumerable.Repeat(new RashFairy(), 30).ToArray(), Enumerable.Repeat(new AgniShine(), 30).ToArray() }; THHGame game = TestGameflow.initStandardGame(null, new int[] { 0, 1 }, Enumerable.Repeat(new Patchouli(), 2).ToArray(), decks, new GameOption() { }); game.run(); game.sortedPlayers[0].cmdInitReplace(game); game.sortedPlayers[1].cmdInitReplace(game); game.sortedPlayers[0].cmdUse(game, game.sortedPlayers[0].hand[0], 0); game.sortedPlayers[0].cmdTurnEnd(game); game.sortedPlayers[1].cmdTurnEnd(game); game.sortedPlayers[0].cmdUse(game, game.sortedPlayers[0].hand[0], 0); game.sortedPlayers[0].cmdTurnEnd(game); game.sortedPlayers[1].cmdTurnEnd(game); game.sortedPlayers[0].cmdTurnEnd(game); game.sortedPlayers[1].cmdTurnEnd(game); game.sortedPlayers[0].cmdTurnEnd(game); game.sortedPlayers[1].cmdTurnEnd(game); game.sortedPlayers[0].cmdTurnEnd(game); game.sortedPlayers[1].cmdUse(game, game.sortedPlayers[1].hand[0], 0); THHCard.DamageEventArg damage = game.triggers.getRecordedEvents().LastOrDefault(e => e is THHCard.DamageEventArg) as THHCard.DamageEventArg; Assert.AreEqual(0, game.sortedPlayers[0].field.count); Assert.AreEqual(4, damage.value); }
public void SkillAndSpellCardTest() { THHGame game = TestGameflow.initGameWithoutPlayers(null, new GameOption() { shuffle = false }); game.createPlayer(0, "玩家0", game.getCardDefine <TestMaster2>(), Enumerable.Repeat(game.getCardDefine <DefaultServant>() as CardDefine, 28) .Concat(Enumerable.Repeat(game.getCardDefine <DefaultServant>(), 2))); game.createPlayer(1, "玩家1", game.getCardDefine <TestMaster2>(), Enumerable.Repeat(game.getCardDefine <DefaultServant>() as CardDefine, 29) .Concat(Enumerable.Repeat(game.getCardDefine <TestSpellCard>(), 1))); game.run(); game.sortedPlayers[0].cmdInitReplace(game); game.sortedPlayers[1].cmdInitReplace(game); game.sortedPlayers[0].cmdTurnEnd(game); game.sortedPlayers[1].cmdUse(game, game.sortedPlayers[1].hand[0], 0); game.sortedPlayers[1].cmdTurnEnd(game); int gemNum = game.sortedPlayers[0].gem; game.sortedPlayers[0].cmdUse(game, game.sortedPlayers[0].skill, 0, game.sortedPlayers[1].field[0]); Assert.True(game.sortedPlayers[0].skill.isUsed(game)); //技能已使用 Assert.AreEqual(6, game.sortedPlayers[1].field[0].getCurrentLife(game)); //敌方随从受到伤害 Assert.AreEqual(1, gemNum - game.sortedPlayers[0].gem); //水晶减1 gemNum = game.sortedPlayers[0].gem; game.sortedPlayers[0].cmdUse(game, game.sortedPlayers[0].hand[0], 0, game.sortedPlayers[1].field[0]); Assert.AreEqual(5, game.sortedPlayers[1].field[0].getCurrentLife(game)); Assert.AreEqual(1, gemNum - game.sortedPlayers[0].gem); //水晶减1 }
public IEnumerator calcActionsTest_Turn1() { THHGame game = TestGameflow.initGameWithoutPlayers(null, GameOption.Default); THHPlayer player = game.createPlayer(1, "玩家1", game.getCardDefine <TestMaster>(), Enumerable.Repeat(game.getCardDefine <TestServant>(), 30)); game.createPlayer(2, "玩家2", game.getCardDefine <TestMaster>(), Enumerable.Repeat(game.getCardDefine <TestServant>(), 30)); game.logger.log("Force Init"); AI ai = new AI(game, player, false); _ = game.run(); yield return(new WaitForSeconds(.1f)); game.players[0].cmdInitReplace(game); game.players[1].cmdInitReplace(game); yield return(new WaitForSeconds(.1f)); if (game.sortedPlayers[0] != player) { game.sortedPlayers[0].cmdTurnEnd(game); yield return(new WaitForSeconds(.1f)); } var actions = ai.calcActions(game, player); Assert.AreEqual(player.hand.count, actions.Count); UseResponse use = actions.Keys.First() as UseResponse; Assert.NotNull(use); }
public void StealthTest() { THHGame game = TestGameflow.initGameWithoutPlayers(null, new GameOption() { shuffle = false }); game.createPlayer(0, "玩家0", game.getCardDefine <Reimu>(), Enumerable.Repeat(game.getCardDefine <DefaultServant>() as CardDefine, 29) .Concat(Enumerable.Repeat(game.getCardDefine <StealthServant>(), 1))); game.createPlayer(1, "玩家1", game.getCardDefine <Reimu>(), Enumerable.Repeat(game.getCardDefine <DefaultServant>() as CardDefine, 29) .Concat(Enumerable.Repeat(game.getCardDefine <StealthServant>(), 1))); game.run(); game.sortedPlayers[0].cmdInitReplace(game); game.sortedPlayers[1].cmdInitReplace(game); game.sortedPlayers[0].cmdTurnEnd(game); game.sortedPlayers[1].cmdUse(game, game.sortedPlayers[1].hand[1], 0); game.sortedPlayers[1].cmdTurnEnd(game); game.sortedPlayers[0].cmdUse(game, game.sortedPlayers[0].hand[1], 0); game.sortedPlayers[0].cmdUse(game, game.sortedPlayers[0].hand[0], 1); Assert.True(game.sortedPlayers[0].field[1].isStealth()); game.sortedPlayers[0].cmdTurnEnd(game); game.sortedPlayers[1].cmdAttack(game, game.sortedPlayers[1].field[0], game.sortedPlayers[0].field[1]); //game.sortedPlayers[1].cmdAttack(game, game.sortedPlayers[1].field[0], game.sortedPlayers[1].master); Assert.AreEqual(7, game.sortedPlayers[1].field[0].getCurrentLife()); game.sortedPlayers[1].cmdAttack(game, game.sortedPlayers[1].field[0], game.sortedPlayers[0].field[0]); Assert.AreEqual(6, game.sortedPlayers[1].field[0].getCurrentLife()); game.sortedPlayers[1].cmdTurnEnd(game); game.sortedPlayers[0].cmdAttack(game, game.sortedPlayers[0].field[1], game.sortedPlayers[1].field[0]); Assert.False(game.sortedPlayers[0].field[1].isStealth()); }
public void freezeTest() { THHGame game = TestGameflow.initGameWithoutPlayers(null, new GameOption() { shuffle = false }); THHPlayer defaultPlayer = game.createPlayer(0, "玩家0", game.getCardDefine <TestMaster2>(), Enumerable.Repeat(game.getCardDefine <DefaultServant>() as CardDefine, 30)); THHPlayer elusivePlayer = game.createPlayer(1, "玩家1", game.getCardDefine <TestMaster2>(), Enumerable.Repeat(game.getCardDefine <DefaultServant>() as CardDefine, 28) .Concat(Enumerable.Repeat(game.getCardDefine <TestFreeze>(), 2))); game.skipTurnUntil(() => defaultPlayer.gem >= game.getCardDefine <DefaultServant>().cost&& game.currentPlayer == defaultPlayer); defaultPlayer.cmdUse(game, defaultPlayer.hand.First(c => c.define.id == DefaultServant.ID), 0); //玩家0拍白板一张 game.skipTurnUntil(() => elusivePlayer.gem >= game.getCardDefine <TestFreeze>().cost&& game.currentPlayer == elusivePlayer); elusivePlayer.cmdUse(game, elusivePlayer.hand.First(c => c.define.id == TestFreeze.ID), 0, defaultPlayer.field); //玩家1释放冰环 game.skipTurnUntil(() => defaultPlayer.gem >= game.getCardDefine <DefaultServant>().cost&& game.currentPlayer == defaultPlayer); defaultPlayer.cmdAttack(game, defaultPlayer.field[0], elusivePlayer.master); //被冻结的随从无法攻击 defaultPlayer.cmdTurnEnd(game); //回合结束,随从解冻 elusivePlayer.cmdTurnEnd(game); game.skipTurnUntil(() => defaultPlayer.gem >= game.getCardDefine <DefaultServant>().cost&& game.currentPlayer == defaultPlayer); defaultPlayer.cmdAttack(game, defaultPlayer.field[0], elusivePlayer.master);//已解除冰冻的随从可以攻击 Assert.AreEqual(29, elusivePlayer.master.getCurrentLife(game)); game.Dispose(); }
public IEnumerator initReplaceRefuseTest() { THHGame game = TestGameflow.initStandardGame(); _ = game.run(); yield return(new WaitForSeconds(.1f)); game.players[0].cmdInitReplace(game); game.players[1].cmdInitReplace(game); yield return(new WaitForSeconds(.1f)); game.sortedPlayers[0].cmdUse(game, game.sortedPlayers[0].hand[0], 0); yield return(new WaitForSeconds(.1f)); game.players[0].cmdInitReplace(game); game.players[1].cmdInitReplace(game); var args = game.triggers.getRecordedEvents().Where(e => e is THHPlayer.InitReplaceEventArg); Assert.AreEqual(args.Count(), 2); Assert.AreEqual(((THHPlayer.InitReplaceEventArg)args.ElementAt(0)).player, game.players[0]); Assert.AreEqual(((THHPlayer.InitReplaceEventArg)args.ElementAt(1)).player, game.players[1]); game.Dispose(); }
public IEnumerator humanVillageGuardTest() { THHGame game = TestGameflow.initStandardGame(null, new int[] { 0, 1 }, Enumerable.Repeat(new Reimu(), 2).ToArray(), Enumerable.Repeat(Enumerable.Repeat(new HumanVillageGuard(), 30).ToArray(), 2).ToArray(), new GameOption() { }); game.run(); yield return(new WaitForSeconds(.1f)); game.sortedPlayers[0].cmdInitReplace(game); game.sortedPlayers[1].cmdInitReplace(game); yield return(new WaitForSeconds(.1f)); game.sortedPlayers[0].cmdTurnEnd(game); yield return(new WaitForSeconds(.1f)); game.sortedPlayers[1].cmdTurnEnd(game); yield return(new WaitForSeconds(.1f)); game.sortedPlayers[0].cmdTurnEnd(game); yield return(new WaitForSeconds(.1f)); game.sortedPlayers[1].cmdTurnEnd(game); yield return(new WaitForSeconds(.1f)); game.sortedPlayers[0].cmdUse(game, game.sortedPlayers[0].hand[0], 0); yield return(new WaitForSeconds(.1f)); Assert.True(game.sortedPlayers[0].field[0].isTaunt()); }
public void ElusiveTest() { THHGame game = TestGameflow.initGameWithoutPlayers(null, new GameOption() { shuffle = false }); THHPlayer defaultPlayer = game.createPlayer(0, "玩家0", game.getCardDefine <TestMaster2>(), Enumerable.Repeat(game.getCardDefine <DefaultServant>() as CardDefine, 28) .Concat(Enumerable.Repeat(game.getCardDefine <TestSpellCard>(), 2))); THHPlayer elusivePlayer = game.createPlayer(1, "玩家1", game.getCardDefine <TestMaster2>(), Enumerable.Repeat(game.getCardDefine <DefaultServant>() as CardDefine, 29) .Concat(Enumerable.Repeat(game.getCardDefine <ElusiveServant>(), 1))); game.skipTurnUntil(() => defaultPlayer.gem >= game.getCardDefine <DefaultServant>().cost&& game.currentPlayer == defaultPlayer); defaultPlayer.cmdUse(game, defaultPlayer.hand.First(c => c.define.id == DefaultServant.ID), 0); game.skipTurnUntil(() => elusivePlayer.gem >= game.getCardDefine <ElusiveServant>().cost&& game.currentPlayer == elusivePlayer); elusivePlayer.cmdUse(game, elusivePlayer.hand.First(c => c.define.id == ElusiveServant.ID), 0); game.skipTurnUntil(() => defaultPlayer.gem >= game.getCardDefine <TestSpellCard>().cost&& game.currentPlayer == defaultPlayer); defaultPlayer.cmdUse(game, defaultPlayer.hand.First(c => c.define.id == TestSpellCard.ID), 0, defaultPlayer.field[0]); Assert.AreEqual(6, defaultPlayer.field[0].getCurrentLife(game)); //没有魔免的可以被法术指定 defaultPlayer.cmdUse(game, defaultPlayer.hand.First(c => c.define.id == TestSpellCard.ID), 0, elusivePlayer.field[0]); Assert.AreEqual(3, elusivePlayer.field[0].getCurrentLife(game)); //魔免无法被法术指定 game.skipTurnUntil(() => elusivePlayer.gem >= game.getCardDefine <TestDamageSkill>().cost&& game.currentPlayer == elusivePlayer); elusivePlayer.cmdUse(game, elusivePlayer.skill, 0, defaultPlayer.field[0]); Assert.AreEqual(5, defaultPlayer.field[0].getCurrentLife(game));//没有魔免的可以被技能指定 elusivePlayer.cmdTurnEnd(game); game.skipTurnUntil(() => elusivePlayer.gem >= game.getCardDefine <TestDamageSkill>().cost&& game.currentPlayer == elusivePlayer); elusivePlayer.cmdUse(game, elusivePlayer.skill, 0, elusivePlayer.field[0]); Assert.AreEqual(3, elusivePlayer.field[0].getCurrentLife(game));//魔免无法被技能指定 game.Dispose(); }
public void PatchouliMegaReaverTest() { THHGame game = TestGameflow.initStandardGame(null, new int[] { 0, 1 }, Enumerable.Repeat(new Patchouli(), 2).ToArray(), Enumerable.Repeat(Enumerable.Repeat(new MegaReaver(), 30).ToArray(), 2).ToArray(), new GameOption() { }); game.run(); game.sortedPlayers[0].cmdInitReplace(game); game.sortedPlayers[1].cmdInitReplace(game); game.sortedPlayers[0].cmdTurnEnd(game); game.sortedPlayers[1].cmdTurnEnd(game); game.sortedPlayers[0].cmdTurnEnd(game); game.sortedPlayers[1].cmdTurnEnd(game); game.sortedPlayers[0].cmdTurnEnd(game); game.sortedPlayers[1].cmdTurnEnd(game); game.sortedPlayers[0].cmdTurnEnd(game); int preHand = game.sortedPlayers[1].hand.count; game.sortedPlayers[1].cmdUse(game, game.sortedPlayers[1].hand[0], 0); if (preHand <= 3) { Assert.AreEqual(0, game.sortedPlayers[1].hand.count); } else { Assert.AreEqual(3, preHand - game.sortedPlayers[1].hand.count); } }
public void PatchouliBestMagicTest() { THHGame game = TestGameflow.initStandardGame(null, new int[] { 0, 1 }, Enumerable.Repeat(new Patchouli(), 2).ToArray(), Enumerable.Repeat(Enumerable.Repeat(new BestMagic(), 30).ToArray(), 2).ToArray(), new GameOption() { }); game.run(); game.sortedPlayers[0].cmdInitReplace(game); game.sortedPlayers[1].cmdInitReplace(game); game.sortedPlayers[0].cmdTurnEnd(game); game.sortedPlayers[1].cmdTurnEnd(game); game.sortedPlayers[0].cmdTurnEnd(game); game.sortedPlayers[1].cmdTurnEnd(game); game.sortedPlayers[0].cmdTurnEnd(game); game.sortedPlayers[1].cmdTurnEnd(game); game.sortedPlayers[0].cmdTurnEnd(game); game.sortedPlayers[1].cmdUse(game, game.sortedPlayers[1].hand[0], 0); int preGem = game.sortedPlayers[1].gem; game.sortedPlayers[1].cmdUse(game, game.sortedPlayers[1].hand[0], 0); Assert.AreEqual(1, preGem - game.sortedPlayers[1].gem); }
public void PatchouliSylphyHornTest() { TouhouCardEngine.CardDefine[][] decks = new TouhouCardEngine.CardDefine[][] { Enumerable.Repeat(new RashFairy(), 30).ToArray(), Enumerable.Repeat(new AgniShine(), 30).ToArray() }; THHGame game = TestGameflow.initStandardGame(null, new int[] { 0, 1 }, Enumerable.Repeat(new Patchouli(), 2).ToArray(), decks, new GameOption() { }); game.run(); game.sortedPlayers[0].cmdInitReplace(game); game.sortedPlayers[1].cmdInitReplace(game); game.sortedPlayers[0].cmdUse(game, game.sortedPlayers[0].hand[0], 0); game.sortedPlayers[0].cmdTurnEnd(game); game.sortedPlayers[1].cmdTurnEnd(game); game.sortedPlayers[0].cmdUse(game, game.sortedPlayers[0].hand[0], 0); game.sortedPlayers[0].cmdTurnEnd(game); game.sortedPlayers[1].cmdTurnEnd(game); game.sortedPlayers[0].cmdTurnEnd(game); game.sortedPlayers[1].cmdTurnEnd(game); game.sortedPlayers[0].cmdTurnEnd(game); game.sortedPlayers[1].cmdTurnEnd(game); game.sortedPlayers[0].cmdTurnEnd(game); }
public void PatchouliSkillTest() { THHGame game = TestGameflow.initStandardGame(null, new int[] { 0, 1 }, Enumerable.Repeat(new Patchouli(), 2).ToArray(), Enumerable.Repeat(Enumerable.Repeat(new RashFairy(), 30).ToArray(), 2).ToArray(), new GameOption() { }); game.run(); game.sortedPlayers[0].cmdInitReplace(game); game.sortedPlayers[1].cmdInitReplace(game); game.sortedPlayers[0].cmdTurnEnd(game); game.sortedPlayers[1].cmdTurnEnd(game); game.sortedPlayers[0].cmdTurnEnd(game); int preHand = game.sortedPlayers[1].hand.count; int preDeck = game.sortedPlayers[1].deck.count; int preLife = game.sortedPlayers[1].master.getCurrentLife(); game.sortedPlayers[1].cmdUse(game, game.sortedPlayers[1].skill, 0, game.sortedPlayers[1].master); Assert.AreEqual(1, game.sortedPlayers[1].hand.count - preHand); Assert.AreEqual(-1, game.sortedPlayers[1].deck.count - preDeck); Assert.AreEqual(-2, game.sortedPlayers[1].master.getCurrentLife() - preLife); }
public IEnumerator remoteGameflowTest() { THHGame g1 = TestGameflow.initStandardGame(name: "客户端0", playersId: new int[] { 0, 1 }, option: new GameOption() { sortedPlayers = new int[] { 0, 1 } }); HostManager host = new GameObject(nameof(HostManager)).AddComponent <HostManager>(); host.logger = g1.logger; host.start(); ClientManager c1 = new GameObject(nameof(ClientManager)).AddComponent <ClientManager>(); c1.logger = g1.logger; c1.start(); Task task = c1.join(Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork)?.ToString(), host.port); (g1.answers as AnswerManager).client = c1; THHGame g2 = TestGameflow.initStandardGame(name: "客户端1", playersId: new int[] { 0, 1 }, option: new GameOption() { sortedPlayers = new int[] { 0, 1 } }); ClientManager c2 = new GameObject(nameof(ClientManager)).AddComponent <ClientManager>(); c2.logger = g2.logger; c2.start(); task = c2.join(Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork)?.ToString(), host.port); (g2.answers as AnswerManager).client = c2; yield return(new WaitUntil(() => task.IsCompleted)); _ = g1.run(); _ = g2.run(); yield return(new WaitForSeconds(.5f)); g1.players[0].cmdInitReplace(g1, g1.players[0].init[0, 1]); yield return(new WaitForSeconds(.5f)); g2.players[1].cmdInitReplace(g2); yield return(new WaitForSeconds(.5f)); g1.players[0].cmdUse(g1, g1.players[0].hand[0], 0); yield return(new WaitForSeconds(.5f)); g1.players[0].cmdTurnEnd(g1); yield return(new WaitForSeconds(.5f)); g2.players[1].cmdTurnEnd(g2); yield return(new WaitForSeconds(.5f)); g1.players[0].cmdAttack(g1, g1.players[0].field[0], g1.players[1].master); yield return(new WaitForSeconds(.5f)); g1.Dispose(); g2.Dispose(); }
public IEnumerator closeTest() { THHGame game = TestGameflow.initStandardGame(option: new GameOption() { timeoutForInitReplace = 5 }); Task task = game.run(); game.close(); yield return(new WaitForSeconds(5.5f)); Assert.False(game.isRunning); }
public IEnumerator closeTest() { THHGame game = TestGameflow.initStandardGame(option: new GameOption() { timeout = 5 }); Task task = game.run(); game.close(); yield return(new WaitForSeconds(5.5f)); Assert.True(task.IsCanceled); }
public void SunnyMilkTest() { THHGame game = TestGameflow.initGameWithoutPlayers(null, new GameOption() { shuffle = false }); game.createPlayer(0, "玩家0", game.getCardDefine <Reimu>(), Enumerable.Repeat(game.getCardDefine <SunnyMilk>() as CardDefine, 30)); game.createPlayer(1, "玩家1", game.getCardDefine <Reimu>(), Enumerable.Repeat(game.getCardDefine <SunnyMilk>() as CardDefine, 30)); game.skipTurnWhen(() => game.sortedPlayers[0].gem < 2); game.sortedPlayers[0].cmdUse(game, game.sortedPlayers[0].hand[0], 0); Assert.True(game.sortedPlayers[0].field[0].isStealth()); }
/// <summary> /// 初始化对局 /// </summary> /// <typeparam name="T1">卡牌1</typeparam> /// <typeparam name="T2">卡牌2</typeparam> /// <param name="card1Count"></param> /// <param name="card2Count"></param> /// <returns></returns> public THHGame GameInitWithoutPlayer <T1, T2>(int card1Count, int card2Count) where T1 : CardDefine where T2 : CardDefine { THHGame game = TestGameflow.initGameWithoutPlayers(null, new GameOption() { shuffle = false }); game.createPlayer(0, "玩家0", game.getCardDefine <Reimu>(), Enumerable.Repeat(game.getCardDefine <T1>() as CardDefine, 29) .Concat(Enumerable.Repeat(game.getCardDefine <T2>(), 1))); game.createPlayer(1, "玩家1", game.getCardDefine <Reimu>(), Enumerable.Repeat(game.getCardDefine <T1>() as CardDefine, 29) .Concat(Enumerable.Repeat(game.getCardDefine <T2>(), 1))); game.run(); game.sortedPlayers[0].cmdInitReplace(game); game.sortedPlayers[1].cmdInitReplace(game); return(game); }
public IEnumerator surrenderTest() { THHGame game = TestGameflow.initStandardGame(); game.run(); //yield return new WaitUntil(() => //{ // return game.answers.getLastRequest(game.players[0].id) is InitReplaceRequest; //}); yield return(game.players[0].cmdSurrender(game).wait()); THHGame.GameEndEventArg gameEnd = game.triggers.getRecordedEvents().LastOrDefault(e => e is THHGame.GameEndEventArg) as THHGame.GameEndEventArg; Assert.AreEqual(game.players[1], gameEnd.winners[0]); game.Dispose(); yield break; }
public IEnumerator run_InitReplaceTest() { THHGame game = TestGameflow.initGameWithoutPlayers(null, GameOption.Default); THHPlayer player = game.createPlayer(1, "玩家1", game.getCardDefine <TestMaster>(), Enumerable.Repeat(game.getCardDefine <TestServant>(), 30)); game.createPlayer(2, "玩家2", game.getCardDefine <TestMaster>(), Enumerable.Repeat(game.getCardDefine <TestServant>(), 30)); AI ai = new AI(game, player); _ = game.run(); yield return(new WaitForSeconds(.1f)); game.players[1].cmdInitReplace(game); yield return(new WaitForSeconds(1f)); Assert.True(game.triggers.getRecordedEvents().Any(e => e is THHGame.StartEventArg)); }
public void LunaChildTest() { THHGame game = TestGameflow.initGameWithoutPlayers(null, new GameOption() { shuffle = false }); game.createPlayer(0, "玩家0", game.getCardDefine <Reimu>(), Enumerable.Repeat(game.getCardDefine <LunaChild>() as CardDefine, 30)); game.createPlayer(1, "玩家1", game.getCardDefine <Reimu>(), Enumerable.Repeat(game.getCardDefine <LunaChild>() as CardDefine, 29) .Concat(Enumerable.Repeat(game.getCardDefine <DefaultServant>(), 1))); game.skipTurnWhen(() => game.sortedPlayers[0].gem < 3); game.sortedPlayers[0].cmdUse(game, game.sortedPlayers[0].hand[0], 0); Assert.False(game.sortedPlayers[0].field[0].isStealth()); //default随从一开始没有潜行 game.sortedPlayers[0].cmdUse(game, game.sortedPlayers[0].hand[1], 1, game.sortedPlayers[0].field[0]); Assert.True(game.sortedPlayers[0].field[0].isStealth()); //露娜出场后default随从变为潜行状态 }
public void BeerFairyTest() { THHGame game = TestGameflow.initGameWithoutPlayers(null, new GameOption() { shuffle = false }); game.createPlayer(0, "玩家0", game.getCardDefine <Reimu>(), Enumerable.Repeat(game.getCardDefine <BeerFairy>() as CardDefine, 30)); game.createPlayer(1, "玩家1", game.getCardDefine <Reimu>(), Enumerable.Repeat(game.getCardDefine <BeerFairy>() as CardDefine, 30)); game.skipTurnWhen(() => game.sortedPlayers[0].gem < 2); int handCardNum = game.sortedPlayers[0].hand.count; game.sortedPlayers[0].cmdUse(game, game.sortedPlayers[0].hand[0], 0); Assert.AreEqual(handCardNum, game.sortedPlayers[0].hand.count); //使用了一张牌后,又获得一张牌,手牌数没变 Assert.True(game.sortedPlayers[0].hand[handCardNum - 1].GetType().IsSubclassOf(typeof(ServantCardDefine))); }
public void rashFairyTest() { THHGame game = TestGameflow.initStandardGame(null, new int[] { 0, 1 }, Enumerable.Repeat(new Reimu(), 2).ToArray(), Enumerable.Repeat(Enumerable.Repeat(new RashFairy(), 30).ToArray(), 2).ToArray(), new GameOption() { }); game.run(); game.sortedPlayers[0].cmdInitReplace(game); game.sortedPlayers[1].cmdInitReplace(game); game.sortedPlayers[0].cmdUse(game, game.sortedPlayers[0].hand[0], 0); Assert.True(game.sortedPlayers[0].field[0].isCharge()); Assert.True(game.sortedPlayers[0].field[0].isReady()); }