コンピューターを学ぶ場合、何にして

も数学は登場する訳ですが、数値につ

いても自然数だけではなく、虚数を使う

事もありますが、日常で見慣れている

10真数以外の物を使う事になります。

 

 まず、機材と言うのは、基本的にス

イッチのオンとオフの処理で動いてい

るため、歯車の山と谷のような状態で

状況変化が生まれています。つまり、

山だとオンで谷だととオフです。

 

 歯車は山同士で干渉すると運動エ

ネルギーが発生しますが谷だと何も

発生しない状態と同じで、まさにオン

とオフの状態です。コンピューターは

電気なので、スイッチに置き換えると

わかりやすく、オンは通電で、オフは

遮断と言う事になります。そのため、

機材の挙動は0と1で動いている訳で

すが、これが膨大な数存在しても問

題が発生してしまうだけですから、そ

れを別の形式に置き換えて使ってい

ます。

 

 まず、この0と1ですが、大昔の自

動織機などで使われているものがそ

れでその時代にはパンチ穴の開いた

カードでパターン指定をして動かすよ

うな仕様になっていました。ここまで

書くとパターン処理は上糸と下糸の

配列の設定なのでこれをパターン化

するというのは可能であると気づくの

も当然な内容だと言えます。そうなる

と、その処理を穴あきのカードでそれ

ぞれの場所を指定して配列を変えれ

ば異なるパターンが生成できるように

なるのでその流れを指定した物を使

って自動処理をしたのがプログラミン

グの初期の話になります。その後、パ

ンチ穴の開いた物をt勝てt処理するよ

うな仕様のものから、ノイマン型コンピ

ューターになり、現在に至るわけです

が、基本的に、二進数で動いている物

を人間い解りやすい状態で処理させ

ている状態なのが現在のコンピュー

ターの開発言語になります。

 

 二進数はプログラミング言語のブー

リアン型になるわけですが、0と1の構

造物の羅列が数億文字並んでいたと

して、このデバグ作業でバグを見つけ

るとなると人類では無理になります。

 

 そうなると、そうした問題が出ない

状態でもっとまともな処理の方法は

ないだろうか?と言う話になる訳です。

そうした場合に、16進数を使う事でパ

ターンをもっと簡素に記述するという

選択に行きつくのも自然な話だと言

えます。

 

 16進数の場合、キャラクター定義や

パーターン配列を想定した場合に使

えるものですが、

 

 

と言うふうになっています。つまり桁が繰り上

がるとA~Fになるのですが、これも0~15ま

での10進数としてカウントするのと考え方は

同じです。

 

 基本的に

 

 

となっているので、16進数の場合だと、8+2は

10なのでAになり、全部の総合計は15になる

のでFとなります。(10進数は0~9で桁を構成

するように、16進数も0~15で桁を構成してい

ます。)つまり、これを4段重ねて

 

 

 

のような状態にした場合、斜線を引く場合に

は、これが4段あれば4x4ドットでの斜線が引

ける事になります。基本的に、縦方向のデー

タは0~Fで対応できますが、データは8バイ

ト構成なので、この倍の8つの物を用意する

必要がありますそうなると、16進数は

 

 

のように二つ用意されることになるので

 

 

となります。基本的に10進数の場合、

 

上記の状態が10マスで、それが前述のよう

に桁数で配列が増えていく仕様になってい

ますが、0~Fも数値の推移なので、一桁の

数値表現ですから、桁が繰り上がると10進

数同様に上記のような状態になります。

 

 つまり、上の桁が1で下の桁が8だと10進

数では、18ですが、前述の状態も数値がそ

うなっている場合、18で表記できます。つま

り、10進数だと二けたの数値と同じ状態な

ので、00000000~11111111を16進数で表

現する場合には、桁数がもう一つ必要にな

るので、00~FFで表現されるわけです。

 

 こうしてみてみると、16進数の並びと言

うのも仕様的にはわかりやすいのではな

いでしょうか?

 

 つまり、8x8となると、00~FFのデータ

が8解読み込まれて別の行に配置され

る事になるので、00~FFのデータが8つ

必要になります。この事から16x16の場

合だと

 

 

となり、

 

 0000~FFFFまでの【 4桁の16進数 】

 

を使う事になり、16行あるので、16ほどパター

ンを用意することが16x16の指定が可能にな

ります。32x32だと8桁で32のデータが必要に

