見出し画像

【ク】ORANGE pico でくじ引き

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

くじ引き

ORANGE pico 用のプログラムでくじ引きを実装してみた。

実行の様子

初期画面

起動すると、まず棒を何本用意するかの入力を求められる。

棒の本数を決めた直後の画面

入力してEnterキーを押すと、指定した本数の棒が出てくる。

2の棒を引いた画面

棒の上に書かれている数字のキーを押すことで、棒を引くことができる。
棒の先に何もついていない場合はハズレである。

アタリを引いた画面

棒の先が塗られていたらアタリである。
アタリは1本しか入っていないので、アタリを引いたら終了する。

プログラム

10 cls
20 input "How many sticks(1-10)?", num
30 if num<1 || 10<num then cls:goto 20
40 atari = rnd(num)
50 drawn = 0
60 inity = 100:endy = 30:length = 70:marklength = 10
70 boxsy = 120:boxdy = 180:margin = 6
80 delta = ((8 + margin) * (num - 1) + 8) / 2
90 startx = 160 - delta
100 endx = 160 + delta
110 white = rgb(255, 255, 255):black = rgb(0, 0, 0)
120 line startx - margin, boxsy, endx + margin, boxsy, white
130 line startx - margin, boxsy, startx - margin, boxdy, white
140 line startx - margin, boxdy, endx + margin, boxdy, white
150 line endx + margin, boxsy, endx + margin, boxdy, white
160 for i=0 to num-1
170 x = startx + (8 + margin) * i
180 dy = inity + length
190 if dy > boxsy then dy = boxsy
200 line x, inity, x + 8, inity, white
210 line x, inity, x, dy, white
220 line x, dy, x + 8, dy, white
230 line x + 8, inity, x + 8, dy, white
240 gprint x, inity - 10, str$((i + 1) % 10), white
250 next
260 key = inkey()
270 if key < 48 || 58 <= key then goto 260
280 key = (key - 48 + 9) % 10
290 if key >= num || ((drawn >> key) & 1) then goto 260
300 drawn = drawn | (1 << key)
310 x = startx + (8 + margin) * key
320 cury = inity
330 nexty = cury - 5
340 if nexty < endy then nexty = endy
350 for y=cury to nexty+1 step -1
360 line x + 1, y, x + 7, y, black
370 pset x, y, white
380 pset x + 8, y, white
390 dy = y + length
400 if dy < boxsy then line x, dy, x + 8, dy, black
410 if key <> atari goto 440
420 ay = dy - marklength
430 if ay < boxsy then line x, ay, x + 8, ay, white
440 next
450 line x, nexty, x + 8, nexty, white
460 if nexty + length < boxsy then line x, nexty + length, x + 8, nexty + length, white
470 pause 50
480 cury = nexty
490 if cury <> endy then goto 330
500 if key <> atari goto 260

改造のヒント

このプログラムには、まだ改良の余地があるだろう。
たとえば、以下のものが考えられる。

  • 用意できる最大の棒の本数を増やす

  • アタリを任意の数用意できるようにする

  • 引いた棒をよけて、引いた人との対応がわかるようにする

  • アタリ/ハズレだけでなく、番号などを出す (王様ゲーム用など)

  • 効果音をつける

  • 棒や箱のデザインを工夫する (模様や色をつけるなど)

これらは読者への宿題とする。

ライセンス

今回のプログラムと解説 (「くじ引き」節の内容) は、CC BY 4.0 でライセンスする。


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