乱数を得る①
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の間で乱数を得るプログラムになっていますヨン。
目標地点は一人用のシンプルなぷよぷよ。(対戦とかは、まだ無理っしょ)
演出とか、グラフィックとか、音楽とか、外面を再現する趣旨では無いのでよろしく。
あくまで、本質のゲーム性の部分を作ってみようってことだ。
まず、ぷよぷよについてwikiで調べてみた。
なんせ遊んだのは相当昔のことなんで、ぷよって全部で何色だったっけとか、何個くっついたら消えるんだっけとか、縦横何マスのフィールドだったっけとか、ごく基本的なことを調べる必要があったのだ(笑)。
ここをメモ帳がわりに書いておこう。
フィールドは横6マス、縦12マス。
ぷよの色は4色で赤、青、黄、緑。
上下左右4方向で4個以上同色がつながると消える。
消えたマスには上のぷよが落ちてきて、そこでまた4個以上がつながると消える(連鎖)。
こんな感じ。
グラフィックハンドルや配列管理の都合上、色を数字で表現しておく
赤 = 1
青 = 2
黄 = 3
緑 = 4
で、非常に簡単にぷよのドット絵も描いた。
すいません・・・ま、ゲーム性の再現が目的ですので、絵はこんなレベルで勘弁してください(笑)。
ちなみに一番右のは消えるときに破裂する感じの絵です。微妙ですが・・・。
で、このぷよ達を画面中央に表示するプログラムを書いてみました。
このソースではまだ色と番号があっていません。
ここから全てが始まる・・・かもしれない。
とりあえず、明日は家族でディズニーランドなんで、もう寝ます。
- ABOUT
- カレンダー
06 | 2025/07 | 08 |
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 |
- 最新コメント
- プロフィール
はい。
- ブログ内検索
- カウンター
- アクセス解析