ASP.NET/SQL Функция не хранит все значения в цикле - PullRequest
0 голосов
/ 06 мая 2019

Итак, я создаю игру-монополию, и у меня есть две функции, которые читают / записывают информацию об игре в / из базы данных, чтобы ее можно было получать между постбэками. У меня также есть функция запуска игры, которая инициализирует все до 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 новых игрока и немедленно перезаписывая детали в базе данных. Кажется странным, что он отлично работает для первых трех игроков, но детали четвертых не меняются. Любая помощь будет принята с благодарностью, я уверен, что это что-то простое, но я потратил часы на это и нигде не получил.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...