Итак, я создаю игру-монополию, и у меня есть две функции, которые читают / записывают информацию об игре в / из базы данных, чтобы ее можно было получать между постбэками. У меня также есть функция запуска игры, которая инициализирует все до 0, а затем вызывает writeToDatabase (). createArrays () просто создает список игроков / квадратов, квадраты были удалены, поскольку они не актуальны.
Проблема, с которой я столкнулся, заключается в том, что я считаю, что она хранит только некоторые значения в цикле. Когда вызывается функция запуска игры, она правильно устанавливает позиции игроков на 0, а их деньги на 1500, однако по какой-то причине при повторном чтении из базы данных данные четвертого игрока немедленно возвращаются к тому, что они были во время предыдущей сессии.
private void readFromDatabase()
{
createArrays();
for (int i = 0; i < players.Count(); i++)
{
players[i].SetID(Convert.ToInt32(players_table.GetRow(i)["ID"]));
players[i].SetPosition(Convert.ToInt32(players_table.GetRow(i)["position"]));
players[i].SetMoney(Convert.ToInt32(players_table.GetRow(i)["money"]));
players[i].SetInJail(Convert.ToBoolean(players_table.GetRow(i)["isInJail"]));
players[i].SetIsBankrupt(Convert.ToBoolean(players_table.GetRow(i)["isBankrupt"]));
}
currentPlayerID = Convert.ToInt32(gameinfo_table.GetRow(0)["CurrentPlayerID"]);
currentSquareID = Convert.ToInt32(gameinfo_table.GetRow(0)["CurrentSquareID"]);
freeParkingAmount = Convert.ToInt32(gameinfo_table.GetRow(0)["FreeParkingAmount"]);
currentPlayer = players[currentPlayerID];
CurrentSquare = squares[currentSquareID];
}
private void writeToDatabase()
{
CurrentSquare = squares[currentSquareID];
for (int i = 0; i < players.Count(); i++)
{
SQLDatabase.DatabaseRow prow = players_table.GetRow(players[i].GetID());
prow["ID"] = players[i].GetID().ToString();
prow["position"] = players[i].GetPosition().ToString();
prow["money"] = players[i].GetMoney().ToString();
prow["isInJail"] = players[i].IsInJail().ToString();
prow["isBankrupt"] = players[i].IsBankrupt().ToString();
players_table.Update(prow);
}
SQLDatabase.DatabaseRow girow = gameinfo_table.GetRow(0);
girow["CurrentPlayerID"] = currentPlayerID.ToString();
girow["CurrentSquareID"] = CurrentSquare.GetID().ToString();
girow["FreeParkingAmount"] = freeParkingAmount.ToString();
gameinfo_table.Update(girow);
}
private void startGame()
{
createArrays();
currentPlayerID = 0;
currentPlayer = players[0];
CurrentSquare = squares[0];
writeToDatabase();
}
private void createArrays()
{
for (int i = 0; i < 4; i++)
{
Player player = new Player(i);
players.Add(player);
}
}
Я действительно не могу понять, почему это происходит, так как при создании массива проигрывателей он проходит 4 раза, создавая 4 новых игрока и немедленно перезаписывая детали в базе данных. Кажется странным, что он отлично работает для первых трех игроков, но детали четвертых не меняются. Любая помощь будет принята с благодарностью, я уверен, что это что-то простое, но я потратил часы на это и нигде не получил.