replaced the textLabel with a popup

This commit is contained in:
Falko Victor Habel 2024-04-29 10:19:59 +02:00
parent b0b04d23b1
commit ae3dfe9e10
2 changed files with 13 additions and 16 deletions

View File

@ -6,6 +6,7 @@ import (
"fyne.io/fyne/v2" "fyne.io/fyne/v2"
"fyne.io/fyne/v2/container" "fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/dialog"
"fyne.io/fyne/v2/layout" "fyne.io/fyne/v2/layout"
"fyne.io/fyne/v2/widget" "fyne.io/fyne/v2/widget"
) )
@ -24,14 +25,14 @@ const (
var gridContainer *fyne.Container var gridContainer *fyne.Container
// creates the button grid for the tictactoe game // creates the button grid for the tictactoe game
func MakeButtonGrid(rows, cols int) *fyne.Container { func MakeButtonGrid(rows, cols int, Window fyne.Window) *fyne.Container {
// generates layout and grid container // generates layout and grid container
gridLayout := layout.NewGridLayout(cols) gridLayout := layout.NewGridLayout(cols)
gridContainer = container.New(gridLayout) gridContainer = container.New(gridLayout)
// create the 3x3 Button grid // create the 3x3 Button grid
for row := 0; row < rows; row++ { for row := 0; row < rows; row++ {
for col := 0; col < cols; col++ { for col := 0; col < cols; col++ {
button := CreateButton(row, col) button := CreateButton(row, col, Window)
gridContainer.Add(button) gridContainer.Add(button)
} }
} }
@ -40,13 +41,13 @@ func MakeButtonGrid(rows, cols int) *fyne.Container {
} }
// create the button grid and adds key press handler for each grid-button // create the button grid and adds key press handler for each grid-button
func CreateButton(row, col int) *widget.Button { func CreateButton(row, col int, Window fyne.Window) *widget.Button {
button := widget.NewButton(" ", nil) button := widget.NewButton(" ", nil)
button.OnTapped = func() { button.OnTapped = func() {
if button.Text == " " { if button.Text == " " {
button.SetText(PLAYER_X) button.SetText(PLAYER_X)
Gameloop(row, col) Gameloop(row, col, Window)
} }
} }
return button return button
@ -65,7 +66,6 @@ func ResetButtonTexts(container *fyne.Container) {
{" ", " ", " "}, {" ", " ", " "},
} }
EnableAllButtons(gridContainer) EnableAllButtons(gridContainer)
TextLabel.SetText("TicTacToe")
} }
// apply AI opponent text to the button // apply AI opponent text to the button
@ -75,16 +75,17 @@ func ChangeButtonText(row, col int) {
// gameloop function for the game process: // gameloop function for the game process:
// human makes a move, AI counters // human makes a move, AI counters
func Gameloop(row, col int) { func Gameloop(row, col int, Window fyne.Window) {
const gameOverText string = "Game Over"
// starting with the human making a move // starting with the human making a move
board[row][col] = PLAYER_X board[row][col] = PLAYER_X
// checking if the game has been won by the human player // checking if the game has been won by the human player
if gameControl.PlayerHasWon(board, PLAYER_X) { if gameControl.PlayerHasWon(board, PLAYER_X) {
TextLabel.SetText("X Wins") dialog.ShowInformation(gameOverText, "X has won!", Window)
} }
// checking if the game is a draw // checking if the game is a draw
if gameControl.BoardisFull(board) { if gameControl.BoardisFull(board) {
TextLabel.SetText("Draw") dialog.ShowInformation(gameOverText, "It's a draw!", Window)
} }
// AI opponent makes a move // AI opponent makes a move
bestMove := opponent.Minimax(board, 0, true, PLAYER_O) bestMove := opponent.Minimax(board, 0, true, PLAYER_O)
@ -94,12 +95,12 @@ func Gameloop(row, col int) {
// check if AI opponent has won the game // check if AI opponent has won the game
if gameControl.PlayerHasWon(board, PLAYER_O) { if gameControl.PlayerHasWon(board, PLAYER_O) {
TextLabel.SetText("O Wins") dialog.ShowInformation(gameOverText, "O has won!", Window)
DisableAllButtons(gridContainer) DisableAllButtons(gridContainer)
} }
// checking if the game is a draw // checking if the game is a draw
if gameControl.BoardisFull(board) { if gameControl.BoardisFull(board) {
TextLabel.SetText("Draw") dialog.ShowInformation(gameOverText, "It's a draw!", Window)
DisableAllButtons(gridContainer) DisableAllButtons(gridContainer)
} }
} }

View File

@ -10,8 +10,6 @@ import (
"fyne.io/fyne/v2/widget" "fyne.io/fyne/v2/widget"
) )
var TextLabel *widget.Label
// creates a window for the TicTacToe game application. // creates a window for the TicTacToe game application.
func CreateWindow() fyne.Window { func CreateWindow() fyne.Window {
// Create the app. // Create the app.
@ -22,17 +20,15 @@ func CreateWindow() fyne.Window {
// Create a new window for the game application. // Create a new window for the game application.
Window := App.NewWindow("TicTacToe") Window := App.NewWindow("TicTacToe")
// Set the text of our TextLabel to TicTacToe
TextLabel = widget.NewLabel("TicTacToe")
// create the 3x3 Button grid // create the 3x3 Button grid
matchField := MakeButtonGrid(3, 3) matchField := MakeButtonGrid(3, 3, Window)
// Create a new button and a handler function, if it gets pressed. // Create a new button and a handler function, if it gets pressed.
restartButton := widget.NewButton("Restart", func() { restartButton := widget.NewButton("Restart", func() {
ResetButtonTexts(matchField) ResetButtonTexts(matchField)
}) })
// vertical box layout containg the top Items, here the textlabel and the button. // vertical box layout containg the top Items, here the textlabel and the button.
topItems := container.NewVBox(TextLabel, restartButton) topItems := container.NewVBox(restartButton)
// Generate content for the window using a border layout with the topItems and matchField as the children // Generate content for the window using a border layout with the topItems and matchField as the children
content := container.New(layout.NewBorderLayout(topItems, nil, nil, nil), topItems, matchField) content := container.New(layout.NewBorderLayout(topItems, nil, nil, nil), topItems, matchField)