# Jogo eletrônico de programação

Um jogo de programação é um jogo eletrônico que incorpora elementos de programação de computador, permitindo ao jogador direcionar unidades autônomas dentro do jogo para seguir comandos em uma linguagem de programação de domínio específico, muitas vezes representada como uma linguagem visual para simplificar a metáfora da programação. Os jogos de programação se dividem amplamente em duas áreas: jogos para um jogador, onde os elementos de programação compõem parte ou a totalidade de um jogo de quebra-cabeça, e jogos para vários jogadores, onde o programa automatizado do jogador é confrontado com os programas de outros jogadores.

## Como jogos de quebra-cabeça

Os primeiros jogos do gênero incluem System 15000 e Hacker, lançados em 1984 e 1985, respectivamente.
Os jogos de programação têm sido usados como parte dos jogos de quebra-cabeça, desafiando o jogador a alcançar um resultado específico assim que o programa começa a funcionar. Um exemplo de tal jogo é o SpaceChem, onde o jogador deve usar sua linguagem visual para manipular dois waldos para desmontar e remontar moléculas químicas. Nesses jogos, os jogadores podem testar e depurar seu programa quantas vezes forem necessárias até encontrar uma solução que funcione. Muitos desses jogos incentivam o jogador a encontrar o programa mais eficiente, medido pelo número de passos de tempo necessários ou número de comandos necessários. Outros jogos semelhantes incluem Human Resource Machine, Infinifactory e TIS-100. A Zachtronics é uma empresa de desenvolvimento de videogames conhecida por seus jogos de quebra-cabeça centrados em programação.
Outros jogos incorporam os elementos de programação como partes de quebra-cabeças no jogo maior. Por exemplo, Hack 'n' Slash inclui uma metáfora de poder acessar os programas internos e variáveis de objetos representados no mundo do jogo, pausando o resto do jogo enquanto o jogador aciona esta interface de programação, e modifica o programa do objeto para progredir mais. Essa ação pode mudar o estado de um objeto de indestrutível para destrutível. Outros jogos semelhantes com esse tipo de abordagem de programação incluem Transistor, ou Heart. Break, Glitchspace e Pony Island.
Outra abordagem usada em alguns jogos gráficos com elementos de programação é apresentar ao jogador uma interface de linha de comando para emitir ordens por meio de uma linguagem específica de domínio para direcionar objetos dentro do jogo, permitindo ao jogador reemitir comandos conforme a situação muda, em vez de criar um programa pré-fabricado. Jogos como Quadrilateral Cowboy e Duskers fazem o usuário comandar pequenas criaturas robóticas em conjunto através da linguagem de código para atingir um determinado objetivo. O jogo Hackmud apresenta ao jogador uma interface de mainframe simulada através da qual ele emite comandos para avançar.

## Como jogos competitivos

Muitos jogos de programação envolvem entidades controladoras como robôs, tanques ou bactérias que procuram destruir uns aos outros. Tais jogos podem ser considerados ambientes de organismos digitais, relacionados a simulações de vida artificial. Os jogadores recebem ferramentas para desenvolver e testar seus programas dentro da linguagem específica do domínio do jogo antes de enviar o programa para um servidor central. O servidor então executa o programa contra outros e relata os resultados ao jogador, a partir do qual ele pode fazer alterações ou melhorias no programa. Existem diferentes torneios e ligas para os jogos de programação onde os personagens podem competir entre si. Normalmente, um script é otimizado para uma estratégia especial. Abordagens semelhantes são usadas para jogos mais tradicionais, como o Campeonato Mundial de Xadrez por Computador consiste em partidas entre programas escritos para o jogo de estratégia abstrata de xadrez.
O jogo de programação competitivo também encontrou seu caminho para vários jogos de tabuleiro, como RoboRally ou Robot Turtles, normalmente onde um programa se torna um baralho pré-fabricado de cartas jogadas uma a uma para executar esse código.
Os pesquisadores apresentaram o RoboCode como um substrato de "aprendizagem baseada em problemas" para o ensino de programação.

## Áreas relacionadas

Jogos de mundo aberto que apresentam a capacidade de os jogadores construirem ambientes a partir de uma série de blocos de construção têm sido frequentemente usados por jogadores mais avançados para construir circuitos lógicos e programas mais avançados a partir dos blocos fundamentais. Minecraft é um exemplo, pois enquanto o jogo fornece um conjunto limitado de blocos que imitam interruptores e circuitos elétricos, os usuários são capazes de criar computadores funcionais básicos dentro do mundo virtual, e pelo menos uma modificação visa ensinar as crianças a programar no computador virtual em uma linguagem simplista.
Vários sites, como o Codecademy, ajudam a ensinar linguagens de programação do mundo real por meio da gamificação, onde os princípios dos videogames são usados para motivar o usuário.