マインスイーパ ゲームを作成していますが、これまでのところ完全にプレイ可能で、ゲームを終了できます。しかし、私の解決アルゴリズムは最悪です。それはかなり厄介で、おそらくループを使用して、よりクリーンな方法を探していますが、何も考えられません。
これが私が現在使用しているものです:
4 つのグローバル リストがあります。
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 つの隣接するタイルをすべて見つけます。何か案は?ありがとう :)