Estou com uma duvida nas funções do campo minado em javaScript.
Eu criei uma matriz e uma função para sortear valores dentro dela. Onde -1 é a bomba.
Porem agora estou com dificuldades para criar as dicas, tipo, a casa que tiver uma bomba como vizinha, recebe o valor 1, com duas bombas vizinhas
recebe 2, e assim por diante.
E tambem, não sei como fazer para quando clicado num campo vazio, abrir os campos vazios ao redor daquele clicado.
Se alguém puder ajudar, fico grato.
<script type="text/javascript" language="javascript">
var matCampoMinado = new Array (4);
matCampoMinado[0] = [0,0,0,0]
matCampoMinado[1] = [0,0,0,0]
matCampoMinado[2] = [0,0,0,0]
matCampoMinado[3] = [0,0,0,0]
function inicializa()
{
resetCampo();
desenhaTabela();
}
function resetCampo()
{
derrota=false;
vitoria=false;
campoLivre=100;
campoCont=0;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
matCampoMinado[i][j] = (Math.floor(Math.random() * 6))-1;//-1 == bomba
}
}
}
function mostraMensagem(text)
{
document.getElementById("status").innerHTML = text;
}
function desenhaTabela()
{
// Converte o array em uma tabela e a insere no DIV #board
// Note o parametro onclick, que deixa cada celula "clicavel"
var board = new Array();
board.push("<table><tr>");
for (var i = 0; i < matCampoMinado.length; i++) {
if (i != 0) board.push("</tr><tr>");
for (var j = 0; j < matCampoMinado[i].length; j++) {
board.push(
'<td' +
' onMouseOver="cellHover(this)"' +
' onMouseOut="cellOut(this)"' +
' onClick="cellClicked(this)">' +
matCampoMinado[i][j] + "</td>"
);
}
}
board.push("</tr></table>");
document.getElementById("board").innerHTML = board.join("\n");
}
function cellClicked(thisCell)
{
// Detecta se algo importante aconteceu
if (derrota)
{
init();
setMessage("Tente de novo");
return;
}
else if (vitoria)
{
init();
setMessage("Parabéns, você ganhou.");
return;
}
// Se esse quadrado já foi clicado, ignora
if (thisCell.className == "clicked") return;
// No CSS a classe "clicked" usa outras cores, revelando o numero
thisCell.className = "clicked";
switch (thisCell.innerHTML) {
// Pinta cada numero de uma cor
case "1": thisCell.style.color = "#070"; break;
case "2": thisCell.style.color = "#00b"; break;
case "3": thisCell.style.color = "#c00"; break;
// Bomba!
case "-1":
thisCell.innerHTML = '*';
derrota = true;
mostraMensagem("BOOOOOOM");
return;
}
campoCont++;
if (campoCont == campoLivre) { // achou todos os quadrados livres
vitoria = true;
mostraMensagem("PARABENS, voce ganhou!!");
} else {
mostraMensagem("Faltam: " + (safeMax-safeCount));
}
}
// Podia ter usado :hover, mas a ideia é estressar o javascript
// só faz o highlight nos quadrados virgens
function cellHover(thisCell)
{
if (!thisCell.className) {
thisCell.style.border = "2px solid yellow";
}
}
function cellOut(thisCell)
{
if (thisCell.className == "clicked") {
thisCell.style.border = "2px solid #ccc";
} else {
thisCell.style.border = "2px outset gray";
}
}
</script>
Pergunta
gr3g
Ola galera, iniciando no forum.
Estou com uma duvida nas funções do campo minado em javaScript.
Eu criei uma matriz e uma função para sortear valores dentro dela. Onde -1 é a bomba.
Porem agora estou com dificuldades para criar as dicas, tipo, a casa que tiver uma bomba como vizinha, recebe o valor 1, com duas bombas vizinhas
recebe 2, e assim por diante.
E tambem, não sei como fazer para quando clicado num campo vazio, abrir os campos vazios ao redor daquele clicado.
Se alguém puder ajudar, fico grato.
<script type="text/javascript" language="javascript"> var matCampoMinado = new Array (4); matCampoMinado[0] = [0,0,0,0] matCampoMinado[1] = [0,0,0,0] matCampoMinado[2] = [0,0,0,0] matCampoMinado[3] = [0,0,0,0] function inicializa() { resetCampo(); desenhaTabela(); } function resetCampo() { derrota=false; vitoria=false; campoLivre=100; campoCont=0; for(i=0;i<4;i++) { for(j=0;j<4;j++) { matCampoMinado[i][j] = (Math.floor(Math.random() * 6))-1;//-1 == bomba } } } function mostraMensagem(text) { document.getElementById("status").innerHTML = text; } function desenhaTabela() { // Converte o array em uma tabela e a insere no DIV #board // Note o parametro onclick, que deixa cada celula "clicavel" var board = new Array(); board.push("<table><tr>"); for (var i = 0; i < matCampoMinado.length; i++) { if (i != 0) board.push("</tr><tr>"); for (var j = 0; j < matCampoMinado[i].length; j++) { board.push( '<td' + ' onMouseOver="cellHover(this)"' + ' onMouseOut="cellOut(this)"' + ' onClick="cellClicked(this)">' + matCampoMinado[i][j] + "</td>" ); } } board.push("</tr></table>"); document.getElementById("board").innerHTML = board.join("\n"); } function cellClicked(thisCell) { // Detecta se algo importante aconteceu if (derrota) { init(); setMessage("Tente de novo"); return; } else if (vitoria) { init(); setMessage("Parabéns, você ganhou."); return; } // Se esse quadrado já foi clicado, ignora if (thisCell.className == "clicked") return; // No CSS a classe "clicked" usa outras cores, revelando o numero thisCell.className = "clicked"; switch (thisCell.innerHTML) { // Pinta cada numero de uma cor case "1": thisCell.style.color = "#070"; break; case "2": thisCell.style.color = "#00b"; break; case "3": thisCell.style.color = "#c00"; break; // Bomba! case "-1": thisCell.innerHTML = '*'; derrota = true; mostraMensagem("BOOOOOOM"); return; } campoCont++; if (campoCont == campoLivre) { // achou todos os quadrados livres vitoria = true; mostraMensagem("PARABENS, voce ganhou!!"); } else { mostraMensagem("Faltam: " + (safeMax-safeCount)); } } // Podia ter usado :hover, mas a ideia é estressar o javascript // só faz o highlight nos quadrados virgens function cellHover(thisCell) { if (!thisCell.className) { thisCell.style.border = "2px solid yellow"; } } function cellOut(thisCell) { if (thisCell.className == "clicked") { thisCell.style.border = "2px solid #ccc"; } else { thisCell.style.border = "2px outset gray"; } } </script>Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.