質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • C#

    9031questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

c# 白い画面のまま固まる

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,761

LukeFukuda

score 61

テトリスを作っています。
画面が白い画面のままゲーム」がスタートしません
初期化と配列要素はブレークポイントで確認したら成功しました。
サブスレッドは使っていません。tm_tickのtm.Intervalの値は200です。FormClosedとFormClosingイベントは空です。

using System;
using System.Windows.Forms;
using System.Drawing;
using System.Linq;
using System.Collections;


class Sample1 : Form
{
    private static Image WK; private static int[] fm; private static Image[] im;
    private static Label[][] gb, fCommunicator, fUU,fon; private static Label[] fcan, fwill; private static Label fUI, fIU, fgetout,fWW; private static Label[][] fMM;
    private static string[][] STR;
    private static int LEVEL, ICHI, WW,ki,kill,  LJ, JL, LL, PAI, PAI2, KK, chang, with;
    private static int[] pripade = new int[17];
    private static int getout = 1;
    private static PictureBox[] lbx = new PictureBox[5];
    private static int UI, IU;
    private static int[] rint, pp, saikoro, rotation, will, shall, can;
    private static int[][] GPS, UU, Communicator, Coordinate, on, elevater;
    private static int[][][] MM;
    private static bool Reuse;
    public static void Main()
    {
 this.Text = "サンプル"; this.DoubleBuffered = true;
        this.Width = 600; this.Height = 1000; this.StartPosition = FormStartPosition.Manual;
        this.Location = new Point(800, 0);

が初期設定です。

コードfm = new int[7]; im = new Image[8]; will = new int[8]; shall = new int[2]; rint = new int[2]; fcan = new Label[18]; fwill = new Label[7]; can = new int[18];

        pp = new int[30 + getout]; saikoro = new int[30]; rotation = new int[30];
        gb = new Label[12][]; MM = new int[8][][]; fMM = new Label[8][];
        Communicator = new int[12][];
        UU = new int[12][];
        GPS = new int[12][];
        STR = new string[12][];
        elevater = new int[12][];
        Coordinate = new int[12][];

        fCommunicator = new Label[12][];
        fUU = new Label[12][];
        on = new int[12][];
        fon = new Label[12][];
        for (int t = 0; t <= 11; t++)
        {
            Coordinate[t] = new int[19];
            Communicator[t] = new int[19];
            UU[t] = new int[19];
            GPS[t] = new int[19];
            STR[t] = new string[18];
            gb[t] = new Label[18];
            elevater[t] = new int[18];
            fCommunicator[t] = new Label[18];
            fUU[t] = new Label[19];
            on[t] = new int[18];
            fon[t] = new Label[18];           
        }
        for (int pm3 = 0; pm3 <= 7; pm3++)
        {
            MM[pm3] = new int[7][];
            fMM[pm3] = new Label[7];
            for (int pm4 = 0; pm4 <= 6; pm4++)
            {
                MM[pm3][pm4] = new int[30];
            }
        }


が配列の要素数です。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Chironian

    2016/03/01 16:10

    現象の再現のために不要なコードを出来るだけ削って下さい。提示する前に念のため再現することを確認下さいね。

    キャンセル

  • 退会済みユーザー

    2016/03/03 21:14

    こちらの質問が他のユーザから「問題・課題が含まれていない質問」という指摘を受けました
    teratailでは、漠然とした興味から票を募るような質問や、意見の主張をすることを目的とした投稿は推奨していません。
    「編集」ボタンから編集を行い、質問の意図や解決したい課題を明確に記述していただくと回答が得られやすくなります。

  • 退会済みユーザー

    2016/03/04 21:05

    こちらの質問が他のユーザから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 2

checkベストアンサー

+1

こんにちは。

情報の追加・訂正依頼欄では狭いので、こちらで。

画面が待機画面(バックカラー)のままゲーム」がスタートしません。 

ゲームがスタートしたら、何か描画しているのですよね?
その描画しているルーチンが実行されてますか? そのルーチンの頭にブレーク・ポイントを設定してデバッグ実行すれば分かります。ブレーク・ポイントの行を実行しようとしたら、実行が一時停止しますので。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/04 16:36

    Timer tm = new Timer(); tm.Interval = LEVEL; tm.Start();
    //イベント処理
    this.Paint += new PaintEventHandler(fm_Paint);
    tm.Tick += new EventHandler(tm_Tick);
    this.KeyDown += new KeyEventHandler(fm_KeyDown);

    }



