//解けているか判定して、解けていたら終了orリトライ private void judge() { int count = 1; bool judge = true; for(int y = 0; y < 4; y++) { bool isBreak = false; for(int x = 0; x < 4; x++) { if(table[x, y] != count) judge = false; count++; if(count >= 16) { isBreak = true; break; } } if(isBreak) break; } if(judge) { if(MessageBox.Show("やたー!\nリトライしますか?","15パズル",MessageBoxButtons.YesNo) == DialogResult.Yes) { Form1_Load(this, EventArgs.Empty); pictureBox1.Refresh(); } else { this.Close(); } } } //盤面が解けるパターンになっているかを検証 //【参考URL】 //http://hp.vector.co.jp/authors/VA010128/math/puzzle/P15-1.html private bool verification() { List<int> list = new List<int>(); int count = 0; for(int y = 0; y < 4; y++) { for(int x = 0; x < 4; x++) { list.Add(table[x, y]); } } list.Remove(0); for(int i = 0; i < list.Count; i++) { for(int j = i; j < list.Count; j++) { if(list[i] > list[j]) count++; } } return count % 2 == 0; }