にしのクエスト2

情報処理技術者試験と資格学校講師の日常

20221224103753

Unityで学ぶプログラミング  テトリス的を作る(2)ブロックの色を変える準備

こんにちは!

今回からテトリス的なものを作っていきます。長い連載にな
りますので、気長にお付き合いください。

なお、プログラムの内容は難しいので、初心者には向きませ
ん。いきなり作るのは厳しいのでよろしくお願いします。
また、説明も大幅に省いていきます。

最後に注意事項
ご紹介するのはあくまで「テトリス的」です。そのものでは
ありませんし、非常にシンプルに遊べるだけのものです。

連載終了後に、より詳しい技術的な解説&追加機能を加えた
電子書籍を発行する予定ですので、よろしくお願いします。


今回はブロックに色をつけます。
ブロックの座標によって、配列を読み込み。ブロック自身が
自分の色を判断して色を変化させるという感じにします。

理論的には、こういうものを作ります。

f:id:koharuwest:20210104113204p:plain

なぜ、左右と下に2ブロックのスペースを開けるか
というと、説明が長くなりますので後述します。

でも、表示画面上はこうです。

f:id:koharuwest:20210104113330p:plain

何もないところの色は透明感を出しています。

f:id:koharuwest:20210104113509p:plain

Fadeにしてあげて、AlbedoのAを下げてあげます。

そうそう、カメラ前回のままだと反対側になってしまうので、

f:id:koharuwest:20210104113613p:plain

こんなふうに設定を変えてあげてください。

 

さてさて、まずはGameDirectorにアタッチしてあるGameCを書いていきます。

//フィールドの状態
public int[,] field = new int[16,23];

//フィールドの状態を保存する場所
public int[,] stage = new int[16,23];

//ブロックを格納
int[,] blk =new int[4,4];

//ブロックを一時保存
int[,] blktmp =new int[4,4];
 

変数宣言の部分です。後で使うブロックの部分も宣言してしまいます。
ブロックは4X4でいけるはずです。
一時保存の場所は、回転の時に使います。


フィールドは横10なのですが壁に2、のりしろに4の合計16
縦は20なのですが、壁に1、のりしろに2の合計23確保します。

のりしろの意味は、後でわかりますw

続きの部分です。

//ブロックを格納
public GameObject BlkObj;
 
void Start()
{
 
//コントロール変数
int i,j;
//ブロックを並べる(物理的に)
//タテ21並べた後それを横12
for(i=2;i<14;i++){
for(j=0;j<21;j++){
Instantiate(BlkObj,new Vector3(i*1.0f,j*-1.0f,0),Quaternion.identity);
}
}

これは、前回と同じなのですが、ブロックを並べる数字がちょっと違います。
のりしろの部分は並べないで、見えないようにしています。

デフォのブロックのサイズは1だ!ということがミソです。全て隙間なく並べます。

続けて、配列にデータを入れていきます。

stageは変更を一旦保管する場所。それをfieldに移してあげると、fieldをもとに画
面は変更されていきます。

//壁の設定
for(i=0;i<16;i++){
for(j=0;j<23;j++){
//壁に該当する部分は9
if(i==2||i==13||j==20){
stage[i,j]=9;
}else{
//それ以外は0を入れる
stage[i,j]=0;
}
}
}

//ステージのデータを描く
for(i=0;i<16;i++){
for(j=0;j<23;j++){
field[i,j]=stage[i,j];
}
}

のりしろがあるので、左の壁は2、右の壁は13、下の壁は20になります。

次回は、ブロック側のプログラムを組んでいきます。

それではよきプログラミングライフを!
またね。