見出し画像

【ス】ORANGE pico で数字当て

#クリエイターフェス 10日目、テーマは「ス」である。

数字当て

ORANGE pico で「数字当て」を作ってみた。
ユーザーにまず1~128の整数の中から1個を選んでもらい、「リストの中に選んだ数字があるか?」という質問を7回することで、ユーザーが選んだ数字を当てる。

原理

1~128の整数に、それぞれ2進数で0000000~1111111の番号を割り当てる。
そして、2進数のそれぞれの桁について、その桁が1である整数を、かつそれのみを含むリストを提示し、その中にユーザーが選んだ数字があるかどうかを聞くことで、選ばれた数字に対応する番号のその桁がわかる。
この質問を7回することで、7桁の番号すべてがわかり、ユーザーが選んだ数字を特定することができる。

プログラム

カナを用いているので、UARTから流し込む際は文字コードにShift_JISを用いること。

10 dim tlist(128):dim backet(128):dim dlist(64)
20 answer=0
30 for i=0 to 127
40 tlist(i) = i + 1
50 next
60 for i=0 to 127
70 pos = rnd(128 - i) + i
80 temp = tlist(i):tlist(i) = tlist(pos):tlist(pos) = temp
90 next
100 cls
110 locate 9,3:print "1 カラ 128 ノ セイスウ ノ ナカ カラ"
120 locate 7,6:print "スキナ スウジ ヲ 1コ エランデ クダサイ"
130 locate 13,11:print "7カイ ノ シツモン デ"
140 locate 8,14:print "アナタガ エランダ スウジ ヲ アテマス"
150 locate 11,19:print "ナニカ キー ヲ オシテ スタート"
160 if inkey()=0 then goto 160
170 for i=0 to 6
180 listed=0
190 for j=0 to 127
200 backet(tlist(j)-1) = (j>>i)&1
210 next
220 for j=0 to 127
230 if backet(j) then dlist(listed)=j+1:listed=listed+1
240 next
250 cls:pause 300
260 locate 15,3:print "シツモン ";i+1;" / 7"
270 locate 3,6:print "コノ ナカニ アナタガ エランダ スウジ ハ アリマスカ?"
280 for j=0 to 63
290 locate 4+j%8*4,10+j/8:print format$("%3d",dlist(j))
300 next
310 locate 11,21:print "[<] ハイ  /  イイエ [>]"
320 k=inkey()
330 if k=28 then answer=answer|(1<<i):goto 350
340 if k<>29 then goto 320
350 next
360 cls:pause 300
370 locate 9,3:print "シツモン ニ コタエテ クレテ アリガトウ"
380 locate 10,6:print "アナタ ガ エランダ スウジ ハ"
390 for i=0 to 2
400 pause 1000
410 locate 19,8+2*i:print "*"
420 next
430 pause 1000
440 locate 15,14:print format$("%3d デスネ!",tlist(answer))
450 locate 8,19:print "[<] モウ イッカイ  /  ヤメル [>]"
460 k=inkey()
470 if k=28 then goto 20
480 if k<>29 goto 460

実行の様子

最初の画面。
何かキーを押すと、質問が開始される。

最初の画面

質問の画面。
番号のリストは昇順に表示されるので、探しやすい。
左矢印キーで「はい」、右矢印キーで「いいえ」を選択する。

質問の画面

結果画面。
質問の答えに基づいて特定した、最初に選ばれた数字が表示される。
左矢印キーを押すと最初の画面に戻り、右矢印キーを押すと実行を終了する。

結果画面

左右の矢印キーのみで操作できるので、プログラムの起動後はHetaPadでも操作できるはずである。
また、今回はテキスト画面のみを用いているので、UARTの入出力のみで使用できる。

改造のヒント

たとえば、以下の変更を行うことが考えられる。
これらは読者への宿題とする。

  • 効果音をつけるなど、演出を工夫する

  • ジェスチャーなどのセンサーで質問の答えを入力できるようにする

ライセンス

今回のプログラムと解説 (「数字当て」節の内容) は、CC BY 4.0 でライセンスする。

クリエイターフェス10投稿を終えて

今回の記事で、無事クリエイターフェス用の10日連続1日1投稿、合計10投稿が完了する。
毎日連続投稿を開始する前にテーマをある程度まで考え、中身も書き始めておくことで、連続投稿中の負荷を軽減できる。
ただし、これは連続投稿が長期にわたる場合は、持続可能ではない。
長期の毎日連続投稿を続けるには、ある程度クオリティを落とすことになるかもしれない。

さて、今年もあと1ヶ月ほどでアドベントカレンダーの時期に突入する。
色々な人が記事を書いてくれることもあるかもしれないが、一人で25記事を書くことを求められるかもしれない。
どの程度の量と内容の記事を書くかは自分で考え、そのようが良いと考える場合は事前準備もし、無理はしすぎないようにするのがよいだろう。


この記事が気に入ったらサポートをしてみませんか?