1
0
mirror of https://github.com/MADTeacher/go_basics.git synced 2025-11-29 05:36:55 +02:00
Files
go_basics/part_8/tic_tac_toe_v7/client/playing.go

70 lines
2.3 KiB
Go
Raw Normal View History

2025-06-21 13:28:09 +03:00
package client
import (
"bufio"
"encoding/json"
"fmt"
"strconv"
"strings"
"tic-tac-toe/network"
)
2025-06-23 17:12:57 +03:00
// Обрабатываем ход игрока
2025-06-21 13:28:09 +03:00
func (c *Client) playing(reader *bufio.Reader, encoder *json.Encoder) {
2025-06-23 17:12:57 +03:00
fmt.Printf(
"\nEnter command: <row> <col> or q for exit to main menu\n> ",
)
// Считываем ввод игрока
2025-06-21 13:28:09 +03:00
input, _ := reader.ReadString('\n')
input = strings.TrimSpace(input)
2025-06-23 17:12:57 +03:00
if input == "q" { // Если игрок хочет выйти в меню
var msg network.Message // Создаем сообщение
msg.Cmd = network.CmdLeaveRoomRequest // Устанавливаем команду
2025-06-21 13:28:09 +03:00
payload := network.LeaveRoomRequest{
RoomName: c.roomName,
PlayerName: c.playerName,
}
jsonPayload, _ := json.Marshal(payload)
msg.Payload = jsonPayload
2025-06-23 17:12:57 +03:00
encoder.Encode(msg) // Отправляем сообщение
c.setState(mainMenu) // Переходим в главное меню
2025-06-21 13:28:09 +03:00
return
}
2025-06-23 17:12:57 +03:00
// Разделяем ввод игрока на строки
2025-06-21 13:28:09 +03:00
parts := strings.Fields(input)
if len(parts) != 2 {
fmt.Println("Usage: <row> <col>")
return
}
2025-06-23 17:12:57 +03:00
var msg network.Message // Создаем сообщение
// Преобразуем ввод игрока в числа
2025-06-21 13:28:09 +03:00
row, err1 := strconv.Atoi(parts[0])
col, err2 := strconv.Atoi(parts[1])
if err1 != nil || err2 != nil {
fmt.Println("Row and column must be numbers.")
return
}
2025-06-23 17:12:57 +03:00
// Валидируем ввод игрока
2025-06-21 13:28:09 +03:00
if !c.validateMove(row, col) {
return // validateMove prints the error
}
2025-06-23 17:12:57 +03:00
// Создаем сообщение о ходе игрока
msg.Cmd = network.CmdMakeMoveRequest // Устанавливаем команду
2025-06-21 13:28:09 +03:00
payload := network.MakeMoveRequest{
2025-06-23 17:12:57 +03:00
RoomName: c.roomName, // Устанавливаем имя комнаты
PlayerName: c.playerName, // Устанавливаем никнейм игрока
PositionRow: row - 1, // Устанавливаем строку
PositionCol: col - 1, // Устанавливаем столбец
2025-06-21 13:28:09 +03:00
}
jsonPayload, _ := json.Marshal(payload)
msg.Payload = jsonPayload
2025-06-23 17:12:57 +03:00
encoder.Encode(msg) // Отправляем сообщение
// Переходим в состояние ожидания ответа от сервера
2025-06-21 13:28:09 +03:00
c.setState(waitResponseFromServer)
}