Я планирую создать простую браузерную игру на основе запросов ajax. У меня есть карта, которая состоит из 10x10 делений на клиенте. На сервере у меня есть массив [10,10], который представляет состояние моих div-ов, поэтому, например, если клиент нажимает на определенный div, ajax-запрос отправляется в фоновом режиме, обновляя мой массив и вставляя число 1 в правильная позиция массива. Исходя из этой идеи, я хочу, чтобы все клиенты видели одну и ту же карту, поэтому я подумал о том, чтобы сохранить массив моей карты в состоянии приложения (если нет лучшего способа сделать это), потому что, как мы все знаем, состояние приложения является общим для всех клиентов. Поэтому мой вопрос заключается в том, как мне это сделать, или как мне на самом деле добраться до состояния приложения в Asp.Net MVC. Я много искал и не мог найти правильный способ вставки данных в состояние приложения в Asp.Net MVC 3, особенно двухмерный массив, который немного усложняет задачу. Мой код до сих пор работает более или менее без использования состояния приложения. Я имею в виду, что каждый раз, когда я создаю новый экземпляр массива карты, и я возвращаю этот экземпляр с сервера клиенту, что неправильно, потому что я просто хочу создать одну карту и вернуть ту же карту всем, и это часть, на которой я стою.
// когда пользователь посещает мой сайт
public class HomeController : Controller
{
public MapModel mapModel = new MapModel();
public ActionResult Index()
{
return View(mapModel);
}
}
// Ajax-запрос, когда пользователь нажимает на элемент div (плитку карты)
$(".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);
}