public void basicGameLogicTest() { Node[] nodes = constructBasicBoard(); Player mrX = new MrX("Mr. X", 0); Player detective = new Detective("Detective", 1); mrX.setLocation(nodes[0]); detective.setLocation(nodes[4]); Assert.True(GameLogic.canMove(mrX)); Assert.True(GameLogic.canMove(detective)); mrX.move(nodes[3], TransportType.taxi); mrX.move(nodes[0], TransportType.taxi); mrX.move(nodes[3], TransportType.taxi); mrX.move(nodes[0], TransportType.taxi); mrX.move(nodes[2], TransportType.underground); mrX.move(nodes[0], TransportType.underground); mrX.move(nodes[2], TransportType.underground); mrX.move(nodes[0], TransportType.blackCard); mrX.move(nodes[1], TransportType.blackCard); mrX.move(nodes[0], TransportType.bus); mrX.move(nodes[1], TransportType.bus); mrX.move(nodes[0], TransportType.bus); Assert.False(GameLogic.canMove(mrX)); Player blockade1 = new Detective("Blockade 1", 2); Player blockade2 = new Detective("Blockade 2", 3); Player blockade3 = new Detective("Blockade 3", 4); blockade1.setLocation(nodes[1]); blockade2.setLocation(nodes[2]); blockade3.setLocation(nodes[3]); Assert.True(GameLogic.canMove(detective)); }
public void winLossTest() { Node[] nodes = constructBasicBoard(); Player mrX = new MrX("Mr. X", 0); Player detective = new Detective("Detective", 1); Dictionary<int, Player> players = new Dictionary<int, Player>(); players.Add(mrX.getId(), mrX); players.Add(detective.getId(), detective); mrX.setLocation(nodes[0]); detective.setLocation(nodes[4]); int dummyWinningPlayerId; Assert.False(GameLogic.checkWin(players, out dummyWinningPlayerId)); detective.move(nodes[0], TransportType.taxi); int firstWinningPlayerId; bool gameWon = GameLogic.checkWin (players, out firstWinningPlayerId); Assert.True(gameWon); Assert.AreEqual(1, firstWinningPlayerId); for(int i = 1; i < 10; i++){ detective.move(nodes[4], TransportType.taxi); } int secondWinningPlayerId; gameWon = GameLogic.checkWin (players, out secondWinningPlayerId); Assert.True(gameWon); Assert.AreEqual(0, secondWinningPlayerId); for(int i = 0; i < 8; i++){ detective.move(nodes[3], TransportType.bus); } for(int i = 0; i < 4; i++){ detective.move(nodes[3], TransportType.underground); } int thirdWinningPlayerId; gameWon = GameLogic.checkWin (players, out thirdWinningPlayerId); Assert.True(gameWon); Assert.AreEqual(0, thirdWinningPlayerId); }
public void playerTest() { Node[] nodes = constructBasicBoard(); Player mrX = new MrX("Mr. X", 0); Player detective = new Detective("Detective", 1); mrX.setLocation(nodes[0]); detective.setLocation(nodes[4]); Assert.AreEqual(nodes[0], mrX.getLocation()); Assert.AreEqual(nodes[4], detective.getLocation()); Assert.AreEqual(4, mrX.getTickets(TransportType.taxi)); Assert.AreEqual(3, mrX.getTickets(TransportType.bus)); Assert.AreEqual(3, mrX.getTickets(TransportType.underground)); Assert.AreEqual(2, mrX.getTickets(TransportType.blackCard)); Assert.AreEqual(10, detective.getTickets(TransportType.taxi)); Assert.AreEqual(8, detective.getTickets(TransportType.bus)); Assert.AreEqual(4, detective.getTickets(TransportType.underground)); detective.move(nodes[2], TransportType.taxi); Assert.AreEqual(nodes[2], detective.getLocation()); Assert.AreEqual(9, detective.getTickets(TransportType.taxi)); detective.move(nodes[3], TransportType.underground); Assert.AreEqual(nodes[3], detective.getLocation()); Assert.AreEqual(3, detective.getTickets(TransportType.underground)); detective.move(nodes[1], TransportType.bus); Assert.AreEqual(nodes[1], detective.getLocation()); Assert.AreEqual(7, detective.getTickets(TransportType.bus)); mrX.move(nodes[4], TransportType.blackCard); Assert.AreEqual(nodes[4], mrX.getLocation()); Assert.AreEqual(1, mrX.getTickets(TransportType.blackCard)); }
public static void erasePlayerRole(byte playerId) { PlayerControl player = Helpers.playerById(playerId); if (player == null) { return; } // Crewmate roles if (player == Mayor.mayor) { Mayor.clearAndReload(); } if (player == Engineer.engineer) { Engineer.clearAndReload(); } if (player == Sheriff.sheriff) { Sheriff.clearAndReload(); } if (player == Lighter.lighter) { Lighter.clearAndReload(); } if (player == Detective.detective) { Detective.clearAndReload(); } if (player == TimeMaster.timeMaster) { TimeMaster.clearAndReload(); } if (player == Medic.medic) { Medic.clearAndReload(); } if (player == Shifter.shifter) { Shifter.clearAndReload(); } if (player == Seer.seer) { Seer.clearAndReload(); } if (player == Hacker.hacker) { Hacker.clearAndReload(); } if (player == Child.child) { Child.clearAndReload(); } if (player == Tracker.tracker) { Tracker.clearAndReload(); } if (player == Snitch.snitch) { Snitch.clearAndReload(); } if (player == Swapper.swapper) { Swapper.clearAndReload(); } if (player == Spy.spy) { Spy.clearAndReload(); } // Impostor roles if (player == Morphling.morphling) { Morphling.clearAndReload(); } if (player == Camouflager.camouflager) { Camouflager.clearAndReload(); } if (player == Godfather.godfather) { Godfather.clearAndReload(); } if (player == Mafioso.mafioso) { Mafioso.clearAndReload(); } if (player == Janitor.janitor) { Janitor.clearAndReload(); } if (player == Vampire.vampire) { Vampire.clearAndReload(); } if (player == Eraser.eraser) { Eraser.clearAndReload(); } if (player == Trickster.trickster) { Trickster.clearAndReload(); } // Other roles if (player == Jester.jester) { Jester.clearAndReload(); } if (player == Lovers.lover1 || player == Lovers.lover2) // The whole Lover couple is being erased { Lovers.clearAndReload(); } if (player == Jackal.jackal) // Promote Sidekick and hence override the the Jackal or erase Jackal { if (Sidekick.promotesToJackal && Sidekick.sidekick != null && !Sidekick.sidekick.PPMOEEPBHJO.IAGJEKLJCCI) { RPCProcedure.sidekickPromotes(); } else { Jackal.clearAndReload(); } } if (player == Sidekick.sidekick) { Sidekick.clearAndReload(); } }
public abstract CommandState Update(Detective detective);
public abstract CommandResponse Execute(ParsedCommand command, Detective detective);
void Start() { // デバッグ用 if (initDatas == null) { initDatas = new List <InitData>(); initDatas.Add(new InitData(InitData.eCharaId.Detective, 0)); initDatas.Add(new InitData(InitData.eCharaId.Phantom0, 1)); initDatas.Add(new InitData(InitData.eCharaId.Phantom1, 2)); initDatas.Add(new InitData(InitData.eCharaId.Phantom2, 3)); } // 座標取得 var pointTrans = GameObject.Find("Points").transform; // お宝の座標 m_TresurePosDatas = new TresurePosDataBase[4]; m_TresurePosDatas[0] = new TresurePosDataBase(pointTrans.Find("ItemRespawnPoints/P1").position); m_TresurePosDatas[1] = new TresurePosDataBase(pointTrans.Find("ItemRespawnPoints/P2").position); m_TresurePosDatas[2] = new TresurePosDataBase(pointTrans.Find("ItemRespawnPoints/P3").position); m_TresurePosDatas[3] = new TresurePosDataBase(pointTrans.Find("ItemRespawnPoints/P4").position); // 怪盗リスポーン座標 m_phantomRespawnPosDatas = new Vector3[4]; m_phantomRespawnPosDatas[0] = pointTrans.Find("PhantomRespawnPoints (1)/P1").position; m_phantomRespawnPosDatas[1] = pointTrans.Find("PhantomRespawnPoints (1)/P2").position; m_phantomRespawnPosDatas[2] = pointTrans.Find("PhantomRespawnPoints (1)/P3").position; m_phantomRespawnPosDatas[3] = pointTrans.Find("PhantomRespawnPoints (1)/P4").position; // 探偵の座標 m_detectivePosData = pointTrans.Find("DetectiveRespawnPoints (2)/P1").position; // 全体のお宝 m_stockTreasures.Add(new TreasureData(eTreasureType.Ring)); m_stockTreasures.Add(new TreasureData(eTreasureType.Ring)); m_stockTreasures.Add(new TreasureData(eTreasureType.Ring)); m_stockTreasures.Add(new TreasureData(eTreasureType.Bracelet)); m_stockTreasures.Add(new TreasureData(eTreasureType.Bracelet)); m_stockTreasures.Add(new TreasureData(eTreasureType.Crown)); m_treasureMaxAll = m_stockTreasures.Count; m_treasureNumText = GameObject.Find("TreasureNum").GetComponent <Text>(); m_treasureNumText.gameObject.SetActive(false); m_moonBeginTransform = GameObject.Find("MoonBegin").GetComponent <RectTransform>(); m_moonEndTransform = GameObject.Find("MoonEnd").GetComponent <RectTransform>(); m_moonTransform = GameObject.Find("moon").GetComponent <RectTransform>(); m_moonTransform.gameObject.SetActive(false); m_timeText = GameObject.Find("timeText").GetComponent <Text>(); UpdateTreasureNumText(); for (int i = 0; i < initDatas.Count; i++) { if (initDatas[i].charaId == InitData.eCharaId.None) { continue; } string path = ""; Vector3 pos = Vector3.zero; switch (initDatas[i].charaId) { case InitData.eCharaId.Detective: path = "Prefabs/Character/Detective"; pos = m_detectivePosData; break; case InitData.eCharaId.Phantom0: path = "Prefabs/Character/Phantom"; pos = m_phantomRespawnPosDatas[0]; break; case InitData.eCharaId.Phantom1: path = "Prefabs/Character/Phantom2"; pos = m_phantomRespawnPosDatas[1]; break; case InitData.eCharaId.Phantom2: path = "Prefabs/Character/Phantom3"; pos = m_phantomRespawnPosDatas[2]; break; } var obj = Instantiate(Resources.Load(path)) as GameObject; obj.transform.position = pos; switch (initDatas[i].charaId) { case InitData.eCharaId.Detective: m_detective = obj.GetComponent <Detective>(); m_detective.Init(initDatas[i]); break; case InitData.eCharaId.Phantom0: m_phantom1 = obj.GetComponent <Phantom>(); m_phantom1.Init(initDatas[i]); break; case InitData.eCharaId.Phantom1: m_phantom2 = obj.GetComponent <Phantom>(); m_phantom2.Init(initDatas[i]); break; case InitData.eCharaId.Phantom2: m_phantom3 = obj.GetComponent <Phantom>(); m_phantom3.Init(initDatas[i]); break; } } //Instantiate(Resources.Load("Prefabs/Stage/Stage00")); CreateTresure(); FadeManager.TipsOn(); }
public override CommandResponse Execute(ParsedCommand command, Detective detective) { return(new CommandResponse("You've entered the Quit command", true)); }
public static void eraseAllRoles(this PlayerControl player) { foreach (var t in RoleData.allRoleTypes) { t.Value.GetMethod("eraseRole", BindingFlags.Public | BindingFlags.Static)?.Invoke(null, new object[] { player }); } // Crewmate roles if (player.isRole(RoleType.Mayor)) { Mayor.clearAndReload(); } if (player.isRole(RoleType.Engineer)) { Engineer.clearAndReload(); } if (player.isRole(RoleType.Detective)) { Detective.clearAndReload(); } if (player.isRole(RoleType.TimeMaster)) { TimeMaster.clearAndReload(); } if (player.isRole(RoleType.Medic)) { Medic.clearAndReload(); } if (player.isRole(RoleType.Shifter)) { Shifter.clearAndReload(); } if (player.isRole(RoleType.Seer)) { Seer.clearAndReload(); } if (player.isRole(RoleType.Hacker)) { Hacker.clearAndReload(); } if (player.isRole(RoleType.Tracker)) { Tracker.clearAndReload(); } if (player.isRole(RoleType.Snitch)) { Snitch.clearAndReload(); } if (player.isRole(RoleType.Swapper)) { Swapper.clearAndReload(); } if (player.isRole(RoleType.Spy)) { Spy.clearAndReload(); } if (player.isRole(RoleType.SecurityGuard)) { SecurityGuard.clearAndReload(); } if (player.isRole(RoleType.Bait)) { Bait.clearAndReload(); } if (player.isRole(RoleType.Medium)) { Medium.clearAndReload(); } // Impostor roles if (player.isRole(RoleType.Morphling)) { Morphling.clearAndReload(); } if (player.isRole(RoleType.Camouflager)) { Camouflager.clearAndReload(); } if (player.isRole(RoleType.Godfather)) { Godfather.clearAndReload(); } if (player.isRole(RoleType.Mafioso)) { Mafioso.clearAndReload(); } if (player.isRole(RoleType.Janitor)) { Janitor.clearAndReload(); } if (player.isRole(RoleType.Vampire)) { Vampire.clearAndReload(); } if (player.isRole(RoleType.Eraser)) { Eraser.clearAndReload(); } if (player.isRole(RoleType.Trickster)) { Trickster.clearAndReload(); } if (player.isRole(RoleType.Cleaner)) { Cleaner.clearAndReload(); } if (player.isRole(RoleType.Warlock)) { Warlock.clearAndReload(); } if (player.isRole(RoleType.Witch)) { Witch.clearAndReload(); } if (player.isRole(RoleType.Assassin)) { Assassin.clearAndReload(); } if (player.isRole(RoleType.EvilHacker)) { EvilHacker.clearAndReload(); } // Other roles if (player.isRole(RoleType.Jester)) { Jester.clearAndReload(); } if (player.isRole(RoleType.Arsonist)) { Arsonist.clearAndReload(); } if (player.isRole(RoleType.Sidekick)) { Sidekick.clearAndReload(); } if (player.isRole(RoleType.BountyHunter)) { BountyHunter.clearAndReload(); } if (player.isRole(RoleType.Vulture)) { Vulture.clearAndReload(); } if (player.isRole(RoleType.Lawyer)) { Lawyer.clearAndReload(); } if (player.isRole(RoleType.Pursuer)) { Pursuer.clearAndReload(); } if (Guesser.isGuesser(player.PlayerId)) { Guesser.clear(player.PlayerId); } if (player.isRole(RoleType.Jackal)) { // Promote Sidekick and hence override the the Jackal or erase Jackal if (Sidekick.promotesToJackal && Sidekick.sidekick != null && Sidekick.sidekick.isAlive()) { RPCProcedure.sidekickPromotes(); } else { Jackal.clearAndReload(); } } }