ゲームプログラミング講習

夏休みゲームプログラミング講習
前回の復習
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int graph;
if( DxLib_Init() == -1 ) return -1;
SetDrawScreen( DX_SCREEN_BACK ) ;
ClearDrawScreen() ;
graph = LoadGraph( "講習用.png" ) ;
DrawGraph( 0 , 0 , graph, TRUE ) ;
ScreenFlip() ;
WaitKey() ;
DxLib_End() ;
return 0 ;
}
解説
#include "DxLib.h"
DxLib ヘッダーファイルの展開(参考文献のようなもの)
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
WinMain 関数。長いけど、そのまま打ち込んでね
1
夏休みゲームプログラミング講習
if( DxLib_Init() == -1 ) return -1;
DxLib_Init()は、DX ライブラリを初期化する関数。if 文を使い、初期化に失敗した(-1 を返した)と
き、return -1;でプログラムを強制終了させる
SetDrawScreen( DX_SCREEN_BACK ) ;
画像の描画先を裏画面に設定する
ScreenFlip() ;
裏画面に描画した画像を、表画面に反映する。上の SetDrawScreen と合わせ、ダブルバッファリングと
いう技術。
ClearDrawScreen() ;
画面を一旦まっさらにする関数。しないと、前回表示した画像がまた出てくるよ
LoadGraph( "講習用.png" ) ;
画像を、変数のハンドルに格納する関数。メモリ上に画像のコピーを行い、呼び出しの手間を減らすこ
とができる。
()内は、その画像のある場所
DrawGraph( 0 , 0 , graph , TRUE ) ;
ハンドルに格納した画像を呼び出す。
()内は、最初の 2 引数が、x 座標と y 座標。第 3 引数は画像のハ
ンドル名。第 4 引数は、その画像に透過色があれば、TRUE で透過、FALSE で透過しないを選択する
WaitKey() ;
このままだと、瞬時にプログラムが終了してしまうため、入れてみた関数。キー入力があるまで、処理
を一時停止させることができる
DxLib_End() ;
DX ライブラリの終了。かならず入れておく。
2
夏休みゲームプログラミング講習
前回の冒頭の話の要約
プログラムを作るときに、そのままコンピュータ相手のプログラムを作るのは、内容が煩雑な
ので困難。よって、プログラミング用のソフトウェアを仲立ちにして、コンピュータへのプログ
ラムを書く。
それぞれのソフトウェアには、独自に便利な関数を前もって標準搭載しており、それを使うこ
とで、プログラムが効率良く書ける。DX ライブラリは、ゲーム製作に便利な関数や、機能が多
数で、かつそれが比較的簡単なので、サークルで使われている(重くもないしね)。
こっから今日の内容
まず WinMain 関数内に while 文のループをつくり、そのループから出たらプログラムの終了、という形
に変えるよ
具体的にはこう
以上、割愛
ClearDrawScreen() ;
while(){
graph = LoadGraph( "講習用.png" ) ;
DrawGraph( 0 , 0 , graph, TRUE ) ;
ScreenFlip() ;
if( ProcessMessage() < 0 ) break ;
if( CheckHitKey( KEY_INPUT_ESCAPE ) ) break ;
}
DxLib_End() ;
以下、割愛
if( ProcessMessage() < 0 ) break ;
3
夏休みゲームプログラミング講習
ProcessMessage は OS などからメッセージが来たときに使える関数。この処理で、エラーメッセージな
どが飛んできたときに、瞬時にプログラムを終了させられる
CheckHitKey( KEY_INPUT_ESCAPE )
あるキーが押されたかどうかを判定する関数。
()内に、対象のキーを入れる。
MMCwiki のゲームプログラミング講習の『第 1.5 章』に、よく使うキーが書かれているよ
今回はこれを使い、Esc キーが押されたら while 文のループから脱出するようにしてます
さらに、この CheckHitKey を使い、自機キャラを動かす記述を加えてみる
以上、割愛
graph = LoadGraph( "講習用.png" ) ;
int X = 0;
int Y = 0;
if( CheckHitKey( KEY_INPUT_UP ) == 1 ) Y -= 3 ;
if( CheckHitKey( KEY_INPUT_DOWN ) == 1 ) Y += 3 ;
if( CheckHitKey( KEY_INPUT_LEFT ) == 1 ) X -= 3 ;
if( CheckHitKey( KEY_INPUT_RIGHT ) == 1 ) X += 3 ;
if( X < 0 ) X = 0 ;
if( X > 640 - 30 ) X = 640 - 30 ;
if( Y < 0 ) Y = 0 ;
if( Y > 480 - 64 ) Y = 480 - 64 ;
DrawGraph( X , Y , graph , TRUE ) ;
以下、割愛
この記述により、自機をアローキーで移動させ、かつ画面内に範囲を限定させられる
次は敵キャラを表示してみよう
敵キャラグラフィックを、プロジェクトの Debug フォルダに入れておく
4
夏休みゲームプログラミング講習
int enemy = LoadGraph(“ 講習用敵キャラ.png”);
int enemyX = 60;
int enemyY = 400;
bool enemyMuki = 1;
if( enemyMuki == 1 ) enemyX += 3 ;
if( enemyMuki == 0 ) enemyX -= 3 ;
if( enemyX > 580 )
{
enemyX = 580 ;
enemyMuki = 0 ;
}
if( enemyX < 0 )
{
enemyX = 0 ;
enemyMuki = 1 ;
}
// 敵を描画
DrawGraph( enemyX , enemyY , enemygraph , TRUE ) ;
これを自機キャラの記述の下に記述しておくだけでおしまい
では次に、特定のキー入力で、特定の操作を行う
5