Exemplo n.º 1
0
        private void buildBoard(Player.PublicInfo info, int focus, StringBuilder[] builders)
        {
            if (info.board.Count == 0)
            {
                return;
            }
            int firstIdx = (focus == 0) ? 0 : 2;

            builders[0].Append(focusFrame[firstIdx * 3]);
            builders[1].Append(focusFrame[firstIdx * 3 + 1]);
            builders[2].Append("  ");
            builders[3].Append("  ");
            builders[4].Append("  ");
            builders[5].Append("  ");
            builders[6].Append(focusFrame[firstIdx * 3 + 1]);
            builders[7].Append(focusFrame[firstIdx * 3 + 2]);
            for (int i = 0; i < info.board.Count; ++i)
            {
                BoardObject obj       = info.board[i];
                string[]    toks      = info.board[i].GetDescription().Split(new char[] { ',' }, 2);
                string[]    valueToks = toks[0].Split('/');
                string[]    nameToks  = getNameToksForBoard(toks[1]);
                int         focusIdx  = 1 + i - focus;
                if (focusIdx < 0 || focusIdx > 1)
                {
                    focusIdx = 2;
                }
                if (obj is Monster && (obj as Monster).CanAttack())
                {
                    builders[0].AppendFormat("{0,2}┌───╮{1}", valueToks[0], focusFrame[focusIdx * 3]);
                    builders[1].AppendFormat("┌╯      │{0}", focusFrame[focusIdx * 3 + 1]);
                    builders[2].AppendFormat("│{0,8}│  ", nameToks[0]);
                    builders[3].AppendFormat("│{0,8}│  ", nameToks.Length > 1 ? nameToks[1] : "");
                    builders[4].Append("├─╮╭─┤  ");
                    builders[5].AppendFormat("│{0,2}├┤{1,2}│  ", valueToks[1], valueToks[2]);
                    builders[6].AppendFormat("╰─╯╰─╯{0}", focusFrame[focusIdx * 3 + 1]);
                    builders[7].AppendFormat(" ︾︾︾︾︾ {0}", focusFrame[focusIdx * 3 + 2]);
                }
                else
                {
                    builders[0].AppendFormat("            {0}", focusFrame[focusIdx * 3]);
                    builders[1].AppendFormat("{0,2}┌───╮{1}", valueToks[0], focusFrame[focusIdx * 3 + 1]);
                    builders[2].AppendFormat("┌╯      │  ");
                    builders[3].AppendFormat("│{0,8}│  ", nameToks[0]);
                    builders[4].AppendFormat("│{0,8}│  ", nameToks.Length > 1 ? nameToks[1] : "");
                    if (valueToks.Length > 1)
                    {
                        builders[5].Append("├─╮╭─┤  ");
                        builders[6].AppendFormat("│{0,2}├┤{1,2}│{2}", valueToks[1], valueToks[2], focusFrame[focusIdx * 3 + 1]);
                        builders[7].AppendFormat("╰─╯╰─╯{0}", focusFrame[focusIdx * 3 + 2]);
                    }
                    else
                    {
                        builders[5].Append("│        │  ");
                        builders[6].AppendFormat("└────┘{0}", focusFrame[focusIdx * 3 + 1]);
                        builders[7].AppendFormat("            {0}", focusFrame[focusIdx * 3 + 2]);
                    }
                }
            }
        }
Exemplo n.º 2
0
        public InputHandler Launch(Game game, Player player, Screen screen)
        {
            Player.PublicInfo[] info = new Player.PublicInfo[] { player.GetPublicInfo(), game.GetOppositeInfo(player.ID) };
            screen.RefreshOpp(game.turnCount, info[1], false);
            screen.RefreshSelf(info[0], false);

            return(new HandHandler(player.GetHandDescription(), focus));
        }
