0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

IchigoJamAdvent Calendar 2020

Day 23

IchigoJamでデデンネする

Posted at

デデンネする は、「デデンネ」「エモンガ」もしくは自分で設定した文字列の中の文字を
ランダムで1文字ずつ出力し、設定した文字列が出る(または3万回出力する)まで続ける、というものである。

今回は、これを こどもパソコン IchigoJam で実装してみた。

※IchigoJamはjig.jpの登録商標です。

今回の仕様

まず、「デデンネ」「エモンガ」の中から使う文字列を選ばせる。
任意の文字列を設定する機能の実装は、今回は

  • 文字数(と文字種)が同じなら、文字列の変更は本質ではない
  • 文字数を増やすことを考えた場合、
    全ての文字が違う5文字の文字列を使うと2千回程度、6文字の文字列を使うと数万回程度の出力が高確率で発生し、
    IchigoJamで実行するには適さない
  • 文字数を減らすと、つまんなそう
  • 以上からあまり意味がなさそうなわりに、めんどくさそう

という理由から、見送ることにした。

文字列を選んだら、その文字列の中の文字をランダムで出力していく。
このとき、判定用にどの文字を出力したかの情報を記録していく。
各文字を出力する確率は等確率とするが、「デデンネ」には「デ」が2個含まれるので、
その分「デ」を出力する確率は「ン」「ネ」を出力する確率の2倍とする。
また、IchigoJamでは濁点は別の文字として出力されるため、本体と濁点が別の行にならないように制御する。

指定した文字列が出力されたら、何回出力したかを出力して終了する。

実装

以下に今回実装したプログラムを示す。

10 ' デデンネ スル
20 ?"デデンネ スル(1)? エモンガ スル(2)?":S=#FF:P=0:C=0
30 X=INKEY()
40 IF X=#31 GOTO 80
50 IF X=#32 GOTO 140
60 GOTO 30
70 IF S=#0B:?CHR$(10);"デデンネ シタ カイスウ ハ ";C;" デス":END
80 R=RND(4):S=(S<<2)&#FF:C=C+1:P=(P+1)&#1F
90 IF R=2:?"ン";:S=S|2:GOTO 70
100 IF R=3:?"ネ";:S=S|3:GOTO 70
110 IF P=0:?" ";:P=1
120 ?"デ";:P=P+1:GOTO 70
130 IF S=#1B:?CHR$(10);"エモンガ シタ カイスウ ハ ";C;" デス":END
140 R=RND(4):S=(S<<2)&#FF:C=C+1:P=(P+1)&#1F
150 IF R=0:?"エ";:GOTO 130
160 IF R=1:?"モ";:S=S|1:GOTO 130
170 IF R=2:?"ン";:S=S|2:GOTO 130
180 IF P=0:?" ";:P=1
190 ?"ガ";:S=S|3:P=P+1:GOTO 130

10行目は、FILES用のタイトルである。
20行目は、プロンプトを出力し、ついでに出力と判定用の情報を初期化する。
30行目~60行目は、選択を入力させる。
70行目~120行目は、「デデンネ」に関して処理を行う。
130行目~190行目は、「エモンガ」に関して処理を行う。

70行目・130行目は、直近に出力した文字の情報を確認し、指定の文字列を出力していたら出力回数を出力して終了する。
80行目・140行目は、乱数によって次に出力する文字を選ぶ。
また、直近に出力した文字の情報の更新の一部を行うとともに、出力回数・出力位置の情報を更新する。
90行目~120行目・150行目~190行目は、乱数に基づき文字を出力し、直近に出力した文字の情報を更新する。
特に、110行目・180行目は、文字の本体と濁点が別の行にならないようにする制御を行う。

実行結果例

YouTube動画 (1:59)
IchigoJamでデデンネする - YouTube

結論

IchigoJamで、指定の文字列を出力するまでその中の文字をランダムで出力する「デデンネする」を実装することができた。

なお、この記事とは直接関係ないが、本家「デデンネする」には

  • 判定処理の効率が悪い
  • 一部の文字を入力すると誤動作する
  • 出力結果をシェア出来ない (出力回数しかシェアできない)

という欠点がある。
これらの欠点を克服した「ごちうさ見る」を、以前作成・公開した。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?