乱数を得る①
2匹で一組のぷよを、Zキーを押すたびに組み合わせを変えて表示するプログラムを書こうとして、壁に当たった。
この処理は毎回落ちて来るぷよの組み合わせを変えるために、欠かせない処理だ。
しかし、僕の今までの勉強で乱数を得る処理は通っていなかった。
こんな時『苦C』の出番。
サイトの目次を見ると、ありますよー、乱数の項目が!
取り合えず、一番簡単な乱数生成方法を関数にして実装。
そのソースがこれだ。
#include "DxLib.h"
#include < stdlib.h >
int GetRandom ( int min, int max ); //乱数用関数のプロトタイプ宣言
int g_puyoimage[6];
int WINAPI WinMain(HINSTANCE hI,HINSTANCE hP,LPSTR lpC,int nC) {
ChangeWindowMode( TRUE );
if( DxLib_Init() == -1 ) return -1;
LoadDivGraph( "puyo.bmp",6,6,1,32,32,g_puyoimage );
//1組目の組み合わせを乱数で決める
int puyo1 = GetRandom( 1, 4);
int puyo2 = GetRandom( 1, 4);
SetDrawScreen( DX_SCREEN_BACK );
while( ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0 ) {
ClsDrawScreen();
int key = GetJoypadInputState( DX_INPUT_KEY_PAD1 );
if( key & PAD_INPUT_A ) { //Zキーが押されるたびに組み合わせを乱数で変える
puyo1 = GetRandom( 1, 4);
puyo2 = GetRandom( 1, 4);
}
DrawGraph( 288, 224, g_puyoimage[puyo1],TRUE );
DrawGraph( 320, 224, g_puyoimage[puyo2],TRUE );
ScreenFlip();
}
DxLib_End();
return 0;
}
//乱数を得る関数
int GetRandom( int min, int max) {
return min + ( int )( rand()*( max-min+1.0 )/( 1.0+RAND_MAX ) );
}
無事に動いたけど、問題もある。
問題① 乱数の返す値が毎回同じになる。
問題② Zキーの押しっぱなしが有効になってしまって、一瞬押しただけで数回組み合わせが変る。
この問題を解決してみよう。
あ、そうそう、ぷよの色と対応する数字は合わせてあります。
赤、青、黄、緑の順に1、2、3、4で。
よって、1~4の間で乱数を得るプログラムになっていますヨン。
- ABOUT
- カレンダー
04 | 2025/05 | 06 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 最新コメント
- プロフィール
はい。
- ブログ内検索
- カウンター
- アクセス解析