O seu script ficou muito bom, pequeno e simples, mas existem algumas melhorias que eu gostaria de sugerir e que poderiam ter feito você ganhar mais pontos no evento.
Nomenclatura e definição de variáveis
Código:
var posx = $gamePlayer.x, posy = $gamePlayer.y, d = $gamePlayer.direction(),
movex = 0, movey = 0;
O código acima está difícil de ler, pessoalmente, eu dou preferência na facilidade de leitura do código, do que poupar linhas. O computador irá ler e executar tudo na mesma linha, devemos achar uma forma melhor do cérebro humano fazer o "parse".
O código acima poderia ficar assim:
Código:
var posx = $gamePlayer.x;
var posy = $gamePlayer.y;
var d = $gamePlayer.direction();
var movex = 0;
var movey = 0;
Creio que dessa forma a leitura ficaria melhor, e por falar em leitura, a variável "d" ficaria bem mais fácil de ler se tivesse o nome trocado por "direction", pois 'd' pode ser qualquer coisa para quem está lendo o script pela primeira vez.
Números mágicos
Código:
switch(d){
case 2:
posx += 0, posy += 2;
movex += 0, movey += 2;
break;
case 4:
posx += -2, posy += 0;
movex += -2, movey += 0;
break;
case 6:
posx += 2, posy += 0;
movex += 2, movey += 0;
break;
case 8:
posx += 0, posy -= 2;
movex += 0, movey -= 2;
}
Seguindo a mesma linha de raciocínio de nomenclatura de variáveis, fica bastante difícil de ler o código e descobrir o que são 2, 4, 6 e 8 em cada case.
Apenas alguém que já saiba que essas são as direções do personagem irá bater o olho e entender o que está acontecendo, e fica ainda pior quando o switch é feito na variável "d".
Minha sugestão seria a criação de um mapa de direções:
Código:
var direction = $gamePlayer.direction();
var directions = { 2: 'down', 4: 'left', 6: 'right', 8: 'up' }
switch(directions[direction]){
case 'down':
posx += 0, posy += 2;
movex += 0, movey += 2;
break;
case 'left':
posx += -2, posy += 0;
movex += -2, movey += 0;
break;
case 'right':
posx += 2, posy += 0;
movex += 2, movey += 0;
break;
case 'up':
posx += 0, posy -= 2;
movex += 0, movey -= 2;
}
Duplicações duplicadas
Código:
if ($gameMap.isPassable(posx, posy, d)){
$gamePlayer.jump(movex, movey, d);
AudioManager.playSe({name: jumpSound, volume: 90, pitch: 100, pan: 0});
} else
AudioManager.playSe({name: jumpError, volume: 90, pitch: 100, pan: 0});
O problema do código acima, é que temos duas linhas quase idênticas:
Código:
AudioManager.playSe({name: jumpSound, volume: 90, pitch: 100, pan: 0});
AudioManager.playSe({name: jumpError, volume: 90, pitch: 100, pan: 0});
Vamos supor que em alguma alteração futura, o volume precisará ser reduzido para 50,
teremos que alterar em dois locais:
Código:
AudioManager.playSe({name: jumpSound, volume: 50, pitch: 100, pan: 0});
AudioManager.playSe({name: jumpError, volume: 50, pitch: 100, pan: 0});
Isso é muito ruim, nesse momento, as duas linhas estão bem perto, mas poderiam estar separadas em um arquivo de 600 linhas de código.
Duplicação de código é uma das maiores causas de bug, podemos evitar isso criando uma nova função e passando o
name por parâmetro:
Código:
function playSe(name)
{
AudioManager.playSe({name: name, volume: 90, pitch: 100, pan: 0});
}
Código:
...
if ($gameMap.isPassable(posx, posy, d)){
$gamePlayer.jump(movex, movey, d);
playSe(jumpSound);
} else
playSe(jumpError);
...
São alterações simples que podem fazer diferença no nosso dia, ficarei muito feliz caso absorva algo dessa análise.
Estarei aberto para debates sobre as sugestões apresentadas.