なりになり、64x64だと16桁の16進数で64個の

データ構成で表現することが出来るわけです。

そうなると、

 

 ■ 16進数x8

 ■ 16進数x16

 ■ 16進数x32

 ■ 16進数x64

 

で比較すれば、データの量が全く異なるの

でカラー情報が存在しな状況下でもやはり

データの量は増大します。

 

 また、単体のドット絵の配列と仮定した場

合でもこれが20並んだ場合だとデータの対

比でみた場合には結構な差が出てしまうの

で容量の変化が当たり前に発生します。

 

 ちなみに、HTMLやグラフィックツールの

True ColorのRGBの指定に16進数表記を

使いますが、その指定は000000~FFFFFF

となっています。ただし、これは前述のパ

ターン表記のような桁数の換算ではなく、

RGBの各色の指定になりますから256階

調のものをそれぞれに割り当てているの

で、

 

 ■ 赤 : 00~FF(0~256)

 ■ 緑 : 00~FF(0~256)

 ■ 青 : 00~FF(0~256)

 

での6桁表示になります。ちなみに、8bit

データx3なので24bitカラーと言う表記に

なっています。とりあえず、4の倍数です

から、4/8/12/16/20/24/28/32と言う感

じに推移するわけですが、これが3桁表

示になると12bitカラーと言うシネマカメラ

のRAW撮影で使われている物と同じに

なり、4桁だと16bitですから、DeepColor

の異論氏度と同じになります。とりあえず、

16進数表記をすると桁数が違うので、全

く異なるのは当然な話になります。

 

 ラスターグラフィックツールではRGBA

と言う透過処理をした状態で画像の書

き出しが可能ですが、αの状態という

のは、RGBと同様に256階調で行えて

いるはずです。

 

 そうなると、この表記は

 

 00 00 00 00 ~ FF FF FF FF

 

となります。そうなると、8x4で32bitに

なるので、色深度自体が深くなってい

るわけではありません。

 

 つまり、RGBAの状態で16bitと言う

事は16階調しかないのでマッハバン

ドが出やすくなります。Unityで16bit

テクスチャーで読み込む場合に24bi

tのまま減色もせずにそのまま送る

とマッハバンドがそのまま出てしま

うので、一旦それを減色してパレット

を色数の少ない物として書き出すか、

もしくは、

 

 ■ unity-dither4444

    https://github.com/keijiro/

    unity-dither4444

 

を使う事になります。

 

カラーを使う場合の情報とドットのパ

ターンでは使われた方異なるので、

注意が必要です。また、マシン語モニ

ターにデータを送るのと、パターン定

義用の16進数やカラー指定の16進数

では表記が同じでも内容がまるで違う

ので、データが16進数でも用途で内

容が全く違います。

 

 CSS 3.0では

 

 (0,0,0,0)~(256,256,256,1)

 

でRGBAを使えますが、透過処理では

なく、表示非表示をαチャンネルで制御

出来る仕様になっています。

 

【CSS】

