Пример #1
0
        /*********************************
        *
        *	問題生成を始める
        *
        * *******************************/
        private void button2_Click(object sender, EventArgs e)
        {
            this.Cursor = Cursors.WaitCursor;
            try {
                if (radio_hint.Checked)
                {
                    if (tb_hintfile_path.TextLength == 0)
                    {
                        MessageBox.Show("ヒントを生成したいファイル名を指定してください。",
                                        "エラー",
                                        MessageBoxButtons.OK,
                                        MessageBoxIcon.Error);
                        return;
                    }
                    if (!System.IO.File.Exists(Problem.prb_hintfile_path))
                    {
                        MessageBox.Show("ヒントを生成したいファイルが存在しません。",
                                        "エラー",
                                        MessageBoxButtons.OK,
                                        MessageBoxIcon.Error);
                        return;
                    }
                }
                else
                {
                    if (tb_savefile_path.TextLength == 0)
                    {
                        MessageBox.Show("保存先ファイルを指定してください。",
                                        "エラー",
                                        MessageBoxButtons.OK,
                                        MessageBoxIcon.Error);
                        return;
                    }
                    if (radio_dot.Checked)
                    {
                        if (tb_dotfile_path.TextLength == 0)
                        {
                            MessageBox.Show("Dot画のファイル名を指定してください。",
                                            "エラー",
                                            MessageBoxButtons.OK,
                                            MessageBoxIcon.Error);
                            return;
                        }
                        if (!System.IO.File.Exists(Problem.dotfile_path))
                        {
                            MessageBox.Show("指定されたDot画のファイルが存在しません。",
                                            "エラー",
                                            MessageBoxButtons.OK,
                                            MessageBoxIcon.Error);
                            return;
                        }
                    }
                }

                Tapa.MAX_BOARD_ROW = int.Parse(comboBox1.Text);
                Tapa.MAX_BOARD_COL = int.Parse(comboBox2.Text);
                Tapa.BOX_SUM       = Tapa.MAX_BOARD_ROW * Tapa.MAX_BOARD_COL;           // マス数

                string tmp = startMakeProblem.Text;
                startMakeProblem.Text = "問題生成中...";
                Enabled = false;
                startMakeProblem.Enabled = false;

                // 時間計測開始
                System.Diagnostics.Stopwatch sw = System.Diagnostics.Stopwatch.StartNew();
                // 問題生成の処理
                if (!radio_random.Checked)
                {
                    if (radio_hint.Checked)
                    {
                        Problem.hint_percent = int.Parse(comboBox3.Text);
                        if (!Problem.manageMakingHintFromTxt())
                        {
                            MessageBox.Show("指定された問題はこのプログラムでは解けませんでした。",
                                            "力及ばず",
                                            MessageBoxButtons.OK,
                                            MessageBoxIcon.Error);
                            Problem.is_correct_txtformat = true;
                        }
                    }
                    else
                    {
                        Problem.manageMakingProblemFromTxt();
                    }
                    if (!Problem.is_correct_txtformat)
                    {
                        MessageBox.Show("指定されたDot画またはヒント対象ファイルがぱずぷれ形式ではない可能性があります。",
                                        "エラー",
                                        MessageBoxButtons.OK,
                                        MessageBoxIcon.Error);
                        Problem.is_correct_txtformat = true;
                    }
                    if (!Problem.is_correct_tapa_dot)
                    {
                        MessageBox.Show("指定されたDot画がTapaの解答として正しくない可能性があります。",
                                        "エラー",
                                        MessageBoxButtons.OK,
                                        MessageBoxIcon.Error);
                        Problem.is_correct_tapa_dot = true;
                    }
                }
                else
                {
                    Problem.manageMakingProblem();
                }
                //時間計測終了
                sw.Stop();
                Console.WriteLine("問題生成にかかった時間 >> " + sw.Elapsed);

                // 遊ぶファイルを今回作ったものにする
                if (radio_hint.Checked)
                {
                    tb_playfile_path.Text = Problem.playfile_path = Problem.ans_hintfile_path;
                }
                else
                {
                    tb_playfile_path.Text = Problem.playfile_path = Problem.savefile_path;
                }
                startMakeProblem.Text    = tmp;
                startMakeProblem.Enabled = true;
                Enabled = true;
            }
            catch (Exception ex) {
                MessageBox.Show(ex.Message, this.Text);
            }
            finally {
                this.Cursor = Cursors.Default;
            }
        }
