Давно уже задумывал такую игру, но как часто бывает начал и забыл. Но вот на одном форуме кто то написал, что кроме «пятнашек» не делал игр. Вот тут я и вспомнил про свой забытый проект. К сожалению завершенного образца на данный момент у меня нет, поэтому хочу представить вам «мастер - копию». Ведь по сути главное идея.
В самом начале я собирался оригинальную картинку разбивать на фрагменты таким вот кодом
$file='img.jpeg';
$tipe = GetImageSize ($file);
$line=1;
$part=10;
$x=$y=$xx=$yy=(int)$tipe[0]/$part;
$w=$tipe[0]+$part*$line;
$h=$tipe[1]+$part*$line;
$img_fone=imagecreatetruecolor($x,$y); //fone
$col=imagecolorallocate($img_fone, 0, 255, 0);
imagefill ($img_fone, 0, 0, $col);
$img_work = ImageCreateFromJPEG($file);
for ($a=0;$a<($tipe[1]/$x);$a++)
for ($i=0;$i<$tipe[0]/$x;$i++)
{
imagecopyresampled($img_fone,$img_work,0,0,$xx*$i,$yy*$a, $xx,$yy,$x,$y);
imagejpeg($img_fone,'data/'.$a.'_'.$i.'.jpg',75);
}
imagedestroy($img_fone);
imagedestroy($img_work);
И сохранять полученные картинки для дальнейшего использования. Однако это даст в конечном итоге много мусора, который нужно будет чистить, сто не есть хорошо.
В конечном итоге было принято решение хранить кусочки головоломки (картинки) в одном файле. Для этого нужно преобразовать их в массив строк и сохранить например так
file_put_contents('file_name',serialize('массив_картинок'));
После этого их очень просто будет вывести следующим кодом
$fr=1; // выведет вторую катринку (первая $fr=0; =))
$frames=unserialize(file_get_contents('file_name'));
header('Content-Type: image/jpg');
echo $frames[$fr];
Но вот тут я и наступил на грабли. Нет (или я не нашел) в ПХП функции для сохранения картинки в строку. Поэтому пришлось пользовать следующую конструкцию.
ob_start();
imagejpeg($img, NULL ,75);
$frames[]=ob_get_contents();
ob_clean();
Что в итоге и сохраняет в массив наши кусочки картинки.
И еще один подводный камень, уже в логике самой игры. Нельзя перемешивать пазлы стандартной функцией shuffle(), потому что не факт что они после этого соберутся.
Вот собственно пока и все. Ниже прилыгаются исходные коды игры.
Данный код позволяет разбить исходную картинку на произвольное количество частей и правильно перемешать эти части, чтобы в конечном итоге их можно было собрать.
Короче говоря это готовая игра, для одного игрока.
Прикрепленные файлы:
pazzl.zip (291.09 кб.) Скачано 118 раз