Criar um jogo de Sokoban com desfazer é um projeto prático em C++ para quem já conhece os fundamentos da linguagem. Você criará um jogo de terminal em que o jogador empurra caixas até os alvos, recusa movimentos impossíveis e pode desfazer toda a ação anterior.
O curso combina dois laboratórios guiados com um desafio independente. Primeiro, você implementará os passos, o empurrão de uma única caixa e a verificação real dos alvos. Depois salvará estados completos e os restaurará ao desfazer. Por fim, aplicará as mesmas regras a outro armazém com duas caixas. Cada laboratório fornece seus próprios arquivos; nenhum arquivo ou jogo em execução é transferido do ambiente anterior.
O que você aprenderá
Ao concluir o curso, você poderá:
- separar as paredes e os alvos fixos das posições variáveis do jogador e das caixas;
- verificar as condições de movimento e empurrão antes de alterar o estado, para que ações recusadas não mudem nada;
- determinar a conclusão pela presença de cada caixa em um alvo e recalculá-la após um movimento ou ao desfazer;
- copiar estados completos para um histórico
vectorsomente em movimentos legais e restaurar com segurança o jogador e todas as caixas; - compilar e jogar com um motor C++ reutilizável que aceite diferentes caminhos legais e preserve os níveis originais.
Para quem é este curso
Este curso é indicado para estudantes de C++ que querem usar objetos, cópias por valor e contêineres padrão em um programa interativo com regras claras.
Pré-requisitos: Navegação básica no terminal e familiaridade com classes, funções, strings e vector de C++. Os laboratórios guiados explicam o modelo de terreno fixo, as condições de movimento, os snapshots completos de estado e as operações do histórico.
Ambiente de aprendizagem: A LabEx fornece um ambiente Linux preparado no navegador, com compilador C++17, estrutura de código, níveis pequenos, um exemplo funcional e Terminal. Os comandos do jogo, as mensagens e a saída de comandos permanecem em inglês.
Perguntas frequentes
Vou escrever toda a aplicação do jogo?
Você implementará as funções de movimento, conclusão e desfazer em engine.cpp. O carregamento dos níveis, a exibição em texto e a leitura de comandos estão preparados. Você compilará seu motor em um programa jogável, sem instalação local nem motor gráfico.
Preciso encontrar a solução mais curta?
Não. Diferentes caminhos legais são aceitos. O projeto se concentra em mudanças de estado corretas e em desfazer completamente as ações, não em resolver automaticamente ou minimizar o número de movimentos.
Posso desfazer um empurrão que complete o nível?
Sim. É possível continuar jogando após a conclusão, e desfazer restaura o jogador e todas as caixas, inclusive o estado anterior ao empurrão vencedor. O histórico pertence ao jogo atual em memória; executar novamente o programa inicia um jogo novo, em vez de carregar uma sessão salva.

