コード例 #1
0
        async void onButtonClick(object sender, EventArgs eventArgs)
        {
            var button = (Button)sender;

            //Toast.MakeText(this, "Clicked " + button.Id, ToastLength.Short).Show();

            if (current == OX.O)
            {
                button.SetBackgroundResource(Resource.Drawable.circle);
                button.Text = "O";
                current     = OX.X;
            }
            else
            {
                button.SetBackgroundResource(Resource.Drawable.cross);
                button.Text = "X";
                current     = OX.O;
            }

            button.Clickable = false;

            clickedButtonsCounter++;

            checkIfWon();
        }
コード例 #2
0
        /// <summary>
        /// Returns the result of the last move made, provided the cell of the last move.
        /// </summary>
        /// <param name="cell"></param>
        /// <returns></returns>
        private Result GetResult(TableLayoutPanelCellPosition cell, Player player)
        {
            int row = cell.Row;
            int col = cell.Column;

            // Check horizontal and vertical containing the cell.
            OX[] horizontal = new OX[3];
            OX[] vertical   = new OX[3];
            for (int i = 0; i < 3; i++)
            {
                horizontal[i] = gameTable[row, i];
                vertical[i]   = gameTable[i, col];
            }
            if (ThreeConsecutive(horizontal).Length != 0)
            {
                return(FinalResult(player));
            }

            // Check if a diagonal is filled.
            if (DiagonalOver(row, col))
            {
                return(FinalResult(player));
            }
            ;

            // If not, check if board is full and return a tie game if it is.
            if (remainingCells.Count == 0)
            {
                return(FinalResult());
            }

            // If game is not over, return Null Result.
            return(Result.Null);
        }
コード例 #3
0
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.activity_main);

            var toolbar = FindViewById <Toolbar>(Resource.Id.toolbar);

            SetActionBar(toolbar);

            buttons = new Button[, ] {
                { FindViewById <Button>(Resource.Id.button00),
                  FindViewById <Button>(Resource.Id.button01),
                  FindViewById <Button>(Resource.Id.button02) },
                { FindViewById <Button>(Resource.Id.button10),
                  FindViewById <Button>(Resource.Id.button11),
                  FindViewById <Button>(Resource.Id.button12) },
                { FindViewById <Button>(Resource.Id.button20),
                  FindViewById <Button>(Resource.Id.button21),
                  FindViewById <Button>(Resource.Id.button22) }
            };

            foreach (var button in buttons)
            {
                button.Click += onButtonClick;
            }

            current = OX.O;

            FindViewById <Button>(Resource.Id.restartButton).Click += onResetButtonClick;
        }
コード例 #4
0
        public GameWindow()
        {
            InitializeComponent();

            Gameboard = new Button[3, 3]
            {
                { Button00, Button10, Button20 },
                { Button01, Button11, Button12 },
                { Button02, Button12, Button22 }
            };

            RemainingCoordinates = new HashSet <int[]>
            {
                Coords(0, 0),
                Coords(1, 0),
                Coords(2, 0),
                Coords(0, 1),
                Coords(1, 1),
                Coords(1, 2),
                Coords(0, 2),
                Coords(1, 2),
                Coords(2, 2)
            };

            PlayerOX = OX.O;
            CpuOX    = OX.X;
        }
コード例 #5
0
 private OX OtherChoice(OX choice)
 {
     if (choice == OX.O)
     {
         return(OX.X);
     }
     return(OX.X);
 }
コード例 #6
0
 private string ToString(OX choice)
 {
     if (choice == OX.N)
     {
         return(" ");
     }
     if (choice == OX.O)
     {
         return("O");
     }
     return("X");
 }
コード例 #7
0
 /// <summary>
 /// Interprets an OX as a string.
 /// </summary>
 /// <param name="ox"></param>
 /// <returns></returns>
 private string ToString(OX ox)
 {
     if (ox == OX.O)
     {
         return("O");
     }
     else if (ox == OX.X)
     {
         return("X");
     }
     return(" ");
 }
コード例 #8
0
        private OX[] ThreeConsecutive(OX[] oX)
        {
            OX first = oX[0];

            for (int i = 0; i < oX.Length; i++)
            {
                if (oX[i] != first)
                {
                    return(new OX[] { });
                }
            }
            return(oX);
        }
コード例 #9
0
        private void FillCell(TableLayoutPanelCellPosition cell, OX choice)
        {
            //// Store a button inside the cell.
            //cellTable[cell.Row, cell.Column].Gr
            Button button = (Button)GameTable.GetControlFromPosition(cell.Column, cell.Row);

            button.Text = ToString(choice);

            // Update the gameTable.
            gameTable[cell.Row, cell.Column] = choice;
            // Remove from remaining cells.
            remainingCells.Remove(new int[2] {
                cell.Row, cell.Column
            });
        }
コード例 #10
0
 // Returns elements of forward diagonal if diagTest = true,
 // and reverse diagonal if diagTest = false.
 private OX[] Diagonal(bool diagTest)
 {
     OX[] diag = new OX[3];
     if (diagTest)
     {
         for (int i = 0; i < 3; i++)
         {
             diag[i] = gameTable[i, i];
         }
         return(diag);
     }
     for (int i = 0; i < 3; i++)
     {
         diag[i] = gameTable[i, 3 - i];
     }
     return(diag);
 }
コード例 #11
0
        public void TestWinnerOutcome()
        {
            OX.StartingPosition1 = 0;
            OX.RacetrackLength1  = 50;
            int BettingAmount = 50;
            int OXNumber      = 1;
            int expectedWin   = 100;
            int expectedLose  = 0;

            OXs[0] = new OX()
            {
                OXPictureBox = null
            };
            OXs[1] = new OX()
            {
                OXPictureBox = null
            };
            Amr       = objFactory.getPunter("Amr", null, null);
            Amr.money = BettingAmount;
            Amr.PlaceBet((int)BettingAmount, OXNumber);

            bool nowin = true;
            int  win   = -1;

            while (nowin)
            {
                for (int i = 0; i < OXs.Length; i++)
                {
                    if (OX.Run(OXs[i]))
                    {
                        win = i + 1;
                        Amr.Collect(win);
                        nowin = false;
                    }
                }
            }
            if (Amr.gamble.OXNum == win)
            {
                Assert.AreEqual(expectedWin, Amr.money, "Account not credited correctly");
            }
            if (Amr.gamble.OXNum != win)
            {
                Assert.AreEqual(expectedLose, Amr.money, "Account not debited correctly");
            }
        }
コード例 #12
0
        private void MovePlayer(Player player, TableLayoutPanelCellPosition cell)
        {
            OX ox = Marker(player);

            // Fill the cell of the player/computer.
            if (player == Player.Main)
            {
                FillCell(cell, choice);
            }
            else
            {
                FillCell(cell, OtherChoice(choice));
            }

            // Check if the game ends and update appropriately.
            var result = GetResult(cell, player);

            if (result != Result.Null)
            {
                // If player made last move, it's either a win or a tie.
                ResetGame(GetResult(cell, player));
            }
        }