• タイトル
    ソリティアボウリング
    (電子工作マガジン2019年SUMMER号 別冊附録マイコンBASICMagazine掲載)

  • 開発環境(動作確認機種)
    IchigojamBASIC1.3.1
    IchigojamBASIC1.2.6RPi
    IchigojamBASIC1.2.2ap

  • solitaire_BOWL
  • 内容
    トランプを使ったボウリングゲームです。
    山札のカードを小さい順に配置していき、置けなくなった時点で点数が決まります。
    5フレームで1ゲームとし、ボウリングと同じルールで点数をつけていきます。
    パーフェクトゲーム(5フレーム全てストライクを取ること。150点)を目指してください。

  • 遊び方
    画面上部にスコアボード、下部左にボウリングのピンに見立てたカード置場、右には上から1投目のカード捨場、2投目のカード捨場、右下に山札となっています。
    山札に表示されたカードをピンの場所に置きます。
    ピンに置くカードは数の小さい順に並べ、置けない時は右側のカード捨場に置きます。
    捨札2枚以下で全てのピンにカードが置ければストライク、捨札5枚以下ならスペアとなります。
    10ピン全てにカード置くか、捨札が6枚になると1フレーム終了で得点が計算されます。

  • 操作方法
    「ピン?」と表示されたらカードを置きたいピン番号(0~9)を入力します。
    カードを置けない場合は負の数字(例:-1)を入力します。

  • プログラムのしくみ
    プログラムリスト0はゲームのメイン部分で、プログラムリスト1は画面表示および得点計算をしています。
    LRUNで別プログラムを呼び出す時は、変数Lに戻り行番号を代入してから呼び出しています。
    プログラムリスト0
    1行コメント
    2行定数、キャラクタ定義
    3行キャラクタ定義、山札表示
    4行ピン位置入力
    5行画面表示ルーチン呼出
    6行倒れたピンの数
    7-8行1投ごとの点数計算
    9行フレーム終了時の変数クリア
    10行ゲーム終了チェック
    11行捨てカード処理
    12行ピン表示

    プログラムリスト1
    1行コメント
    2行枠線表示
    4-7行得点表示
    8行山札表示
    9行指定座標にカード表示

    配列変数
    0-9ピン
    10-12捨札(1投め)
    13-15捨札(2投め)
    16次の捨札位置
    17ボールを投げた数
    18山札
    20-261投めの点(1-7flame)
    30-362投めの点(1-7flame)
    41-53表示したカード(1-4bit)
    60-79ピン座標(X0,Y0,X1,Y1…)

  • プログラムの具体的な入力方法
    プログラムリスト0は保存番号0に、プログラムリスト1は保存番号1にSAVEしてください。

    罫線記号(カードの枠線)の入力は下記の通りです。

    左ALT+SHIFT+H
    左ALT+SHIFT+I
    左ALT+SHIFT+J
    左ALT+SHIFT+K
    左ALT+SHIFT+L
    左ALT+SHIFT+M
    左ALT+SHIFT+N
    左ALT+SHIFT+O(オー)
    左ALT+SHIFT+P
    左ALT+SHIFT+Q
    左ALT+SHIFT+R
    スペース1個

  • プログラムの改造
    プログラムを改造する場合は、キャラクタ定義や枠線表示を別プログラムにするなどしてメモリに空きを作ってください。

  • ソリティアボウリング(プログラム0)
    1 'ソリティアBOWL0
    2 CLV:CLP:CLS:FORI=20TO36:[I]=11:NEXT:LET[60],4,18,3,15,5,15,2,12,4,12,6,12,1,9,3,9,5,9,7,9:COPY#7D0,#750,8:POKE#750,129,195,231,255,255,231,195,129,0,0,0,0,0,0,0,0:COPY#768,#720,32:COPY#790,#190,64
    3 COPY#788,#208,8:COPY#7D8,#250,8:COPY#7E0,#288,8:COPY#7E8,#258,8:COPY#700,#168,8:COPY#708,#188,72:M=1<<RND(4):N=RND(13)+1:IF[40+N]&MCONTELSE[40+N]=[40+N]|M:[18]=M<<4+N:I=#760:L=4:LRUN1
    4 LC0,21:?CHR$(12);:INPUT"ピン? ",K:K=K%G:IFK<0[G+[16]]=[18]:[16]=[16]+1:L=11:LRUN1,4ELSEFORI=0TO9:IF[I]J=[I]&#F:L=[18]&#F:IF(I<K&&J>L)||(I>K&&J<L)||[K]?"オケマセン":WAIT60:I=9:NEXT:GOTO4
    5 NEXT:[K]=[18]:L=7:LRUN1,4
    6 P=G:FORI=0TO9:P=P-![I]:NEXT:RTN
    7 GSB6:IFP<GGOTO3ELSEIF[16]<3[20+[H]/2]=G:[H]=[H]+1:GOTO9
    8 [30+[H]/2]=P-[20+[H]/2]
    9 FORI=0TO16:[I]=0:[I+40]=0:NEXT
    10 A=[H]+1:[H]=A:B=[24]:IFA<G||(B+[34]=G&&A<11)||(B*[25]=100&&A<13)||(B=G&&A<12)GOTO3ELSEL=13:LRUN1,4
    11 IF[16]%3GOTO3ELSEGSB6:IF[16]=3[20+[H]/2]=P:GOTOGELSEGOTO8
    12 I=I+1:IFI>9GOTOLELSEIF[I]A=[60+I*2]:B=[61+I*2]:D=[I]:LRUN1,9ELSECONT
    13 LC0,22
    

    ソリティアボウリング(プログラム1)
    1 'ソリティアBOWL1
    2 G=10:?CHR$(19);"┏━━━┳━━━┳━━━┳━━━┳━━━━━┓":?:?"┣━┳━╋━┳━╋━┳━╋━┳━╋━┳━┳━┫":?"┃":?"┣━┻━╋━┻━╋━┻━╋━┻━╋━┻━┻━┫":?:?"┗━━━┻━━━┻━━━┻━━━┻━━━━━┛":?:?"┏━┳━┳━┳━┓□┏━┳━┳━┓":?"┃6┃7┃8┃9┃□┃□┃□┃□┃":?"┃□┃□┃□┃□┃□┃□┃□┃□┃
    3 COPYI,#4F8,8:?"┗┳┻┳┻┳┻┳┛□┗━┻━┻━┛":?"□┃3┃4┃5┃□□┏━┳━┳━┓":?"□┃□┃□┃□┃□□┃□┃□┃□┃":?"□┗┳┻┳┻┳┛□□┃□┃□┃□┃":?"□□┃1┃2┃□□□┗━┻━┻━┛":?"□□┃□┃□┃":?"□□┗┳┻┳┛□□□┏━┓":?"□□□┃0┃□□□□┃□┃":?"□□□┃□┃□□□□┃□┃":?"□□□┗━┛□□□□┗━┛
    4 L=-L:C=0:F=#E0:H=17:FORI=0TO4:E=[I+20]:A=E%11:B=[I+30]%11:D=A+B:LCI*4+1,3:?CHR$(E+F);"┃";CHR$([I+30]*(D<G)+12*(D=G)-(E=G)+F);"┃□┃":C=C+D:IFD=GD=[I+21]%11:C=C+D:IFA=GC=C+[I+31]%11:IFD=GC=C+[I+22]%11
    5 LCI*4,1:?"┃□";I+1:LC0,I*2-3:?"┃":LC22,I*2-3:?"┃":LCI*4,5:?"┃";DEC$(C,3):IF(I<3&&[G+I])A=I*2+11:B=9:D=[G+I]:GSB9:IF(I<3&&[13+I])A=I*2+11:B=13:D=[13+I]:GSB9
    6 NEXT:L=-L:A=[24]%11:B=[34]%11:IFA+B=GLC21,3:?CHR$([25]+F)
    7 IFA=G:LC19,3:?CHR$([25]+F);"┃";:IF[25]=G?CHR$([26]+F)ELSE?CHR$([35]+F)
    8 A=11:B=18:D=[18]:I=-1
    9 LCA,B:?CHR$((9-(D/16))*G/26+#ED):LCA,B+1:?CHR$((D&#F)+#F0):IFL<0RTNELSELRUN0,12
    

    ダウンロードURLは下記になります。
    solitaire_BOWL0.bin http://tagiyasoft.blog.jp/solitaire_BOWL0.bin solitaire_BOWL1.bin http://tagiyasoft.blog.jp/solitaire_BOWL1.bin
    ブラウザでD/LしてIchigoJamに転送する場合は、通信ソフトでバイナリ送信をしてください。
    (例:TeraTermの場合は、メニューの[ファイル]-[ファイル送信]で当該ファイルを送信します)

  • 参考ゲーム
    ソリティアボウリング

  1. BASICマガジンに投稿されたゲームを、ラクして遊びたい

    BASICマガジンに投稿されたゲームを遊ぶのには、プログラムを入力しなくてはならない。
    いわゆる「写経」である。
    それをなんとかラクにできないかを実験した。

  2. テストプログラム

    テストプログラムとして、
    • 適度な長さのプログラムであること
      (約1KBに収まっている)
    • 掲載誌のページをまたいでいないこと
      (画像の編集が不要)
    • IchigoJam固有のキャラクタやカタカナが使われていないこと
    等を条件に下記のプログラムを選んだ。

    掲載誌BASIC Magazine 43(電子工作マガジン2019年8月号別冊)
    プログラム名ファフニール
    作者あべのぶひで氏
    Fafnir1

  3. 方法

    以下の方法でOCR(光学的文字認識)を行う。

      Fafnir2
    1. 掲載されているプログラムをデジタルカメラで撮影
    2. 撮影した画像ファイルをgoogleドライブにアップロード
    3. googleドライブ上にて、"googleドキュメント"アプリで開く
    4. アプリが自動で文字認識をしてくれる
    5. 文字認識されたテキスト部分をコピーし、PCのテキストエディタ(メモ帳など)に貼り付け、必要に応じて保存する
    6. OCRしただけのテキストは改行がされていないので、行番号を目安に改行を挿入する
    7. IchigoJamに転送して実行
    8. エラーや不正動作があったら適宜修正
    9. バグが無くなるまで、7~8を繰り返す

  4. 結果

    OCRを使ったプログラムの文字認識結果は以下の通りである。

    総文字数953文字
    誤認識した文字数25文字
    誤認識率(文字単位)2.6% (=25文字/953文字)
    修正した行20,30,40,60,70,90,110,120,150,160,
    170,180,190,200,200,210,220,230
    エラー率(行単位)78.3% (=18行/23行)

  5. 考察

    まず、無修正でIchigoJamに転送したところ、"Out of memory”エラーが発生した。
    これは本来プログラム中には無いスペースが挿入されてしまったためである。
    そこで、全てのスペースを削除(テキストエディタで一括変換)した。
    これにより"Out of memory”エラーは発生しなくなったが、30行の”Fafnir Stage"のスペースまで削除されてしまった。
    このような固定文字列中のスペースについては一括変換を用いた削除では対応できないので課題が残る。

    画像をテキストに変換した時点で文法エラーを見つけていたが、今回の実験は「文字認識率」に重点を置いたので、あえて修正せずにIchigoJamに転送してエラーを発生させた。
    転送前に文法エラーを修正すれば、エラー発生率を下げられると考えられる。

    誤認識した文字を以下に示す。
    O(オー)0(ゼロ)
    0()
    C(
    E=
    N=
    上記の他に、文字抜けや、行末に不要文字が付加されるなどの誤認識があった。

    O(オー)と0(ゼロ)の誤認識により、"GOT0"となっている箇所がいくつかあった。
    これは予め検索することで、実行前に修正することが可能である。

    エラーメッセージが出ず、見つけにくいバグもあった。
    20行の後半、"COPY#800,1,200"である。
    これは文法エラーにならないため、バグの場所を見つけにくかった。

  6. 所感

    今回はあえてエラーの出なそうなプログラムを選んだ。
    前述した理由以外に、フォントの種類やフォントサイズも素材選びの対象としている。

    で、実際にOCRで写経がラクになったかと言うと、1KB程度のプログラムでは微妙である。
    ただ、ほぼ全ての誤認識が文法エラーだったので、全てを写経するよりはラクだったと思われる。

    「実際に手を動かした(写経した)方がプログラミングが身に付く」と言う意見もあると思うが、プログラムを読めないとバグ取りもできないはずである。
    本実験でバグ取りだけをやってみたが、このプログラムのおおまかな流れは把握することができた。
    100行の"W=-20"なんて「なるほど」と思う小技と思う。
    (まぁ、この手法が原因不明のバグの遠因だった訳だが(後述))

    なので「こういうやり方(OCR写経)があっても別にいいんじゃないの」というのが感想。

    さて、原因不明のバグなんですけど、"W=-20"は文字コードとして使われていて、例えば"LC0,0:?CHR$(-20)"とやると、ASCIIコード236のキャラクタが表示されます。(負数の下8bit)
    次に"?SCR(0,0)"とやると、"-20"という結果が表示されます。(IchigoJam AP v12243)
    ところが、このプログラムではSCR(x,y)の結果に236という数値が返るとして書かれています。
    で、70行のIF S=Tが偽となり、不正な動作(ロープを登れない)になってしまっていました。
    対策として100行を"S=SCR(X,Y)&#FF"とすることでようやく遊ぶことができました。
    このバグを見つけるのに結構時間を要したので、OCR写経がラクだったのかどうか、わからなくなってしまいましたのも事実(笑)

  7. 資料

    以下が、OCR直後、改行挿入後、デバッグ後の各プログラムである。

    OCR直後
    10 CLV:P=#93:T=#F2:U=#900 20 CLS:L=L+1:X=30: Y=1:V=22:D=6:COPY#800,1,200 30 POKEU, 6:COPYU+1,,31:COPY#BCO,U,32:LC10,23:?"Fafnir Stage";L; 40 FORI=0T025+L*9:POKE#940+RND(640), 0,6,6:NEXT 50 Q=L+2: FORI=1TOQ: GSB220:NEXT 60 WAIT5:K=INKEYO * (W>0):CLK 70 G=CK=29)*(X<31)-CK=28)*!!X:H=1:IF SET H=CK=31)-(K=30) 80 LC X,Y:?CHR$(S); : Y=Y+H*(SCR(X,Y+H)<>6):X=X+G*(SCR(X+G,Y)<>6) 90 BEEPN+ABS(X-Z)*3+1,7:IF N LC MN:?CHR$(T);:N=(N-1)*! SCR(M,N-1) 100 S=SCR(X,Y):LC X,Y:?CHR$(#ED);:IF S=#E8 OR S=#E9 W=-20:VIDEO2 110 IF SEP BEEP2:0=Q-1 120 S=S*(S=T):IF (K=32)*!N MEX:N=Y: SET 130 IF !Q BEEP3,60:WAIT90: GOTO20 140 IF X=Z AND Y=V WAIT90: BEEP200,80: GOTO230 150 IF !W VIDE01 160 W=W+1:IF W%3 GOT060 170 IF !RND(5)+! (Z%31)+! (V%22)+(W<1) J=!J:A=((X>Z)-(XV)-(Y6 ?CHR$(#E8+(DNT)); 200 E=U+Z+V*32:[C]=E:D=PEEKCE):IF D<>6 POKEE,#EC:IF DEP GSB220 210 GOT060 220 R=#960+RNDC608):IF PEEK(R) CONT ELSE POKER,P:RTN 230 LC12, 10:?"GAME OVER":IF INKEYO)=10 RUN ELSE CONT
    FEKTIC])=#E8 PORECE&+CD=T));TF DP GSB220


    改行挿入後
    10 CLV:P=#93:T=#F2:U=#900 
    20 CLS:L=L+1:X=30: Y=1:V=22:D=6:COPY#800,1,200 
    30 POKEU, 6:COPYU+1,,31:COPY#BCO,U,32:LC10,23:?"Fafnir Stage";L; 
    40 FORI=0T025+L*9:POKE#940+RND(640), 0,6,6:NEXT 
    50 Q=L+2: FORI=1TOQ: GSB220:NEXT 
    60 WAIT5:K=INKEYO * (W>0):CLK 
    70 G=CK=29)*(X<31)-CK=28)*!!X:H=1:IF SET H=CK=31)-(K=30) 
    80 LC X,Y:?CHR$(S); : Y=Y+H*(SCR(X,Y+H)<>6):X=X+G*(SCR(X+G,Y)<>6) 
    90 BEEPN+ABS(X-Z)*3+1,7:IF N LC MN:?CHR$(T);:N=(N-1)*! SCR(M,N-1) 
    100 S=SCR(X,Y):LC X,Y:?CHR$(#ED);:IF S=#E8 OR S=#E9 W=-20:VIDEO2 
    110 IF SEP BEEP2:0=Q-1 
    120 S=S*(S=T):IF (K=32)*!N MEX:N=Y: SET 
    130 IF !Q BEEP3,60:WAIT90: GOTO20 
    140 IF X=Z AND Y=V WAIT90: BEEP200,80: GOTO230 
    150 IF !W VIDE01 
    160 W=W+1:IF W%3 GOT060 
    170 IF !RND(5)+! (Z%31)+! (V%22)+(W<1) J=!J:A=((X>Z)-(XV)-(Y6 ?CHR$(#E8+(DNT)); 
    200 E=U+Z+V*32:[C]=E:D=PEEKCE):IF D<>6 POKEE,#EC:IF DEP GSB220 
    210 GOT060 
    220 R=#960+RNDC608):IF PEEK(R) CONT ELSE POKER,P:RTN 
    230 LC12, 10:?"GAME OVER":IF INKEYO)=10 RUN ELSE CONT
    
    FEKTIC])=#E8 PORECE&+CD=T));TF DP GSB220
    


    デバッグ後
    10 CLV:P=#93:T=#F2:U=#900
    20 CLS:L=L+1:X=30:Y=1:V=22:D=6:COPY#800,U,200
    30 POKEU,6:COPYU+1,U,31:COPY#BC0,U,32:LC10,23:?"FafnirStage";L;
    40 FORI=0TO25+L*9:POKE#940+RND(640),0,6,6:NEXT
    50 Q=L+2:FORI=1TOQ:GSB220:NEXT
    60 WAIT5:K=INKEY()*(W>0):CLK
    70 G=(K=29)*(X<31)-(K=28)*!!X:H=1:IFS=TH=(K=31)-(K=30)
    80 LCX,Y:?CHR$(S);:Y=Y+H*(SCR(X,Y+H)<>6):X=X+G*(SCR(X+G,Y)<>6)
    90 BEEPN+ABS(X-Z)*3+1,7:IFNLCM,N:?CHR$(T);:N=(N-1)*!SCR(M,N-1)
    100 S=SCR(X,Y):LCX,Y:?CHR$(#ED);:IFS=#E8ORS=#E9W=-20:VIDEO2
    110 IFS=PBEEP2:Q=Q-1
    120 S=S*(S=T):IF(K=32)*!NM=X:N=Y:S=T
    130 IF!QBEEP3,60:WAIT90:GOTO20
    140 IFX=ZANDY=VWAIT90:BEEP200,80:GOTO230
    150 IF!WVIDEO1
    160 W=W+1:IFW%3GOTO60
    170 IF!RND(5)+!(Z%31)+!(V%22)+(W<1)J=!J:A=((X>Z)-(XV)-(Y6?CHR$(#E8+(D=T));
    200 E=U+Z+V*32:[C]=E:D=PEEK(E):IFD<>6POKEE,#EC:IFD=PGSB220
    210 GOTO60
    220 R=#960+RND(608):IFPEEK(R)CONTELSEPOKER,P:RTN
    230 LC12,10:?"GAMEOVER":IFINKEY()=10RUNELSECONT


  • タイトル
    いちご雀(イチゴジャン)
    (電子工作マガジン2019年SPRING号 特別別冊附録マイコンBASICMagazine掲載)

  • 開発環境(動作確認機種)
    IchigojamBASIC1.3.1
    IchigojamBASIC1.2.6RPi
    IchigojamBASIC1.2.2ap

  • suzumejan
  • 内容
    すずめ雀」ゲームです。
    すずめ雀とは麻雀(マージャン)に似たゲームで、手持ちの6個の牌(ハイ)を3つ同じか3つ連続の組み合わせにするゲームです。

  • ルール
    ※上るには合計5点以上が必要

    ※必ず必要な組み合わせ
    3個連続:1点
    3個同じ:2点

    ※ボーナス
    アカハイ[イチゴマーク]:1個につき1点
    ドラ[ドラ表示と同じ数]:1個につき1点
    タンヤオ[2~8の数のみ使用]:1点
    チャンタ[1,9,発中を3個2組に必ず使用]:1点

    ※役満(他の役とは組み合わさりません)
    オールグリーン[♪マークのみ使用]:10点
    チンヤオ[1,9,発,中のみ使用]:15点
    スーパーレッド[イチゴマークのみ使用]:20点

    ※親制度、一荘戦のルールはありません。

  • 遊び方
    LRUN0 とする(もしくはプログラム0を RUN する)と画面上部にマイコンの牌(ハイ)、中央にプレイヤーの牌が表示されます。
    牌を1個取ると「ツモ」と表示され、次に「ステ?」と表示されるので、牌の下に表示されている番号(0~5)を入力して不要な牌を捨ててください。
    捨てた牌が中央に表示され、次にマイコンの順番になります。
    マイコンの捨てた牌で上れる場合「ロン?=0」と聞かれるので、上る場合は0、上らない場合は1を入力してください。
    ただし既に自分が牌で上れていた場合は「フリテン」と表示され、上ることはできずに自動的に牌が1個取られます。
    (例:2,3と持っていて、1を捨てていた場合、4でも上れない)
    牌を1個取った時に上ることができる場合は「ツモアガリ?=0」と表示されるので、上る場合は0、上らない場合は1を入力してください。
    持点は30点からスタートし、上った場合は上がり点を相手からもらえます。
    どちらかの持点が0点以下になるとゲーム終了です。
    持点が0点以下になる前に途中で終了しても持点は記憶されていますので RUN で再開できます。
    持点を戻したい場合は、 CLP:LRUN0 と入力してください。

  • プログラムのしくみ
    プログラムは4つのプログラムリストから成っています。
    プログラム0は入力などゲームの流れの部分。
    プログラム1は役の判定、表示をする部分。
    プログラム2は画面表示と牌を配る部分。
    プログラム3はキャラクタ定義。

    配列変数表
    [0]-[5]COM手牌
    [6]-[11]YOU手牌
    [12]-[17]役判定用
    [18]役判定(♪枚数)
    [19]役判定(苺枚数)
    [20]役判定(ドラ枚数)
    [21]COM捨位置
    [22]-[38]COM捨牌
    [39]YOU捨位置
    [40]-[56]YOU捨牌
    [57]次自摸位置
    [58]-[100]自摸山
    [101]ドラ牌
    [98]COM上がり点(役点数計算時に使用)
    [99]YOU上がり点(役点数計算時に使用)
    [0]COM持ち点(和了後に使用)
    [1]YOU持ち点(和了後に使用)

    牌のデータ形式
    0bit~4bit数字
    (1~9,#C(発),#F(中))
    5bit~6bit牌の一意
    7bit♪(緑牌
    8bit苺(赤牌
    1索=#11,#21,#31,#81
    2索=#42,#52,#62,#82
    #4C,#5C,#6C,#7C
    #8F,#9F,#AF,#BF
    bit000000000
    内容00000000

  • プログラムの具体的な入力方法
    プログラム0は保存番号0に、プログラム1は保存番号1に、プログラム2は保存番号2に、プログラム3は保存番号3に保存してください。
    プログラム3は麻雀牌のキャラクタ定義ですので、数字でプレイしたい人は入力不要で、その代わりにプログラム0の1行目を「1 lrun2,10」に変更してください。

  • プログラムの改造
    プログラム0の17行のCの値はマイコンの思考(試行?)回数で、現状は持点に連動させています。思考時間が遅いと感じる場合はCの値が小さくなるよう数式を変更してください。
    数字の1の牌は麻雀の慣例に従って鳥の絵にしてあります。別の絵にしたい場合はプログラム3の3行を変更してください。

  • 実行速度について
    AP版で普通に遊べる速度、RPi版ではちょっと遅いかなという感じ、IchigoJam版ではかなり待たされます。

  • その他
    すずめ雀は、すごろくやさんの商品および商品名です。
    発・中の文字は、美咲フォントを使用しました。

  • イチゴジャン(プログラム0)
    1 'スズメジャン0
    2 LRUN3
    3 FORI=0TO4:[6+I]=[100-I]:[100-I]=0:NEXT:[D]=A:L=2:R=4:LRUN2
    4 [6]=[[21]+21]:L=0:R=5:LRUN2
    5 FORK=6TO11:IF[K]=[[21]+21][K]=[6]:[6]=0
    6 NEXT:L=2:R=7:LRUN2
    7 H=[39]:IF[99]<5GOTO13ELSEINPUT"ロン?=0",K:IFKGOTO13
    8 [6]=[39+H]:L=0:R=9:LRUN2
    9 FORI=6TO11:IF[I]=[39+H]:[I]=[6]:[6]=0
    10 NEXT:IF[99]H=-1:GOTO13
    11 H=H-1:IFHGOTO8
    12 [6]=[[21]+21]:L=1:GOTO23
    13 [6]=[[D]+79]:[[D]+79]=0:[D]=[D]-1:L=0:R=14:LRUN2
    14 IFH<0?"フリテン"
    15 ?"ツモ":IF[99]>4INPUT"ツモアガリ?=0",K:IF!KL=1:GOTO23
    16 INPUT"ステ?",K:K=ABS(K%6):[[39]+40]=[6+K]:[6+K]=0:[39]=[39]+1:L=0:R=17:LRUN2
    17 C=30-PEEK(E):C=3+C*(C>0):IF[D]<0FORI=0TO5:[I]=[I+58]:NEXT:[39]=A:L=0:R=25:LRUN2
    18 FORI=0TO5
    19 J=RND(43)+58:IF[J]<1CONTELSE[I]=[J]:[J]=-[J]:NEXT:L=0:R=20:LRUN2
    20 FORI=58TO95:[I]=ABS([I]):NEXT:IF[98]>4L=9:GOTO23
    21 C=C-1:IFCGOTO18
    22 [[21]+22]=[63+[D]]:[63+[D]]=0:[21]=[21]+1:L=0:R=4:LRUN2
    23 R=24:LRUN2
    24 LC0,13:IFZ?">YOU";ELSE?">COM";
    25 IFR=25?"ナガレ":F=1ELSE?"アガリ<"
    26 LCA,21:IFFINPUT"ツヅケル?=0",K:IF!KRUN
    27 ?"COM:";[0],"YOU:";[1]
    

    イチゴジャン(プログラム1)
    1 'スズメジャン1
    2 LC0,14:IFL=2LRUN0,R
    3 Z=L<9:FORI=0TOZ:Q=0:LET[18],0,0,0:FORJ=0TO5:K=12+J:[K]=[I*6+J]%A:[K]=[K]-![K]:[20]=[20]+([K]%A=[101]%A):K=[I*6+J]:[18]=[18]+(K<#80&&K>#40):[B]=[B]+(K>#80):NEXT
    4 LC0,13:IFLL="オナジ +2":?CHR$(12)
    5 IF[12]=[13]&&[13]=[14]Q=Q+1002:?STR$(L):IF[12]=1||[12]=9||[12]=12||[12]=15Q=Q+10
    6 IF[15]=[A]&&[A]=[17]Q=Q+1002:?STR$(L):IF[15]=1||[15]=9||[15]=12||[15]=15Q=Q+10
    7 IFQ=2024Q=15:IFL?"チンヤオ =15":GOTOBELSEGOTOB
    8 IFLL="レンゾク +1"
    9 IF[12]+1=[13]&&[13]+1=[14]Q=Q+1001:?STR$(L):IF[12]=1||[14]=9Q=Q+10
    10 IF[15]+1=[A]&&[A]+1=[17]Q=Q+1001:?STR$(L):IF[15]=1||[17]=9Q=Q+10
    11 IFQ>2000Q=Q%1000ELSEQ=0:GOTOB
    12 IF[18]=6Q=10:IFL?"オールグリーン =10":GOTOBELSEGOTOB
    13 IF[B]=6Q=20:IFL?"スーパーレッド =20":GOTOBELSEGOTOB
    14 IFLL="タンヤオ +1"
    15 IFQ<10Q=Q%10+1:?STR$(L)ELSEIFQ<20Q=Q%10ELSEQ=Q%10+2:IFL?"チャンタ +2"
    16 IF[B]>0Q=Q+[B]:IFL?"アカハイ +";[B]
    17 IF[20]>0Q=Q+[20]:IFL?"ドラ +";[20]
    19 [98+I]=Q:IFL?"-------":?"テン:";Q:[I]=PEEK(E+I)+Q:POKEE+I,[I]:[!I]=60-[I]:POKEE+!I,[!I]
    20 NEXT:F=([0]*[1])>0:LRUN0,R
    

    イチゴジャン(プログラム2)
    1 'スズメジャン2
    2 CLS:FORM=0TO1:FORI=M*6TOM*6+4:FORJ=I+1TOM*6+5:IF[I]%A>[J]%AK=[I]:[I]=[J]:[J]=K
    3 NEXT:NEXT:I=M*6:IF[I]%A+1=[I+2]%A&&[I+2]%A+1=[I+4]%AK=[I+1]:[I+1]=[I+2]:[I+2]=[I+4]:[I+4]=[I+3]:[I+3]=K
    4 FORI=M*6TOM*6+5:GSB6:NEXT:K=M*18+22:FORG=KTOK+[K-1]:LCG-K+5,M*4+3:J=[G]:GSB8:LCG-K+5,M*4+4:?CHR$([G]%A+#E0);:NEXT:?CHR$(8):LC15,M*10:IFM?"YOU:";ELSE?"COM:";
    5 ?PEEK(E+M);"テン":NEXT:J=[101]:LC28,0:?"ドラ":LC29,2:?CHR$(J%16+#E0):LC29,1:GSB8:LRUN1
    6 IF!M&&L<9:LCI%6+5,1:?CHR$(6):LCI%6+5,0:?CHR$(6):RTN
    7 LCI%6+5,M*10+1:?CHR$([I]%A+#E0):LCI%6+5,M*10:J=[I]
    8 J=J/A:?CHR$(#EE*(J>3)+17*(J>7)):IFMLCI%6+5,13:?I-6
    9 RTN
    10 CLV:A=16:B=19:D=57:E=2032:POKE1912,0,A,-2,146,146,-2,A,A:POKE1888,0,118,170,68,186,124,40,206:I=1792:COPYI,!PEEK(I)*1408+384,80:COPYI,0,8:IFPEEK(E)+PEEK(E+1)!=60POKEE,30,30
    11 FORJ=0TO43:K=J%4:K=K*A+J/4+1+((J/4)&1)*64:IF!(J%4)&&J<36K=K%A+128
    12 [J]=K:IFJ>39[J-4]=[J-4]+2:[J]=[J]+132:IFJ>40[J-32]=(J*A+67)%128
    13 NEXT:FORI=0TO43
    14 J=RND(44)+58:IF[J]CONTELSE[J]=[I]:[I]=0:NEXT:LRUN0,3
    

    イチゴジャン(プログラム3)
    1 'スズメジャン3
    2 IF!PEEK(1792)LRUN2,10
    3 POKE1800,0,48,216,120,127,126,60,20
    4 POKE1808,0,16,16,16,0,16,16,16
    5 POKE1816,0,16,16,16,0,68,68,68
    6 POKE1824,0,68,68,68,0,68,68,68
    7 POKE1832,0,68,68,84,16,84,68,68
    8 POKE1840,0,84,84,84,0,84,84,84
    9 POKE1848,16,16,0,84,84,0,84,84
    10 POKE1856,0,84,108,68,0,68,108,84
    11 POKE1864,84,84,0,84,84,0,84,84
    12 COPY1792,0,8
    13 RUN
    

    ダウンロードURLは下記になります。
    suzume0.bin http://tagiyasoft.blog.jp/suzume0.bin
    suzume1.bin http://tagiyasoft.blog.jp/suzume1.bin
    suzume2.bin http://tagiyasoft.blog.jp/suzume2.bin
    suzume3.bin http://tagiyasoft.blog.jp/suzume3.bin

    ブラウザでD/LしてIchigoJamに転送する場合は、通信ソフトでバイナリ送信をしてください。
    (例:TeraTermの場合は、メニューの[ファイル]-[ファイル送信]で当該ファイルを送信します)

  • 参考ゲーム
    すずめ雀すごろくや

↑このページのトップヘ