基礎から解る!PHP入門講座 プログラム入門に最適な言語、PHPを学ぼう

基礎から解る!PHP入門講座

プログラム入門に最適な言語、PHPを学ぼう      

 このサイトは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>
    2020/7
    SUN MON TUE WED THU FRI SAT
          1 2 3 4
    5 6 7 8 9 10 11
    12 13 14 15 16 17 18
    19 20 21 22 23 24 25
    26 27 28 29 30 31  


     フォクすけ©2006 Mozilla Japan



    制作:基礎から解るPHP入門講座 代表:FREEZE

    Copyright © 2005/2/28 flzPHP.All Rights Riserved