ASP.NET/SQL函数不在循环中存储所有值

时间:2019-05-06 07:47:02

标签: asp.net sql-server

因此,我正在创建一个垄断游戏,并且我有两个函数可以将有关游戏的信息读/写到数据库中,以便可以在回发之间进行检索。我还有一个开始游戏功能,它将所有内容初始化为0,然后调用writeToDatabase()。 createArrays()仅创建一个玩家/正方形列表,正方形由于不相关而被删除。

我遇到的问题是我认为它仅在循环中存储一些值。调用开始游戏功能后,它会正确地将玩家的位置设置为0,并将其钱币设置为1500,但是由于某些原因,当再次从数据库中读取时,第4个玩家的详细信息会立即返回到上一会话的状态。

        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个全新的播放器,并立即覆盖数据库中的详细信息。似乎很奇怪,它对于前三名球员来说还算完美,但是第四名的细节似乎并没有改变。任何帮助将不胜感激,我敢肯定这很简单,但是我已经花了数小时,却一无所获。

0 个答案:

没有答案