週刊アスキー

  • Facebookアイコン
  • Twitterアイコン
  • RSSフィード

火星人を動かして小惑星帯で生き残れ!:IchigoJamプログラミング第4回

2015年05月16日 11時00分更新

 ウィンドウズでも、画面を上下左右に動かして見えない部分を表示することを“スクロール”と言います。エクスプローラーやウェブブラウザーなどの右端または下端にある棒(?)のことを“スクロールバー”って言ったりしますよね。このスクロール、ふだん当たり前のように使っていますが、自分でプログラムを作って実現しようとするとなかなか難しいものです。
 さて、IchigoJam BASICには、便利なことに最初からスクロールのためのコマンドが備わっています。今回その“SCROLL”コマンドを使って簡単なゲームを作ってみました。
 また、以下は皆さんからの投稿はこんな感じで掲載されますというサンプルでもあります。


作品名:GREAT SCROLL JOURNEY
作者名:加藤兄
BASICのバージョン:0.9.7
プログラムの説明
■物語
あなたは火星と木星の間に広がる小惑星帯に迷い込んでしまった火星人です。迫りくる小惑星にぶつからないよう、なるべく長く生き延びてください。

IchigoJamでプログラミング第4回
↑プレイ中の画面。左のほうが小惑星が少ないので、そちらへ行きたいですね。


■画面と操作
画面中央のタコみたいなキャラクターがあなたです。
カーソル移動キー(←、↑、→、↓)で画面を上下左右にスクロールさせます。
小惑星(□)にぶつかるとゲームオーバーです。

プログラム

100 '-- GREAT SCROLL JOURNEY --
110 X=18:Y=13:S=0:D=2:CLS
120 ' MAIN
130 K=INKEY()
140 IF K=28 THEN D=1
150 IF K=29 THEN D=3
160 IF K=30 THEN D=2
170 IF K=31 THEN D=0
180 IF D=0 THEN A=RND(35):B=25
190 IF D=1 THEN A=0:B=RND(25)
200 IF D=2 THEN A=RND(35):B=0
210 IF D=3 THEN A=35:B=RND(25)
220 LOCATE A,B:PRINT CHR$(2)
230 LOCATE X,Y:PRINT " "
240 LOCATE 0,0:PRINT "           "
250 SCROLL D
260 IF VPEEK(X,Y)=2 GOTO 310
270 LOCATE RND(35),RND(25):PRINT CHR$(2)
280 LOCATE X,Y:PRINT CHR$(12)
290 S=S+10:LOCATE 0,0:PRINT "SCORE:";S
300 GOTO 120
310 ' GAME OVER
320 LOCATE X,Y:PRINT "*"
330 LOCATE 10,Y+2:PRINT "[ GAME OVER ]"
340 LOCATE 11,Y+4:PRINT "SCORE:";S
350 END

■プログラムの説明
IchigoJamには、画面をスクロールするためのコマンドがあり、「SCROLL 0」で上、「SCROLL 1」で右、「SCROLL 2」で下、「SCROLL 3」で左に画面を動かす(スクロールする)ことができます。
行番号140~170からで、押したキーに応じて、変数D(方向=direction)に0~3を入れ、行番号250の「SCROLL D」で指定の方向へスクロールします。
行番号180~210は、スクロールした方向に応じて進行方向の先に小惑星(□)が現われるようにしています。たとえば下方向にスクロールしたときは、一番上の行のどこかに小惑星が乱数でひとつ表示されます。
行番号220のCHR$(2)の2は□のキャラクターコードです。同様に行番号280のCHR$(12)の12はタコのキャラクターのキャラクターコードです。
行番号260行、VPEEK(X,Y)で、画面上の座標(X,Y)に表示されているキャラクターコードがわかります。ここでは、もし2(□でしたね)だったら、行番号310(=ゲームオーバー処理)にジャンプします。
行番号270、自分でプレイしてみたらちょっと簡単すぎたので、ランダムで画面上のどこかにもうひとつ小惑星が表示されるようにしてみました。
■改造点
現状では、ゲームが進んでも難易度が変わりません。そのため気力があれば、なかなかゲームオーバーになりません。変数S(点数=Score)に応じて、小惑星がたくさん出るようにすればよりゲームらしくなると思います。

IchigoJamでプログラミング第4回
↑ゲームオーバー。そのままプログラムが終了してしましますが、リプレイ機能とかつけてもいいかもしれません。

 今回は、プログラムを画面写真ではなくテキストで公開してみました。IchigJamのプログラムをテキストとして取り出す方法は次回この連載で書く予定です。上記のプログラムを行番号も含めて入力し、間違いがないことを確かめたら“RUN”コマンド、もしくは“F5”キーを押して実行します。
 この記事の読者はBASICプログラミングの経験者が多いでしょうから、プログラムの入力のしかたについてはここでは述べませんが、IchigoJamならではの注意点もありますので以下に記します。
