我一直在和我的一位朋友一起玩棋盤遊戲。我們已經設法使其大部分工作。這場比賽被稱爲'jeu de barricade'。也許你知道。棋盤遊戲典當運動算法
使用鏈接列表創建整個董事會,所以每個字段都有一個'LinkNorth','LinkEast','LinkSouth'和'LinkWest'變量。
這是董事會給你一個它的樣子。
現在,有一件事我們似乎無法弄清楚如何去做。目前,可以選擇一個棋子,並將其移動到棋盤上的任何區域。這當然不好。 我們現在需要做的是編寫一種方法,用某種算法返回一個數組或列表中的棋子能夠移動到的字段。這樣,我們可以檢查選中的棋子是否實際上能夠移動到你點擊的區域,擲出的骰子號碼。 (從1到6的隨機數生成)
但還有一件事。每個'Field'類都有一個barricadePawn變量。當這個變量包含一個barricadePawn對象時。 (barricadePawn!= null)典當不應該移動它。棋子應該被允許移動到該場地上,但不能進一步。我們已經實現了,所以不用擔心)
因此,簡而言之,
- 我想在我們的'Pawn'類中創建一個方法,它返回一個數組或列表中所有可以移動的棋子。
- 棋子應該能夠在路障上移動,但不能在路障上移動。
- 棋子必須移動骰子投擲的數量。所以,要完成或在路障上,你必須投入恰到好處的量。
我們在我們的'典當'類中有這些:
'currentLocation'包含所選pawn當前站在的字段。
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; }
}
}
如果有人可以幫助我們解決這個,這將是大加讚賞。我們一直未能拿出任何東西。
一個迭代函數應該這樣做。我需要澄清模具周圍的規則,你可以移動領域的任何數字到模值,或僅由模具指定的字段數量,除非你遇到路障棋子? – Jodrell 2013-03-14 17:27:47