mirror of
https://github.com/MADTeacher/go_basics.git
synced 2025-11-23 21:34:47 +02:00
82 lines
2.0 KiB
Go
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
|
|
}
|