Hejsan!
Jag håller på att skriva ett brickspel i Perl 5.8.8 cgi-skript under Apache. Mitt problem ligger i att sidan med brickspelet, annars fullt fungerande, inte vill visa gif-bilderna som brickorna är sparade som. Spelet går ut på att flytta om 8 nummerbrickor så att de kommer i nummerordning. Jag tänkte först bara posta subrutinen som ska visa brickorna, "sub DisplayTiles", men med tanke på hur jag vridit och vänt på den, så lägger jag in hela skriptet. Tänk på att bara svara om ni kan tänkas ha någon idé om hur det här ska lösas. Annars tror andra att så många har svarat, så då behöver inte de. Jag vill åter poängtera att spelet verkar fungera, men utan brickor går det ju ändå inte att spela. Jag vill också säga att mappen "images" ligger en nivå upp från cgi-skriptet och att bilderna heter 0.gif - 8.gif
Tack på förhand
Nugget
#!C:/Perl/bin/perl5.8.8
use CGI;
$query = new CGI;
print $query->header;
print $query->start_html(-title=>"Tile Puzzle");
print "<H1 ALIGN=center>Tile Puzzle</H1>";
print "<BLOCKQUOTE>";
print "Click on a square adjacent to the empty one ";
print "to slide it into the empty slot. When you\'ve arranged ";
print "all the numbers in sequence, a portal will open into a ";
print "secret passage.... <P>";
print "</BLOCKQUOTE>";
print $query->startform,"\n";
if ((@tiles = $query->param('tilelist')) != "") {
$query-\>delete('tilelist');
if (!&CheckTile(\*tiles)) {
print "\<H3\>Sorry That Move Is Not Legal\</H3\>";
}
elsif (&Solved(@tiles)) {
print "\<H3\>Congratulations!! You Solved It!\</H3\>";
print "You may \<A HREF='portal.html'\>proceed\</A\>\<P\>";
}
}
else {
@tiles= (0..8);
&Mixup(*tiles);
}
&DisplayTiles(@tiles);
print $query->hidden('tilelist',@tiles);
print $query->endform,"\n";
print $query->end_html;
sub DisplayTiles {
local ($i);
$i = 0;
print "<CENTER>";
foreach $seq (@_) {
print $query->image_button("button$seq","../images/$seq.gif");
$i++;
if ($i==3) { #Visa i rader om 3
print "<BR>\n";
$i = 0;
}
}
print "</CENTER>";
}
sub CheckTile {
local (*tiles) = @_;
local ($button, $i, $empty, $clicked, $null_tile, $array);
$clicked = 0;
$array = 3;
$null_tile = 0;
# Hitta den klickade brickan
for ($i=0; $i<=8; $i++) {
if ($query->param("button$i.x")) {
$button = $i;
last;
}
}
# Lokalisera var den klickade brickan finns i listan
for ($[..$#tiles) {
$empty = $_ if ($tiles[$_]) == $null_tile;
$clicked = $_ if ($tiles[$_]) == $button;
}
# Kolla om flytten är tillåten
# Att klicka på den tomma brickan är inte tillåtet
if ($button == $null_tile) {
return 0;
}
\# Kontrollera att den clickade brickan ligger intill den tomma
if (($empty == $clicked-1) \|\|
($empty == $clicked+1) \|\|
($empty == $clicked-$array) \|\|
($empty == $clicked+$array) ) {
$tiles\[$empty\] = $tiles\[$clicked\];
$tiles\[$clicked\] = $null_tile;
}
else {
return 0;
}
return 1;
}
sub Solved {
local(@tiles) = @_;
local($j);
for ($j=0; $j<=$#tiles; $j++) {
return 0 if ($j != $tiles[$j]);
}
return 1;
}
sub Mixup {
local(@temp);
local(*tiles) = @_;
push(@temp,splice(@tiles, rand(@tiles),1)) while @tiles;
@tiles = @temp;
}