ここまでの冒険を記録しますか?

長岡技大ソフトウェア開発サークルの開発ブログ

【ゲーム製作入門】C/C++でブロック崩しを作る②【DXライブラリ】

書き手:肥田野

プログラミング初心者向けに、簡単なゲームの制作を通してC/C++の基本を解説していきます。

当サークルに所属しない方でも参考にしていただければ幸いです。

この記事では前回の内容と、while文の役割を理解していることを前提に進めていきます。

今回解説するコードです。

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
    ChangeWindowMode(TRUE);
    if( DxLib_Init() == -1 )return -1 ;
    SetDrawScreen(DX_SCREEN_BACK);
    
    int x = 40,y = 40;
    //↓追加
    int vecX = 1,vecY = 1;
    //追加ここまで
    while(ProcessMessage() != -1){
        int startTime = GetNowCount();
        ScreenFlip();
        ClearDrawScreen();
        
        DrawCircle(x,y,20,GetColor(255,255,255),TRUE);

        //↓追加
    
        if(x>640)vecX = -1;
        if(x<0)vecX = 1;
        if(y<0)vecY = 1;
        if(y>480)vecY = -1;
        
        x += 5*vecX;
        y += 5*vecY;

        //追加ここまで

        if(CheckHitKey(KEY_INPUT_ESCAPE) == 1)break;
        int endTime = GetNowCount();
        WaitTimer(1000/60-(endTime-startTime));
    }
    DxLib_End() ;
    return 0 ;
}

追加したコードを中心に解説します。

int vecX = 1,vecY = 1;

球が動く方向を二つの変数で表現しています。

vecXは+1で右、-1で左に、vecYは+1で下に、-1で上に進ませます。

if(x>640)vecX = -1;……

球が跳ね返る条件文です。

ChangeWindowMode()でウィンドウサイズにした場合、デフォルトでは画面サイズは640×480になります。

x += 5*vecX; y += 5*vecY;

球の座標を動かしています。

「5」という数字は適当につけたので、ゲームの難易度に合わせて変化させたいですね。

vecXとvecYを0にすれば、球の動きを停止させることもできます。

今回は短めですが、このゲームの基盤となる部分なので確実に理解できるようにしましょう。

次回はプレイヤー(バー?)を実装してみます。