マップスクロールに関して

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

マップスクロールに関して

#1

投稿記事 by nori » 15年前

include以下はplane.pngを四方向に動かしながら、shot.pngを出す
プログラムの転載です。
これに、マップスクロールを付け加えたいので、int以下のプログラムを挿入しようと考えています。
back.bmpには680*960を使うことを考えています。

int background = LoadGraph( "back.bmp" );
for(i=0;i<321;i++)
{
DrawGraph( 0 ,-480+3*i, background , TRUE ) //画像を描画
Sleep(10); //10ミリ秒待つ
if( i == 320 ) break ;
         }

描画の処理のことがわかっていなく、include以下のどこに挿入すればよいのかわかりません。
またスクロールするためには本当にこのソースでよいのかもあわせてご助言頂けないでしょうか。
よろしくお願い致します。

#include "DxLib.h"

#define SHOT 5


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

{
int X,Y,planegraph,shotgraph,background;
int ShotX[SHOT],ShotY[SHOT],ShotFlag[SHOT];
int ShotBFlag;
int i;

// 画面モードの設定
ChangeWindowMode( TRUE ) ; // ウインドウモードに変更

// DXライブラリ初期化処理
if( DxLib_Init() == -1 ) return -1;

// グラフィックの描画先を裏画面にセット
SetDrawScreen( DX_SCREEN_BACK );

// 飛行機および弾のグラフィックをメモリにロード&表示座標をセット
planegraph = LoadGraph( "plane.png" );
shotgraph = LoadGraph( "shot.png" );
background = LoadGraph( "back.bmp" );


X = 320 ; Y = 240 ;

for( i = 0 ; i < SHOT ; i ++ )
{
ShotFlag = 0 ;
}
// ショットボタンが前のフレームで押されたかどうかを保存する変数に0(押されいない)を代入
ShotBFlag = 0 ;

while(1)
{
// 画面を初期化(真っ黒にする)
ClearDrawScreen() ;

if( CheckHitKey ( KEY_INPUT_UP ) == 1 ) //上ボタンが押されたら
Y -= 3;
if( CheckHitKey ( KEY_INPUT_LEFT ) == 1 ) //左ボタンが押されたら
X -= 3;
if( CheckHitKey ( KEY_INPUT_DOWN ) == 1 ) //下ボタンが押されたら
Y += 3;
if( CheckHitKey ( KEY_INPUT_RIGHT ) == 1) //右ボタンが押されたら
X += 3;

if( CheckHitKey ( KEY_INPUT_SPACE) == 1 ) //spaceが押されたら)
{
if(ShotBFlag ==0 )
{
for( i = 0 ; i < SHOT ; i ++ )
{
// 弾iが画面上にでていない場合はその弾を画面に出す
if( ShotFlag == 0 )
{
ShotX = X;
ShotY = Y;
ShotFlag = 1;
break ;
}
}
}
// 前フレームでショットボタンを押されていたかを保存する変数に1(おされていた)を代入
ShotBFlag = 1 ;
}
else
{
// ショットボタンが押されていなかった場合は
// 前フレームでショットボタンが押されていたかを保存する変数に0(おされていない)を代入
ShotBFlag = 0 ;
}

// 飛行機を描画
DrawGraph( 0 , 0 , background , TRUE ) ;
DrawGraph( X , Y , planegraph , TRUE ) ;

for( i = 0 ; i < SHOT ; i ++ )
{
if( ShotFlag == 1 )
{
// 弾を8ピクセル上に移動させる
ShotY -= 8 ;

// 画面外に出てしまった場合は存在状態を保持している変数に0(存在しない)を代入する
if( ShotY < -80 )
{
ShotFlag = 0 ;
}
// 画面に弾iを描画する
DrawGraph( ShotX , ShotY[i] , shotgraph , TRUE ) ;

}
}

// 裏画面の内容を表画面にコピーする
ScreenFlip() ;


// Windows 特有の面倒な処理をDXライブラリにやらせる
// -1 が返ってきたらループを抜ける
if( ProcessMessage() < 0 ) break ;

// もしESCキーが押されていたらループから抜ける
if( CheckHitKey( KEY_INPUT_ESCAPE ) ) break ;
}

DxLib_End() ; // DXライブラリ使用の終了処理

return 0 ; // ソフトの終了
}

