使用MVC / Javascript实现基于回合制的网页游戏

时间:2011-12-16 23:07:52

标签: javascript asp.net-mvc-3

我正在使用javascript和asp.net MVC实现基于浏览器回合制的游戏,未来可能会使用html5。

我有一些关于它的问题,因为我对asp.net MVC和javascript很新:

  1. 我不知道如何在javascript和MVC之间进行交互, 这意味着如何创建一个不重新加载页面的GUI,而是将使用它的信息发送到使用它的服务器上并相应地更新GUI。

    例如:单击按钮将调用服务器端函数,该函数将更新网站上的某些字段而不重新加载页面。

    自然,我想让javascript只负责GUI, 并且所有的计算都在服务器端,似乎:

    • 点击

    • 向服务器端功能发送信息

    • 计算和更新GUI

  2. 我在战斗中需要为每位玩家保存大量数据 我想知道保存这些数据的最佳位置。

    我可能会有一个包含数据的Battle对象,它将访问数据库并使用javascript更新gui。

  3. 由于它是一个基础游戏,我将不得不实现一个将在玩家之间同步的系统。我认为这样做的最好方法是在每个客户端上创建一个计时器, 每2秒钟将从数据库中获取信息并相应地更新GUI(如果某些内容已发生变化)(例如,其他玩家完成了他的移动,X类型的移动造成X点伤害)。你有更好的解决方案吗?

  4. 感谢。

2 个答案:

答案 0 :(得分:3)

是的,您需要Ajax和可能的一些JavaScript库来协助您的单页应用。您可以通过使用jQuery来熟悉Ajax方法来开始原型设计:

<script type="text/javascript">
    $(function() {
        $('#battleHitButton').click(function(e) {
            $.ajax({
                type: 'POST',
                url: 'Battle/Hit',
                data: { 'opponent': 'someName', 'bonus': 42 },
                success: function(data) {
                    $('#result').html(data);
                    // do some other stuff after hit
                }
            });
        });
    });
</script>

后端的MVC应用程序需要在控制器中执行操作以支持/Battle/Hit URL

public class BattleController : Controller
{
    [HttpPost]
    public ActionResult Hit(BattleModel model)
    {
        string whoToHit = model.opponent;
        int bonusDamage = model.bonus;
        // do battle, persist to database, etc
    }
}

这绝不是一个完整的解决方案。但是,它应该让你开始考虑MVC和JavaScript / jQuery。一旦掌握了它,我强烈建议如果你的应用程序变得更复杂,那么可以在jQuery中探索一些替代方法。 jQuery.ajax可以迅速变成意大利面条代码!

答案 1 :(得分:1)

我会研究javascript长轮询和服务器端异步处理 - 以便客户端立即更新服务器端发生的事情。 java中的示例:http://www.playframework.org/documentation/1.2/asynchronous

要创建模型客户端,您可以查看backbone.js

顺便说一句,谷歌搜索asp.net ajax聊天应用程序可能会给你一些良好的客户沟通起点