    public void fm_KeyDown(Object sender, KeyEventArgs e)//ここでブレークポイントを指定したら、白い画面がでで固まりました。
    {

    キャンセル

  • 2016/03/04 16:40 編集

    付け加えになりますがpublic void fm_KeyDownとpublic void tm_Tickを入れ替えても
    同じ結果になりました。

    キャンセル

  • 2016/03/04 17:22

    結構ひどいことになっているようですね。

    ブレークを貼らない状態の時、どうなります。(白い画面のままスタートしない時。)
    その時、ウィンドウ右上のクローズボタン(xのやつ)を押して普通に終了できますか?
    10秒以上たって異常終了すると言うことはないですか?
    もし、YESなら、サブ・スレッド使ったりしてますか? async/waitなど。

    あと、タイマ値を確認してみてください。0とか1とかになってません? 設定するところにブレークを貼って、何が設定されているか確認してみてください。

    キャンセル

  • 2016/03/04 17:38

    ブレーク有り無しで変わりはありません。
    visual studio 2013 のデバッグでデリートオールを押したら消せるようになりますがしない場合はできません。また、ストップデバッグを押したらフォームが自動で閉じます。
    白い画面のまま およそ30分待ちましたが変化はありませんでした。

    キャンセル

  • 2016/03/04 18:24

    「デリートオール」はどこにあるメニューでしょうか?
    使ったこと無いメニューなので思い当たりません。

    クローズポタンを押して30分待っても終了しないということですね?
    いくど押しても終了しませんか?
    サブスレッドは使ってませんね?
    タイマの値は0や1等の小さな値になっていませんでしたか?
    FormClosedとFormClosingイベントは空ですか?

    かなり厳しい不具合と思います。
    更に、同じことを何度も聞かないといけないのでは、解決は難しいと思います。

    キャンセル

  • 2016/03/04 18:49 編集

    すみませんDetach allでした。すみません。なにもおさない場合は30分まったということです。また、その場合は何度おしても反応がありませんでした。サブスレッドは使っていません。tm_tickのtm.Intervalの値は200です。FormClosedとFormClosingイベントは空です。

    キャンセル

  • 2016/03/04 19:14

    なるほど。
    Visual Studioがアタッチしている状態(Visual Studioでデバッグしている状態)ではクローズボタンを押しても終了せず、デタッチしたらクローズボタンを押せば終了するのですね。
    デタッチ後も白い画面のままなのですよね?
    どうもプロジェクト設定とプログラムの両方に問題が発生していそうです。

    まず、デバッグできるようにしないことには進みません。
    私はそのような時は、プロジェクトを1から作り直し、少しずつソースやリソースを最新版からコピペして持ってくることで原因を探ってます。ちゃんとデバッグできる状態から、少しずつ変更していきデバッグできなくなった時の変更箇所を絞り込むことでいつか必ず治せます。(デバッグできるまま最新版まで到達したら、それはそれでOKですし。)

    手間がかかるし結局原因はマヌケなミスのことも多いのですが。(プロジェクト設定を可笑しな具合に修正してしまっていたなど)

    最初の目標はfm_KeyDownにブレークを張ってデバッグ実行開始し、「白い画面で固まらない」ようにすることです。
    ここまで到達すればデバッグできるのでゲームがスタートしない原因を追求できるようになると思います。

    たいへんですが、頑張って下さい。

    キャンセル

  • 2016/03/04 19:28 編集

    すみません。デタッチした場合のみ自動でフォームが閉じます。(デタッチボタンを押した直後に)
    デタッチもストップデバッグもおさない場合が30分です。

    キャンセル

  • 2016/03/04 20:58

    いえ、Visual Studioの操作ではなく、アプリのクローズボタン(デバッグ対象アプリのメインウィンドウ右上にあるXマークのボタン)を押したらどうなりますか?

    あ、もう一つ。Visual Studioの全て中断(Ctrl+Alt+Break)を押したらどうなりますか?
    もし、Visual Studioが固まってしまうなら、やはり厳しいです。
    プロジェクトの設定を隅々まで見直し、それでもダメなら上記のようにプロジェクトを作りなおして最新版を少しずつ反映していく方法しか私は解を持ちません。

    キャンセル

  • 2016/03/04 21:23 編集

    デタッチ(の場合クローズボタンを押さないでもアプリが閉じる)やストップデバッグを押さない限りアプリのクローズボタンを押しても反応はありません。
    Ctrl+Alt+Breakをしたのですがおそらくアプリじたいは終了しているのですがフォームのクローズボタンを押さないかぎり閉じません。

    キャンセル

  • 2016/03/04 21:29

    やはりVisual Studioが可笑しくなっています。その状態ではデバッグできません。
    それをどうにかするのが先決です。

    そうそう、Windowsの再起動で治ることもあります。
    また、ソリューションのリビルドでも治ることもあります。(ビルドではなくリビルドです。)
    それで治らない時は諦めて上記のように一旦最初に戻してます。

    キャンセル

  • 2016/03/04 22:43

    リビルドをやったら白いフォームすらでなくなりました。問題が発生したため、プログラムが正しく動作しなくなりました。プログラムは閉じられ、解決策がある場合はwindowsから通知があります。と表示されてしまいました。ビルドしても同じ結末でした。

    キャンセル

  • 2016/03/05 00:07

    プロジェクトのバックアップをして下さい。確実に。

    そして、新しく追加した部分から、ソース・プログラムをどんどん削って下さい。削る度にちゃんとコンパイルが通るようにして、デバッグ実行して下さい。
    Ctrl+Alt+Breakが効くようになる直前に削ったコードの中に致命的な不具合があります。

    ほぼ最初の空のプロジェクト近くまで削ってもCtrl+Alt+Breakできないなら、プロジェクトが壊れてます。
    プロジェクトを新しく作って、そこへプログラムを戻していって下さい。
    念のため、一気にやるのではなく少しずつ進めて、途中ちゃんとCtrl+Alt+Breakが効くことを確認しながら進めましょう。
    途中で効かなくなったら、その直前に追加した部分に致命的な不具合があります。

    キャンセル

  • 2016/03/05 12:05 編集

    プロジェクトのバックアップをしてけずっていったら問題解決に至りました予想道理4つもミスがありましたが、そのほとんどがご指摘の通りfor (int p8 = 0; p8 < PAI2; p8++)
    {とすべきところをfor (int p8 = 0; p8 < PAI2; PAI2++)

    のような単純なミスでした。

    キャンセル

  • 2016/03/05 12:49

    なるほど。

    C#でそのようなミスをするとデバッガまで動かなくなるのですね。意外な落とし穴です。
    見つかってよかったですね。

    キャンセル

0

ゲームが始まるようにコードを書いていないからでは?

ちなみに、VisualStudioにはステップ実行という超便利な機能が付いているんですが、使っています?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/03 19:03

    確かに便利でしたが、問題解決にはいたりませんでした。

    キャンセル

  • 2016/03/03 21:11 編集

    使えば、
    「ここまで想定通りに処理が進んで、ここから想定通りにならない」というのが
    わかると思います。
    その周辺コードを質問文に貼れば少なくとも今よりは回答しやすくなると思います。

    それかいっそGithubかどこかにプロジェクトまるごと上げるとか。

    キャンセル

同じタグがついた質問を見る

  • C#

    9031questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。