DrawFormatStringの使い方が分かりません・・・

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

DrawFormatStringの使い方が分かりません・・・

#1

投稿記事 by koiroke » 14年前

カーソル(赤色のボックス)を9×9のマスないで動かし、選択した場所に1~9の数字を入力するプログラムです。3つの関数で構成されています。
カーソルはきちんと動きます。数字も入力まではできるのですが、それが出力されません。DrawFormatString ( x1+20 , y1+20 , red ,"%d" , InputNo );の使い方が間違っているのでしょうか?ゲームプログラミングは初めたばかりなのでなるべく丁寧に教えて下さいm(__)m

コード:

#include "DxLib.h"
#include "spgame.h"

int GoCorsor()
{
		int white = GetColor(255,255,255);
		int red = GetColor(153,0,0);
		int in_no[9] ={1,2,3,4,5,6,7,8,9}; 
		int x1 = 20; 
		int y1 = 20;
		int x2 = 70;
		int y2 = 70;
		int InputDirection;
		int InputNo;
		
		while(1)
		{
			if( ProcessMessage() == -1 )
			{
				 break ;	// エラーが発生したらループを抜ける
			}

			InputDirection = GetInputCharWait( TRUE );

			switch(InputDirection)
			{
				case CTRL_CODE_UP :
					DrawBox ( x1 , y1 , x2 , y2 , white , FALSE ) ; 
					y1 -= 50; y2 -= 50;
					DrawBox ( x1 , y1 , x2 , y2 , red , FALSE ) ; 
					break;
				case CTRL_CODE_DOWN :
					DrawBox ( x1 , y1 , x2 , y2 , white , FALSE ) ; 
					y1 += 50; y2 += 50;
					DrawBox ( x1 , y1 , x2 , y2 , red , FALSE ) ; 
					break;
				case CTRL_CODE_RIGHT :
					DrawBox ( x1 , y1 , x2 , y2 , white , FALSE ) ; 
					x1 += 50; x2 += 50;
					DrawBox ( x1 , y1 , x2 , y2 , red , FALSE ) ; 
					break;
				case CTRL_CODE_LEFT :
					DrawBox ( x1 , y1 , x2 , y2 , white , FALSE ) ; 
					x1 -= 50; x2 -= 50;
					DrawBox ( x1 , y1 , x2 , y2 , red , FALSE ) ; 
					break;
			}
			ScreenFlip();

			if((CheckHitKey(KEY_INPUT_Z) == 1) && ((InputNo =KeyInputNumber( x1+20 , y1+20 , 640 , 0 , TRUE )) ==1))
			{
				DrawFormatString ( x1+20 , y1+20 , red ,"%d" , InputNo );
				return InputNo;
			}	
		}
}

void DrawGameMain()
{
	int InputNo;
	MakeField();
	OutQues();
	while(1)
	{
		InputNo = GoCorsor();
		SolveQues(InputNo);
		ScreenFlip();
	}
}

