private void RestartGameState() { gameEnded = false; IsPlayerRed = radioButtonColorRed.Checked; IsPlayerStarting = radioButtonStartingHuman.Checked; TimeToProcess = (int)numericUpDownTimeProcess.Value; ExplorationFactor = (double)numericUpDownExplorationFactor.Value; tableLayoutPanelGamePanel.Controls.Clear(); for (int i = 0; i < tableLayoutPanelGamePanel.ColumnCount; i++) { for (int j = 0; j < tableLayoutPanelGamePanel.RowCount; j++) { var guiElement = new Panel { Dock = DockStyle.Fill, BackgroundImageLayout = ImageLayout.Zoom, }; int locali = i; guiElement.Click += new EventHandler((x, y) => { if (gameEnded) { MessageBox.Show("Please start new game!"); return; } if (MCTSLogic.GetBoard().Fields[0, locali] != FieldType.Empty) { MessageBox.Show("Column is full!"); return; } MCTSLogic.MakeMove(locali); tableLayoutPanelGamePanel.Refresh(); if (MCTSLogic.IsEnd) { MessageBox.Show("Player has won!"); gameEnded = true; } if (gameEnded) { return; } var move = MCTSLogic.GenerateMove(); MCTSLogic.MakeMove(move); tableLayoutPanelGamePanel.Refresh(); if (MCTSLogic.IsEnd) { MessageBox.Show("AI has won!"); gameEnded = true; } } ); tableLayoutPanelGamePanel.Controls.Add( guiElement, i, j); } } }
private void tableLayoutPanelGamePanel_Paint(object sender, PaintEventArgs e) { if (MCTSLogic != null) { currentGameBoard = MCTSLogic.GetBoard(); for (int i = 0; i < currentGameBoard.Rows; i++) { for (int j = 0; j < currentGameBoard.Columns; j++) { var boardElement = tableLayoutPanelGamePanel.GetControlFromPosition(j, i); if (boardElement.BackgroundImage == null) { switch (currentGameBoard.Fields[i, j]) { case FieldType.Empty: break; case FieldType.PlayerOne: boardElement.BackgroundImage = (IsPlayerStarting && IsPlayerRed) || (!IsPlayerStarting && !IsPlayerRed) ? Resources.RedPlayer : Resources.YellowPlayer; break; case FieldType.PlayerTwo: boardElement.BackgroundImage = (!IsPlayerStarting && IsPlayerRed) || (IsPlayerStarting && !IsPlayerRed) ? Resources.RedPlayer : Resources.YellowPlayer; break; } } } } } }