Som tidligere skrevet er jeg i gang med at beskrive en algoritme, der kan løse spillet Bejeweled. Det har indtil videre resulteret i en masse skriblerier i mine notesbøger og en kladde til den første artikel om algoritmen.
Men før jeg kan gøre algoritmen færdig, er jeg nødt til at prøve nogle ideer af i praksis. Derfor er jeg nu gået i gang med at implementere selve spillet. Det giver mig den mest effektive måde at afprøve forskellige algoritmer.
Første udgave er skrevet i PHP, og i denne version 0.1 af spillet kan jeg tegne en plade med juveler, hvor der ikke optræder sæt. Se spillet i et nyt vindue.
Jeg vil ikke gå ind i detaljerne om opbygningen af selve programmet, men her er koden til den klasse, hvor jeg bygger spillepladen op med juveler.
class board {
private $rows;
private $cols;
private $jewels;
protected $squares;
function __construct($cols = 8, $rows = 8, $jewels = 7) {
$this->cols = $cols;
$this->rows = $rows;
$this->jewels = $jewels;
// Rules only apply if there are more than two different jewels
if ($this->jewels > 2) {
// Run through all squares
for ($i = 0; $i < ($this->cols * $this->rows); $i++) {
// Rules only apply when there are >2 jewels on the board
if ($i < 2) {
// Fill square with random jewel
$this->squares[$i] = rand(1, $this->jewels);
}
else {
do {
// Find a random jewel
$v = rand(1, $this->jewels);
} while (
// Check jewel against rules
$v == $this->squares[$i-1]
&& $v == $this->squares[$i-2]
|| (
$i >= $this->cols*2
&& $v == $this->squares[$i - $this->cols]
&& $v == $this->squares[$i - (2 * $this->cols)]
)
);
// Fill square with selected jewel
$this->squares[$i] = $v;
}
}
}
}
}
Der findes selvfølgelig også andre metoder i klassen, men ovenstående kode viser princippet i strukturen. I øvrigt kan version 0.1 også tegne spillet i andre dimensioner og med et andet antal juveler. Det kan jo godt være nyttigt senere hen.
Stay tuned for næste version og måske en kort artikel med en beskrivelse af algoritmen.

