連載
» 2013年01月11日 09時55分 UPDATE

プチコンで始めるBASIC新世代育成“虎の穴”(9):人工無脳は電気ヒツジの夢を見るか? (1/3)

武骨なようで中身は繊細!? プチコンによるBASICプログラムにおいて、画面上の“見栄え”は非常に難しい問題だ。今回は、やり過ぎない程度のスパイスを加えたサンプルプログラムを紹介する。おや、ハカセの手に「ファミリー○ーシック」が……なぜ!?

[スマイルブーム マイコン部,MONOist]

これって有名な……

ハカセ

それは空を飛べるがハトではない。マネが得意だがインコでもない。ひきょう者といわれるがコウモリでもない……』。さて、この生き物は何じゃろう?


ワンパク

フン、『人間』じゃねェの?


ハカセ

!! なかなかの“テツガク的アタマ良さそう系”の答えじゃな! ワンパクよ、やるではないか!


ワンパク

この手のアイマイな謎掛けには、『人間』って答えとけば大体こじつけられるって聞いたことがあるゼ!


神崎

……。


ハカセ(涙)

と、というわけで、今回のテーマじゃが……。うむ、言葉で説明するより、まずは画面を見てもらおうではないか!(画像1


もうお分かりですね 画像1 もうお分かりですね
神崎

あれ? これって有名なランプの魔人の……。


ハカセ

い、いやそれは気が早いというものじゃぞ。今や『Akinator(アキネイター)』はバツグンに有名なプログラムじゃが、その起源ははるかに古く、正直なところ最初に言い出したのは誰なのかワシもよく知らんのじゃ。


ワンパク

またズイブンと大ざっぱな話だな、オイ!


インテリ

そもそも最初までさかのぼろうとすると、人間対人間の『20の質問』タイプの古典クイズゲームになってしまうのさ。


ハカセ

さよう。コンピュータの世界だと、AI(人工知能)の研究やデータベースの格好のサンプルとして扱われたようじゃが、それもパソコン以前、マイコン以前の時代からの話じゃからのう。ジャンケンや数当てといった定番ゲーム同様、これも起源は諸説あって難しいのじゃ。


インテリ

聞くところによると、『Apple II(アップル ツー)』の一部バージョンでは、システムディスクにサンプルプログラムとして同梱されていたこともあるそうですね。


ハカセ

ふむ。今は人間やキャラクターを5段階評価の回答で当てるのが定番じゃが、当時は動物をYES/NOだけで当てるのが主流じゃったようじゃな。今回のプログラムもしかりじゃ。


神崎

と言っても、ジャンル変えだけなら初期設定部分を書き換えるだけでいいから、すぐに試せるね。


ハカセ

やはり、データが増えてからがこのプログラムの面白さじゃな。文化祭でマイコン部の展示にこのプログラムを走らせていると、意外に内容が増えていって、内輪ネタなんかも入ってウケも良かったりするのじゃぞ。


ワンパク

その発言にはイロイロと時代を感じるゼ……。大体、これニンテンドーDSi/3DS用のソフトだしナ……。


CLS:CLEAR
DIM HINT$(2000),NAME$(2000),Y(2000),N(2000)
 
@DATA
I=I+1
READ HINT$(I),NAME$(I)
Y(I)=-I:N(I)=I+1
IF HINT$(I)=="" THEN GOUKEI=I-1:N(I-1)=-I:I=1:GOTO @QANDA
GOTO @DATA
DATA "ソラヲトブ","ハト","ツノガアル","シカ","ヒトガノレル","ウマ"
DATA "ササガスキ","ハ゜ンダ","ハネル","カエル","クビガナガイ","キリン"
DATA "","クトゥル-"
 
@QANDA
IF I<0 THEN I=-I:GOTO @ANSWER
PRINT "ソレハ ";HINT$(I);"? (YА/NБ)"
GOSUB @BUTTON
IF B==16 THEN J=I:I=Y(I):F$="Y"
IF B==32 THEN J=I:I=N(I):F$="N"
GOTO @QANDA
 
@ANSWER
PRINT"ソレハ ";NAME$(I);"デスネ? (YА/NБ)"
GOSUB @BUTTON
IF B==16 THEN PRINT"ヤッタ!":GOTO @RETRY
PRINT"ザンネン! オシエテクダサイ。"
INPUT"ソレハ ナンデスカ";NAME$
PRINT NAME$;" ノ ";NAME$(I);" ニナイ トクチョウハ ナンデスカ"
INPUT HINT$
PRINT NAME$;" ハ ";HINT$;"。 オボエマシタ。"
 
GOUKEI=GOUKEI+1
IF F$=="Y" THEN Y(J)=GOUKEI
IF F$=="N" THEN N(J)=GOUKEI
NAME$(GOUKEI+1)=NAME$
HINT$(GOUKEI)=HINT$
Y(GOUKEI)=-(GOUKEI+1)
N(GOUKEI)=-I
 
@RETRY
PRINT"デハ モウイチド。"
PRINT
I=1:GOTO @QANDA
 
@BUTTON
WAIT 1
B=BUTTON(3)
IF B==16 OR B==32 THEN RETURN
GOTO @BUTTON
 
ソースコード1 質問に否定し続けると、何だかよく分からないものにたどり着く仕様です

ソースコード1のQRコード ソースコード1のQRコード

 ご覧のようにシンプルなプログラムなので、あまり解説の必要はないでしょう。

 配列変数の添字は、ヒント(HINT$)や名前(NAME$)のように、それぞれ対応し合っています。そして、ヒントに対してYES/NOのリアクションがあると、やはり同じ添字の変数Y(n)またはN(n)を参照して、次にすべき質問の添字を見つける仕組みです。

 この2つの変数は質問切れのフラグも兼ねていて、マイナス値ならば“これ以上掘り下げる質問はなし”と判断して、回答フェーズに進むようになっています。

 昔のマイコン向けプログラムとの大きな違いといえば、YES/NOの入力インタフェースがキーボードの「Y(Enter)」/「N(Enter)」方式ではなく、ニンテンドーDSi/3DSの「Aボタン」「Bボタン」になったことでしょうか。当時から現代まで見回しても、ボタンやジョイパッドを標準搭載するハードは少ないですが、あるとなかなか助かるものです。

画面上での“見栄え”はどうあるべきか?

 それにしても、少々見た目が地味だったでしょうか? 連載第7回「『夏草や 負けるな一茶 夢のあと』――ランダム俳句プログラムで奇跡の一句は生まれるか!?」の俳句自動生成プログラムも文字ばかりでしたが、特に今回は性質上、テキストが何行も続くのでますます見栄えが寂しいかもしれません。

 BASIC全盛期の家庭用マシンは、アーケードゲーム機などと比較して、はるかにグラフィックス/サウンド性能が劣っており、この当時、“見栄え”がどうあるべきか難しい問題でした。

 ハードの限界で望み通りのベストには達せないまでも、プログラム技術で極限まで性能を引き出して、理想に近づける挑戦はやはりキャッチーでプログラミングの1つの醍醐味(だいごみ)でした。しかし、その一方で「主人公がテキストの『▲』、敵が『■』になっても面白いものが本当に良いゲームだ!」という一種のグラフィックス不要論もしばしば持ち出されたものです。これは、つい見栄えや演出に重きを置き過ぎて、ゲームシステムや練り込み、アイデアをおろそかにしがちなことへの警句でもありますが、現代でも耳に痛い問題ではありますね。

 そこで、今回のプログラムでは、やり過ぎにならない程度に軽くスパイスを加えてみました。こんな感じになりましたがいかがでしょうか?(画像2

このキャラクター、覚えていますか? 画像2 このキャラクター、覚えていますか? ヒントはこちらの記事
QRコード2-1QRコード2-2 全ソースコードのQRコード(左・右の順で読み込んでください)


       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.