De acordo com o seu comentário nas outras respostas, seu problema não é o algoritmo de crescimento gradual, mas o algoritmo que escolhe qual bloco de fluência usar.
Qual bloco a ser usado depende se:
- o bloco superior está infectado ou não
- o bloco certo está infectado ou não
- o bloco inferior está infectado ou não
- o ladrilho esquerdo está infectado ou não
Isso significa que você precisará de um total de 16 peças. Você pode resolvê-los facilmente com um campo de bits. Aqui está um pseudocódigo que escolherá um bloco diferente para cada constelação de fluência possível:
index = 0;
if left tile is creeped then index += 1
if lower tile is creeped then index += 2
if right tile is creeped then index += 4
if upper tile is creeped then index += 8
creep_tile = creep_tiles[index]
Observe que sempre que você altera o status de infecção de um bloco, todos os blocos adjacentes infectados precisam ser reavaliados, porque a vizinhança agora mudou.
Como projetar os 16 elementos gráficos para que eles se encaixem perfeitamente é uma (nova) pergunta para um designer gráfico.