プチコン3号 2日目 絵を動かしてみる

pc2-2.jpg

プチコン2日目は、画面に絵を表示してみます。
表示するだけなら、エディタでプログラムを書かずとも、ダイレクトモードで直接実行できます。

SPSET 0,502
SPOFS 0,200,160,500
SPSCALE 0,2.0,2.0

これで、RPG風のキャラクタが画面に表示されました。

1行目は、0番のスプライトに502番の絵を割り当てました。
スプライトというのは、画面に重ねて表示することができる小さな(16×16ピクセルの)絵です。
スプライトには、表示すると、重ねた下の画面は隠されますが上書きされない、という特徴があります。
ゲームで背景の絵に重ねて、敵や自分のキャラクタを表示するのに大変便利な機能です。
プチコン3号は512枚のスプライトを持っており、0~511の番号で指定します。

次にスプライトに割り当てる絵ですが、これも番号で指定します。
どの番号でどんな絵が出るかは、Smileツールで確認できます。
Smileツールのボタンは画面下部中央あたりにあります。

pc2-0.jpg

Smileツールが表示されたら、その画面の下部中央の「SPDEF」ボタンを押します。
これでスプライトの一覧が表示されます。
絵柄は4096通りあり、0~4095で指定します。

pc2-1.jpg

さて、次にスプライトの表示位置と大きさの指定です。

SPSET 0,502
SPOFS 0,200,160,500
SPSCALE 0,2.0,2.0

SPOFSはスプライトの表示位置を指定します。もちろん3次元で指定できます。
4つのパラメータ「0,200,160,500」はそれぞれスプライト番号、X、Y、Zの値です。
ちなみにOFSとは「offset」、基準点(原点)からの差分というような意味合いです。

SPSCALEはスプライトの拡大率です。
3つのパラメータはスプライトの番号、横方向の拡大率、縦方向の拡大率です。

SPOFSの値を変更すると、スプライトの表示位置が変わります。
値を連続的に変えてやれば、スプライトを動かすことができます。
簡単なプログラムを書いてみました。

pc2-3.jpg

X=0:Y=0:Z=200
DX=1:DY=1:DZ=20
SPSET 0,502
@LOOP
X=X+DX
IF X>368 OR X<0 THEN DX=-DX Y=Y+DY IF Y>208 OR Y<0 THEN DY=-DY Z=Z+DZ IF Z>500 OR Z<-200 THEN DZ=-DZ SPOFS 0,X,Y,Z S=1.0+(500-Z)/500 SPSCALE 0,S,S VSYNC 1 LOCATE 0,0,0 PRINT X," ",Y," ",Z GOTO @LOOP

プログラムの中身ですが、スプライトを一定速度で動かし、画面の端まで行ったら戻ってくるようにしています。
DX、DY、DZが単位時間の移動量(=速度)で、正の値と負の値で移動方向を指定しています。
X, Y, Zでどれもやっていることは同じです。

ちなみに単位時間とは、1/60秒です。
これはVSYNCで指定します。1/60秒が、指定できる最短の単位時間です。

なおVSYNCとはVertical Sync(垂直同期)のことで、アナログのビデオ回路の走査線が下から上へ戻るときの同期信号から来ています。昔のゲーム機は、ビデオ回路が画面を描いている途中で絵を変化させると、ちらつきなどの悪影響が出ていました。そのため、走査線が戻る期間(画面を描いていない時間帯)に一気に画面を更新するようにしていたのですね。

Z軸方向の移動については、スプライトが遠いときほどサイズを小さくするようにして、動きをデフォルメしてみました。
このほうが、画面の中で動いている感じが出ると思います。

画面の座標系は、原点が左上。
一般的なグラフなどと違って、Y軸が下向きです。
画面サイズはX軸が400、Y軸が240です。
Z軸は、画面位置が座標0で、手前が負、遠くが正。
画面奥行き方向は最大1024、画面手前方向は-256までの値で指定します。

スプライトも(特に指定しなければ)原点は左上になります。
2倍に拡大した(32×32ピクセル相当の)スプライトの右端が、画面の右端に一致するとき、スプライトの座標は

400 – 32 = 368

となりますので、上のプログラムでは座標が368を超えたときにX軸上の移動方向を反転するようにしています。

プチコン3号は、小学生にプログラミングを学ばせるのが目的なのかなと思ったのですが、その割に初歩的な解説が少ないようなので、今回は初心者講座っぽく詳しめに書いてみました。
昔はBASICの解説本は非常に多かったのですが、今ではマイナーな言語になってしまったのですね。

プチコン3号 初めの一歩

というわけでプチコン3号の話題です。
公式の簡易マニュアルはこちらにあります。
プチコン3号 – 簡易電子説明書

ただ、このマニュアルは初めてプチコンを使う人向きではないので、最初に眺めるには、最初から入っている公式のデモプログラムを動かすところから始めるこちらの解説のほうが良いと思います。
プチコン3号 – プチコン3号を最初から

用意されたデモは結構多いので、最初は眺めるだけでも結構楽しめます。
ただ、そこからプログラミング開始へは、この解説だとちょっとハードルが高い感じがします。

まずはそれよりも、前回紹介したABAさんの

1000円を握りしめてニンテンドーeショップに駆け込み、プチコン3号を買って、以下のプログラムを打ち込もう。

をやってみました。

まずトップメニューから「SmileBASICでプログラムを作る」を選びます。

pc1-1.jpg

するとこんな画面になります。

上半分は、かつてのマイコン少年にはおなじみの画面です。
下半分はソフトウェアキーボードと開発環境のメニューを兼ねています。

pcshell.jpgpcide.jpg

