Ant*_*ara 2 c# loops solver minesweeper
我正在制作一个扫雷游戏,到目前为止它完全可以玩,你可以完成游戏.但是,我的求解算法很糟糕.它非常混乱,我正在寻找一种更清洁的方式,也许是循环,但我想不出任何东西.
这是我目前正在使用的:
我有四个全球名单:
List<String> flaggedButtons = new List<String>();
List<String> minedNodes = new List<String>();
List<String> playingField = new List<String>();
List<String> adjacence = new List<String>();
Run Code Online (Sandbox Code Playgroud)
这是利用列表来解决游戏的方法:
整个方法:http://pastebin.com/7J2Fc8yw
最重要的部分:
char btnLetter = Convert.ToChar(buttonName.Substring(0, buttonName.Length - 1));
char aboveLetter = btnLetter; aboveLetter--;
char belowLetter = aboveLetter; belowLetter++; belowLetter++;
int upDown = Convert.ToInt32(buttonName.Substring(1));
int leftSide = Convert.ToInt32(buttonName.Substring(1)) - 1;
int rightSide = Convert.ToInt32(buttonName.Substring(1)) + 1;
//Clear the list by making a new list before adding the new values as to not overlap.
adjacence = new List<String>();
//Put all adjacent sides in to a list
adjacence.Add(Convert.ToString(btnLetter.ToString() + leftSide));
adjacence.Add(Convert.ToString(btnLetter.ToString() + rightSide));
adjacence.Add(Convert.ToString(aboveLetter.ToString() + leftSide));
adjacence.Add(Convert.ToString(aboveLetter.ToString() + rightSide));
adjacence.Add(Convert.ToString(belowLetter.ToString() + leftSide));
adjacence.Add(Convert.ToString(belowLetter.ToString() + rightSide));
adjacence.Add(Convert.ToString(aboveLetter.ToString() + upDown));
adjacence.Add(Convert.ToString(belowLetter.ToString() + upDown));
Run Code Online (Sandbox Code Playgroud)
基本上这是我需要帮助的部分.它有效,但它很混乱.我知道我应该使用循环和诸如此类的但是我无法找到一种方法来循环它以使其更清洁.基本上它正在做的是它找到你按下的瓷砖周围的所有8个相邻的瓷砖.有任何想法吗?谢谢 :)
使用洪水填充.它是MS在他们中使用的算法.可以更改为存储单元格值的数组,而不使用字符串.
enum CellType
{
Bomb,
Flag,
Hidden,
Empty
}
CellType[,] cells = new CellType[10,10];
Run Code Online (Sandbox Code Playgroud)
基本上当有人点击一个单元格检查它是否隐藏时,检查它周围的单元格是否被隐藏.它周围隐藏的每个单元格都会添加到队列或堆栈然后回溯. http://en.wikipedia.org/wiki/Flood_fill
更新:这是C#中的完整示例.这些是递归的,而不是使用一些集合来回溯 https://gamedev.stackexchange.com/questions/31909/best-algorithm-for-recursive-adjacent-tiles
| 归档时间: |
|
| 查看次数: |
1097 次 |
| 最近记录: |