友達と一緒にボードゲームに取り組んでいます。私たちはそれのほとんどをうまく機能させることができました。ゲームは「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; }
        }
    }
誰かがこれで私たちを助けることができれば、それは大いにありがたいです。私たちは何も思い付くことができませんでした。