0

ajaxリクエストに基づいたシンプルなブラウザゲームを作成する予定です。クライアントに10x10divで構成されるマップがあります。サーバーには、divの状態を表すarray [10,10]があります。たとえば、クライアントが特定のdivをクリックすると、バックグラウンドでajaxリクエストが送信され、配列が更​​新され、番号1が挿入されます。適切な配列位置。このアイデアに基づいて、すべてのクライアントに同じマップを表示させたいので、アプリケーションの状態がすべてのクライアント間で共有されることは誰もが知っているので、マップ配列をアプリケーションの状態で保存することを考えていました(これを行うためのより良い方法がない限り)。したがって、私の質問は、これをどのように行うか、またはAsp.NetMVCで実際にアプリケーションの状態に到達する方法です。たくさん検索しましたが、Aspでアプリケーション状態のデータを挿入する適切な方法が見つかりませんでした。Net MVC 3は、特に2次元配列であるため、状況が少し難しくなります。これまでの私のコードは、アプリケーションの状態を使用しなくても、多かれ少なかれ機能します。つまり、マップ配列の新しいインスタンスを作成し、そのインスタンスをサーバーからクライアントに返すたびに、間違っています。これは、1つのマップをインスタンス化して、同じマップをすべての人に返したいためです。これは、私が積み重ねている部分。

//ユーザーが私のサイトにアクセスしたとき

 public class HomeController : Controller
{

    public MapModel mapModel = new MapModel();

    public ActionResult Index()
    {

        return View(mapModel);
    }

}

//ユーザーがdiv(マップタイル)をクリックしたときのAjaxリクエスト

$(".mapTile").click(function () {
        var xx = $(this).attr("y");
        var yy = $(this).attr("x");

        $("#info").text($(this).attr("x"));
        var tile = {
            X: xx,
            Y: yy,
            Value: 1
        };

        $.ajax({
            beforeSend: function () { ShowAjaxLoader(); },
            url: "/Game/ShowTiles",
            type: "POST",
            contentType: "application/json;charset=utf-8",
            dataType: "json",
            data: JSON.stringify(tile),
            success: function (data) {
                HideAjaxLoader(), $.each(data, function (index, item) {
                    if (item.Value === 1) {                       
                        var xCordinate = item.X;
                        var yCordinate = item.Y;
                        $("#" + yCordinate + xCordinate).css("background-color", "red");
                    }
                });
            },
            error: function () { showErrorMsg(); }
        });
    });

//私のモデル

//マップモデル

public class MapModel
{

    private TileModel[,] mapTilesArray;

    public TileModel[,] MapTilesArray
    {
        get
        {
            return mapTilesArray;
        }
        set
        {
            mapTilesArray = value;
        }

    }
    public MapModel()
    {
        MapTilesArray = new TileModel[10,10];
        for (int i = 0; i < 10; i++)
        {
            for (int j = 0; j < 10; j++)
            {
                MapTilesArray[i, j] = new TileModel();
            }
        }
    }

}

//タイルモデル

public class TileModel
    {
        public int X{ get; set; }
        public int Y{ get; set; }
        public int Value { get; set; }

    }

//私のゲームコントローラー

 [HttpPost]
    public JsonResult ShowTiles(TileModel tile)
    {
        MapModel map = new MapModel();
        map.MapTilesArray[tile.X, tile.Y].Value = 1;
        map.MapTilesArray[tile.X, tile.Y].X = tile.X;
        map.MapTilesArray[tile.X, tile.Y].Y = tile.Y;

        return Json(map.MapTilesArray);
    }
4

1 に答える 1

1

MapModel変数を静的にします。さまざまなリクエストに対応し、すべてのユーザーに同じ情報を共有できるようになります。

この行を変更します

public MapModel mapModel = new MapModel();

これとともに

private static MapModel mapModel = new MapModel();

また、ajaxリクエストごとに新しいマップを返すのではなく、静的変数を返すだけです。

于 2012-03-06T21:04:27.903 に答える