Em um protótipo que estou fazendo, existe um minijogo semelhante ao bejeweled. Usando uma grade que é uma matriz 2D ( int[,]
), como posso saber quando o usuário formou uma correspondência? Só me preocupo horizontal e verticalmente.
Do alto da minha cabeça, eu estava pensando em olhar para cada direção. Algo como:
int item = grid[x,y];
if(grid[x-1,y]==item)
{
int step=x;
int matches =2;
while(grid[step-1,y]==item)
{
step++;
matches++
}
if(matches>2)
//remove all matching items
}
else if(grid[x+1,y]==item
//....
else if(grid[x,y-1==item)
//...
else if(grid[x,y+1]==item)
//...
Parece que deveria haver uma maneira melhor. Existe?
Respostas:
Faça um loop através de cada item no mesmo eixo (x ou y), se eles forem iguais ao item anterior com o qual incrementam. Quando o próximo item ficar diferente, verifique se as correspondências são maiores ou iguais a 3, chame uma função que remove os itens correspondentes e continue.
Código AS3:
Isso é apenas para o eixo x, para y, a grade [col] [i] se tornaria a grade [i] [linha], etc. Tenho certeza de que você pode descobrir isso :)
fonte
Apenas pensei em pesar com a nossa experiência na construção de um jogo semelhante ao Match-3.
Criamos um protótipo para um jogo de palavras baseado em Match-3, um pouco como esmagar scrabble e Bejeweled. Percebemos muito cedo que o mecanismo que fornece novas pedras preciosas / ladrilhos para preencher os espaços vazios teria que ser altamente introspectivo (executamos heurísticas híbridas e amostragem MonteCarlo) para criar oportunidades reais para um jogador amarrar letras para formar palavras através do Mecânico Match-3. É muito mais elaborado do que a descrição, mas estou sendo breve, porque teríamos que escrever um artigo.
Para responder ao OP - estamos fazendo verificações de padrões para pontuar quantas correspondências existem em uma determinada cinta, no momento atual, através de um método muito semelhante ao snippet de código "gladoscc". Embora funcione de maneira robusta, o custo computacional da execução recursiva durante o play-out da pesquisa em árvore se torna um fardo substancial, por isso estamos reescrevendo essa parte da lógica e a representação de dados com a metodologia do bit-board ( comumente implementado em jogos de outras grades, como xadrez, damas, Othello etc.) Nos testes, mostramos que ele pode ser executado 20 vezes mais rápido no ActionScript; e libera ciclos essenciais para capacidade de resposta, som, animação etc.
fonte
Recursão, yo. É para quando você não conhece seus limites.
fonte
Você pode usar o algoritmo de preenchimento de inundação . É realmente útil para esse tipo de problema.
fonte