MineBoard類,將布局和交互的功能都移到另外的類上實現。
為了代碼上的靈活性和進一步擴展,將MineCell由原來的struct改為了class。
對于比Minesweeper更復雜的游戲,也可以將坐標(row, column)直接加到MineCell類中,或者將MineBoard的引用也存儲在MineCell類內。
MineBoard類提供了三個核心的邏輯實現方法,Init方法接受一個Action<MineBoard>參數,允許外部指定初始化布局。與上一篇隨筆中描述的不同,這次調整將MineBoard的大小與初始化布局分開了,因此Init方法也需要傳入rows和columns,由MineBoard類創建所有的MineCell實例后再由builder初始布局。
WalkNearbyCells實現對一個MineCell周圍遞歸處理的功能,原型為WalkNearbyCells(int row, int column, Action<MineCellActionArgs> callback, Predicate<MineCellActionArgs> match)。MineCellActionArgs包含MineCell和其坐標,如果按前文描述將坐標加上MineCell類,則不需要單獨的一個Args類了。
DoAction方法用來實現邏輯操作,具體操作由傳入的Action<MineBoard> action指定。
在MineActions文件中,實現了一個純虛基類:
public abstract class BaseMineAction
{
protected int row;
protected int column;
public BaseMineAction(int row, int column)
{
if (row < 0 || column < 0)
{
throw new ArgumentException();
}
this.row = row;
this.column = column;
}
public void Run(MineBoard board)
{
if (board.IsValidCell(row, column))
{
MineCell cell = board[row, column];
RunValidCell(board, cell);
}
}
protected abstract void RunValidCell(MineBoard board, MineCell cell);
}DistanceMatch類用來限制遞歸操作中遠離初始點的距離,也可以在MineBoard類上加入一個重載的WalkNeabyCells方法,指定depth。不過從通用性的角度,僅保留了傳入Match<MineCellActionArgs>的方法。
public class DistanceMatch
{
private int row;
private int column;
private int distance;
public DistanceMatch(int row, int column
主站蜘蛛池模板:
日韩亚洲欧美中文高清|
国模精品视频一区二区三区|
亚洲天堂网色图伦理经典|
亚洲a毛片|
榆树市|
国产互换人妻xxxx69|
苍井空毛片精品久久久|
日产国产精品亚洲系列|
四虎影视www在线播放|
国模肉肉视频一区二区三区
|
在线高清免费不卡全码|
日本极品少妇videossexhd|
色狠狠色噜噜AV一区|
国产成人精品电影在线观看|
最新国产精品拍自在线观看|
日韩本精品一区二区三区|
成人中文在线|
黑人异族巨大巨大巨粗|
亚洲精选av一区二区|
亚洲高潮喷水无码AV电影|
成在线人永久免费视频播放|
亚洲成人av一区二区|
亚洲一区二区日韩综合久久|
亚洲精品一区二区动漫|
国产亚洲精品第一综合麻豆|
日韩 欧美 亚洲 一区二区|
亚洲欧洲日产国无高清码图片|
国产精品亚洲五月天高清|
色老板精品无码免费视频|
中文字幕亚洲制服在线看|
日韩一区二区三区av在线|
亚洲色欲色欲天天天www|
亚洲国产精品综合久久20|
国产激情一区二区三区不卡|
精品国产一区二区三区av性色|
夜夜爽妓女8888888视频|
精品国产这么小也不放过|
最近中文字幕国产精品|
免费一本色道久久一区|
久久人人97超碰精品|
高清中文字幕一区二区|