void SolveQues(int InputNo)
{
	int yellow;
	yellow = GetColor(255,255,153);
	int red = GetColor(153,0,0);


	if(x1==20 && y1 ==20 && x2==70 && y2==70)cel[0][0]=InputNo;
	if(x1==70 && y1 ==20 && x2==120 && y2==70)cel[1][0]=InputNo;
	if(x1==120 && y1 ==20 && x2==170 && y2==70)cel[2][0]=InputNo;
	if(x1==170 && y1 ==20 && x2==220 && y2==70)cel[3][0]=InputNo;
	if(x1==220 && y1 ==20 && x2==270 && y2==70)cel[4][0]=InputNo;
	if(x1==270 && y1 ==20 && x2==320 && y2==70)cel[5][0]=InputNo;
	if(x1==320 && y1 ==20 && x2==370 && y2==70)cel[6][0]=InputNo;
	if(x1==370 && y1 ==20 && x2==420 && y2==70)cel[7][0]=InputNo;
	if(x1==420 && y1 ==20 && x2==470 && y2==70)cel[8][0]=InputNo;
	
	if(x1==20 && y1 ==70 && x2==70 && y2==120)cel[0][1]=InputNo;
	if(x1==70 && y1 ==70 && x2==120 && y2==120)cel[1][1]=InputNo;
	if(x1==120 && y1 ==70 && x2==170 && y2==120)cel[2][1]=InputNo;
	if(x1==170 && y1 ==70 && x2==220 && y2==120)cel[3][1]=InputNo;
	if(x1==220 && y1 ==70 && x2==270 && y2==120)cel[4][1]=InputNo;
	if(x1==270 && y1 ==70 && x2==320 && y2==120)cel[5][1]=InputNo;
	if(x1==320 && y1 ==70 && x2==370 && y2==120)cel[6][1]=InputNo;
	if(x1==370 && y1 ==70 && x2==420 && y2==120)cel[7][1]=InputNo;
	if(x1==420 && y1 ==70 && x2==470 && y2==120)cel[8][1]=InputNo;
	
	if(x1==20 && y1 ==120 && x2==70 && y2==170)cel[0][2]=InputNo;
	if(x1==70 && y1 ==120 && x2==120 && y2==170)cel[1][2]=InputNo;
	if(x1==120 && y1 ==120 && x2==170 && y2==170)cel[2][2]=InputNo;
	if(x1==170 && y1 ==120 && x2==220 && y2==170)cel[3][2]=InputNo;
	if(x1==220 && y1 ==120 && x2==270 && y2==170)cel[4][2]=InputNo;
	if(x1==270 && y1 ==120 && x2==320 && y2==170)cel[5][2]=InputNo;
	if(x1==320 && y1 ==120 && x2==370 && y2==170)cel[6][2]=InputNo;
	if(x1==370 && y1 ==120 && x2==420 && y2==170)cel[7][2]=InputNo;
	if(x1==420 && y1 ==120 && x2==470 && y2==170)cel[8][2]=InputNo;
	
	if(x1==20 && y1 ==170 && x2==70 && y2==220)cel[0][3]=InputNo;
	if(x1==70 && y1 ==170 && x2==120 && y2==220)cel[1][3]=InputNo;
	if(x1==120 && y1 ==170 && x2==170 && y2==220)cel[2][3]=InputNo;
	if(x1==170 && y1 ==170 && x2==220 && y2==220)cel[3][3]=InputNo;
	if(x1==220 && y1 ==170 && x2==270 && y2==220)cel[4][3]=InputNo;
	if(x1==270 && y1 ==170 && x2==320 && y2==220)cel[5][3]=InputNo;
	if(x1==320 && y1 ==170 && x2==370 && y2==220)cel[6][3]=InputNo;
	if(x1==370 && y1 ==170 && x2==420 && y2==220)cel[7][3]=InputNo;
	if(x1==420 && y1 ==170 && x2==470 && y2==220)cel[8][3]=InputNo;
	}
もし、宜しければDrawFormatString 以外に気になったこと事があれば、今後の参考にしたいで教えて下さい。

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: DrawFormatStringの使い方が分かりません・・・

#2

投稿記事 by beatle » 14年前

if((CheckHitKey(KEY_INPUT_Z) == 1) && ((InputNo =KeyInputNumber( x1+20 , y1+20 , 640 , 0 , TRUE )) ==1))
ここの条件式が間違っている気がしますね。
(CheckHitKey(KEY_INPUT_Z) == 1)は「Zキーが押されていたら」という意味で
((InputNo =KeyInputNumber( x1+20 , y1+20 , 640 , 0 , TRUE )) ==1)は「数値を入力させ、その数値が1だったら」という意味です。

KeyInputNumberを使ったことがないので間違っているかもしれないのですが、この関数を呼び出した時点でゲームループが一旦停止しそうですね。
普通は数値キーが押されたらchar型配列に1文字ずつ追加していくとか、そういう方法にするんじゃないでしょうか。

閉鎖

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