First and Final
parent
aab3230ccc
commit
be50ab89a3
|
@ -0,0 +1,161 @@
|
|||
<?php
|
||||
ini_set('xdebug.max_nesting_level', 20000);
|
||||
|
||||
session_start();
|
||||
if(!isset($_SESSION['config']) || (isset($_POST['sizeX']) && isset($_POST['sizeY']) && isset($_POST['bombs']))) $_SESSION['config'] = array(
|
||||
'sizeX' => isset($_POST['sizeX']) ? $_POST['sizeX'] : 10,
|
||||
'sizeY' => isset($_POST['sizeY']) ? $_POST['sizeY'] : 10,
|
||||
'bombs' => isset($_POST['bombs']) ? $_POST['bombs'] : 10
|
||||
);
|
||||
|
||||
if(!isset($_SESSION['cases']) || isset($_POST['Reset'])){
|
||||
$_SESSION['cases'] = array_fill(0, $_SESSION['config']['sizeX'], array_fill(0, $_SESSION['config']['sizeY'], array('bomb' => false, 'visible' => false)));
|
||||
|
||||
for ($i=0; $i < $_SESSION['config']['bombs']; $i++) {
|
||||
$x; $y;
|
||||
do{
|
||||
$x = rand(0, count($_SESSION['cases'])-1);
|
||||
$y = rand(0, count($_SESSION['cases'][$x])-1);
|
||||
}while($_SESSION['cases'][$x][$y]['bomb']);
|
||||
$_SESSION['cases'][$x][$y]['bomb'] = true;
|
||||
}
|
||||
}
|
||||
|
||||
$alive = true;
|
||||
|
||||
if(isset($_POST['xPos']) && isset($_POST['yPos'])){
|
||||
if(!$_SESSION['cases'][$_POST['xPos']][$_POST['yPos']]['visible']){
|
||||
if($_SESSION['cases'][$_POST['xPos']][$_POST['yPos']]['bomb']){
|
||||
$alive = false;
|
||||
for ($x=0; $x < count($_SESSION['cases']); $x++){
|
||||
for ($y=0; $y < count($_SESSION['cases'][$x]); $y++){
|
||||
$_SESSION['cases'][$x][$y]['visible'] = true;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
set_visible_rec($_POST['xPos'], $_POST['yPos']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$win = true;
|
||||
for ($x=0; $x < count($_SESSION['cases']) && $win; $x++){
|
||||
for ($y=0; $y < count($_SESSION['cases'][$x]) && $win; $y++){
|
||||
if(!$_SESSION['cases'][$x][$y]['bomb'] && !$_SESSION['cases'][$x][$y]['visible']) $win = false;
|
||||
}
|
||||
}
|
||||
|
||||
function get_bomb_count($x, $y){
|
||||
$count = 0;
|
||||
for ($i=-1; $i <= 1; $i++) {
|
||||
for ($j=-1; $j <= 1; $j++) {
|
||||
if(isset($_SESSION['cases'][$x+$i][$y+$j]) && $_SESSION['cases'][$x+$i][$y+$j]['bomb']) $count++;
|
||||
}
|
||||
}
|
||||
return $count;
|
||||
}
|
||||
|
||||
function set_visible_rec($x, $y){
|
||||
if(!$_SESSION['cases'][$x][$y]['visible']){
|
||||
$_SESSION['cases'][$x][$y]['visible'] = true;
|
||||
if(get_bomb_count($x, $y) == 0){
|
||||
for ($i=-1; $i <= 1; $i++) {
|
||||
for ($j=-1; $j <= 1; $j++) {
|
||||
if(isset($_SESSION['cases'][$x+$i][$y+$j])) set_visible_rec($x+$i, $y+$j);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
?><!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<link rel="stylesheet" href="style.css">
|
||||
<title>Demineur</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Demineur</h1>
|
||||
<nav>
|
||||
<form method="post">
|
||||
<input type="hidden" name="Reset">
|
||||
<button type="submit">
|
||||
<img id="reset" src="<?= $alive ? ($win ? 'happy' : 'ok') : 'sad' ?>.gif" />
|
||||
</button>
|
||||
</form>
|
||||
</nav>
|
||||
<table id="cases">
|
||||
<?php for ($x=0; $x < count($_SESSION['cases']); $x++): ?>
|
||||
<tr>
|
||||
<?php for ($y=0; $y < count($_SESSION['cases'][$x]); $y++): ?>
|
||||
<td>
|
||||
<?php
|
||||
if($_SESSION['cases'][$x][$y]['visible']){
|
||||
if($_SESSION['cases'][$x][$y]['bomb']){
|
||||
echo '*';
|
||||
}else{
|
||||
$count = get_bomb_count($x, $y);
|
||||
if($count > 0){
|
||||
echo '<span style="color: ';
|
||||
switch ($count) {
|
||||
case 1:
|
||||
echo 'blue';
|
||||
break;
|
||||
|
||||
case 2:
|
||||
echo 'green';
|
||||
break;
|
||||
|
||||
case 3:
|
||||
echo 'red';
|
||||
break;
|
||||
|
||||
case 4:
|
||||
echo 'darkblue';
|
||||
break;
|
||||
|
||||
case 5:
|
||||
echo 'darkred';
|
||||
break;
|
||||
|
||||
default:
|
||||
echo 'black';
|
||||
break;
|
||||
}
|
||||
echo '">'.$count.'</span>';
|
||||
}
|
||||
}
|
||||
}else{
|
||||
?>
|
||||
<form method="post">
|
||||
<input type="hidden" name="xPos" value="<?= $x ?>">
|
||||
<input type="hidden" name="yPos" value="<?= $y ?>">
|
||||
<input type="submit" value=" ">
|
||||
</form>
|
||||
<?php } ?>
|
||||
</td>
|
||||
<?php endfor ?>
|
||||
</tr>
|
||||
<?php endfor ?>
|
||||
</table>
|
||||
<div id="config">
|
||||
<form method="post">
|
||||
<p>
|
||||
<label for="bombs">Bombs: </label>
|
||||
<input type="number" name="bombs" id="bombs" value="10">
|
||||
</p>
|
||||
<p>
|
||||
<label for="sizeX">Size X: </label>
|
||||
<input type="number" name="sizeX" id="sizeX" value="<?= count($_SESSION['cases']) ?>">
|
||||
</p>
|
||||
<p>
|
||||
<label for="sizeY">Size Y: </label>
|
||||
<input type="number" name="sizeY" id="sizeY" value="<?= count($_SESSION['cases'][0]) ?>">
|
||||
</p>
|
||||
<input type="submit" value="Reset" name="Reset">
|
||||
</form>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,34 @@
|
|||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#reset {
|
||||
height: 2em;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
#cases {
|
||||
border-collapse: collapse;
|
||||
margin: auto;
|
||||
}
|
||||
#cases td {
|
||||
background-color: #ddd;
|
||||
border: 1px solid black;
|
||||
width: 2em;
|
||||
height: 2em;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
}
|
||||
#cases form, #cases input {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
#cases input {
|
||||
border: 4px outset grey;
|
||||
box-sizing: border-box;
|
||||
}
|
Reference in New Issue