スライディングブロックパズルフレームワーク。2


以前公開した15パズルフレームワークに関数を2つ追加しました。

//現在のパネル盤面情報を取得します。
void Sbp_GetPanelValue(Sbp sbp, int *panel);

//現在のパネル盤面情報を変更します。
//パネル盤面フォーマットは
//横ピース数×縦ピース数=ピース総数とした、 0 から ピース総数-1 までの連番数値です。
void Sbp_SetPanelValue(Sbp sbp, const int *panel);


今までのものはシャッフル関数でピースをかき混ぜるか、
移動関数を呼び出してプログラムからピースをかき混ぜるかしかゲーム開始状態を作れませんでしたが、
上記関数を用意したことで、前もって準備した開始状態でステージを構成したりということが出来るようになりました。
また、現在の状態を保存するなんてことも可能となってます。


関数の利用時、読み込み先・書き出し先の用意をちゃんと行っていれば何ら問題は無いと思います。

//---------------------------------------------------------------------------------
void Sbp_GetPanelValue(Sbp sbp, int *panel) {
//---------------------------------------------------------------------------------
	
	if(sbp == NULL) return;
	
	int i;
	for(i = 0;i < sbp->piece_max;i++){
		panel[i] = sbp->panel[i];
	}
	
}

//---------------------------------------------------------------------------------
void Sbp_SetPanelValue(Sbp sbp, const int *panel) {
//---------------------------------------------------------------------------------
	
	if(sbp == NULL) return;
	
	int i, sum = 0;
	
	//パネルデータにダブリが無いか(整合性が保ててるか)確認(計算)する。
	for(i = 0;i < sbp->piece_max;i++){
		sum += panel[i];
	}
	
	//パネルデータにダブリが無かったら(整合性が保ててたら)パネルデータをセットする。
	if(i == sum){
		for(i = 0;i < sbp->piece_max;i++){
			sbp->panel[i] = panel[i];
		}
	}
	
}

//---------------------------------------------------------------------------------


プロジェクト一式、ライブラリ&フレームワーク一式は下記サイトからダウンロード可能です。


Nitro Developer Style
http://page.freett.com/ntr/