「12.画像を動かす」の初期化

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

「12.画像を動かす」の初期化

#1

投稿記事 by kusen » 16年前

現在自分は、こちらのサイトを参考にさせていただきゲームを作成している初心者です。
ゲームを作成できたのですが、一回プレイし、二回目のプレイの際に問題が起きました。
うまく言えないので問題部分のプログラムをのせさせていただきます。
二回目のプレイする際、一回目と同じようにx=0から図を動かしたいとおもっています。
環境は、windows vc2008 DXライブラリ です。
拙い文章でほんとにすみません。よろしくお願いします。
#include "DxLib.h"
 
int function_status=0,White;
char KeyBuf[ 256 ] ;
 
void Opening(){
        DrawString(100,100,"オープニング画面 (zをプッシュ)",White);
        if(KeyBuf[KEY_INPUT_Z]==1)
                function_status=1;
}
 

}
 
void Danjon(){
        DrawString(100,180,"ダンジョン画面 (cをプッシュ)",White);
        if(KeyBuf[KEY_INPUT_C]==1)
                function_status=3;
}
 
void attack(){
        DrawString(100,220,"戦闘画面 (vをプッシュ)",White);
        if(KeyBuf[KEY_INPUT_V]==1)
                function_status=4;
}
 
void Ending(){
        DrawString(100,260,"エンディング画面 (bをプッシュ)",White);
        if(KeyBuf[KEY_INPUT_B]==1)
                function_status=5;
}
 
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        ChangeWindowMode( TRUE ) ;                                   //ウィンドウモードに変更
        if( DxLib_Init() == -1 ) return -1;                      // DXライブラリ初期化処理 エラーが起きたら終了 
         
        White = GetColor( 255 , 255 , 255 ) ;                    //色の取得
          
        SetDrawScreen( DX_SCREEN_BACK ) ;                                // 描画先を裏画面に設定
           
        while( 1 ){
                ClearDrawScreen();                                                               // 裏画面のデータを全て削除
                GetHitKeyStateAll( KeyBuf ) ;                                    // すべてのキーの状態を得る
 
                switch(function_status){
                        case 0:
                                Opening();
                                break;
                        case 1:
                                Menu();
                                break;
                        case 2:
                                Danjon();
                                break;
                        case 3:
                                attack();
                                break;
                        case 4:
                                Ending();
                                break;
                        default:
                                DxLib_End() ;                                // DXライブラリ使用の終了処理
                                return 0;
                                break;
                }
 
                if( ProcessMessage() == -1 ) break ;                 //エラーが起きたら終了
                
                ScreenFlip() ;                                   // 裏画面データを表画面へ反映
        }
 
        DxLib_End() ;                                            // DXライブラリ使用の終了処理
        return 0 ;                                               // ソフトの終了
}

kusen

Re:「12.画像を動かす」の初期化

#2

投稿記事 by kusen » 16年前

すみませんプログラム間違えました。
#include "DxLib.h"
 
int function_status=0,White,Yellow,G_Blue,Red,c;
        
char KeyBuf[ 256 ] ;
int PointX = 0;
 
void Opening(){
	SetFontSize( 30 ) ;                             //サイズを20に変更
        SetFontThickness( 1 ) ;                         //太さを1に変更
        ChangeFont( "HGS創英角ポップ体" ) ;              //HGS創英角ポップ体に変更
        ChangeFontType( DX_FONTTYPE_ANTIALIASING_EDGE );//アンチエイリアス&エッジ付きフォントに変更
	DrawString(50,300,"             PUSH Z KEY",GetColor(255,255,255));
        if(KeyBuf[KEY_INPUT_Z]==1)
		function_status=1;
		
                
}
 
