首页 > 解决方案 > ASP.NET/SQL 函数不在循环中存储所有值

问题描述

所以我正在创建一个垄断游戏,我有两个函数可以在数据库中读取/写入有关游戏的信息,以便可以在回发之间检索它。我还有一个启动游戏函数,它将所有内容初始化为 0,然后调用 writeToDatabase()。createArrays() 只是创建一个玩家/方块列表,方块已被删除,因为它们不相关。

我遇到的问题是我相信它只是在循环中存储一些值。当调用 start game 函数时,它正确地将玩家位置设置为 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 个全新的播放器,并立即覆盖了数据库中的详细信息。对于前 3 名玩家来说,这似乎很奇怪,但第 4 名的细节似乎没有改变。任何帮助将不胜感激,我确信这很简单,但我已经花了几个小时在这上面,却一无所获。

标签: asp.netsql-server

解决方案


推荐阅读