ここまで何も難しい事はないですね。ここで 4 桁の「整数」 a b について考えます。
a=1100
b=1010
この時 a and b や a or b はどうなるの? これについては、理屈ではなくて、定義によって次のように決まっています。
多桁の場合 a and b, a or b は、各桁について独立に先ほどの表の通りに演算します。繰り上がりはしません。
______a|1100
______b|1010
a and b|1000
_____a|1100
_____b|1010
a or b|1110
ここも特に難しい所はないですよね。
and や or は表で覚えてください。まず x and y。x が 0 か 1, y が 0 か 1 の全ての組み合わせを考えます。
x|y|x and y
-+-+-------
0|0|0
0|1|0
1|0|0
1|1|1
x が 1 かつ y が 1 の時だけ x and y も 1 になります。掛け算そのものですね。and が論理積と呼ばれるゆえんです。or も同様に表にします。
x|y|x or y
-+-+-------
0|0|0
0|1|1
1|0|1
1|1|1
x または y のいずれかが1なら x or y も1になります。算数の和とは少し違いますが、これを以て論理和といいます。
例えば敵が 8 人いる時、敵1 敵2 .. 敵8 それぞれに HP とか必要でしょ? 三人のHPを100にするには
teki1_HP=100
teki2_HP=100
:
teki8_HP=100
と書く。敵が増えたら結構大変!!
配列を使うとこれが
dim teki_hp[8]
for i = 1 to 8
teki[i-1]=100
next
と書ける。これなら敵が1000人でもok
smile basic では変数はいちいち定義しなくても使えます。
いきなり
? a
とかできる。言語によっては、定義していない変数を使おうとするとエラーになるものもあります。
そんなぬるい smile basic だけど、配列変数というのはいちいち定義しないと使えません。
その配列を定義するときに使うのが dim や var です。
dim a[8]
これで要素数 8 の数値型配列 a が定義できます。
つまり配列使わない限り dim/var は不要です。
あと、option strict 命令を実行すると smile basic もいちいち定義しないと変数が使えないガンコ親父に変身します。その時は使う変数を dim b などと事前に定義しなければなりません。
なるほど。
ただ、整数配列にすると現実コードが相当遅くなりますね~。特に書くとき。「配列読んで and して or して配列書く」になるので・・考えただけで遅そう・・・
保存データが大きくなったり時間がかかったりするのは特に問題ないと思います。公開ファイルについてくるわけでもないし、プレイヤーの意思で保存するのだろうし。
小さければファイルi/oだけ整数配列にするという手段もありますが、巨大な文字列だと無理っぽいですね。
負の整数を使いたい場合、-32768から32767の範囲になります。次のような関数で符号なし(0..65535)と符号あり(-32768..32767)を相互変換できます。
def u2i(u16%) ' 符号なしから符号ありに変換
return ((u16%+32768) and 65535)-32768
end
def i2u(i16%) '符号ありから符号なしに変換
retrun i16% and 65535
end
符号ありの整数 k を文字列に入れる場合
a$[i] = chr$(i2u(k))
それを読む場合
k = u2i(asc(a$[i]))
とします。
混乱してきたかな???