Пример #1
0
        private void onReceivedPut(string data)
        {
            string gridStr = data.Split(',')[1].Substring(1);
            string turnStr = data.Split(',')[2].Substring(7);

            Dispatcher.BeginInvokeOnMainThread(() =>
            {
                ReversiLogic.Turn nextTurn = (turnStr == "Black") ? ReversiLogic.Turn.Black : ReversiLogic.Turn.White;
                reversi.PutGrid(gridStr, nextTurn);
            });
        }
Пример #2
0
        protected async void onGameFinished(object sender, ReversiLogic.Turn whoWon)
        {
            updateGameViewBTNs((sender as ReversiLogic).GameGrid);
            string winner;
            string telegram = "FIN, ";

            switch (whoWon)
            {
            case ReversiLogic.Turn.None:
                winner    = "平手";
                telegram += "Draw";
                break;

            case ReversiLogic.Turn.Black:
                winner    = "黑的";
                telegram += "Black";
                break;

            case ReversiLogic.Turn.White:
                winner    = "白的";
                telegram += "White";
                break;

            default:
                winner    = "平手";
                telegram += "Draw";
                break;
            }
            sendTCPPacket(telegram);
            await DisplayAlert("誰贏了?", winner, "好喔");

            bool anotherGameSel = await DisplayAlert("再來一局?", "你要再來一局嗎?", "好", "不要");

            if (anotherGameSel)
            {
                initGame();
            }
            else
            {
                bool quitSel = await DisplayAlert("不然呢?", "你想要怎樣", "退出", "待著");

                if (quitSel)
                {
                    Navigation.PopModalAsync();
                }
                else
                {
                    //Non action
                }
            }
        }
Пример #3
0
        private async void initGame()
        {
            playerRole = (DateTime.Now.Second % 2 == 0) ? ReversiLogic.Turn.Black : ReversiLogic.Turn.White;
            reversi.InitGame();
            if (playerRole == ReversiLogic.Turn.Black)
            {
                await DisplayAlert("你是 黑色", "你是 黑色", "好喔");
            }
            else
            {
                await DisplayAlert("你是 白色", "你是 白色", "好喔");

                Task.Run(() => { aiMove(ReversiLogic.Turn.Black); });
            }
        }
Пример #4
0
        private void aiMove(ReversiLogic.Turn nowMoving)
        {
            var canMove = reversi.getCanPutWithDiff(nowMoving);

            //Bigger in Front
            canMove.Sort((p2, p1) =>
            {
                return(p1.Value.CompareTo(p2.Value));
            });

            int row = -1;
            int col = -1;

            switch (diffculty)
            {
            case Diffculty.Easy:
                row = canMove[canMove.Count - 1].Key.Key;
                col = canMove[canMove.Count - 1].Key.Value;
                break;

            case Diffculty.Mediem:
                row = canMove[canMove.Count / 2].Key.Key;
                col = canMove[canMove.Count / 2].Key.Value;
                break;

            case Diffculty.Hard:
                row = canMove[0].Key.Key;
                col = canMove[0].Key.Value;
                break;

            case Diffculty.Random:
                Random rand = new Random((int)DateTime.Now.Ticks);
                int    idx  = rand.Next() % canMove.Count;
                row = canMove[idx].Key.Key;
                col = canMove[idx].Key.Value;
                break;
            }
            if (doAI_Wait)
            {
                System.Threading.Thread.Sleep(300);
            }
            Dispatcher.BeginInvokeOnMainThread(() =>
            {
                reversi.PutDot(row, col);
            });
        }