クリエイター手抜きプロジェクト[469]IoT編 IchigoJamで簡単な数当てゲームを作る
── 古籏一浩 ──

投稿:  著者:



今回は、IchigoJamで簡単な数当てゲームを作ってみましょう。BASIC言語で作るオーソドックスというか、基本的なプログラムです。

ゲームは、いろいろありますが、昨今のようなリアルで凄いゲームが急にできたわけではありません。プログラマの地道な努力と切磋琢磨により、長年にわたってたくさんのゲームが作られてきて、ようやく今のゲームがあるのです。

経験もないのに、いきなり凄いゲームが作れるわけもありません。たまに「一週間で作るxxxゲーム」みたいなのがありますが、それはすでに経験のある人が書いているか、例題として掲載されているゲームなら簡単にできる、というだけの話です。ゲーム開発は地味で地道な努力の上に成り立っているのです。

さて、能書きはこのくらいにして、IchigoJamで数当てゲームを作ってみましょう。もっとも簡単なゲームなので、これが理解できないならコンピューターゲームは作れないでしょう。




まず、ルールを決めます。今回はコンピューターが1から3までの数字をランダムに発生させます。それをユーザーが数値を入力して当てるだけです。正解したらメッセージを表示して終わり、不正解なら正解するまで繰り返します。

日本語(文章)で書くと簡単ですが、まったくプログラムを作ったことがない人にとっては大変です。答えが分かっていて、それを入力しても理解できない可能性もあります。

実際、私がパソコンを購入してゲームのプログラムを入力してプレイしましたが、プログラムはさっぱり理解できませんでした。コードは見えていますが、そのバックグランドの動作は理解できませんでした。

本で「読む」のと実際に「動かす」のと、さらにそれを「理解する」のとは違うのです。

IchigoJamでランダムに数値を発生させるには、RND命令を使います。以下のようにすると、0から2までの値がランダムに表示されます。

NEW
10 A=RND(3)
20 PRINT A
30 GOTO 10
RUN

このプログラムを止めるにはescキーを押します。

RND命令のカッコ内に3とあるのに、生成されるランダムな値は0〜2です。これはRND命令が、0から指定した値を超えない整数値を生成するからです。

1から3までの数値にするには以下のように1を足してあげます。

10 A=RND(3)+1

これで1〜3までのランダムな値が表示されます。ランダムな値と書くのは少々面倒なので以後、乱数とします。

乱数を発生させたらユーザーからの入力を行います。これは以前にも使ったINPUT命令を使います。

10 A=RND(3)+1
20 PRINT A
30 INPUT B

この場合、ユーザーが入力した値は変数Bに入ります。次に乱数値と入力した数値が同じかどうか調べます。これはIF命令を使います。

変数Aと変数Bが等しいかどうか調べ、等しい場合はPRINT命令で文字を表示します。これまでPRINT命令では数値しか表示していませんでした。PRINT命令は文字を表示することもできます。

文字を表示する場合は、以下のように表示する文字を"で囲みます。

PRINT "Digital Creators"

表示した後は、プログラムを終了させます。プログラムを終了させるにはEND命令を使います。ただし、このEND命令はPRINT命令に続けて書かなければいけません。命令を続けて書く場合は:(コロン)で区切ります。

40 IF A=B THEN PRINT "Good":END

変数Aと変数Bの値が等しくなければ、再び入力を行う行に移動します。

50 GOTO 30

ここまでをまとめると、以下のようになります。生成した乱数値を20行目で表示していますが、これは確認のために入れてあります。動作を確認したら20行目は消してしまいます。

よく、プログラムをデバッグや動作テストをすると言いますが、この20行目も一種のデバッグ・動作テストと言えます。この行により正しく乱数が生成されているか、入力した値と一致した場合、正しく処理されているかが分かります。

10 A=RND(3)+1
20 PRINT A
30 INPUT B
40 IF A=B THEN PRINT "Good":END
50 GOTO 30

このプログラムを実行してみましょう。

RUN
2 ←コンピューターが生成した乱数値は2
?1 ←1を入力してみた
?3 ←不正解だったので3を入力してみた
?2 ←正解の2を入力してみた
Good ←正解なのでGoodと表示された
OK

期待通りに動作しているようです。これで問題なければ、20行を削除して完成です。

10 A=RND(3)+1
30 INPUT B
40 IF A=B THEN PRINT "Good":END
50 GOTO 30

わずか4行のプログラムですが、これも立派なゲームです。乱数値を1〜10にすれば、より難易度が高くなります。つまり、このゲームでの難易度調整は、この乱数値の生成範囲で行えるということになります。入力回数を制限してみるのもよいかもしれません。

他人が作成したプログラムを自由に改造できるようになれば、そのプログラムを作成した作者と同じか、それ以上のレベルになったと考えてよいでしょう。

ということで、また次回。


【古籏一浩】openspc@alpha.ocn.ne.jp
http://www.openspc2.org/


かつて郵便局に勤務していたおばさん(今はおばあさん)が、墨絵展(個展)をやるというので行ってきました。一年に一度、広島から長野県に来て展示するのですが、せっかくなので、どうしたら絵が上手くなるのかを聞いてみた。

「日々、努力。日々スケッチ」

う〜む、そんなズク(←気力のこと。方言です)はない……。1日3枚以上で15年続ければ、まあそれなりに上手くなるらしい。1日1枚だと45年近く。昨年計算した1日1枚で50年と似たような感じ。

社会人になると時間が取れなくなるので、1日1枚描くのもなかなか大変。ここらへん、学生で時間があって1日10枚も描けば4〜5年で上手くなる計算に。

まあ、練習する前にいちいち計算するのは、なんかずれていると言われなくもないけど、時間は見積もっておきたいところ。

・IchigoLatte(IchigoJam基板でJavaScriptが動く! ver 0.9.1が出た)
http://ichigolatte.shizentai.jp/


IchigoLatteのページも用意しました。やはりJavaScriptでプログラムできる
のは便利です。

・IchigoLatteを楽しもう
http://www.openspc2.org/reibun/IchigoLatte/0.9.1/


・みんなのIchigoJam入門 BASICで楽しむゲーム作りと電子工作
http://www.amazon.co.jp/dp/4865940332/


・Premiere Pro & Media Encoder自動化サンプル集
http://www.amazon.co.jp/dp/4802090471/


・JavaScriptによるデータビジュアライゼーション入門
http://www.amazon.co.jp/dp/4873117461/


・Photoshop自動化基本編
http://www.amazon.co.jp/dp/B00W952JQW/


・Illustrator自動化基本編
http://www.amazon.co.jp/dp/B00R5MZ1PA/


・Adobe JavaScriptリファレンス
http://www.amazon.co.jp/dp/B00FZEK6J6/


・4K/ハイビジョン映像素材集
http://www.openspc2.org/HDTV/


・クリエイター手抜きプロジェクト
http://www.openspc2.org/projectX/