・大文字と小文字は区別されませんので、どちらで書いてもOKです。混在していても構いません。
・“LIST 行番号1,行番号2”で、指定した範囲のリストを見ることができます。行番号1と行番号2に同じものを指定すると1行だけ表示されますので、次の行とくっついたりしていないか確認するとよいでしょう。
例:LIST 100,100 行番号100だけを表示する。
・“RENUM”コマンドで、プログラムの行番号を10から10刻みに変更できます。が、GOTO、GOSUBのとび先は変更されません。RENUMを使ったときは、すべてのGOTO、GOSUBを見直しましょう。

 IchigoJamのBASICは、スクロールのほか、画面に表示されているキャラクターを読み取る“VPEEK”も用意されていて、ゲームが作りやすい仕様ですよね。
 ところで、行番号130のINKEY()はキーボードのどのキーが押されているのかを読み取るコマンド(関数)です。カーソル移動キーを押すと、それぞれ次のキャラクターコードが数値で返ってきます。
↑(上) 30
←(左) 28
→(右) 29
↓(下) 31
 これらを“IF~THEN”で判別してスクロール方向を決めているわけです。キーボードから入力できるキャラクターコードはせいぜい100個程度ですので、どのキーがどんな数値になるのか覚えてしまう手もありますが、次のようなプログラムで簡単に調べることができます。

IchigoJamでプログラミング第4回
↑キーボードから入力したキーのキャラクターコードを表示するプログラム。
IchigoJamでプログラミング第4回
↑たとえば、カーソル移動キーの上を押すと“30”と表示されます。ESCキーを押すと終了です。

 キャラクターコードを100個覚えるよりは、こっちを覚えておいたほうがラクですね。まぁ、“キャラクターコード”でググるほうが早いかもしれませんが……。
 ところで、キーボードが押されていなかったら、INKEY()の値は0になります。なので、行番号1は、一見「何も押されていなかったら入力しなおし」という処理のように見えます。そして、「押されていなかったら、たんに0が表示されるだけなので、その処理いらなくない?」と思うかもしれません。
 つまり、以下のようなプログラムでもいいのでは?と。

IchigoJamでプログラミング第4回
↑これも、画面の左上隅に入力したキーのキャラクターコードを表示するプログラム。

 ところが、意外にもうまくいきませんでした。次のようなプログラム実行してみると原因が判明します。

IchigoJamでプログラミング第4回
↑画面の左上隅固定ではなくて、次々と表示していくプログラム。となりの数字との区切りとしてコロン(:)を入れています。
IchigoJamでプログラミング第4回
↑カーソルキーの上キーを押し続けたところ。そのキャラクターコード(30)が飛び飛びに表示されていることがわかります。

 上キーを押し続けたなら、“30:30:30:30:30:30:30……”となることを期待しますよね。ところが、押し続けているにも関わらずいくつか“0”が挟まって表示されてしまっています。
 つまり、IchigoJamでは、キーを押し続けてもINKEY()はそのキャラクターコードを連続で取得し続けるわけではないようなのです。
 だから、1つめのプログラムは、「何も押されていなかったら入力しなおし」ではなくて、「INKEY()の値が0だったら入力しなおし」とそのままの意味になります。これをしないと、入力したキーのキャラクターコードが一瞬しか表示されずにすぐ“0”が表示されてしまうため、押したキーのキャラクターコードがよく見えないのです。
 この点についてIchigoJam開発者の福野さんに聞いてみましたが、

キーボードのキーリピートによるもので仕様です

 とのことでした。“ボタン押し続け”を前提とした操作をするゲームを作る際はご注意ください。またあまり厳密な操作は避けたほうがよいかもしれません。

 週アスPLUSでは、引き続きみなさんからのプログラム投稿を受け付けています。下記URLの募集要項を読んで、どしどし投稿してください。

https://ssl2.asciimw.jp/weeklyascii/ichigojam/

お待ちしています!

※本記事はIchigoJamバージョン0.9.7で検証しています。

 

●関連サイト
こどもパソコンIchigoJam
PCN プログラミング クラブ ネットワーク
IchigoJam BASICリファレンス(0.9.7)


 IchigoJamはアスキーストアでも売っています。

BASICでプログラミング! こどもパソコン IchigoJamをアスキーストアで購入
アスキーストアで購入
 

この記事をシェアしよう

週刊アスキーの最新情報を購読しよう