[DojoSEA] Como está ficando o nosso campo minado?
Eu disse que iria postar menos sobre o DojoSEA aqui, mas não resisti ;-) Aqui está a versão do CampoMinado que deixamos funcionando no último Dojo:
google.load("jquery", "1.3.2");
google.setOnLoadCallback(function() {
function Minesweeper(container_id,lin,col){
this.board = [];
for(var i=0 ; i<lin ; i++){
var line = []
this.board.push(line)
for(var j=0 ; j<col ; j++){
line.push(false)
}
}
this.cellNumber = lin*col;
this.opened = 0;
this.blown = false;
this.mines = 0;
this.draw_board(container_id, lin, col);
}
Minesweeper.prototype = {
install_mine: function(lin, col){
if(!this.board[lin][col]){
this.mines++;
this.board[lin][col] = true;
}
},
open: function(lin,col){
this.opened++;
if (this.board[lin][col]) {
this.blown = true;
return '*';
}
return this.neighborCount(lin, col);
},
neighborCount: function(lin, col){
var neighbors = 0;
var i,j;
for(i=-1 ; i<2; i++){
for(j=-1 ; j<2; j++){
if (this.hasMine(lin+i,col+j)){
neighbors++;
}
}
}
return neighbors;
},
hasMine: function(lin, col) {
return this.board[lin] && this.board[lin][col];
},
hasExploded: function() {
return this.blown;
},
win: function() {
return this.opened == this.cellNumber - this.mines
&& ! this.hasExploded();
},
draw_board: function(container_id, lin, col) {
container = $('#' + container_id);
var table = $('<table></table>');
container.append(table);
for(var i=0 ; i<lin ; i++){
var tr = $("<tr></tr>");
table.append(tr);
for(var j=0 ; j<col ; j++){
var td = $('<td></td>').data('cell', {line: i, column: j});
tr.append(td);
}
}
_this = this;
container.find('td').click(function(){
var cell= $(this).data('cell');
var neighborCount = _this.open(cell.line, cell.column);
$(this).text(neighborCount);
});
},
}
var b = new Minesweeper('campo',10,10);
b.install_mine(9,3);
b.install_mine(2,4);
b.install_mine(0,3);
b.install_mine(0,0);
b.install_mine(9,8);
b.install_mine(6,7);
b.install_mine(4,9);
b.install_mine(5,7);
b.install_mine(6,2);
b.install_mine(2,4);
});
</script>
Dêem uma brincada pra ver como está ficando. O código pode ser visto com um "botão direito -> view source" nessa página, ou então no github.
Aos que quiserem saber mais sobre dojo, dêem uma olhada nesse vídeo:
Aos que quiserem participar dos Dojos na SEA, entrem na nossa lista de emails, ou na do dojo-brasília.