【问题标题】:PHP switches for text-based game [closed]基于文本的游戏的 PHP 开关 [关闭]
【发布时间】:2014-12-12 02:45:04
【问题描述】:

所以我有一个想法,我想为一小群在线朋友开发一款游戏,实际上我对 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"
?>

【问题讨论】:

  • 你不止一次写了很多东西,你可以做case 'a': case 'b': case 'c': // do stuff; break;这样的事情。
  • 但是...你能告诉我们更多关于你希望代码如何表现的信息吗?现在,您正在向脚本发布名为“文本”的内容,但是您的逻辑意味着它将首先通过“身份验证级别”位发送它们并设置其身份验证级别,但随后它将自动测试“身份验证级别”并授予他们对特定位的授权。这不太合理。比如$_POST['text']为空,它会给他们auth_level=1,那么它会立即给他们auth_level=2
  • @AdamW 哦,不,我明白你对默认值的意思。对不起,那是草率的复制/粘贴。将默认值更改为 case f。如果没有匹配,它会默认退出开关并转到代码中的最后一个 else 语句,还是应该为每个语句定义一个默认值?
  • 见我下面的评论,但如果没有定义默认值,它不会做任何事情。如果您需要特定操作(想到exit()),写一个是明智的,但这对您来说没什么大不了的。

标签: php switch-statement conditional-statements


【解决方案1】:

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

理想情况下,如果您尝试实现基于文本的游戏,其中用户输入命令或输入关卡代码,您应该考虑将它们分成两个不同的字段 - 例如 $_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

}

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

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

【讨论】:

  • Monolithic 对我来说听起来不错,因为这是我的第一个 php,它是目前最简单的方法。到目前为止,你一直是一个很大的帮助。代码不必非常通用,只要它们可以返回到已达到的水平即可。
  • 不客气-如果您要制作更强大的东西,我还会做其他事情,理想情况下,您会将游戏选项和内容拆分到不同的文件中,也许解析一些 XML 和这种方式很容易将内容与游戏逻辑分开,但对于一个爱好游戏来说有点过分了!
  • 是的。我会为以后保存更复杂的东西。现在,我很高兴到目前为止一切都正常运行,我只需要在完成文本之前实现 ajax 和 php 脚本。
  • $.ajax('your_php_script.php', { data: { text: 'whatever_the_value_of_your_textbox_is' }, success: function (data) { alert(data) //alert with whatever your php script said, error: function() { //If you get here your PHP script failed or there was an HTTP error or something }; } });
  • 啊,这是不必要的帮助,但我会把它归档以备后用。我是一个完整的 Ajax 新手,所以我能得到的所有信息都有帮助。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-30
  • 1970-01-01
  • 2011-06-05
  • 2010-09-06
相关资源
最近更新 更多