|
今回は、ちょっと困った話です。 たぶん、PalmでVisual BASIC(R)を使っているようなほど、自由が利かないのがNS Basic/Palmです。 (どちらかと言えば、サブセット版と思えばいいのではないでしょうか?) 今後、そういう意味で、ついついVBと比べてしまうのでしょうが、まぁ、仕方がないでしょう。 さて、話を戻しましょう。 やはり、VBなどと比べていてのことでしょうが、それは、AmiKujiを作っているうちに気が付いたことです。 遊ばれた方は分かると思いますが、AmiKujiは、2〜15枚のくじを選択できるようになっていて、選択すると、横に5枚まで並べて、並びきらなかった分は次の段に移るようになっています。つまり、最高5列3段のくじになるわけですね。 これらを、くじの枚数に応じて、5枚以下か、10枚以下か、15枚以下かの3つに分けて、1枚目のくじを表示する縦方向の座標を変えています。 くじには、1〜15の番号が割り当てられています。0〜14でないのは、NS Basicの仕様上、添え字に0が使えないからです。つまり、A(0)とかCard(0)とかが使えないわけですが、エラーになるわけではないようです。 買ってすぐの時に、 Dim Brd(9,9) As Integer という変数を宣言して、Brd(0,x)やBrd(x,0)に代入してもエラーにはなりませんでした。 が、動作が変なのです、Brd(0,x)に代入した値はBrd(1,x)にも代入されてしまい、悩みました。バグかと思ったのですが、仕様上のことでしたね。マニュアルは一通り目を通した方がいいみたいです。 おっと、また脱線ですね。要するに、1枚目の位置が決まれば、どのパターンでも表示できるルーチンが作れればいいわけです。 1枚目の縦座標Y0は、1段の時は65から、2段の時は40から、3段のときは15から、と言うようにしたとします。 が、ホヤホヤの初心者の方だと、 If MaxKuji<5 Then Y0=65 Else if ・・・・ と If Then を使うでしょうか。もしくは、Select Caseなども使えますね。 一方、慣れた方なら比較演算子を使った方法があるでしょう。 これは、言語の仕様によっても異なりますが、今回は、True=-1、False=0であるとしましょう。 例えば、 A = ( A = A ) という代入文を考えます。(実際に書くことはないでしょうが・・・) この結果、Aには「-1」が代入されます。なぜなら(A=A)がTrueだからです。 A = 1 B = 2 C = ( A = B ) この場合は、AとBは等しくありませんから、CはFalse、つまり0です。 Boolean型を使った場合はともかく、このようにTrueとFalseを数字に変換できる方法が、定石と言えるでしょう。 これを、縦位置Y0の計算に使ってみると、次のような式になります。 Y0 = -(Maxkuji < 5) * 25 - (Maxkuji < 10) * 25 + 15 比較演算子なので、不等号でもOKです。Trueが「-1」になることを忘れなければダイジョウブです。 この方法だと、Ifを使うのに比べ1行で済む所がスマートだとは思いませんか? そう思って、比較演算子を使った方法で作成し、コンパイルすると・・・エラー。 結局、If Thenを使って処理しましたが、ちょっと、困りました。なぜなら、比較的、キャラを動かすようなゲームで、この方法を使うからです。 ま、使い方は、いつか別の機会にするとしますが、このように、ちょっと困った話でも、NS Basic/Palmを理解するうちの一つではないかと思われましたので、紹介してみました。 |