我正在制作一款扫雷游戏,目前完全可以玩,你可以完成游戏。但是,我的求解算法很烂。它非常混乱,我正在寻找一种更清洁的方式,也许有循环,但我想不出任何东西。
这是我目前正在使用的:
我有四个全局列表:
List<String> flaggedButtons = new List<String>();
List<String> minedNodes = new List<String>();
List<String> playingField = new List<String>();
List<String> adjacence = new List<String>();
这是利用列表来解决游戏的方法:
整个方法: 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));
基本上这是我需要帮助的部分。它有效,但它很混乱。我知道我应该使用循环等等,但我想不出一种方法来循环它以使其更干净。本质上,它所做的是在您按下的瓷砖周围找到所有 8 个相邻的瓷砖。有任何想法吗?谢谢 :)