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

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

新規登録して質問してみよう
ただいま回答率
85.49%
C#

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

Q&A

解決済

2回答

5242閲覧

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

LukeFukuda

総合スコア81

C#

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

0グッド

0クリップ

投稿2016/03/01 06:36

編集2016/03/04 14:47

テトリスを作っています。
画面が白い画面のままゲーム」がスタートしません
初期化と配列要素はブレークポイントで確認したら成功しました。
サブスレッドは使っていません。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]; } }

が配列の要素数です。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Chironian

2016/03/01 06:39

それだけでは、何も分かりません。最初に実行したい処理が呼ばれているかどうかなどもう少し調べて見て下さい。
LukeFukuda

2016/03/01 07:04

code が長くてteratailでは 扱えないのですがどうしたらいいですか
Chironian

2016/03/01 07:10

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

回答2

0

ベストアンサー

こんにちは。

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

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

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

投稿2016/03/04 07:13

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LukeFukuda

2016/03/04 07: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)//ここでブレークポイントを指定したら、白い画面がでで固まりました。 {
LukeFukuda

2016/03/04 07:41 編集

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

2016/03/04 08:22

結構ひどいことになっているようですね。 ブレークを貼らない状態の時、どうなります。(白い画面のままスタートしない時。) その時、ウィンドウ右上のクローズボタン(xのやつ)を押して普通に終了できますか? 10秒以上たって異常終了すると言うことはないですか? もし、YESなら、サブ・スレッド使ったりしてますか? async/waitなど。 あと、タイマ値を確認してみてください。0とか1とかになってません? 設定するところにブレークを貼って、何が設定されているか確認してみてください。
LukeFukuda

2016/03/04 08:38

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

2016/03/04 09:24

「デリートオール」はどこにあるメニューでしょうか? 使ったこと無いメニューなので思い当たりません。 クローズポタンを押して30分待っても終了しないということですね? いくど押しても終了しませんか? サブスレッドは使ってませんね? タイマの値は0や1等の小さな値になっていませんでしたか? FormClosedとFormClosingイベントは空ですか? かなり厳しい不具合と思います。 更に、同じことを何度も聞かないといけないのでは、解決は難しいと思います。
LukeFukuda

2016/03/04 09:53 編集

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

2016/03/04 10:14

なるほど。 Visual Studioがアタッチしている状態(Visual Studioでデバッグしている状態)ではクローズボタンを押しても終了せず、デタッチしたらクローズボタンを押せば終了するのですね。 デタッチ後も白い画面のままなのですよね? どうもプロジェクト設定とプログラムの両方に問題が発生していそうです。 まず、デバッグできるようにしないことには進みません。 私はそのような時は、プロジェクトを1から作り直し、少しずつソースやリソースを最新版からコピペして持ってくることで原因を探ってます。ちゃんとデバッグできる状態から、少しずつ変更していきデバッグできなくなった時の変更箇所を絞り込むことでいつか必ず治せます。(デバッグできるまま最新版まで到達したら、それはそれでOKですし。) 手間がかかるし結局原因はマヌケなミスのことも多いのですが。(プロジェクト設定を可笑しな具合に修正してしまっていたなど) 最初の目標はfm_KeyDownにブレークを張ってデバッグ実行開始し、「白い画面で固まらない」ようにすることです。 ここまで到達すればデバッグできるのでゲームがスタートしない原因を追求できるようになると思います。 たいへんですが、頑張って下さい。
LukeFukuda

2016/03/04 10:34 編集

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

2016/03/04 11:58

いえ、Visual Studioの操作ではなく、アプリのクローズボタン(デバッグ対象アプリのメインウィンドウ右上にあるXマークのボタン)を押したらどうなりますか? あ、もう一つ。Visual Studioの全て中断(Ctrl+Alt+Break)を押したらどうなりますか? もし、Visual Studioが固まってしまうなら、やはり厳しいです。 プロジェクトの設定を隅々まで見直し、それでもダメなら上記のようにプロジェクトを作りなおして最新版を少しずつ反映していく方法しか私は解を持ちません。
LukeFukuda

2016/03/04 12:29 編集

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

2016/03/04 12:29

やはりVisual Studioが可笑しくなっています。その状態ではデバッグできません。 それをどうにかするのが先決です。 そうそう、Windowsの再起動で治ることもあります。 また、ソリューションのリビルドでも治ることもあります。(ビルドではなくリビルドです。) それで治らない時は諦めて上記のように一旦最初に戻してます。
LukeFukuda

2016/03/04 13:43

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

2016/03/04 15:07

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

2016/03/05 03:07 編集

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

2016/03/05 03:49

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

0

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

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

投稿2016/03/02 03:06

dojikko

総合スコア3939

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LukeFukuda

2016/03/03 10:03

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

2016/03/03 12:12 編集

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問