Example #1
0
        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));
        }
Example #2
0
        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);
        }
Example #3
0
        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));
        }
Example #4
0
        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();
            }
        }
Example #5
0
 public abstract CommandState Update(Detective detective);
 public abstract CommandResponse Execute(ParsedCommand command, Detective detective);
Example #7
0
    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));
 }
Example #9
0
        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();
                }
            }
        }