用php语言写扫雷小游戏

P粉314010027
P粉314010027
2024-10-31 60浏览

摘要:

扫雷小游戏是一个经典的单机游戏,涉及逻辑思维和运气。本回答提供了一段 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;
}
?>

总结:

这段代码提供了一个基本的功能扫雷小游戏,它允许用户单击方格以揭示或标记雷区,并使用二维数组来表示雷区。代码包含了游戏逻辑,例如生成雷区、处理用户输入以及判断游戏是否结束。

php中文网 免责声明:以上内容除特别注明外均来源于网友提问,php中文网回答,权益归原著者所有;