void Menu(){
	LoadGraphScreen( PointX , 350 , "囚人.png" , TRUE ); 	
	Yellow     = GetColor( 255 ,   255 ,   0 ) ; // 赤色の値を取得
        G_Blue  = GetColor( 128 , 128 , 128 ) ; // 緑と青の混合色の値を取得
		White   = GetColor( 255 , 255 , 255 ) ; // 白色の値を取得
       
        DrawBox   ( 400 , 200 , 440 , 700 , G_Blue , TRUE ) ;   // 四角形を描画(塗りつぶし)
        DrawCircle( 550 , 30 , 30 , Yellow , TRUE) ;             // 円を描画(塗りつぶし)
        DrawString(  0,  0, "level 1" , White);            //文字列表示
	PointX++;

	
        
        if(PointX==290)
                function_status=2;
}
void Danjon(){
		SetFontSize( 30 ) ;                             //サイズを20に変更
        SetFontThickness( 1 ) ;                         //太さを1に変更
        ChangeFont( "HGS創英角ポップ体" ) ;              //HGS創英角ポップ体に変更
        ChangeFontType( DX_FONTTYPE_ANTIALIASING_EDGE );//アンチエイリアス&エッジ付きフォントに変更
		DrawString(50,300,"             PUSH X KEY",GetColor(255,255,255));
        if(KeyBuf[KEY_INPUT_X]==1)
		function_status=0;
		
}
 

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        ChangeWindowMode( TRUE ) ;                                   //ウィンドウモードに変更
        if( DxLib_Init() == -1 ) return -1;                      // DXライブラリ初期化処理 エラーが起きたら終了 
         
        White = GetColor( 255 , 255 , 255 ) ;                    //色の取得
          
        SetDrawScreen( DX_SCREEN_BACK ) ;                                // 描画先を裏画面に設定
           
        while( 1 ){
                ClearDrawScreen();                                                               // 裏画面のデータを全て削除
                GetHitKeyStateAll( KeyBuf ) ;                                    // すべてのキーの状態を得る
 
                switch(function_status){
                        case 0:
                                Opening();
                                break;
                        case 1:
                                Menu();
                                break;
                        case 2:
                                Danjon();
                                break;
                        default:
                                DxLib_End() ;                                // DXライブラリ使用の終了処理
                                return 0;
                                break;
                }
 
                if( ProcessMessage() == -1 ) break ;                 //エラーが起きたら終了
                
                ScreenFlip() ;                                   // 裏画面データを表画面へ反映
        }
 
        DxLib_End() ;                                            // DXライブラリ使用の終了処理
        return 0 ;                                               // ソフトの終了
}

kazuoni

Re:「12.画像を動かす」の初期化

#3

投稿記事 by kazuoni » 16年前

方向キーで捜査している箇所は省略しているのですかね?
キャラデータが記述されていないので、どうなっているか分かりませんが、
Menuの選択終了後、breakする前に、
キャラクラーX座標=0;
キャラクラーY座標=0;
という記述がいると思います。

まず、キャラデータをどう初期化しているのか気になりますが。。

kusen

Re:「12.画像を動かす」の初期化

#4

投稿記事 by kusen » 16年前

迅速な返答ありがとうございます。
自分のゲームは方向キーを使わず、決められた範囲のパラメーターを選択し、図が動きX=290になったら結果が出るというものです。一回はできるのですが、二回目にX=290からスタートしてしまいます。キャラデータの初期化は行ってないです。
初心者なので、プログラムの理解度が低いです。ほんとにすみません。

SCI

Re:「12.画像を動かす」の初期化

#5

投稿記事 by SCI » 16年前

if(KeyBuf[KEY_INPUT_X]==1)
                function_status=0;
この部分を、とりあえず
if(KeyBuf[KEY_INPUT_X]==1) {
                function_status=0;
                PointX = 0;
        }
として実行してみてください。

kusen

Re:「12.画像を動かす」の初期化

#6

投稿記事 by kusen » 16年前

SCIさんの言う通り変えてみたらできました。
Xボタンを押すと0に行く+x=0になるということですね。
ほんとにありがとうございます。これから勉強しまくってプログラム完璧に理解したいと思います。

閉鎖

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