ただ、昔のマイコンのように上半分の画面で直接プログラムを入力するのではありません。
上半分の画面は「ダイレクトモード」と呼ばれており、要するにコマンドシェルの役割をしているようです。
プログラムを入力するには、下画面のEDITボタンを押します。

pc1-2.jpg

すると上半分の画面がエディタになりますので、ここでプログラムをポチポチと入力していきます。
こんな感じです。

pcedit.jpg

プログラムの内容はABAさんの記事にあるとおり

@1:LOCATE RND(48),RND(30),RND(500)-250:PRINT “バカ”:GOTO @1

です。
SmileBASICでは行番号は無く、@で始まるラベルを用いるようです。
カナの入力はEDITボタンの上にある入力モード切替ボタンで指定します。
「バ」は最初キーボードに出てきませんが、シフトキーを押すと出てきます。

入力が終わったら、EDITボタンの左にあるDIRECTボタンを押します。
すると上画面がダイレクトモードに戻ります。

pc1-3.jpg

ここで

RUN

と入力しEnterキーを押すとプログラムが実行されます。
プログラムの停止は3DS本体のSELECTボタンです。

画面が「バカ」で埋め尽くされたままですので

CLS

と入力してスクリーンをクリアしましょう。

以上でプログラムを入力して動かして止めることができましたが、上のプログラムをちょっとだけ変更して、バカの色をランダムに変更するようにしてみましょう。
それにはプログラムを以下のように変更します。

@1:LOCATE RND(48),RND(30),RND(500)-250:COLOR RND(16),RND(16):PRINT “バカ”:GOTO @1

これで同じように実行すると、今度は文字の色と背景色がそれぞれランダムに設定されます。
ただ、実行が速すぎて何が何だかわかりませんね。
そこで、以下のようにさらに1命令追加します。

@1:LOCATE RND(48),RND(30),RND(500)-250:COLOR RND(16),RND(16):PRINT “バカ”:VSYNC(10):GOTO @1

なお、SELECTでプログラムを停止すると、その時点の文字色・背景色で停止します。
CLSだけでは文字色・背景色が元に戻りませんので、これを元通りに黒の背景・白の文字色にリセットするには、

ACLS

と入力します。

こんな感じで初めの一歩は終わりです。
次は、やっぱり絵を表示したいですね!!

プチコン3号を買ってみた

petitcom.jpg

このブログを1年あまりも放置してしまいました。
enchantMOONを買ってはみたものの、いまひとつ楽しめず、この1年はもっぱら音楽(DTM)にはまっていました。
あと、いまさらながらArduinoを買ってみて一通り動かしてみたりもしていたのですが、昔PICやAVRで電子工作をしていたので、それほどの新味は感じず、これまたお蔵入りになっています。
もっとも、Arduinoの開発環境はよく出来ているのは確かだし、Processingとの連携も面白いので、作りたいものとマッチすれば非常に便利そうです。

で、今度はニンテンドー3DS用のソフト「プチコン3号」が面白そうなので買ってみました。
そもそも3DSも持っていませんでしたので、3DSも買いました。
といっても3DS(旧型)は9,800円で買えましたし、プチコン3号がダウンロード販売で1,000円ですので、enchantMOONよりもだいぶ小さい出費です。

そんなわけで、これを機会にこのブログを再開しようと思います。

さてプチコン3号ですが、これは何かというと3DS上で動くプログラミング環境です。
言語は「BASIC」ですが、命令は3DSの機能を活かせるようにいろいろ拡張されているようです。
そして、現代風に一応エディタなどと統合したいわゆる統合開発環境(IDE)になっています。
キーボードが外付けできるともっと良かったんですが、まあハードの制約上仕方がないですね。

このプチコンシリーズ、ニンテンドーDS時代から続くシリーズで、今回で3代目なので「3号」という名前になっているようです。
興味深いのは、3号ではBASICはインタープリタではなくコンパイラになっているという点で、以前に比べて格段に実行速度が上がっているそうです。

がんばればかなり本格的なゲームの作成も可能で、「初代プレイステーションで出ていた2次元ゲーム並みのものは作れるはず」(スマイルブームの小林貴樹社長)とのこと。
初代プレステ並みのゲームをBASICで作れる『プチコン3号』 【東京ゲームショウ 2014】 日経トレンディネット

あと、まだ全部目を通していないのですが、熱心な解説記事がこちら。

「日刊!プチコン3号」最新記事一覧 – ITmedia Keywords

もっとも、プチコン3号を私が買おうと思ったのは、昔からゲームを作られているABA GAMESさんの日記がきっかけです。

1000円を握りしめてニンテンドーeショップに駆け込み、プチコン3号を買って、以下のプログラムを打ち込もう。

@1:LOCATE RND(48),RND(30),RND(500)-250:PRINT “バカ”:GOTO @1
文字列の表示位置を指定するLOCATEの引数が3つあることに注目。3つ目の引数のZ座標で奥行きを設定することができ、このプログラムで3DSの上画面に飛び出す「バカ」が表示できる。

立体視を手軽に試すことができるという点では、プチコン3号はかなりイケている環境である。コンソール上のテキストだけでなく、スプライトやBGなどもZ座標を設定することで画面から飛び出した位置や奥まった位置に配置できる。ムダに立体なゲームが作りたくなる。

作ったゲームはサーバ上にアップロード、公開することができ、公開キーを打ち込むことでダウンロードできる。作ったゲームを配るのも簡単だ。
最新ゲーム機の裸眼立体視をマイコン時代のBASICで堪能できるプチコン3号 2014-12-01 – ABAの日誌

非常に簡潔かつポイントを押さえたご紹介ですね。

私はまだ、いじり始めたばかりで操作もよくわからない感じではあるのですが、まあ少しずつ紹介していければと思います。