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); }); }
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 } } }
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); }); } }
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); }); }