CoreWars é um tipo de jogo: Todo mundo desenvolve programas, depois, eles lutam entre si (com o objetivo de "acabar" com o programa do adversário).
Este jogo foi inventado em universidades americanas. É um exercício de programação que foi altamente incentivado pelos professores. É, provavelmente, o que deu a ideia para os primeiros programadores de vírus, mas Corewars continua sendo um exercício de programação bastante interessante, instrutivo, pacífico, divertido e inofensivo.
Mas é perigoso !
De jeito nenhum.
Os programas Corewars são escritos em uma espécie de linguagem de montagem (Assembly) chamada
RedCode.
Estes programas funcionam em uma máquina virtual (este é um computador fictício simulados por um programa).
O microprocessador do seu computador (Pentium ou outro) não entende a linguagem de computador RedCode. Então, os programas RedCode não podem,
em caso algum, ser executado diretamente em seu processador e também não podem "escapar".
RedCode, a languagem de programação
RedCode é uma linguagem de montagem (A não confundir com
Code Red, que é um vírus !)
Existem várias versões da linguagem RedCode, mas as instruções são muito semelhantes a qualquer linguagem de montagem (copiar, adicionar, multiplicar, comparar, pular, etc).
Existem programas RedCode de 2 formas: fonte assembly (de montagem) ou código de máquina.
Quais são as regras ?
- Em geral, o espaço da memória é bem pequeno (de 1024 a 8192 células).
- Cada célula pode conter ou uma instrução, ou um dado.
- No início do jogo, cada programa é colocado aleatoriamente nesta memória.
Os programas não conhecem a posição do adversário. O resto da memória está cheia de dados.
- Inicialmente, todos os ptogramas teem um ponteiro de instrução
- Todos os programas podem escrever instruções ou dados em qualquer lugar da memória.
- Cada programa tem o direito de criar tantos ponteiros de instrução adicionais (fork) quiser (mas é ele que deverá duplicar a memória): É exatamente igual ao multi-tarefas.
- Todos os programas teem direito a uma volta do relógio, a cada vez.
- Se um programa tem diversos ponteiros de instrução, suas voltas de relógio serão divididas entre eles (consequência: se um programa de "forkar" (criar diversos ponteiros de instrução adicionais) muito, ele será mais lento).
- Quando um ponteiro de instrução chega nos dados, ele morre..
- Quando um programa não tem mais nenhum ponteiro de instrução vivo, ele perdeu.
O objetivo é travar todos os processos do programa do adversário. Há muitas táticas diferentes.
Exemplo !
O programa de combate mais simples é o
MOV 0,1 , que significa: " <ital>copie o que está na célula de memória atual (0), na seguinte célula de memória (1) </ ital>.". Isto copiará a instrução MOV 0,1 na célula de memória seguinte. Depois de executar a instrução, o ponteiro do programa pula para a célula seguinte (que justamente contém o MOV 0,1 que acabamos de copiar!).
Assim, este programa avança, de célula em célula, na memória, destruindo tudo em seu caminho e embarcando os processos do adversário com ele.
Este é o programa mais simples, mas é difícil de matá-lo.
Qual é o interesse ?
Se você não conhece a linguagem de montagem, esta é a oportunidade para aprendê-la! Existem programas minúsculos em RedCode fáceis de entender.
Se você já conhece a linguagem de montagem, você verá como é gostoso encontrar otimizações para buscar o adversário mais rapidamente, bombardeá-lo ou descobrir táticas para bloquear (ou vampirizar!) os seus processos e roubar-lhe votas de relógio.
Você seria capaz de derrotar os programas mais poderosos? Atenção: os maiores ou os mais complexos não são, obrigatoriamente, os mais perigosos! Você deverá encontrar táticas eficazes.
Artigo
original publicado por
sebsauvage
Este documento, intitulado 'O que é Corewars, RedCode ?', está disponível sob a licença
Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o
CCM (
br.ccm.net) ao utilizar este artigo.