Skip to content

Instantly share code, notes, and snippets.

@zokis
Created July 10, 2012 17:36
Show Gist options
  • Save zokis/3084967 to your computer and use it in GitHub Desktop.
Save zokis/3084967 to your computer and use it in GitHub Desktop.
Campo Minado
<?php
class CampoMinado{
private $linha;
private $coluna;
private $matriz;
public function __construct($linha, $coluna){
$this->linha = (int) $linha;
$this->coluna = (int) $coluna;
foreach(range(0,$this->linha-1) as $_linha){
foreach(range(0,$this->coluna-1) as $_coluna)
$this->matriz[$_linha][$_coluna] = 0;
}
}
public function inserirBomba($linha, $coluna){
if($this->celulaExiste($linha, $coluna)){
$this->matriz[$linha][$coluna] = -1;
$vizinhos = array(
array(+1,+0),
array(-1,+0),
array(-1,-1),
array(+1,+1),
array(+0,+1),
array(+0,-1),
array(-1,+1),
array(+1,-1),
);
foreach ($vizinhos as $v) {
$l = $linha + $v[0];$c = $coluna + $v[1];
if($this->celulaExiste($l, $c)){
if(!$this->eBomba($l, $c))
$this->matriz[$l][$c]++;
}
}
}
}
private function eBomba($linha, $coluna){
return $this->matriz[$linha][$coluna] == -1;
}
private function celulaExiste($linha, $coluna){
return ($linha<$this->linha and $coluna<$this->coluna) and ($linha > -1 and $coluna > -1);
}
public function mostrar(){
echo '<html>'."\n\t".'<head>'."\n\t\t".'<title>CampoMinado</title>'."\n\t".'<body style="font-size:21px;">'."\n";
foreach ($this->matriz as $linha) {
foreach ($linha as $coluna){
if($coluna == -1)
echo '[<i style="color:#f00;font-size:22px;">b</i>]';
elseif($coluna != 0)
echo '[<b style="color:rgb('.(($coluna-1*2)*15).','.(($coluna-1)+($coluna+5)*2).','.(200-$coluna*30).')">'.$coluna.'</b>]';
else
echo '['."\t&nbsp;".']';
}
echo '<br />'."\n";
}
}
}
$campoMinado = new CampoMinado(9,9);
$campoMinado->inserirBomba(1, 0);
$campoMinado->inserirBomba(2, 0);
$campoMinado->inserirBomba(3, 0);
$campoMinado->inserirBomba(3, 1);
$campoMinado->inserirBomba(1, 1);
$campoMinado->inserirBomba(1, 2);
$campoMinado->inserirBomba(2, 2);
$campoMinado->inserirBomba(3, 2);
$campoMinado->inserirBomba(4, 2);
$campoMinado->inserirBomba(5, 2);
$campoMinado->inserirBomba(5, 3);
$campoMinado->inserirBomba(5, 4);
$campoMinado->inserirBomba(7, 2);
$campoMinado->inserirBomba(7, 3);
$campoMinado->inserirBomba(7, 4);
$campoMinado->inserirBomba(0, 8);
$campoMinado->inserirBomba(0, 7);
$campoMinado->inserirBomba(0, 6);
$campoMinado->inserirBomba(1, 6);
$campoMinado->inserirBomba(2, 6);
$campoMinado->inserirBomba(2, 7);
$campoMinado->inserirBomba(2, 8);
$campoMinado->mostrar();
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment