友達と一緒にボードゲームに取り組んでいます。私たちはそれのほとんどをうまく機能させることができました。ゲームは「jeudebarricade」と呼ばれます。多分あなたはそれを知っています。
ボード全体がリンクリストを使用して作成されるため、すべてのフィールドに「LinkNorth」、「LinkEast」、「LinkSouth」、および「LinkWest」変数があります。
これがどのように見えるかをあなたに知らせるためのボードです。
さて、どうすればいいのかわからないことが1つあります。現在、ポーンを選択でき、ボード上の任意のフィールドに移動できます。もちろんこれは良くありません。ここで行う必要があるのは、ポーンが移動できるフィールドの配列またはリストを返す、ある種のアルゴリズムを使用してメソッドを作成することです。このようにして、選択したポーンが、投げられたサイコロ番号を使用して、クリックしたフィールドに実際に移動できるかどうかを確認できます。(1から6までの乱数が生成されます)
ただし、もう1つ。すべての「Field」クラスにはbarricadePawn変数があります。この変数にbarricadePawnオブジェクトが含まれている場合。(barricadePawn!= null)ポーンはその上を移動できないはずです。ポーンはそのフィールドに移動できるようにする必要がありますが、それ以上は移動できません。(プレイヤーがバリケードに正確に着地した場合、彼はそれを動かすことができます。しかし、私たちはすでにそれを実装しているので、それについて心配しないでください)
つまり、要するに。
-'Pawn'クラスにメソッドを作成します。このメソッドは、ポーンが移動できるすべてのフィールドの配列またはリストを返します。
-ポーンはバリケード上を移動できる必要がありますが、バリケード上を移動することはできません。
-ポーンは、サイコロが投げた量を正確に移動する必要があります。したがって、フィニッシュまたはバリケードに乗るには、正確に適切な量を投げる必要があります。
これらは「ポーン」クラスにあります。
「currentLocation」には、選択したポーンが現在立っているフィールドが含まれています。
private Model.Field startLocation;
private Model.Field currentLocation;
public List<Model.Field> getPossibleMoves(Model.Field curSpot, int remainingMoves, List<Model.Field> moveHistory)
{
List<Model.Field> retMoves = new List<Model.Field>();
if( remainingMoves == 0 )
{
retMoves.Add(curSpot);
return retMoves;
}
else
{
moveHistory.Add(curSpot);
if( curSpot.LinkNorth != null && !moveHistory.Contains(curSpot.LinkNorth) )
{
retMoves.AddRange( getPossibleMoves( curSpot.LinkNorth, remainingMoves - 1, moveHistory ));
}
if (curSpot.LinkEast != null && !moveHistory.Contains(curSpot.LinkEast))
{
retMoves.AddRange( getPossibleMoves( curSpot.LinkEast, remainingMoves - 1, moveHistory ));
}
if (curSpot.LinkSouth != null && !moveHistory.Contains(curSpot.LinkSouth))
{
retMoves.AddRange( getPossibleMoves( curSpot.LinkSouth, remainingMoves - 1, moveHistory ));
}
if (curSpot.LinkWest != null && !moveHistory.Contains(curSpot.LinkWest))
{
retMoves.AddRange( getPossibleMoves( curSpot.LinkWest, remainingMoves - 1, moveHistory ));
}
}
}
そして、これは私たちの「フィールド」クラスです:
public class Field
{
protected Field linkNorth, linkEast, linkSouth, linkWest;
protected Controller.Pawn pawn;
protected Model.BarricadePawn barricadePawn;
protected int x, y;
//Properties:
public Field LinkNorth
{
get { return linkNorth; }
set { linkNorth = value; }
}
public Field LinkEast
{
get { return linkEast; }
set { linkEast = value; }
}
public Field LinkSouth
{
get { return linkSouth; }
set { linkSouth = value; }
}
public Field LinkWest
{
get { return linkWest; }
set { linkWest = value; }
}
public Controller.Pawn Pawn
{
get { return pawn; }
set { pawn = value; }
}
public BarricadePawn Barricade
{
get { return barricadePawn; }
set { barricadePawn = value; }
}
public int X
{
get { return x; }
set { x = value; }
}
public int Y
{
get { return y; }
set { y = value; }
}
}
誰かがこれで私たちを助けることができれば、それは大いにありがたいです。私たちは何も思い付くことができませんでした。