投稿者 あにす  (社会人) 投稿日時 2008/11/20 19:09:06
中盤
        //解けているか判定して、解けていたら終了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;
        }