B.sample1{background-color: rgb

(0,0,255,0.1);

 

【HTML】

<B Class="sanple1">TEST</b>

 

とすると透明度の高い青で表示されま

す。とりあえず、RGBAの取り扱いも、

画像として使う場合とそうでない場合

では異なりますし、16進数も用途で出

る結果が全く違うので、データの表記

が同じでも何で使われているかで内

容がまるで違います。

 

 冒頭に書いたパターンですが、この

表記だと

 

【 配列指定 】

 

ですから、【 物の配置に使える 】

訳ですが、キャラクター定義がされ

た文字列では、この構造体が使用

されています。

 

 前述のように、オンとオフの状態

のものが1bitに該当するのですが、

容量の表記のByteは8つ集まった

構造物になります、その為桁数が

倍になるので、00~FFで表記され

ます。半角英数字は1バイト文字で

すから、8x8で包含される条件です

から

 

 

の状態になり、大昔の半角文字がこれにな

ります。ちなみに、日本語対応になってから

倍各文字と言うのが登場しますが、これが

2バイト文字で

 

 

の状態になります。つまり、大本の1バイ

ト文字と2バイト文字の違うはこんな感じ

になります。見ての通り、桁が1バイトと、

その桁数が二つ多い2バイトになってい

ますよね。

 

 ドットの配置はそんな感じになってい

ますが、別の用途で使う事も可能です。

例えば、

 

【 16進数 】 => 【 2進数 】 変換

 

を行い、前述の16進数を0と1のパターン

配列に戻すとします。これが16x16の

枠を用意した状態で考えたと仮定して、

そのデータをひとつづつ読み込んで、

0と1を配置したとしましょう。そうすると、

 

【 条件の異なる物を配置すること

  が可能 】

 

になります。例えば、

 

 ■ Image_0.gif

 ■ Image_1.gif

 

と仮定するとどうでしょうか?この場

合、異なるオブジェクトの配列になり

ます。

 

 

のような場合、その配列はまるで異な

る物にできます。

 

 また、配列も各キャラクターオブジェクトに

対して、配列が異なるが複数用意すべき条

件の場合においては、表示非表示指定を

16進数指定を行い、そのマップ内に表示す

ると言う選択があります。

 

 つまり、2進数がブーリアン型と言う特性を

考えると、当然のようにそうした処理は可能

になるので、配置するか否かの判定として

それを用いる事が出来ます。

 

 こうした内容からパターンとして利用する

場合に16進数を用いる事もできますが、プ

チコンでスプライト指定をする場合だとカラー

の概念があるので、単なるドット指定とは

少し異なる状態になっています。

 

 プチコンmkIIでは、8x8のスプライトに8色

のカラーパレットを指定できるので、8x8の

中に数値を入れていく指定になります。

 

 その為、パターンの状態が少し異なるの

ですが、プチコンのCHARSET命令の色の

指定ですが、これは単なるカラー指定です

が、0と1のブーリアン型ではなく、整数であ

りマイナスを含まない物になります。つまり

バイト型データと言えます。その条件で考

えるとその範囲の色の指定が可能だと、

パレットの制約に合わせて物を作れるわ

けですが、考え方を変えると、前述のよう

 

【 オブジェクトは一に利用できる 】

 

訳です。ゲーム画面上のマップがどうい

うデータ構成なのかにもよりますが、指定

した数値の差異で配置する物を変更出来

ます。

 

 前述のようにIMAGEと言うスプライトでも

そうですが、3Dオブジェクトでも同様に呼び

出す対象名を固定しておき、

 

 ■ Game_Objebt-1

 ■ Game_Objebt-2

 ■ Game_Objebt-3

 ■ Game_Objebt-4

 ■ Game_Objebt-5

 ■ Game_Objebt-6

 

としておくと、6種類の異なる使途のオブジェ

クトを個別に配置することが可能になります。

 

 BlenderのBGEの場合、最初からグリッドは

16x16で用意されているので、256のマスを用

意して作業をする場合にはそれを使う事が出

来ます。

 

 とりあえず、同じオブジェクトの配置だと、

多重forループでXY軸にオブジェクトを並べ

る事が可能なので、Y+1でループを初めて、

X+1をしながら16回複製を行うとそれが成

立しますから、この時のオブジェクト生成の

内容をデータ参照にして、そこで用意した数

値を参照して、追加するオブジェクトを変更

するとマップが作りやすくなります。

 

 つまり、X辺りをブランクな変数として用

意しておき

 

 Game_Object+X

 

としてインデックスを振った物を呼び出す

仕組みにします。

 

 そして

 

 ■ Game_Objebt1

 ■ Game_Objebt2

 ■ Game_Objebt3

 ■ Game_Objebt4

 ■ Game_Objebt5

 ■ Game_Objebt6

 

のようなオブジェクトを用意した状態で、

 

1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1

1,6,2,2,1,2,2,2,1,1,1,1,2,2,6,1

1,2,1,2,1,1,1,2,1,1,1,1,2,1,2,1

1,2,1,2,1,1,1,2,1,1,1,1,2,1,2,1

1,2,1,1,2,2,2,2,2,2,1,1,2,1,2,1

1,2,1,1,2,1,1,0,1,2,1,1,2,1,2,1

1,2,1,1,2,1,4,3,1,2,1,1,1,1,2,1

1,2,1,2,2,1,3,4,1,2,1,1,1,1,2,1

1,2,1,1,2,1,1,1,1,1,1,1,1,1,2,1

1,2,2,2,2,2,2,5,2,2,2,2,2,2,2,1

1,1,1,2,1,1,1,1,1,1,1,1,2,1,1,1

1,1,1,2,1,1,1,1,1,1,1,1,2,1,1,1

1,1,1,2,2,2,2,2,2,2,1,1,2,1,1,1

1,1,1,2,1,1,2,2,2,2,1,1,2,1,1,1

1,1,1,2,1,1,1,2,1,2,2,2,2,1,1,1

1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1

 

のようなデータを用意した場合、異なる

オブジェクトをそれぞれ配置することが

データ参照で行う事が可能になります。

 

 ドット絵のタイルと考え方は同じです

が、画面が小さくオブジェクトが固定さ

れているレトゲーのようなものだと、ス

プライトをオブジェクトの生き変えて考

えると同じ事が出来るので、こうした考

え方も可能となります。

 

 これとは別に、オブジェクト1~6のそ

れぞれに0000~FFFFまでで座標指定

をしてそれを割り当てる方法もあります

が、その場合、前述の多重ループを、

オブジェクト別に複数回用いて処理す

る事になるので、一回の多重ループで

指定されたデータを読ませたほうが効

率的な気がします。

 

 ただし、ステージクリア型のゲーム

でマップ構成が変わる場合、この数

字の羅列をステージ分だけ作る事に

なりますから、そう言った作業が必要

になります。

 

 流石に近年のゲームでレベルデ

ザインをする場合だとこの条件で配

置できるものとそうでない物が存在

していますから、アメーバピグのよう

にグリッドがあってそれに基づいて物

を配置できるような状態のマップ構成

だと大丈夫ですが、明らかに平面図

から外観パースを作ってるようなマッ

プの作りだと以降言うのは難しくなり

ます。

 

 なので、用途で使い方が変わって

きますが、パターンの使い方は色々

あります。こうしてみてみると、

 

【 パターン化されている物だと

  オブジェクトやスプライトの名

  称にインデックスを振って呼

  び出すことが出来る 】

 

ので簡素な物だとそうした事が可能

になる訳ですが、物の配列とデータ

の制御の方法もいろいろあります。

 

 ちなみに、前述の数値乱立するデ

ータですが、

 

 【 平面上で異なる物を並べる

   場合の選択肢 】

 

になりますから、この条件でいうと、

単一レイヤー上のオブジェクトやス

プライトの配置になりますが、1~6

のオブジェクトを個別に16進数で管

理する場合だと、

 

 【 それぞれが紺となるレイヤー

   に配置する条件だと優位性

   がある 】

 

と言えます。ただし...。処理の仕方も

様々で

 

 ■ レイヤー番号とインデックス

   を同じ数値にしておいて、その

   数値に適合しない場合0を戻

   す処理で、Nullと指定オブジェ

   クトの配置を行う

 

 ■ 呼び出し段階で、特定の数

   値に限定して呼び出して、そ

   れをレイヤー単位で行う

 

とした場合、上記の条件だと、

 

 【 レイヤー1~レイヤー6では

   数値が同じのもだけをその

   レイヤーで配置する 】

 

事が可能になりますし、後者だと、

 

 【 特定のレイヤーで指定した

   複数の物のみを呼び出す

   ことが出来る 】

 

ので多重ループで呼び出してオブ

ジェクトを配置させるようにすると

しても、アプローチは複数あります。

 

 データは配列なので、それ自体

は文字列の並びでしかないのです

が、データ参照をする場合、どうい

う処理でそれを使うかで出来る事が

変わってきます。

 

 また、データの型式というのも用

途で全く異なるので、小数点を含む

場合にIntegerやBulianやBynary型

は使いませんし、先ほどのパターン

配列のような整数型で数が少ない

場合だとByte型で大丈夫なのでは

ないだろうか?と言う話になります。

 

 そして、二進数はビットなのでオン

とオフですから、Bulian型で大丈夫

なので、配置するか否かの判定用

のデータの場合、これで得大丈夫

と言う事になります。

 

 機械の場合処理をするか否かと

言う最小単位がありそれがあまり

にも多くなるので、その処理を16進

数でまとめて使う事になる訳ですが、

物を作る場合には基本的にデータ

参照型で構成する場合が多いので

結果的に用途において最適な構造

はどんなものだろうかを考えてそれ

を作る必要があります。

 

 当たり前のように10進数での演算

というのは座標変動などで存在して

いますし、文字数ノカウントなども同

様ですから、算数や数学で多く登場

する10進数は当たり前に使いますが、

データのとり扱いで、パターン配列

を使う場合には、2進数や16進数を

使う事になります。