Exemplo n.º 3
0
        public void RefreshSelf(Player.PublicInfo selfInfo, bool focusFace, int focusBoard)
        {
            dirtyBit = true;

            string name = (string)selfInfo.face.name.Clone();

            centerAlign(ref name, 12);

            string crystal = new string('●', selfInfo.currentCrystal);

            if (selfInfo.maximumCrystal > selfInfo.currentCrystal)
            {
                crystal = crystal.PadRight(selfInfo.maximumCrystal, '◎');
            }
            crystal = crystal.PadRight(10, '○');

            StringBuilder[] selfBoardBuilders = new StringBuilder[8];
            for (int i = 0; i < 8; ++i)
            {
                selfBoardBuilders[i] = new StringBuilder();
            }
            buildBoard(selfInfo, focusBoard, selfBoardBuilders);

            int width = 2 + 14 * selfInfo.board.Count;

            for (int i = 0; i < 8; ++i)
            {
                content[13 + i] = selfBoardBuilders[i].ToString();
                centerAlign(ref content[13 + i], width, 78);
            }
            content[21] = String.Format(
                "                               {0}            {1}",
                focusFace ? focusFrame[0] : "  ",
                focusFace ? focusFrame[3] : "  "
                );
            content[22] = String.Format(
                "                  Cemetery: {0,2} {1}   HP: {2,2}   {3}",
                selfInfo.cemeteryNumber,
                focusFace ? focusFrame[1] : "  ",
                selfInfo.face.hp,
                focusFace ? focusFrame[1] : "  "
                );
            content[23] = String.Format(
                "            Deck: {0,2}  Hand: {1,2} {2}{3}{4}     {5,2}/{6,2} {7}",
                selfInfo.deckNumber, selfInfo.handNumber,
                focusFace ? focusFrame[1] : "  ",
                name,
                focusFace ? focusFrame[1] : "  ",
                selfInfo.currentCrystal, selfInfo.maximumCrystal,
                crystal
                );
            content[24] = String.Format(
                "                               {0}            {1}",
                focusFace ? focusFrame[2] : "  ",
                focusFace ? focusFrame[5] : "  "
                );
        }
Exemplo n.º 4
0
        public void RefreshOpp(int turnCount, Player.PublicInfo oppInfo, bool focusFace, int focusBoard)
        {
            dirtyBit = true;

            string name = (string)oppInfo.face.name.Clone();

            centerAlign(ref name, 12);

            string crystal = new string('●', oppInfo.currentCrystal);

            if (oppInfo.maximumCrystal > oppInfo.currentCrystal)
            {
                crystal = crystal.PadRight(oppInfo.maximumCrystal, '◎');
            }
            crystal = crystal.PadRight(10, '○');

            StringBuilder[] oppBoardBuilders = new StringBuilder[8];
            for (int i = 0; i < 8; ++i)
            {
                oppBoardBuilders[i] = new StringBuilder();
            }
            buildBoard(oppInfo, focusBoard, oppBoardBuilders);

            content[0] = String.Format("────╮                     {0}            {1}",
                                       focusFace ? focusFrame[0] : "  ",
                                       focusFace ? focusFrame[3] : "  "
                                       );
            content[1] = String.Format(
                "Turn: {0,2}│  Deck: {1,2}  Hand: {2,2} {3}{4}{5}     {6,2}/{7,2} {8}",
                turnCount, oppInfo.deckNumber, oppInfo.handNumber,
                focusFace ? focusFrame[1] : "  ",
                name,
                focusFace ? focusFrame[1] : "  ",
                oppInfo.currentCrystal, oppInfo.maximumCrystal,
                crystal
                );
            content[2] = String.Format(
                "────╯        Cemetery: {0,2} {1}   HP: {2,2}   {3}",
                oppInfo.cemeteryNumber,
                focusFace ? focusFrame[1] : "  ",
                oppInfo.face.hp,
                focusFace ? focusFrame[1] : "  "
                );
            content[3] = String.Format(
                "                               {0}            {1}",
                focusFace ? focusFrame[2] : "  ",
                focusFace ? focusFrame[5] : "  "
                );
            int width = 2 + 14 * oppInfo.board.Count;

            for (int i = 0; i < 8; ++i)
            {
                content[4 + i] = oppBoardBuilders[i].ToString();
                centerAlign(ref content[4 + i], width, 78);
            }
        }
