摘要:
扫雷小游戏是一个经典的单机游戏,涉及逻辑思维和运气。本回答提供了一段 PHP 代码,该代码使用二维数组来表示雷区,允许用户单击方格以揭示或标记雷区。代码包括生成雷区、处理用户输入以及判断游戏是否结束等功能。
<?php
// 初始化雷区
$board = array_fill(0, 10, array_fill(0, 10, 0));
$mines = 10;
// 在雷区随机放置地雷
for ($i = 0; $i < $mines; $i++) {
$x = rand(0, 9);
$y = rand(0, 9);
$board[$x][$y] = -1;
}
// 设置相邻方格的地雷数
for ($i = 0; $i < 10; $i++) {
for ($j = 0; $j < 10; $j++) {
if ($board[$i][$j] == -1) {
for ($k = $i - 1; $k <= $i + 1; $k++) {
for ($l = $j - 1; $l <= $j + 1; $l++) {
if ($k >= 0 && $k < 10 && $l >= 0 && $l < 10 && $board[$k][$l] != -1) {
$board[$k][$l]++;
}
}
}
}
}
}
// 游戏循环
while (true) {
// 显示雷区
echo "<table border='1'>";
for ($i = 0; $i < 10; $i++) {
echo "<tr>";
for ($j = 0; $j < 10; $j++) {
if ($board[$i][$j] == -1) {
echo "<td style='background-color: black'></td>";
} elseif ($board[$i][$j] == 0) {
echo "<td style='background-color: white'></td>";
} else {
echo "<td style='background-color: #ccc'>$board[$i][$j]</td>";
}
}
echo "</tr>";
}
echo "</table>";
// 获取用户输入
$input = explode(" ", fgets(STDIN));
$x = $input[0];
$y = $input[1];
$action = $input[2];
// 处理用户输入
if ($action == "click") {
if ($board[$x][$y] == -1) {
echo "踩到雷了,游戏结束。\n";
break;
} elseif ($board[$x][$y] == 0) {
// 展开相邻方格
reveal_empty($board, $x, $y);
} else {
$board[$x][$y] = -2;
}
} elseif ($action == "flag") {
$board[$x][$y] = -3;
}
// 检查游戏是否结束
if (check_win($board)) {
echo "胜利!\n";
break;
}
}
// 展开相邻方格
function reveal_empty(&$board, $x, $y) {
if ($x < 0 || $x >= 10 || $y < 0 || $y >= 10 || $board[$x][$y] == -1) {
return;
}
$board[$x][$y] = -2;
if ($board[$x][$y] == 0) {
reveal_empty($board, $x - 1, $y);
reveal_empty($board, $x + 1, $y);
reveal_empty($board, $x, $y - 1);
reveal_empty($board, $x, $y + 1);
}
}
// 检查游戏是否结束
function check_win($board) {
for ($i = 0; $i < 10; $i++) {
for ($j = 0; $j < 10; $j++) {
if ($board[$i][$j] == -1) {
if ($board[$i][$j] != -3) {
return false;
}
}
}
}
return true;
}
?>总结:
这段代码提供了一个基本的功能扫雷小游戏,它允许用户单击方格以揭示或标记雷区,并使用二维数组来表示雷区。代码包含了游戏逻辑,例如生成雷区、处理用户输入以及判断游戏是否结束。