Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 确定哪个对象';他的瓷砖被接管了_C# - Fatal编程技术网

C# 确定哪个对象';他的瓷砖被接管了

C# 确定哪个对象';他的瓷砖被接管了,c#,C#,我正在制作一个小游戏“病毒”。我正在为两名玩家制作游戏,但计划为更多玩家制作一个选项 如果你移动,你会将你的牌复制到你旁边的牌上,并接管周围所有的敌人牌。我目前拥有如下内容(评论,因为所有内容都是荷兰语): //浏览目标磁贴的直接邻居列表 //如果邻居的球队不是中立的,也不是他们自己的球队,那就把那块地砖拿走 //目前,该瓷砖的接管情况如下: 对于(int i=0;i

我正在制作一个小游戏“病毒”。我正在为两名玩家制作游戏,但计划为更多玩家制作一个选项

如果你移动,你会将你的牌复制到你旁边的牌上,并接管周围所有的敌人牌。我目前拥有如下内容(评论,因为所有内容都是荷兰语):

//浏览目标磁贴的直接邻居列表
//如果邻居的球队不是中立的,也不是他们自己的球队,那就把那块地砖拿走
//目前,该瓷砖的接管情况如下:
对于(int i=0;i
这适用于我目前拥有的游戏:一个只有两名玩家的游戏。但是如果我想和两个以上的玩家一起玩,这是行不通的。我必须找回从哪个敌人手中夺走的瓷砖


如何确定哪些玩家的互动程序已被接管?

必须添加到一个玩家的列表中并从另一个玩家的列表中删除是多余的,因为相同的数据会被表示两次,这可能会导致不一致

只保留一个唯一的磁贴列表,每个磁贴都可以有一个所有者属性(无人或玩家id)。然后,您可以按颜色/玩家进行计数


使用此系统,您只需将tile owner属性更改为currentPlayer

,即可将一个tile添加到玩家列表并从另一个列表中删除,这实际上相当聪明。而我只需要使用Foreach循环,而不是做我现在正在做的事情(如果我确定,但我会找到答案:p)。现在使用自动取款机已经太晚了,所以我明天会测试一下。很乐意帮忙。如果你一次得到所有玩家的计数,效果很好。否则考虑使用LINQ。您可以按某个玩家筛选磁贴,然后聚合以获得计数。您还可以通过将欧几里德距离的绝对值设置为大于零且小于2(接受1或sqrt(2),加成1)来过滤瓷砖以获得相邻瓷砖的列表。回到foreach循环:我给每个瓷砖一个类型为Player(null)、player1或player2)的所有者元素,并希望相应地添加分数。由于类型不同,您不能完全说
foreach(Tiles中的Player owner/*2d数组中的所有Tiles*/)
,这怎么可能呢?@ItsSander只需给每个玩家一个Player.id,并使Tile.ownerId与该id匹配。然后将Tile.ownerId与Player.id匹配即可,但我不明白这如何避免类型差异的问题。我必须检查整个数组或列表,它们是平铺。我使用了3个for循环和一个if语句来获得分数(for循环:遍历玩家列表,2个for循环遍历2d数组,if语句检查当前磁贴的所有者是否等于相应的玩家)。这是有效的,因为我没有限制元素。我现在对你的方式很好奇:p
//Go through the list of direct neighbors of the destination tile
//if that neighbor's team is not neutral and not of their own team, take that tile over
//taking over that tile is currently as follows:

for(int i = 0; i < destinationTile.DirectNeighbors.Count(); i++)
{
    destinationTile.DirectNeighbors[i].Backcolor = players[currentPlayer].teamColor;
    players[currentPlayer].tilesOwned.Add(DirectNeighbors[i]);

    players[currentEnemy].tilesOwned.Remove(DirectNeighbors[i]);
} //tilesOwned being a List on every Player