因此,我正在创建一个垄断游戏,并且我有两个函数可以将有关游戏的信息读/写到数据库中,以便可以在回发之间进行检索。我还有一个开始游戏功能,它将所有内容初始化为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个全新的播放器,并立即覆盖数据库中的详细信息。似乎很奇怪,它对于前三名球员来说还算完美,但是第四名的细节似乎并没有改变。任何帮助将不胜感激,我敢肯定这很简单,但是我已经花了数小时,却一无所获。