mirror of
https://github.com/MADTeacher/go_basics.git
synced 2025-11-23 21:34:47 +02:00
77 lines
1.6 KiB
Go
77 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"os"
|
|
"strconv"
|
|
"strings"
|
|
"tic-tac-toe/game"
|
|
)
|
|
|
|
func main() {
|
|
reader := bufio.NewReader(os.Stdin)
|
|
loader := game.NewJsonGameLoader()
|
|
boardSize := 0
|
|
|
|
for {
|
|
fmt.Println("1 - load game")
|
|
fmt.Println("2 - new game")
|
|
fmt.Println("q - quit")
|
|
|
|
input, _ := reader.ReadString('\n')
|
|
input = strings.TrimSpace(input)
|
|
switch input {
|
|
case "1":
|
|
var loadedGame *game.Game
|
|
var err error
|
|
for {
|
|
fmt.Println("Enter file name: ")
|
|
fileName, _ := reader.ReadString('\n')
|
|
fileName = strings.TrimSpace(fileName)
|
|
loadedGame, err = loader.LoadGame(fileName)
|
|
if err != nil {
|
|
fmt.Println("Error loading game.")
|
|
continue
|
|
}
|
|
break
|
|
}
|
|
loadedGame.Reader = reader
|
|
loadedGame.Saver = loader.(game.IGameSaver)
|
|
loadedGame.Play()
|
|
case "2":
|
|
for {
|
|
fmt.Print("Enter the size of the board (3-9): ")
|
|
input, err := reader.ReadString('\n')
|
|
if err != nil {
|
|
fmt.Println("Error reading input.")
|
|
continue
|
|
}
|
|
input = strings.TrimSpace(input)
|
|
boardSize, err = strconv.Atoi(input)
|
|
if err != nil {
|
|
// Использовать предыдущий размер по умолчанию
|
|
boardSize = game.BoardDefaultSize
|
|
}
|
|
if boardSize < game.BoardMinSize ||
|
|
boardSize > game.BoardMaxSize {
|
|
fmt.Println("Invalid board size.")
|
|
} else {
|
|
break
|
|
}
|
|
}
|
|
|
|
board := game.NewBoard(boardSize)
|
|
player := game.NewPlayer()
|
|
game := game.NewGame(*board, *player, reader,
|
|
loader.(game.IGameSaver))
|
|
game.Play()
|
|
case "q":
|
|
return
|
|
default:
|
|
fmt.Println("Invalid input. Please try again.")
|
|
return
|
|
}
|
|
}
|
|
}
|