Construindo um game clássico da década de 70 em Go com suporte a multiplayer
Carlos Henrique
Renê Cardozo
@reneepc
Agenda
Um pouco de história
Um pouco de história
Qual engine utilizar?
Ebitengine
Desafios
Estrutura do Projeto
Lógica da engine
compartilhada
Como detectar colisão?
Como detectar colisão?
Criando uma IA simples
Lógica de Menu
Spaghetti
State Pattern
Robert Nystrom
Menu State
Main menu
Name Input
Connecting
Playing
Watch
Level Selection
Menu State
Name Input
Connecting
State Pattern
State Pattern
Base menu
Base menu
Desacoplamento
Game State
Main menu
Connecting
Playing
Pause
Winner
Game State
Main menu
Connecting
Playing
Pause
Winner
Game State
Playing
Pause
Desacoplamento
Multiplayer
Client
Server
Inputs
Estado do mundo
Multiplayer
Client
Server
Inputs
Estado do mundo
Multiplayer (HTTP)
Client
Server
Inputs
Estado do mundo
HTTP
Multiplayer (HTTP)
Client
Server
Inputs
Estado do mundo
HTTP
Multiplayer (WebSockets)
Client
Server
Inputs
Estado do mundo
WebSockets
gorilla/websocket
gorilla/websocket
coder/websocket
Goroutines (latência)
Goroutines (input)
User Network Context
Game loop
Frame update
Read Input
State Broadcast
Game State
Live streaming
Spectator (Live streaming)
Melhorias
- channels vs Iterators
- generics vs interface
Demo!!
It’s only a demo sometime shit happens
pong.go-go.dev
Repositórios
pong-multiplayer-go
(game)
pongo-server
(server)
Obrigado
Carlos
Renê