画像(logo)

HOME/[C言語DXライブラリ]ブロックパズルの作り方 目次/初日 ブロックパズルの考え方

広告

[C言語 DXライブラリ ブロックパズルの作り方]
初日 ブロックパズルの考え方

広告

↓2016年02月29日発売↓

12歳からはじめる ゼロからのC言語 ゲームプログラミング教室

目次へ戻る

ブロックパズルの考え方

初日の今回はブロックパズル作りの大まかな流れだけを説明したいと思います!

まずはこちらの画像をご覧ください。

画像(cdxb_1_1)

こんな感じのブロックパズルの中身をのぞいて見ると・・・。

画像(cdxb_1_2)

こんな感じになっていたりします!

びっくりですね!

だいぶ見づらいですが、壁が「9」、ブロックが「1」、空間が「0」に置きかわってます!

この数字を使って計算する事でブロックパズル全体の動きを表現します。

もう少し詳しく見てみましょう!

2次元配列を平面にする

2次元配列を平面のようにとらえて数字を当てはめていきます。

ブロック・・・block[4][4]

ブロック情報を保存します。

ステージ・・・stage[23][18]

固まったブロックなど途中の状態を保存します。

※ステージの幅がさきほどの画像より少し大きいのは後ほど説明いたします!

広告

数字を当てはめる

それぞれの役わりに数字を当てはめていきます。

「0」・・・何もない

「1〜6」・・・ブロック

「9」・・・壁

この数字を使って落下、移動、回転、固定、クリアなどを計算していきます!

ブロックが「1〜6」となっているのは他の種類のブロックの分です。

今回は6種類のブロックを発生させたいので「1〜6」となっております。

数字を置きかえて表示

「 」・・・何もない

「□」・・・ブロック

「■」・・・壁

表示する時にブロックなどに置きかえます!

置きかえて表示してみましょう!

ブロック(block[4][4])

0,0,0,0

0,1,1,0

0,1,1,0

0,0,0,0

↓表示↓

画像(cdxb_1_3)

ステージ(stage[23][18])

9,0,0,0,0,9

9,0,0,0,0,9

9,0,0,0,0,9

9,0,0,0,0,9

9,0,0,0,0,9

9,0,0,0,0,9

9,9,9,9,9,9

↓表示(省略版)↓

画像(cdxb_1_4)

これらを重ね合わせます。

画像(cdxb_1_5)

ここで先ほどの「stage[23][18]」の幅が少し大きい理由ですが、今回の作り方だと重ね合わせた時にブロックの種類によっては配列の端からはみ出てしまう(バッファオーバーフロー)ブロックが出てくるので、そのはみ出る分多めに配列の要素を確保したというワケです。

「移動、落下、固定、クリア、回転」の計算

移動

ブロックを表す「1〜6」の左右が何もない「0」だったら移動させます。

落下

ブロックを表す「1〜6」の下が何もない「0」だったら落下させます。

固定

ブロックを表す「1〜6」の下が何もない「0」じゃなければ(壁・固定されたブロックだったら)ブロックを固定します。

クリア

横一列の何もない「0」の個数が0個だったら(ブロックで埋まっていたら)クリアします。

回転

先に回転後の仮のブロックを作って、そのブロックと重なる部分が全て何もない「0」だったら回転させます。

こんな感じの計算を組み合わせてブロックパズルを作っていきます。

では次回はさっそくブロックと壁を表示するプログラムを組んでみましょう。

次回

二日目 背景とブロックと壁を表示

□ページの先頭へ□

□目次へ戻る□

□HOME□

広告

↓2017年06月16日発売↓

やさしいC 第5版 (「やさしい」シリーズ)

新品価格
¥2,700から
(2017/5/1 13:05時点)

↓2014年08月09日発売↓

新・明解C言語 入門編 (明解シリーズ)

新品価格
¥2,484から
(2017/5/1 13:08時点)

↓2016年02月20日発売↓

新・解きながら学ぶC言語

新品価格
¥2,160から
(2017/5/1 13:10時点)

↓2017年02月11日発売↓

C言語プログラミング基本例題88 88

新品価格
¥3,024から
(2017/5/1 13:12時点)

↓2016年12月15日発売↓

Cの絵本 第2版 C言語が好きになる新しい9つの扉

新品価格
¥1,490から
(2017/5/1 13:13時点)

↓2017年02月08日発売↓

新・明解C言語で学ぶアルゴリズムとデータ構造 (明解シリーズ)

新品価格
¥2,700から
(2017/5/1 13:15時点)