(緊急!)画像描画、手順の仕組み

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
absss

(緊急!)画像描画、手順の仕組み

#1

投稿記事 by absss » 6年前

こちらの「龍神録」大変参考にさせてもらいながら、自分なりにブロック崩しを作りました。
そこで、ブロック崩しにはもちろん背景やブロック、弾、キャラがいます。
そして、その絵を描いたのは僕ではなく友人です。
学校の作品展覧が近づいており、最終締め切りが明後日です。
僕は、描いてくれた友人のためにも自分の作ったブロック崩し以外にも、描いてくれた絵を閲覧する感じのプログラムを作ろうと思い、ソースを書いてみました(以下コード(わからない部分です))

コード:

//-----------------------------------------------
enum window_e
{
	SELECT_GRAPH,//グラフの選択(&選択画面)
	VIEW_GRAPH,//見る&選択
	RETURN_GRAPH,//暗くする
	END,//終わり
}:

typedef struct
{
	int no;
	int flag;
	int cnt;
	int brt;

	enum window_t win;
}graph_t;
//---------------------------------------------------------

graph_e  graph;
//----------------
void ini()
{
	graph.cnt = 0;//カウント
	graph.flag = 0;//描画フラグ
	graph.no = 0;//画像番号
	graph.brt = 0;//明るさ

	graph.win = SELECT_GRAPH;//手順
}
//--------------------------------------------------------------------------
#define MAX_GRAPHS 10//ここはどうでもいいので適当(ていうか、発表する画像の数)
//------------------------------------------------------------------------------------
int img_g[MAX_GRAPHS];//画像
int img_gmini[MAX_GRAPHS];//選択画面用の小さな画像(友人が描いてくれたもの)
int img_i;//アイコン的な画像
//----------------------------------------------------------------------

//描画
void Graph_Draw()
{ 
    SetDrawBlendMode( DX_BLENDMODE_ALPHA , graph.brt ); //明るさ設定
	if(graph.flag == 1)//選択画面表示だったら
	{
		for(int i=0 ; i < MAX_GRAPHS , i++)
		{
			DrawGraph(** , **+(graph.no*100) , img_gmini[i] , TRUE );//描画
		}
		DrawGraph(** , **+(graph.no*100) , img_i , TRUE );//アイコン的なもの描画(現在どれが選ばれているかわかるように)
	}
    if(graph.flag == 2)//描画フラグが立っていたら
    {
		DrawGraph(** , ** , img_g[graph.no] , TRUE );//描画(選択された番号の画像を表示)
    }
    SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 255 ); //明るく
}

//------------------------------------------------------------------------------------
int graph_tejun()
{
	switch(graph.win)//手順
	{
	case SELECT_GRAPH://選択
		graph.flag = 1;//選択画面の描画
		graph.brt = 255;//明るく

		if(CheckStatePad(configpad.down) == 1)//下矢印キーが押されて
		{
			if( graph.no >= MAX_GRAPHS-1 ) //一番下の選択画像まできてたら
			{
				graph.no = MAX_GRAPHS-1;//そのまま
            }
			else 
				graph.no++;//選択番号+1
        }
		if(CheckStatePad(configpad.up) == 1)//上矢印キーが押されて
		{
			if( graph.no <= 0 ) //一番上の選択画像まできてたら
			{
				graph.no = 0;//そのまま
            }
			else 
				graph.no--;//選択番号-1
        }
        //  決定処理
		if(CheckStatePad(configpad.kettei) == 1)//エンターが押されたら
		{
			graph.win = VIEW_GRAPH;//閲覧状態に
			graph.cnt = 0;//カウントを0に(後に使うので)
		}
		break;
	case VIEW_GRAPH://閲覧状態
		graph.flag = 2;//2は画像表示  1は選択画面表示
		if(CheckStatePad(configpad.modoru) == 1)//右シフトキーが押されたら
		{
			graph.win = SELECT_GRAPH;//もう一度選択画面に
			graph.brt = 0;//一度暗くする
        }
		if(CheckStatePad(configpad.end) == 1)//左シフトキーが押されたら
		{
			graph.win = RETURN_GRAPH;//消えてく処理へ
			graph.cnt = 0;//カウントを0に
        }

	case RETURN_GRAPH:
		graph.cnt;//カウントをとにかく加算
		graph.brt = 255 - graph.cnt;//カウント共に暗くしていく(フェードアウト的な感じです)

		if(graph.brt <= 0)//完全に暗くなったら(0未満にならないように)
		{
			graph.brt = 0;//0にする
			graph.flag = 0;//描画をやめる
			graph.win = END;//終了へ
		}
	case END://終了
		return 1;//終了!(一応エラーがわかるように・・・・・)
		break;
	}

	//(エラー)
	return 0;
}
やりたいことは、