softya

Re:マップスクロールに関して

#2

投稿記事 by softya » 15年前

すいません、インデントをちゃんとしてもらっても良いですか?
http://ja.wikipedia.org/wiki/%E5%AD%97% ... 4%E3%83%AB
ループや条件の範囲が見づらいです。

nori

Re:マップスクロールに関して

#3

投稿記事 by nori » 15年前

include以下のインデントを訂正しました。
これに、マップスクロールを付け加えたいので、int以下のプログラムを挿入しようと考えています。
back.bmpには680*960を使うことを考えています。改めてよろしくお願いいたします。

int background = LoadGraph( "back.bmp" );
for(i=0;i<321;i++)
{
    DrawGraph( 0 ,-480+3*i, background , TRUE ) //画像を描画
Sleep(10); //10ミリ秒待つ
}

#include "DxLib.h"

#define SHOT 5


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

{
int X,Y,planegraph,shotgraph,background;
int ShotX[SHOT],ShotY[SHOT],ShotFlag[SHOT];
int ShotBFlag;
int i;

// 画面モードの設定
ChangeWindowMode( TRUE ) ; // ウインドウモードに変更

// DXライブラリ初期化処理
if( DxLib_Init() == -1 ) return -1;

// グラフィックの描画先を裏画面にセット
SetDrawScreen( DX_SCREEN_BACK );

// 飛行機および弾のグラフィックをメモリにロード&表示座標をセット
planegraph = LoadGraph( "plane.png" );
shotgraph = LoadGraph( "shot.png" );
background = LoadGraph( "back.bmp" );


X = 320 ; Y = 240 ;

for( i = 0 ; i < SHOT ; i ++ )
{
ShotFlag = 0 ;
}
// ショットボタンが前のフレームで押されたかどうかを保存する変数に0(押されいない)を代入
ShotBFlag = 0 ;

while(1)
{
// 画面を初期化(真っ黒にする)
ClearDrawScreen() ;

if( CheckHitKey ( KEY_INPUT_UP ) == 1 ) Y -= 3; //上ボタンが押されたら
if( CheckHitKey ( KEY_INPUT_LEFT ) == 1 ) X -= 3; //左ボタンが押されたら
if( CheckHitKey ( KEY_INPUT_DOWN ) == 1 ) Y += 3; //下ボタンが押されたら
if( CheckHitKey ( KEY_INPUT_RIGHT ) == 1) X += 3 //右ボタンが押されたら
if( CheckHitKey ( KEY_INPUT_SPACE) == 1 ) //spaceが押されたら)
{
if(ShotBFlag ==0 )
{
for( i = 0 ; i < SHOT ; i ++ )
{
// 弾iが画面上にでていない場合はその弾を画面に出す
if( ShotFlag == 0 )
{
ShotX = X;
ShotY = Y;
ShotFlag = 1;
break ;
}
}
}
// 前フレームでショットボタンを押されていたかを保存する変数に1(おされていた)を代入
ShotBFlag = 1 ;
}
else
{
// ショットボタンが押されていなかった場合は
// 前フレームでショットボタンが押されていたかを保存する変数に0(おされていない)を代入
ShotBFlag = 0 ;
}

// 飛行機を描画
DrawGraph( 0 , 0 , background , TRUE ) ;
DrawGraph( X , Y , planegraph , TRUE ) ;

for( i = 0 ; i < SHOT ; i ++ )
{
if( ShotFlag == 1 )
{
// 弾を8ピクセル上に移動させる
ShotY -= 8 ;

// 画面外に出てしまった場合は存在状態を保持している変数に0(存在しない)を代入する
if( ShotY < -80 )
{
ShotFlag = 0 ;
}
// 画面に弾iを描画する
DrawGraph( ShotX , ShotY[i] , shotgraph , TRUE ) ;

}
}

// 裏画面の内容を表画面にコピーする
ScreenFlip() ;

// Windows 特有の面倒な処理をDXライブラリにやらせる
// -1 が返ってきたらループを抜ける
if( ProcessMessage() < 0 ) break ;

// もしESCキーが押されていたらループから抜ける
if( CheckHitKey( KEY_INPUT_ESCAPE ) ) break ;
}

DxLib_End() ; // DXライブラリ使用の終了処理

return 0 ; // ソフトの終了
}

閉鎖

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