1
0
mirror of https://github.com/MADTeacher/go_basics.git synced 2025-11-23 21:34:47 +02:00
Files
go_basics/part_6/tic_tac_toe_v5/player/player.go
2025-06-17 15:48:17 +03:00

82 lines
2.0 KiB
Go

package player
import (
"bufio"
"fmt"
"strconv"
"strings"
b "tic-tac-toe/board"
)
// Структура для представления игрока-человека
type HumanPlayer struct {
Figure b.BoardField `json:"figure"`
Reader *bufio.Reader `json:"-"`
}
func NewHumanPlayer(
figure b.BoardField,
reader *bufio.Reader,
) *HumanPlayer {
return &HumanPlayer{Figure: figure, Reader: reader}
}
// Возвращаем символ игрока
func (p *HumanPlayer) GetSymbol() string {
if p.Figure == b.Cross {
return "X"
}
return "O"
}
// Изменяем фигуру текущего игрока
func (p *HumanPlayer) SwitchPlayer() {
if p.Figure == b.Cross {
p.Figure = b.Nought
} else {
p.Figure = b.Cross
}
}
// Возвращаем текущую фигуру игрока
func (p *HumanPlayer) GetFigure() b.BoardField {
return p.Figure
}
// Метод-заглушка, т.к. ввод игрока осуществляется на
// уровне пакета game, где нужно еще отрабатывать
// команду на выход и сохранение игровой сессии
func (p *HumanPlayer) MakeMove(board *b.Board) (int, int, bool) {
return -1, -1, false
}
// Обрабатываем строку ввода и
// преобразуем ее в координаты хода
func (p *HumanPlayer) ParseMove(
input string,
board *b.Board,
) (int, int, bool) {
parts := strings.Fields(input)
if len(parts) != 2 {
fmt.Println("Invalid input. Please try again.")
return -1, -1, false
}
row, err1 := strconv.Atoi(parts[0])
col, err2 := strconv.Atoi(parts[1])
if err1 != nil || err2 != nil ||
row < 1 || col < 1 || row > board.Size ||
col > board.Size {
fmt.Println("Invalid input. Please try again.")
return -1, -1, false
}
// Преобразуем введенные координаты (начиная с 1)
// в индексы массива (начиная с 0)
return row - 1, col - 1, true
}
func (p *HumanPlayer) IsComputer() bool {
return false
}