Exemplo n.º 5
0
        public InputHandler Launch(Game game, Player player, Screen screen)
        {
            ConsoleKeyInfo keyInfo = Console.ReadKey(true);

            if (keyInfo.Key == ConsoleKey.Escape)
            {
                return(new CmdHandler(this));
            }
            else if (keyInfo.Key == ConsoleKey.DownArrow)
            {
                HandHandler rtn = new HandHandler(player.GetHandDescription(), focus);
                focus = -1;
                UpdateScreen(game, player, screen);
                return(rtn);
            }
            else if (keyInfo.Key == ConsoleKey.UpArrow)
            {
                Player.PublicInfo info = game.GetOppositeInfo(player.ID);
                if (info.board.Count > 0)
                {
                    OppBoardHandler rtn = new OppBoardHandler(info, focus);
                    focus = -1;
                    UpdateScreen(game, player, screen);
                    return(rtn);
                }
            }
            else if (keyInfo.Key == ConsoleKey.RightArrow)
            {
                if (focus < selfInfo.board.Count - 1)
                {
                    ++focus;
                }
            }
            else if (keyInfo.Key == ConsoleKey.LeftArrow)
            {
                if (focus > 0)
                {
                    --focus;
                }
            }
            else if (keyInfo.Key == ConsoleKey.Enter)
            {
                Monster monster = selfInfo.board[focus] as Monster;
                if (monster != null && monster.CanAttack())
                {
                    AttackTargetAction attackAction = new AttackTargetAction(Action.SELF | Action.BOARD | (focus & Action.INDEX_MASK), monster);

                    Player.PublicInfo[] info = new Player.PublicInfo[] { player.GetPublicInfo(), game.GetOppositeInfo(player.ID) };
                    return(new ChooseTargetHandler(info, attackAction, new ActionChainHandler(attackAction, new RefreshHandler(focus), null), this));
                }
            }

            return(this);
        }
Exemplo n.º 6
0
 public OppBoardHandler(Player.PublicInfo oppInfo, int preferFocus)
 {
     this.oppInfo = oppInfo;
     focus        = preferFocus;
     if (focus >= oppInfo.board.Count)
     {
         focus = oppInfo.board.Count - 1;
     }
     if (focus < 0)
     {
         focus = 0;
     }
 }
Exemplo n.º 7
0
 public SelfBoardHandler(Player.PublicInfo selfInfo, int preferFocus)
 {
     this.selfInfo = selfInfo;
     focus         = preferFocus;
     if (focus >= selfInfo.board.Count)
     {
         focus = selfInfo.board.Count - 1;
     }
     if (focus < 0)
     {
         focus = 0;
     }
 }
Exemplo n.º 8
0
        public void UpdateAllTargetObject(int playerID, TargetFilter filter, TargetFixer updater)
        {
            Player.PublicInfo[] info = new Player.PublicInfo[] { player[0].GetPublicInfo(), player[1].GetPublicInfo() };
            int[] playerPattern;
            if (player[0].ID == playerID)
            {
                playerPattern = new int[] { Action.SELF, Action.OPP }
            }
            ;
            else
            {
                playerPattern = new int[] { Action.OPP, Action.SELF }
            };

            for (int i = 0; i < 2; ++i)
            {
                int         facePattern = playerPattern[i] | Action.FACE;
                Player.Face face        = info[i].face;
                if (filter(facePattern, face))
                {
                    updater(face);
                    player[i].UpdateFace(face);
                }
                List <int>         indices = new List <int>();
                List <BoardObject> objs    = new List <BoardObject>();
                for (int j = 0; j < info[i].board.Count; ++j)
                {
                    int         boardPattern = playerPattern[i] | Action.BOARD | (j & Action.INDEX_MASK);
                    BoardObject obj          = info[i].board[j];
                    if (filter(boardPattern, obj))
                    {
                        updater(obj);
                        indices.Add(j);
                        objs.Add(obj);
                    }
                }
                if (indices.Count > 0)
                {
                    player[i].UpdateBoard(indices, objs);
                }
            }
        }
    }
Exemplo n.º 9
0
        public InputHandler Launch(Game game, Player player, Screen screen)
        {
            ConsoleKeyInfo keyInfo = Console.ReadKey(true);

            if (keyInfo.Key == ConsoleKey.Escape)
            {
                return(new CmdHandler(this));
            }
            else if (keyInfo.Key == ConsoleKey.RightArrow)
            {
                if (focus < hand.Length - 1)
                {
                    ++focus;
                }
            }
            else if (keyInfo.Key == ConsoleKey.LeftArrow)
            {
                if (focus > 0)
                {
                    --focus;
                }
            }
            else if (keyInfo.Key == ConsoleKey.UpArrow)
            {
                Player.PublicInfo[] info = new Player.PublicInfo[] { player.GetPublicInfo(), game.GetOppositeInfo(player.ID) };
                if (info[0].board.Count > 0)
                {
                    return(new SelfBoardHandler(info[0], focus));
                }
                if (info[1].board.Count > 0)
                {
                    return(new OppBoardHandler(info[1], focus));
                }
                return(this);
            }
            else if (keyInfo.Key == ConsoleKey.Enter)
            {
                return(player.PrepareNthCard(game, focus, new RefreshHandler(focus), this));
            }

            return(this);
        }
