我正在做一個掃雷遊戲,到目前爲止它完全可玩,你可以完成遊戲。但是,我的解決算法很糟糕。這很雜亂,我正在尋找一種更乾淨的方式,也許帶有循環,但我什麼都想不到。改進我的掃雷算法c#
這裏是我目前使用:
我有四個全局列表:
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個相鄰的瓷磚。 任何想法?謝謝:)
+1只是因爲我喜歡這個問題。 Off-Topic:如果你想改善洗牌,可以用這個來洗牌:'fields.OrderBy(p => Guid.NewGuid())' –