图片1。
图片2。
我制作了检查所有碎片是否在基础或目标中的方法,如果是,则返回true,现在我需要另一种方法。
如果它在图片1中相似。我需要将投掷数量更改为3,如果按照图片2的顺序进行排序,我只能允许1投掷。
我有4个goalPositions和4个PiecePositions,需要检查54-51路径位置是否正确排序(路径是55个字段0-54的数组),如果是,则返回true,如果不返回false。 / p>
我是C#的新手,从来没有机会使用订单检查。
我试图用3个int列表goalPositions(填充51,52,53,54个路径位置),piecePositions(用getPosition()方法填充片段位置)和piecesOnGoal(保留用于计算目标上的碎片)位置)。但没有运气。
我会添加一些代码。 Player类的一部分,用于检查目标或基础中的片段的列表和方法
class Player {
protected PieceSet[] pieces;
Color color;
int numberOfThrows;
Dice dice;
public List<int> goalPositions;
public List<int> piecePositions;
public List<int> piecesOnGoal;
public enum Color
{
Yellow, Green, Blue, Red
}
public Player(Color color)
{
int[] path = new int[55];
this.color = color;
dice = new Dice();
numberOfThrows = 3;
switch (color)
{
case Color.Yellow:
path = BoardHelper.getYellowPath();
break;
case Color.Green:
path = BoardHelper.getGreenPath();
break;
case Color.Blue:
path = BoardHelper.getBluePath();
break;
case Color.Red:
path = BoardHelper.getRedPath();
break;
}
pieces = new PieceSet[4];
pieces[0] = new PieceSet(path, 0);
pieces[1] = new PieceSet(path, 1);
pieces[2] = new PieceSet(path, 2);
pieces[3] = new PieceSet(path, 3);
piecePositions = new List<int>(4);
piecePositions.Add(pieces[0].getPosition());
piecePositions.Add(pieces[1].getPosition());
piecePositions.Add(pieces[2].getPosition());
piecePositions.Add(pieces[3].getPosition());
goalPositions = new List<int>(4);
goalPositions.Add(51);
goalPositions.Add(52);
goalPositions.Add(53);
goalPositions.Add(54);
piecesOnGoal =new List<int>();
}
public bool isAllPiecesInBaseOrGoal()
{
if ((pieces[0].getPosition() < 4 || pieces[0].getPosition() > 50) &&
(pieces[1].getPosition() < 4 || pieces[1].getPosition() > 50) &&
(pieces[2].getPosition() < 4 || pieces[2].getPosition() > 50) &&
(pieces[3].getPosition() < 4 || pieces[3].getPosition() > 50))
return true;
else
return false;
}
这就是我想解决问题的方法:检查goalPositions
是否包含piecePositions
。如果是,请将该位置添加到piecesOnGoal
。现在我需要以某种方式检查这些piecesOnGoal
是否有序。如果是,则返回true。如果不是,那就是假。
我愿意接受任何建议。
public bool isAllPiecesAreOrderedInGoal()
{
for (int i = 0; i < 4; i++)
{
if (goalPositions.Contains(piecePositions[i]))
{
piecesOnGoal.Add(piecePositions[i]);
}
}
}
感谢任何帮助。
答案 0 :(得分:0)
我会建议一种检查是否有可能移动的方法。如果主场或球门外有碎片,或者球门中有碎片在他们面前有空位,则可以移动:
bool IsMovePossible()
{
// check every piece
for(int iPiece = 0; iPiece < 4; ++iPiece)
{
// if it is outside of home or goal, there is a possible move
if(piecePositions[iPiece] > 3 && piecePositions[iPiece] < goalPositions.First())
return true;
// if it is in the goal, check the next position
if(piecePositions[iPiece] >= goalPositions.First()
&& piecePositions[iPiece] < goalPositions.Last()
&& !piecePositions.Any(p => p == piecePositions[iPiece] + 1))
return true;
}
// we have found no piece with a possible move
return false;
}
然后,根据此方法的返回值确定用户掷骰子的频率。请注意,如果您保持倒置地图(即对于每个位置,存储哪个位于该位置),则可以更有效地完成最后一次检查(piecePositions.Any
)。但检查四件应该没问题。