Exemplo n.º 10
0
        public PublicInfo GetPublicInfo()
        {
            Player.PublicInfo rtn = new Player.PublicInfo();

            rtn.currentCrystal = this.currentCrystal;
            rtn.maximumCrystal = this.maximumCrystal;
            rtn.handNumber     = hand.Count;
            rtn.deckNumber     = deck.GetNumber();
            rtn.cemeteryNumber = cemetery.Count;
            rtn.board          = new List <BoardObject>();
            rtn.face           = new Face(nickname, hp);
            rtn.ID             = this.ID;

            foreach (BoardObject obj in board)
            {
                rtn.board.Add(obj);
            }

            return(rtn);
        }
Exemplo n.º 11
0
        public InputHandler Launch(Game game, Player player, Screen screen)
        {
            ConsoleKeyInfo keyInfo = Console.ReadKey(true);

            if (keyInfo.Key == ConsoleKey.Escape)
            {
                return(new CmdHandler(this));
            }
            else if (keyInfo.Key == ConsoleKey.DownArrow)
            {
                focus = -1;
                UpdateScreen(game, player, screen);
                Player.PublicInfo info = player.GetPublicInfo();
                if (info.board.Count > 0)
                {
                    return(new SelfBoardHandler(info));
                }
                else
                {
                    return(new HandHandler(player.GetHandDescription()));
                }
            }
            else if (keyInfo.Key == ConsoleKey.RightArrow)
            {
                if (focus < oppInfo.board.Count - 1)
                {
                    ++focus;
                }
            }
            else if (keyInfo.Key == ConsoleKey.LeftArrow)
            {
                if (focus > 0)
                {
                    --focus;
                }
            }

            return(this);
        }
Exemplo n.º 12
0
        public void DoTurn(Game game)
        {
            InitiateATurn();

            Player.PublicInfo[] info = new Player.PublicInfo[] { GetPublicInfo(), game.GetOppositeInfo(ID) };
            screen.RefreshOpp(game.turnCount, info[1], false);
            screen.RefreshSelf(info[0], false);

            InputHandler handler = new HandHandler(GetHandDescription());

            while (handler != null && !game.IsEnd())
            {
                if (handler is ScreenUpdater)
                {
                    (handler as ScreenUpdater).UpdateScreen(game, this, screen);
                }
                screen.Repaint();
                handler = handler.Launch(game, this, screen);
            }

            if (game.IsEnd())
            {
                Player.PublicInfo winnerInfo = game.GetWinner();
                info[0] = GetPublicInfo();
                info[1] = game.GetOppositeInfo(ID);
                screen.RefreshOpp(game.turnCount, info[1], false);
                screen.RefreshSelf(info[0], false);
                screen.ShowPopup(new string[] {
                    "Game set!!",
                    String.Format("The winner is {0}", winnerInfo.face.name),
                    (winnerInfo.ID == this.ID) ? "You win!!" : "You lose...."
                });
                screen.Repaint();
            }

            EndATurn();
        }
Exemplo n.º 13
0
 public override InputHandler DoAction(Game game, Player player, InputHandler success, InputHandler failure)
 {
     Player.PublicInfo[] info = new Player.PublicInfo[] { player.GetPublicInfo(), game.GetOppositeInfo(player.ID) };
     return(new ChooseTargetHandler(info, needTargetAction, new ActionChainHandler(next, success, failure), failure));
 }
Exemplo n.º 14
0
 public void RefreshSelf(Player.PublicInfo selfInfo, bool focusFace)
 {
     RefreshSelf(selfInfo, focusFace, -1);
 }
Exemplo n.º 15
0
 public void RefreshOpp(int turnCount, Player.PublicInfo oppInfo, bool focusFace)
 {
     RefreshOpp(turnCount, oppInfo, focusFace, -1);
 }
Exemplo n.º 16
0
 public SelfBoardHandler(Player.PublicInfo selfInfo)
 {
     this.selfInfo = selfInfo;
     focus         = 0;
 }
Exemplo n.º 17
0
 public OppBoardHandler(Player.PublicInfo oppInfo)
 {
     this.oppInfo = oppInfo;
     focus        = 0;
 }