C言語 DXライブラリ ゲーム作成

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

C言語 DXライブラリ ゲーム作成

#1

投稿記事 by けだま » 9年前

ねこの画像(170×170)をクリックしたら成功、画像外の場所をクリックしてしまうと失敗と表示されるゲームです。
画像が3秒間だけ表示され、その3秒間の間にクリックすれば成功と表示、画像以外をクリックor時間切れなら失敗と表示するゲームを作るにはどうしたらいいでしょうか?
WaitTimer、GetNowCount関数を使ってみても上手く作れなかったです。

C言語の知識はポインタ、構造体を学習済。DXライブラリは初心者というレベルです。

コード:

 
#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                         LPSTR lpCmdLine, int nCmdShow )
{

	ChangeWindowMode(true);		//ウィンドウモード
	
	if( DxLib_Init() == -1 )    // DXライブラリ初期化処理
	{
		 return -1;             // エラーが起きたら直ちに終了
	}
	
	int white,black,red,blue;
	int nekox,nekoy;
	int kurikkux,kurikkuy;


	white = GetColor(255,255,255) ;        // 白色の値を取得
	black = GetColor(0,0,0) ;
	red = GetColor(255,0,0) ;
	blue = GetColor(0,0,255) ;
		
	//ここからプログラム作成
	
	
while(ProcessMessage() != -1){	//ループ処理、基本while(ProcessMessage() != -1)

	nekox = GetRand(469);	//0~469の値をランダムでとる
	nekoy = GetRand(309);

	LoadGraphScreen(nekox,nekoy,"neko.jpg",TRUE) ;	//170*170	
	
	while(1){
		if((GetMouseInput() & MOUSE_INPUT_LEFT)!=0){
			GetMousePoint(&kurikkux,&kurikkuy);      //左クリックした座標をとる。
			
		if(kurikkux > nekox && kurikkux < nekox+170 && kurikkuy > nekoy && kurikkuy < nekoy+170)
			DrawString(0,30,"成功",red);
		else
			DrawString(0,30,"失敗",blue);
		break;
		}		  
	}
	
	
    //エスケープで終わり、Nキーで次のゲームへ
    while(1){
        if(CheckHitKey( KEY_INPUT_N ) == 1)
            break;
		else if(CheckHitKey( KEY_INPUT_ESCAPE ) == 1){
			DxLib_End() ;             // DXライブラリ使用の終了処理
   		    return 0 ;  		      // ソフトの終了
		}               
		
    }	
	ClearDrawScreen() ;				 		
}	
		
}


アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: C言語 DXライブラリ ゲーム作成

#2

投稿記事 by みけCAT » 9年前

けだま さんが書きました:ねこの画像(170×170)をクリックしたら成功、画像外の場所をクリックしてしまうと失敗と表示されるゲームです。
画像が3秒間だけ表示され、その3秒間の間にクリックすれば成功と表示、画像以外をクリックor時間切れなら失敗と表示するゲームを作るにはどうしたらいいでしょうか?
適切なプログラムを書いてコンパイルすればいいです。
ねこの画像も用意する必要がありますね。

例えば

コード:

#include "DxLib.h"

enum {
    STATUS_INIT,
    STATUS_GAME,
    STATUS_RESULT,
    STATUS_EXIT
};

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                         LPSTR lpCmdLine, int nCmdShow )
{
    int red,blue;
    int nekox,nekoy;
    int kurikkux,kurikkuy;
    int neko,status,successful,starttime;
    successful = starttime = nekoy = nekox = 0;

    /* 未使用の引数の警告避け */
    (void)hInstance; (void)hPrevInstance; (void)lpCmdLine; (void)nCmdShow;

    ChangeWindowMode(TRUE);        /* ウィンドウモード */
    
    if( DxLib_Init() == -1 )       /* DXライブラリ初期化処理 */
    {
         return -1;                /* エラーが起きたら直ちに終了 */
    }

    red = GetColor(255,0,0);
    blue = GetColor(0,0,255);
        
    /* ここからプログラム作成 */
    SetDrawScreen(DX_SCREEN_BACK);
    status = STATUS_INIT;
    neko = LoadGraph("neko.jpg");  /* 170*170 */

    while(status != STATUS_EXIT && ProcessMessage() != -1){ /* ループ処理、基本while(ProcessMessage() != -1) */
    
        switch(status){
            case STATUS_INIT:
                nekox = GetRand(469);    /* 0~469の値をランダムでとる */
                nekoy = GetRand(309);
                starttime = GetNowCount();
                status = STATUS_GAME;
                break;

            case STATUS_GAME:
                DrawGraph(nekox,nekoy,neko,TRUE);
        
                if((GetMouseInput() & MOUSE_INPUT_LEFT)!=0){
                    GetMousePoint(&kurikkux,&kurikkuy);      /* 左クリックした座標をとる。 */
                    
                    if(kurikkux > nekox && kurikkux < nekox+170 && kurikkuy > nekoy && kurikkuy < nekoy+170)
                        successful = 1;
                    else
                        successful = 0;
                    status = STATUS_RESULT;
                }
                if(GetNowCount() - starttime >= 3000){
                    /* 時間切れ */
                    successful = 0;
                    status = STATUS_RESULT;
                }
                break;

            case STATUS_RESULT:
                if(successful)
                    DrawString(0,30,"成功",red);
                else
                    DrawString(0,30,"失敗",blue);
                /* エスケープで終わり、Nキーで次のゲームへ */
                if(CheckHitKey( KEY_INPUT_N ) == 1)
                    status = STATUS_INIT;
                else if(CheckHitKey( KEY_INPUT_ESCAPE ) == 1)
                    status = STATUS_EXIT;
                break;

            case STATUS_EXIT:
                break;
        }
        ScreenFlip();
        ClearDrawScreen();
    }

    DxLib_End();          /* DXライブラリ使用の終了処理 */
    return 0;             /* ソフトの終了 */
}
添付ファイル
neko.jpg
ねこの画像
neko.jpg (4.76 KiB) 閲覧数: 1440 回
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

けだま

Re: C言語 DXライブラリ ゲーム作成

#3

投稿記事 by けだま » 9年前

みけCAT さんへ
プログラムありがとうございます。
switchと列挙体を使えば分かりやすいプログラムが作れますね。
自分が知りたいこと以上の結果が返ってきたので大満足です!

閉鎖

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