C# c如何检查是否订购了零件?
图1 图2 我做了一个方法来检查是否所有的棋子都在基础或目标中。如果是,它返回真的,现在我需要另一个方法 如果像图1所示。我需要将投掷次数改为3次,如果其顺序如图2所示,我只能允许1次投掷 我得到了4个目标位置和4个工件位置,需要检查工件是否从54-51路径位置正确排序。路径位置是由55个字段组成的数组0-54,如果是,则返回true,如果不是,则返回false 我是C的新手,到目前为止,我还没有机会进行订单检查 我试着用3个整数列表来完成这项工作,目标位置填充了51,52,53,54个路径位置,工件位置填充了工件位置,使用getPosition方法,工件位置保留用于计算目标位置上的工件。但那可不走运 我将添加一些代码。玩家类的一部分,具有检查球门或垒中棋子的列表和方法C# c如何检查是否订购了零件?,c#,xna,C#,Xna,图1 图2 我做了一个方法来检查是否所有的棋子都在基础或目标中。如果是,它返回真的,现在我需要另一个方法 如果像图1所示。我需要将投掷次数改为3次,如果其顺序如图2所示,我只能允许1次投掷 我得到了4个目标位置和4个工件位置,需要检查工件是否从54-51路径位置正确排序。路径位置是由55个字段组成的数组0-54,如果是,则返回true,如果不是,则返回false 我是C的新手,到目前为止,我还没有机会进行订单检查 我试着用3个整数列表来完成这项工作,目标位置填充了51,52,53,54个路径位置
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;
}
非常感谢您的帮助。我建议使用一种方法来检查是否可以移动。如果主场或球门外有棋子,或者球门内有棋子前面有空位,则可以移动:
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;
}
然后,根据此方法的返回值决定用户掷骰子的频率。请注意,最后一次检查工件位置。如果您维护一个倒置的地图,则可以更有效地执行任何检查,即,对于每个位置,存储哪个工件在该位置。但是检查四个部分应该可以。为什么不创建一个Tile类或一个对象来处理这类事情呢?您可以有一个Tile类型的子类目标。您的互动程序将包含一个对象,该对象将为null或一个片段。抱歉,我不知道如何执行该操作,我是第一次看到“第一个”、“最后一个”和“任何方法”的cI。在我的生活中,我第一次看到“第一个”、“最后一个”和“任何方法”我得到的是1。最后一个。你能解释一下这部分代码的作用吗!piecePositions.Anyp=>p==piecePositions[ipiee]+1我需要知道如何在我的游戏中使用它…如果不是很简单,如果我想用你的代码块做这件事,我的最后一次考试将需要解释代码的每一部分:数据这是到图像的链接,带有可能的分段位置组合。Any方法确定在你的情况下,分段位置数组中的任何元素是否满足给定谓词。谓词是p=>p==piecePositions[iPiece]+1部分,它实际上是一个函数。它接受它的参数并用符号p表示它,这是p=>部分。函数的结果是p==piecePositions[iPiece]+1。因此,如果工件p位于被检查工件I之前的位置,则函数返回true。如果有的话,现在的作品就不能移动了。希望我没弄错,因为英语不是我的母语。。。例如,如果piecePositions[0]当前位于路径上的51位置,则该函数不带!符号检查piecesPositions集合中的任何其他元素是否位于52位置,如果有,则返回true
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;
}