このサイトはPHPを独習する際に作成したスクリプトを基に、プログラム言語初心者のための入門講座として作成しました。PHPは初心者に親しみやすく、解りやすいプログラム言語です。これからプログラムを学ぶ人の参考になればと思います。
画像パズル2
<?php
error_reporting(1);
session_start(); /*回数表示のためセッションを利用*/
if (empty($_SESSION['count'])) {
$_SESSION['count'] = 1;
} else {
$_SESSION['count']++;
}
/*---------------------------------------------------設定*/
$col = 5 ; /*横の枚数*/
$row = 5 ; /*縦の枚数*/
$width_full = 600 ; /*元画像の幅*/
$height_full = 450 ; /*元画像の高さ*/
$image_name = "bike"; /*画像ファイルの名前は"***_01.jpg"、完成画像は"***.jpg"、"***"の部分を記入*/
/*---------------------------------------------------*/
$last = $col*$row ;
$width = $width_full/$col ;
$height = $height_full/$row ;
if($_POST['new'] != "NEW") { /*NEWがクリックされるとクッキーを読まない*/
$save=$_COOKIE["save"];
}elseif($_POST['new'] == "NEW") {
unset($_SESSION['count']);
}
/*---------------------------------------------------パズルスタート時*/
if(!isset($save)){
srand(date(s)); /*時刻-秒を使って乱数を初期化*/
$pict = range(1,$last-1); /*1〜(全画像枚数-1)の配列を作る*/
shuffle($pict);
$pict[$last-1] = "$last"; /*最後の番号を指定*/
for($cnt=0;$cnt< $last;$cnt++){ /*クッキーに保存するため文字列に変換する*/
if($cnt == ($last-1)){
$save = $save.$pict[$cnt];
} else {
$save = $save.$pict[$cnt].",";
}
}
setcookie("save", $save, time()+60*60);
/*---------------------------------------------------パズル進行中*/
} else {
$pict = split(",",$save); /*配列になる*/
$num = $_GET['num']; /*移動する写真の場所*/
$movepict = $_GET['pict']; /*移動する写真の番号*/
if($num != null){
$key = array_search($last, $pict); /*空欄を探す*/
$pict[$key] = $movepict; /*空欄の場所に移動する写真をいれる*/
$pict[$num] = $last; /*移動する写真は空欄になる*/
$save = null; /*文字列として保存するため*/
for($cnt=0;$cnt<$last;$cnt++){
if($cnt == ($last-1)){
$save = $save.$pict[$cnt];
} else {
$save = $save.$pict[$cnt].",";
}
}
}
setcookie("save", $save, time()+60*60);
}
?><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja"><head>
<meta http-equiv="Content-type" content="text/html; charset=EUC-JP">
<meta http-equiv="Content-Style-Type" content="text/css">
<link rel="stylesheet" href="../style.css">
<title>画像パズル2</title></head>
<body><div class="file2">
<table width="610" border="0"><tr><td valign="top">
<?php
$right = range(1,$last); /*正解用、1〜ラストが並んだ配列*/
echo "<table border ='0' cellspacing='0' cellpadding='0'><tr>¥n";
/*---------------------------------------------------パズル完成時*/
if($right == $pict){ /*配列が順に並んだら完成*/
echo "<td><img src = 'images/$image_name.jpg' width = $width_full height= $height_full border='0'></td></tr></table>";
$date = date("Y年m月d日 A H時i分s秒");
$filepointer=fopen("./puzzle.txt", "a+");
flock($filepointer, LOCK_EX);
fputs($filepointer, $date."¥n");
flock($filepointer, LOCK_UN);
fclose($filepointer);
/*---------------------------------------------------パズル未完成時*/
} else {
$key = array_search($last, $pict); /*空欄を探す*/
function CLICK($width,$height,$posi){ /*空欄に対してクリックできる場所のデータ*/
$data = null ;
if($posi >= $width){ /*一番上の行以外の時は空白の上がクリックできる*/
$data[] = $posi - $width ;
}
if($posi % $width != ($width-1)){ /*右端以外の時は空白の右がクリックできる*/
$data[] = $posi + 1 ;
}
if($posi % $width != 0){ /*左端以外の時は空白の左がクリックできる*/
$data[] = $posi - 1 ;
}
if($posi < $height*$width){ /*一番下の行以外の時は空白の上が下がクリックできる*/
$data[] = $posi + $width ;
}
return $data ;
}
$data = CLICK($col,$row,$key); /*クリックできる場所が配列に格納される*/
/*---------------------------------------------------画像表示*/
for($a = 0; $a < $last;$a++) {
echo "<td>";
for($b = 0;isset($data[$b]);$b++){ /*リンクを設定*/
if($a == $data[$b]){
echo "<a href='pict_game3.php?num=".$a."&pict=".$pict[$a]."'>";
}
}
if(strlen($pict[$a])==1){ /*画像ファイルの名前が一桁数時の場合0をつける*/
$pict[$a] = "0".$pict[$a];
}
echo "<img src = 'images/".$image_name."_".$pict[$a].".jpg' width = $width height= $height border='0'>";
echo "</a></td>¥n";
if($a == $last-1){
echo "</tr></table>";
} else if($a%$col == ($col-1)){
echo "</tr>¥n<tr>¥n";
}
}
}
?> </td><td valign="top" align="center">
<span style="font-size=15px;font-family:arial black;color:#0000FF;padding:5px">PICT PUZZLE</span>
<form action='pict_game3.php' method='post'><input type='submit' name ='new' value='NEW'></form>
<p>
<?php echo $_SESSION['count']; ?> 回目です。</p>
</td></tr></table></div>
</body></html>