用于基于文本的游戏的 PHP 开关


PHP switches for text-based game

所以我有一个游戏的想法,我想为一小群在线朋友开发,我实际上对html和css以及一些javascript/jquery非常了解。我想要的建议是,这个基本框架的示例是否足够强大,允许我继续这个想法,或者我是否应该广泛地改变一些东西。我是PHP的新手,但我知道我需要一种服务器端语言来使游戏更加动态,并防止他们仔细阅读代码以获得答案......

那么,使用这个简单的框架作为起点的基于文本的游戏是否可行,或者我应该使用完全不同的东西?

编辑:游戏是渐进式的,因此一旦他们到达下一个级别,他们就不需要访问以前的级别。检查结果将通过Ajax/Jquery传输到模拟控制台,供他们实时查看。

<?php
session_start();
//Text sent through jquery and ajax, checked for a passcode to access a higher level directly since I'm using sessions
switch($_POST['text']){
case a:
    $_SESSION['auth_level'] = 2;
    break;
case b:
    $_SESSION['auth_level'] = 3;
    break;
case c:
    $_SESSION['auth_level'] = 4;
    break;
case d:
    $_SESSION['auth_level'] = 5;
    break;
case e:
    $_SESSION['auth_level'] = 6;
    break;
default:
    $_SESSION['auth_level'] = 1;
    break;
};
//Giving them conditional access to commands based on their authorization level
if($_SESSION['auth_level'] = 1) {
switch($_POST['text']){
    case a:
    echo "";
    break;
case b:
    echo "";
    break;
case c:
    echo "";
    break;
case d:
    echo "";
    break;
case e:
    echo "";
    break;
case f:
    echo "You are now authorized for level 2!";
    $_SESSION['auth_level'] = 2;
    break;
}
elseif($_SESSION['auth_level'] = 2) {
switch($_POST['text']){
    case a:
    echo "";
    break;
case b:
    echo "";
    break;
case c:
    echo "";
    break;
case d:
    echo "";
    break;
case e:
    echo "";
    break;
case f:
    echo "You are now authorized for level 3!";
    $_SESSION['auth_level'] = 3;
    break;
}
elseif($_SESSION['auth_level'] = 3) {
switch($_POST['text']){
    case a:
    echo "";
    break;
case b:
    echo "";
    break;
case c:
    echo "";
    break;
case d:
    echo "";
    break;
case e:
    echo "";
    break;
case f:
    echo "You are now authorized for level 4!";
    $_SESSION['auth_level'] = 4;
    break;
}
//For anything not designated as a command
else {
echo $_POST['text'] . " is not a valid command or access code"
?>

这有点长的评论,所以我会尽力提供帮助。

理想情况下,如果您尝试实现一个基于文本的游戏,其中用户输入命令,或者他们输入关卡代码,您应该考虑将它们分成两个不同的字段 - 类似于$_POST['level_code'],这将不同于他们的"命令"。

session_start();
// If a user doesn't have an auth_level, give them the default
if(!isset($_SESSION['auth_level'])) {
    $_SESSION['auth_level'] = 1;
}
// If a user posts a level code, do something with it
if(isset($_POST['level_code']) {
    switch ($_POST['level_code']) {
        case 'levelcode_a':
            // Give your user feedback as well if you want
            $_SESSION['auth_level'] = 1;
            break;
        case 'levelcode_b':
            $_SESSION['auth_level'] = 2;
            break;
            // etc, etc
        case 'levelcode_c':
        default:
            // User didn't send a level code so don't do anything
    }
}
if (!isset($_POST['text'])) {
    exit("No additional codes were given");
}
// Then do your application logic
switch ($_SESSION['auth_level']) {
    case 1:
        switch ($_POST['text']) {
            case 'a':
                // Some game activity
                break;
            case 'b':
                // Some game activity
                break;
        }
        // Enable level 1 actions
        break;
    case 2:
        // Enable level 2 actions
        break;
    default:
        // Don't do anything
}

因此,如果您只想创建一个处理所有游戏活动的单体脚本,那么从本质上讲,它是交换机中的开关。

还有其他模式,但这相对容易保持头脑清醒。我很可能会将辅助switch传递给一个函数,这样您就可以构建类似 do_level_1_action(user_input) 的东西,如果它们是 1 级等等,它可能有助于为您分离逻辑。