算法c# unity棋类游戏
本文关键字:棋类游戏 unity 算法 | 更新日期: 2023-09-27 18:12:20
我正在使用Unity制作一款2D国际象棋游戏。
我正在写代码,告诉你是否可以移动到这个位置。
下面是我如何做的解释:
- 有一个"墙纸"代表板
- 在"墙纸"的每个正方形上,我放置了另一个具有未激活网格渲染器的正方形。
- 当玩家选择一个方块时,如果在这个位置上有一个棋子,我激活所有棋子可以到达的方块的网格渲染器。 所有的方块都存储在一个简单的数组中,我用它来确定可能的位置。
对于小兵,没有问题,它工作完美,但对于车或骑士,运动更复杂,我有问题做这个。
在这里我将和骑士们一起工作。
当它在板的中心,没有问题:http://prntscr.com/crcogo
但是当我在黑板的另一边时,你可以自己检查:http://prntscr.com/crcozu
代码如下:
case "White_Knight(Clone)_0":
int Index_Knight_1 = Array.IndexOf(Board, Square_Selected);
// Les cases en +
if (Index_Knight_1 + 6 <= 64 )
{
Board[Index_Knight_1 + 6].GetComponent<MeshRenderer>().enabled = true;
}
if (Index_Knight_1 + 10 <= 64)
{
Board[Index_Knight_1 + 10].GetComponent<MeshRenderer>().enabled = true;
}
if (Index_Knight_1 + 15 <= 64)
{
Board[Index_Knight_1 + 15].GetComponent<MeshRenderer>().enabled = true;
}
if (Index_Knight_1 + 17 <= 64)
{
Board[Index_Knight_1 + 17].GetComponent<MeshRenderer>().enabled = true;
}
// les cases en -
if (Index_Knight_1 - 6 >= 0)
{
Board[Index_Knight_1 - 6].GetComponent<MeshRenderer>().enabled = true;
}
if (Index_Knight_1 - 10 >= 0)
{
Board[Index_Knight_1 - 10].GetComponent<MeshRenderer>().enabled = true;
}
if (Index_Knight_1 - 15 >= 0)
{
Board[Index_Knight_1 - 15].GetComponent<MeshRenderer>().enabled = true;
}
if (Index_Knight_1 - 17 >= 0)
{
Board[Index_Knight_1 - 17].GetComponent<MeshRenderer>().enabled = true;
}
我认为我没有使用正确的方法来做这件事,但我想自己编写脚本,而不需要这里或那里的代码片段。
在这种情况下,我想使用8的倍数,但我被困在这里:D
谁能给我一个建议?谢谢!
我知道条件里不应该是64,但是63,刚刚看到了
我同意Absinte的观点——我正在制作一款使用7x7棋盘的类似游戏。使用二维数组要容易得多。当我的一个棋子被选中时,我循环遍历它可能做出的移动列表——假设棋子在中心,这些是+/-偏移量。对于兵,x,y的偏移量是:0,+1;0,+2(仅第一次移动),+1,+1,-1,+1(最后两个是捕获)。
我将它们分别应用到当前的x,y位置,如果x和y都在0和6之间,那么我将显示它作为一个可能的位置,该部件可以移动到