在一個簡單的游戲中,我需要某種類或結構來保存 4 個玩家的資料。如何在回圈期間每回合更改玩家類別?
我的意思與此類似,在回圈的每一輪中,一些指令都在更改每個玩家班級中的資料。有沒有任何輕松的方法可以做到這一點,而不是創建許多 ifs?
internal class Program
{
private static void Main(string[] args)
{
Player player1 = new Player();
Player player2 = new Player();
Player player3 = new Player();
Player player4 = new Player();
int playerTurn = 1;
while(true)
{
//some instructions to change the data for example
//player(playerTurn).x = 1
}
}
}
class Player
{
public int x = 0;
public int y = 0;
}
uj5u.com熱心網友回復:
每當您為這樣的變數編號時:
Player player1 = new Player();
Player player2 = new Player();
Player player3 = new Player();
Player player4 = new Player();
您可能想要的是一個集合。例如:
var players = new List<Player>
{
new Player(),
new Player(),
new Player(),
new Player()
};
然后您可以遍歷串列,更改其中的特定元素等。
在您的特定情況下,您似乎想Player通過索引訪問特定的:
//player(playerTurn).x = 1
您可以使用串列索引執行此操作:
players[playerTurn].x = 1;
盡管如果串列曾經排序過,那么該索引就消失了。在這種情況下,您可以改用Dictionary<int, Player>. 例如:
var players = new Dictionary<int, Player>
{
{ 1, new Player() },
{ 2, new Player() },
{ 3, new Player() },
{ 4, new Player() }
}
在這種情況下,每個Player物件始終由該整數值唯一標識。而且用法是一樣的:
players[playerTurn].x = 1;
或者,您可以在Player 本身上創建一個唯一識別符號。例如,假設它有一個ID可以設定的屬性:
var players = new List<Player>
{
new Player { ID = 1 },
new Player { ID = 2 },
new Player { ID = 3 },
new Player { ID = 4 }
};
在這種情況下,您仍然可以使用更通用的List<Player>結構,并查詢它以找到特定的Player:
players.Single(p => p.ID == playerTurn).x = 1;
您可以使用其他集合型別。您甚至可以更進一步,創建一個自定義PlayerList物件,該物件在內部包含一個集合、當前“回合”以及有關玩家串列的其他資訊。但總的來說,當您擁有一系列物件時,集合型別很有用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/519798.html
標籤:C#数据库循环班级
上一篇:無限回圈?
下一篇:如何從物件反應中的陣列中過濾資料