選択画面が開き→方向キーで選択→エンターキーで決定→画像を表示→戻るか終るか、
戻る(右シフトキー)の場合選択画面へ、終わり(左シフトキー)の場合だけ、フェードアウトして終わる。

自信満々に実行したのですが・・・・

コードを見ればわかると思いますが、キー入力は「押されてる状態」と「押されてない状態」しかありません。

ですので、エンターキーを押してる間だけ画像が表示される・・という具合になってしまいます。

僕がしたいのは、エンターキーが押された瞬間、長押ししようがすぐに手を離そうが画像は表示されて次の処理の待機をするようにしたいのです。
おしてる間だけ表示というが嫌なので・・・(おそらくエンターキー以外にも左右シフトキーの時も同じことが起こりそうで・・・(エンターキーで躓いてるのでそこまではわかりませんが・・・))


先頭にも書きましたが、期限が明後日です。(明日はバイトが入ってしまっていてPCに触れる時間が少なく皆様がもう寝ている、もしくはこの掲示板を見ている頻度がものすごく少ない時間での返信になってしまうので)
フォーラムルールを拝見しますと、「どうしても提出期限の関係で答えが欲しい時はその事をしっかり明記の上、回答者さん達の理解を求めるようにしましょう。」とあります。

一応、先頭に書いたことが僕の「回答が欲しい理由」なのですが・・・ダメでしょうか?

お恥ずかしいのですが、ブロック崩しを作ってる時も「デバッグ作業」というのをやったことがなくまったく無知と言っていいです。(書いては実行という感じでした。)

欲を言ってしまうと、この書き方(enumを使った)での回答をお願いしたいです(変数などは勝手に増やしてもらって構いません。)

通学先のPCですので、返信、感謝の意は明日の朝(通学してから)になってしまうご無礼お許しください。

ですが、今夜19時くらいまでならこのプログラミングで通学先に残っていると思います。


*驚いたことにこの内容とかなり類似しているトピックがあったのですが・・・なんか荒れていたので・・・

absss

Re: (緊急!)画像描画、手順の仕組み

#2

投稿記事 by absss » 6年前

追記。

このサイトが参考になります。とかではなく、できればコードの回答が欲しいです。

参考として進められたサイトを見て、できなかったら最悪ですので。


お手間をかけるかと思いますが、本当に困っています。
よろしくお願いします。

アバター
usao
記事: 1554
登録日時: 6年前

Re: (緊急!)画像描画、手順の仕組み

#3

投稿記事 by usao » 6年前

case VIEW_GRAPH://閲覧状態
のとこに
break;
が無い とかそういうのかな??

あと,line107がカウントが増えていないように見える.

アバター
usao
記事: 1554
登録日時: 6年前

Re: (緊急!)画像描画、手順の仕組み

#4

投稿記事 by usao » 6年前

・21行目の型名が間違っているように見える→本当に実際実行できているのか?
・類似トピックとやらとコードの構造や変数名レベルで酷似している
・そしてその類似トピックの雰囲気が(略

…と,なにやら怪しい雰囲気を感じてしまったので私はこのトピックから退散しときます.
本当に別の方なのかもしれませんが.

閉鎖

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