Пример #2
0
        public static void makeSampleData()
        {
            //for (Tapa.MAX_BOARD_ROW = MIN_GEN_ROW; Tapa.MAX_BOARD_ROW <= MAX_GEN_ROW; Tapa.MAX_BOARD_ROW++) {
            //	for (Tapa.MAX_BOARD_COL = MIN_GEN_COL; Tapa.MAX_BOARD_COL <= MAX_GEN_COL; Tapa.MAX_BOARD_COL++) {

            Tapa.MAX_BOARD_ROW = Tapa.MAX_BOARD_COL = 8;
            for (int rate = 25; rate <= 90; rate += 5)
            {
                Problem.MAX_WHITEBOX_START_RATE = rate;
                Problem.MIN_WHITEBOX_START_RATE = rate;


                Tapa.BOX_SUM = Tapa.MAX_BOARD_COL * Tapa.MAX_BOARD_ROW;
                dir_name     = "tapa_fast_normal_" + Tapa.MAX_BOARD_ROW + "" + Tapa.MAX_BOARD_COL + "_r" + rate;
                FolderManagement.makeFolder(base_directory, dir_name);

                // MAX_TXT個の問題に対する
                PreBook sum = new PreBook("average");                   // 合計
                PreBook min = new PreBook("max");                       // 最大
                PreBook max = new PreBook("min", true);                 // 最少


                for (int txt_id = 0; txt_id < MAX_TXT; txt_id++)
                {
                    Tapa.file_name                 = "tapa" + Tapa.MAX_BOARD_ROW + Tapa.MAX_BOARD_COL + String.Format("{0:00000}", txt_id) + ".txt";
                    Tapa.processnum_kuromasu       = 0;
                    Tapa.processnum_kakuteijogaiid = 0;
                    Tapa.processnum_dangoid        = 0;
                    Tapa.processnum_korituid       = 0;
                    Tapa.processnum_betu0id        = 0;
                    Tapa.processnum_kakuteimasu    = 0;
                    Tapa.processnum_numbox         = 0;
                    Tapa.visittimes_kuromasu       = 0;
                    Tapa.visittimes_kakuteijogaiid = 0;
                    Tapa.visittimes_dangoid        = 0;
                    Tapa.visittimes_korituid       = 0;
                    Tapa.visittimes_betu0id        = 0;
                    Tapa.visittimes_kakuteimasu    = 0;
                    Tapa.sum_times_kuromasu        = 0;
                    Tapa.sum_times_kakuteijogaiid  = 0;
                    Tapa.sum_times_dangoid         = 0;
                    Tapa.sum_times_korituid        = 0;
                    Tapa.sum_times_betu0id         = 0;
                    Tapa.sum_times_kakuteimasu     = 0;

                    //// 時間計測開始
                    System.Diagnostics.Stopwatch sw = System.Diagnostics.Stopwatch.StartNew();

                    Problem.manageMakingProblem();

                    ////時間計測終了
                    sw.Stop();
                    Tapa.time_makeproblem = sw.ElapsedMilliseconds;

                    Tapa.is_count = true;
                    Tapa.solveTapa();
                    Tapa.is_count = false;

                    calcSum(sum);
                    calcMax(min);
                    calcMin(max);

                    // http://kageura.hatenadiary.jp/entry/2015/05/18/200000
                    // csvファイルに書き込むlist
                    MyCSVManagement.svc_list.Add(
                        new Book()
                    {
                        tapa_name                 = Tapa.file_name,
                        c_blackbox                = Tapa.isolation_blackboxes_group_list[0].Count.ToString(),
                        c_whitebox                = (Tapa.BOX_SUM - Tapa.isolation_blackboxes_group_list[0].Count).ToString(),
                        c_numbox                  = Tapa.processnum_numbox.ToString(),
                        kuromasu                  = Tapa.processnum_kuromasu.ToString(),
                        kakuteiIdJogai            = Tapa.processnum_kakuteijogaiid.ToString(),
                        dangoIdJogai              = Tapa.processnum_dangoid.ToString(),
                        korituIdJogai             = Tapa.processnum_korituid.ToString(),
                        betuId0Jogai              = Tapa.processnum_betu0id.ToString(),
                        kakuteimasu               = Tapa.processnum_kakuteimasu.ToString(),
                        visittimes_kuromasu       = Tapa.visittimes_kuromasu.ToString(),
                        visittimes_kakuteijogaiid = Tapa.visittimes_kakuteijogaiid.ToString(),
                        visittimes_dangoid        = Tapa.visittimes_dangoid.ToString(),
                        visittimes_korituid       = Tapa.visittimes_korituid.ToString(),
                        visittimes_betu0id        = Tapa.visittimes_betu0id.ToString(),
                        visittimes_kakuteimasu    = Tapa.visittimes_kakuteimasu.ToString(),
                        sum_times_kuromasu        = Tapa.sum_times_kuromasu.ToString(),
                        sum_times_kakuteijogaiid  = Tapa.sum_times_kakuteijogaiid.ToString(),
                        sum_times_dangoid         = Tapa.sum_times_dangoid.ToString(),
                        sum_times_korituid        = Tapa.sum_times_korituid.ToString(),
                        sum_times_betu0id         = Tapa.sum_times_betu0id.ToString(),
                        sum_times_kakuteimasu     = Tapa.sum_times_kakuteimasu.ToString(),
                        avetimes_kuromasu         = (Tapa.visittimes_kuromasu == 0) ? 0 : Tapa.sum_times_kuromasu / (float)Tapa.visittimes_kuromasu,
                        avetimes_kakuteijogaiid   = (Tapa.visittimes_kakuteijogaiid == 0) ? 0 : Tapa.sum_times_kakuteijogaiid / (float)Tapa.visittimes_kakuteijogaiid,
                        avetimes_dangoid          = (Tapa.visittimes_dangoid == 0) ? 0 : Tapa.sum_times_dangoid / (float)Tapa.visittimes_dangoid,
                        avetimes_korituid         = (Tapa.visittimes_korituid == 0) ? 0 : Tapa.sum_times_korituid / (float)Tapa.visittimes_korituid,
                        avetimes_betu0id          = (Tapa.visittimes_betu0id == 0) ? 0 : Tapa.sum_times_betu0id / (float)Tapa.visittimes_betu0id,
                        avetimes_kakuteimasu      = (Tapa.visittimes_kakuteimasu == 0) ? 0 : Tapa.sum_times_kakuteimasu / (float)Tapa.visittimes_kakuteimasu,
                        time_maketapa             = Tapa.time_makeproblem.ToString()
                    });
                }
                addAveBook(sum);
                addBook(max);
                addBook(min);
                writeCSV();
                MyCSVManagement.svc_list.Clear();
            }            ////
            //	}
            //}
        }