LINUXTALKS.CO

История изменений

Исправление rezedent12, (текущая версия) :

В твоей гошечке можно повесить нормальный ивент на чтение/запись сокета?

В общем да

func main() {
	fmt.Println("Сервер запускается...")
	errLC := ReLoadConfigServer(`путь/test-config.txt`)
	if errLC == nil {
		fmt.Println("Конфигурация загружена.")
	} else {
		fmt.Println("Ошибка загрузки конфигурации...")
	}
	mux := http.NewServeMux()
	mux.HandleFunc("/", processRequestHTTP)
	mux.HandleFunc(WebSocketDir, websocketHandler) // Для WebSocket
	server := &http.Server{
		Addr:    fmt.Sprintf(":%v", httpPort),
		Handler: mux,
	}
	go processStoper(server)
	fmt.Println("Сервер запущен на порту ", fmt.Sprintf("%v", httpPort))
	err := server.ListenAndServe()
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println("Сервер остановлен")
}

При каждом новом соединении запускается новый экземпляр указанной горутины.

Если да, то одна рутина на одного клиента и она легко перелопатит всех пешек.

Горутина клиента нужна только для ввода и вывода. То есть показа карты и того что на ней происходит, а так же передачи команд пешкам. Игровой процесс будет идти в другой группе горутин.

Я решил для упрощения логики обработки сложных внутренних состояний пешек, «мышление» каждой пешки обрабатывать отдельной горутиной. На входе в горутину управляющую пешкой подаётся тик-структура (множитель ускорения времени, обычно 1), а на выходе она выдаёт что делать пешке в конкретном месте и в конкретном времени. Таким образом можно будет реализовать достаточно произвольную логику без усложнения основного кода игры. Минус этого подхода в том, что save/load будет как бы сбивать фокус или внимание пешки. Но я думаю надо игровой процесс сделать таким, что бы поощрять отказ от save/load в случае неудач.

Причём здесь save/load и сетевая браузерная игра? В этом смысле игра будет вроде factorio. То есть поддерживать кооперативность. Выбор WEB в качестве интерфейса - это способ порешать проблемы сетевой синхронизации, читов и кросплатформенности. Основной фичей игры, будет моделирование душевных состояний и эволюции убеждений не напрямую контролируемых персонажей. Что то вроде rimworld с идеологией, но качественно глубже.

Исходная версия rezedent12, :

В твоей гошечке можно повесить нормальный ивент на чтение/запись сокета?

В общем да

func main() {
	fmt.Println("Сервер запускается...")
	errLC := ReLoadConfigServer(`C:\Users\ПК\Go\test-web-project1\test-config.txt`)
	if errLC == nil {
		fmt.Println("Конфигурация загружена.")
	} else {
		fmt.Println("Ошибка загрузки конфигурации...")
	}
	mux := http.NewServeMux()
	mux.HandleFunc("/", processRequestHTTP)
	mux.HandleFunc(WebSocketDir, websocketHandler) // Для WebSocket
	server := &http.Server{
		Addr:    fmt.Sprintf(":%v", httpPort),
		Handler: mux,
	}
	go processStoper(server)
	fmt.Println("Сервер запущен на порту ", fmt.Sprintf("%v", httpPort))
	err := server.ListenAndServe()
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println("Сервер остановлен")
}

При каждом новом соединении запускается новый экземпляр указанной горутины.

Если да, то одна рутина на одного клиента и она легко перелопатит всех пешек.

Горутина клиента нужна только для ввода и вывода. То есть показа карты и того что на ней происходит, а так же передачи команд пешкам. Игровой процесс будет идти в другой группе горутин.

Я решил для упрощения логики обработки сложных внутренних состояний пешек, «мышление» каждой пешки обрабатывать отдельной горутиной. На входе в горутину управляющую пешкой подаётся тик-структура (множитель ускорения времени, обычно 1), а на выходе она выдаёт что делать пешке в конкретном месте и в конкретном времени. Таким образом можно будет реализовать достаточно произвольную логику без усложнения основного кода игры. Минус этого подхода в том, что save/load будет как бы сбивать фокус или внимание пешки. Но я думаю надо игровой процесс сделать таким, что бы поощрять отказ от save/load в случае неудач.

Причём здесь save/load и сетевая браузерная игра? В этом смысле игра будет вроде factorio. То есть поддерживать кооперативность. Выбор WEB в качестве интерфейса - это способ порешать проблемы сетевой синхронизации, читов и кросплатформенности. Основной фичей игры, будет моделирование душевных состояний и эволюции убеждений не напрямую контролируемых персонажей. Что то вроде rimworld с идеологией, но качественно глубже.