選択画面から実行できない

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
だんごさん
記事: 273
登録日時: 14年前

選択画面から実行できない

#1

投稿記事 by だんごさん » 14年前

度々の質問申し訳ないです。
私は今、http://dixq.net/g/36.htmlをヒントに選択画面を作成しています。
なんとかできたので、次はそれをメニュー選択&決定でそれにあったプログラムを実行させたいのです。
例えばHELPだったらヘルプについて・・・など。

↓ 選択画面のプログラム実行の一部

コード:

	if( Key[ KEY_INPUT_RETURN] == 1 || Key[ KEY_INPUT_SPACE] == 1){//エンターかスペースが押されていて
		if(SelectNum==0){//メニューが一番上だったら
			①NEWGAME(); //を実行
			
		}else	
		if(SelectNum==1){ //メニューが2番目だったら
			○○○○(); //を実行
		}else
		if(SelectNum==2){ //3番目だったら
			②HELP();//を実行
					
		}else
		if(SelectNum==3){//4番目だったら
               ○○○○();//実行
			}
	}
もちろん繰り返し文が付いています。多すぎて一部だけ載せました。

次にNEWGAME();のことです。(上のソースの①)
今回はただ画像を出して、Bが押されたら終わるだけです。

コード:

while(ProcessMessage()==0 &&  CheckHitKey(KEY_INPUT_B)==0){
ClearDrawScreen();
Handle();//画像をメモリ保存&描く作業
}
次にHELP()のことです。(上のソースの②)
多すぎて書けませんが、こちらも同じようなものです。
Bが押されたら終了です。
こちらは前回の質問で出させてもらいました。

コード:

ClearDrawScreen();
Handle();//画像をメモリへ&描く作業
int x = 95;
SetDrawScreen( DX_SCREEN_BACK ) ;   
do{
	if(CheckHitKey(KEY_INPUT_B)==1){//もしBが押されたら
		goto BB;//BBへ行く
	}
DrawPixel(x,90,Cr);//点を描く
x++;
if(x==545)break;//xが545で終了
ScreenFlip();
}while(ProcessMessage()==0);
//このプログラムがダーと続いて・・・。
BB: WaitKey();//キーを待って終了・・・。
線を描いているように見えるプログラムです。
goto文を使っているのはこのプログラムを何度も続けて線を描くためです。
そのためどこでBが押されてもいいようにしています。

本題です。
(①をNEWGAME()、②をHELP()とします。)
②を選択すると線を描き始めます。で、Bを押すとメニューへ戻ります。ばっちりです。
(メニュー画面)
次に①を選択すると画面がHandle()のおかげで描かれます。Bを押すとメニューへ。ばっちりです。
(メニュー画面)
もう一度②を選択します。
線を描き始めます。で、Bを押すとメニューへ戻ります。ばっちりです。

しかし。。。

最初に①を選択します。Handle()で描かれ、Bでメニュー・・・ばっちりです。
(メニュー画面)
次に②を選択します。線を描き、Bでメニューへ。ばっちりです。
(メニュー画面)
そして①を選択しますと、画面が出てこずメニュー画面のまま・・・。
しかも何度キー押してもメニュー画面は動かず、①の終了条件であるBを押すと
パッと、まるで生き返ったかのように動きます。

結論:なぜ①→②→①なら動くのに②→①→②なら動かないのかです。
ちなみにどんな順番でも②を選択した後に①は動きません。
それから①のプログラムが動かないのにBを押して戻るということは①のプログラムで終了した(?)のだと思うのです。
なぜ??①や②などの原因っぽいやつも消して動かしましたが変わらず・・・。
選択画面のif文の位置などを変えても変わらず・・・。
何が原因か分からないのでどこのソースを表示していいかわかりません;;

もうひとつ、、、このアプリケーションを立ち上げてしばらくすると
画面が真っ暗になります。しかし選択文は消えず(要は背景が消えるだけ)
①をしても②をしても画面は暗くなります。

長くなりまして大変申し訳ございません。

腕は初心者です。
環境
OS: Windows7
コンパイラ名 :VC++ 2008EE
 Dango San

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 選択画面から実行できない

#2

投稿記事 by softya(ソフト屋) » 14年前

非常に良くないプログラムの書き方をされています。

「新・C言語 ~ゲームプログラミングの館~ [DXライブラリ]」
http://dixq.net/g/h_11.html
を参考にプログラムを直すことから始められては?
あとgotoを使わずにbreak;でも同じ効果がありますよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

だんごさん
記事: 273
登録日時: 14年前

Re: 選択画面から実行できない

#3

投稿記事 by だんごさん » 14年前

わかりました。
がんばってみます。
 Dango San

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

Re: 選択画面から実行できない

#4

投稿記事 by Dixq (管理人) » 14年前

「特定の部分で処理を止めない」というのはシングルスレッドにおけるゲーム設計の大前提です。
まずは、新・ゲームプログラミングの館の最初からご覧頂ければと思います。

メインループは常にぐるぐる回っていて、イベントが発生したら都度処理するようにして下さい。
場合によって処理を分ける時はフラグで、
時間を計測する必要がある場合は、1秒間に60回ループが回ることを利用してカウンタを使って計測して下さい。

閉鎖

“C言語何でも質問掲示板” へ戻る