VBA Excel - A formiga de Langton

Janeiro 2017


VBA Excel - A formiga de Langton



Este código VBA é uma ilustração o programa criado por Chris Langton.

Regras do « jogo »

  • Se a formiga estiver em um quadrado branco, ela gira para a esquerda, se ele estiver em um quadrado preto, ele gira para a direita;
  • A formiga inverte a cor do quadrado onde ela está (o branco fica preto e vice-versa);
  • A formiga avança um quadrado na direção de sua orientação.

Explicações


Neste código, os limites do Excel foram extremamente subestimados, voluntariamente.

As caixas de diálogo foram incluídas para mostrar as mudanças no movimento desta formiga. Três etapas: a fase "simétrica", a fase "caótica" e a fase de "auto-estrada" (para mais informações, veja no seu motor de busca favorito).

As linhas de código, 8-14, são apenas uma formatação da planilha do Excel ("Plan1" a ser adaptada).

Realização

  • Abrir uma nova pasta classeur Excel,
  • Pressionar as teclas ALT+F11 (=> uma janela Visual Basic Editor aparece),
  • Inserir/Módulo,
  • Copiar/Colar, neste módulo, o código dado abaixo,
  • Adaptar o código substituindo sistematicamente "Plan1" pelo nome de sua planilha (ou não...),
  • Fechar a janela Visual Basic Editor,
  • Começar digitando: Alt+F8, escolha: "Formiga" e clique em "Executar".

Código VBA


Opção Explicit

Sub Formiga()
Dim ColunaAtual As Integer, LinhaAtual As Long, ColunaFutura As Integer, LigFuture As Long, i As Long
Dim Topo As Boolean, Esquerda As Boolean, Bas As Boolean, Direita As Boolean

'Formatação
Application.ScreenUpdating = False
With Sheets("Feuil1").Range("A1:IV30000")
    .ColumnWidth = 3
    .RowHeight = 19.5
    .Interior.ColorIndex = -4142
End With
Application.ScreenUpdating = True

MsgBox "Início da fase «simétrica»"
Topo = True
Esquerda = False
Embaixo = False
Direita = False
LinhaFutura = 100
ColunaFutura = 50
Sheets("Plan1").Cells(L LinhaFutura , ColunaFutura).Select
For i = 1 To 15000
    If i = 500 Then Sheets("Plan1").Cells(LinhaFutura, ColunaFutura).Select: MsgBox " Início da fase «caótica»"
    If i = 10000 Then Sheets("Plan1").Cells(LinhaFutura, ColunaFutura).Select: MsgBox " Início da fase  de «auto-estrada»"
    LinhaAtual = LinhaFutura
    ColunaAtual = ColunaFutura
    If LinhaAtual = 1 Or ColunaAtual = 1 Or ColunaAtual = 252 Or LinhaAtual = 60000 Then GoTo Fin
    With Sheets("Plan1").Cells(LinhaAtual, ColunaAtual)
        If .Interior.ColorIndex = -4142 Then
            .Interior.ColorIndex = 1
            If Topo = True Then
                Topo = False: Esquerda = True: LinhaFutura = LinhaAtual: ColunaFutura = ColunaAtual - 1
            ElseIf Esquerda = True Then
                Esquerda = False: Embaixo = True: LinhaFutura = LinhaAtual + 1: ColunaFutura = ColunaAtual
            ElseIf Embaixo = True Then
                Embaixo = False: Direita = True: LinhaFutura = LinhaAtual: ColunaFutura = ColunaAtual + 1
            ElseIf Direita = True Then
                Direita = False: Topo = True: LinhaFutura = LinhaAtual - 1: ColunaFutura = ColunaAtual
            End If
        Else
            .Interior.ColorIndex = -4142
            If Haut = True Then
                Topo = False: Direita = True: LinhaFutura = LinhaAtual: ColunaFutura = ColunaAtual + 1
            ElseIf Esquerda = True Then
                Esquerda = False: Topo = True: LinhaFutura = LinhaAtual - 1: ColunaFutura = ColunaAtual
            ElseIf Bas = True Then
                Embaixo = False: Esquerda = True: LinhaFutura = LinhaAtual: ColunaFutura = ColunaAtual - 1
            ElseIf Direita = True Then
                Direita = False: Embaixo = True: LinhaFutura = LinhaAtual + 1: ColunaFutura = ColunaAtual
            End If
        End If
    End With
Next i
Exit Sub
Fim:
MsgBox "Pare ! A formiga atingiu os limites da Planilha do Excel."
End Sub

Observações


É possível aumentar (ou diminuir) o número de iteração e, consequentemente, das caixas, mudando a linha 24 :
For i = 1 To 15000

Também é possível mudar as cores, alterando as linhas 12, 31, 32 e 43...


Tradução feita por Lucia Maurity y Nouira

Veja também

Artigo original publicado por . Tradução feita por pintuda. Última modificação: 3 de janeiro de 2014 às 11:11 por pintuda.
Este documento, intitulado ' VBA Excel - A formiga de Langton', 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.