[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.
DojoSEA: vamo que vamo
Gente,
Essa quarta vamos continuar nosso problema do Minesweeper em Javascript, no mesmo horário de sempre, das 17:00 às 19:00. Compareçam!

Aproveito pra divulgar que criei uma lista de emails pra gente combinar as sessões, entrem lá pra gente descongestionar esse espaço aqui do blog e poder discutir mais sobre código e talz.

Aproveito pra deixar um texto curto bem legal, relacionado a TDD.
Nos vemos quarta! o/
DojoSEA: suspenso outra semana 3
Moçada,
Depois do carnaval, nosso Dojo ainda não conseguiu se levantar.
Não me lembrei de blogar semana passada, mas dessa vez vou explicar.
Essas duas últimas semanas foram meio turbulentas aqui na SEA por motivos que não cabem explicar aqui. O fato é que estamos fazendo uma força tarefa na SEA, com gente de todos os projetos, pra tentar agarrar uma oportunidade.

Desse modo, achamos melhor suspender os Dojos por enquanto, pra não distrair o pessoal e pra respeitar o esforço coletivo da moçada.
Semana que vem esperamos já estar de volta ao nosso ritmo sustentável e continuamos o problema do minesweeper javascript.
Até lá!