• タイトル
    ソリティアゴルフ (電子工作マガジン2016年SPRING号掲載)

  • 内容
    ソリティアゴルフというトランプゲームです。
    山札に場札を重ねていき、全ての場札を山札に重ねるゲームです。

  • solitairegolf

  • 遊び方
    表向きに置かれた山札よりも数字が1つ大きいか小さいカードを重ねていきます。
    重ねられるのは各列の最下段にあるカードのみです。
    Jは11、Qは12、Kは13と表示されます。
    AとKは繋がっています。(例:K-A-2や、2-A-Kのように繋げられる)
    重ねられるカードがなくなったら山札から1枚引いて表向きに置き、再び場札のカードを重ねていきます。
    場のカードと山札がすべて無くなったらゲームクリアです。
    場にカードが残った状態で山札が無くなってしまったら失敗です。
    ゲームが終了すると、かかった時間が表示されます。

  • 操作方法
    カード列上部にある[0]~[6]の数字を入力すると、その列の最下段のカードが山札に重ねられます。
    [-1]を入力すると、新たに山札から1枚めくられ表向きに置かれます。
    残りのカードが0枚以下になるとゲーム終了です。

  • プログラムのしくみ

  • 各行の処理
    1行コメント(ファイル名)
    2行カードをランダムに配列に収める
    3~4行場札を並べて表示
    5行山札表示
    6行ゲーム終了判定
    7行移動するカードを入力
    8行列の最下段サーチ
    9行場札±1のカードか判定
    10行場札から山札にカード移動
    11~13行カードの枠線描画
    14行入力待ちに戻る
    20行山札の枠線描画
    21行カードのマーク、数字、枠線描画

    変数表
    Iループ用
    J各種計算用一時変数
    Xカードのインデックス
    Y山札のインデックス
    T山札の数
    C選んだ場札の列
    B選んだ場札の数
    K選んだ場札のインデックス
    X動かした場札のインデックス
    Nカードの数字
    R描画したカードの数字
    Uカード描画X座標
    Vカード描画Y座標
    Pカード下部描画X座標
    Qカード下部描画Y座標

    [0]~[51]の配列に、ランダムに0~51の数字(カード)が収まります。
    カードは、0~12がスペード、13~25がハート、26~38がクラブ、39~51がダイヤになります。
    配列に入っている数を13で割った商がマークになり、余りが数字となります。

  • プログラムの具体的な入力方法
    プログラムリスト中の「□」はスペース1個です。(例:「□□□」はスペース3個)
    カードの枠線は「左ALT+SHIFT+キー」で入力します。
    ━ 左ALT+SHIFT+H
    ┃ 左ALT+SHIFT+I
    ┏ 左ALT+SHIFT+O(オー)
    ┓ 左ALT+SHIFT+P
    ┗ 左ALT+SHIFT+Q
    ┛ 左ALT+SHIFT+R

  • プログラムの改造
    ルールによってはAとKが繋がらないルールもあり、その場合は難易度が上がります。
    AとKを繋がらないルールにするには、9行めのIF文の判別式を下記のように変更します。
    ABS(N-T)%11<>1 → ABS(N-T)<>1

ソリティアゴルフ
1 'ソリティアゴルフ
2 CLV:CLT:Y=35:FORI=0TO51:J=RND(52):IF[J]I=I-1ELSE[J]=I:CLS:?I
3 NEXT:CLS:FORI=0TO34:U=I/5*4:V=(6-(I%5))*2-2:X=[I]:GOSUB21:IFI<7LCI*4+1,0:?"[";I;"]":LCI*4,12:?"┃":LCI*4,13:?"┗━━━":IFI<5LC28,I*2+3:?"┃"
4 NEXT:LC28,12:?"┃":LC28,13:?"┛":LC0,16:?"[-1]":[52]=[51]
5 LC8,18:?CHR$(12),"ノコリ ";51-Y;"マイ":X=[Y]:U=0:V=18:GOSUB20:?"□":T=R
6 IFY=52LC10,22:?"TIME=";TICK()/60;"sec":LC10,20:IFZ=35?"Congratulations!":ENDELSE?"GAME OVER.":END
7 LC4,19:?"┃":LC10,20:?CHR$(24);:INPUT"CARD=",C:IFC<0Y=Y+1:GOTO5
8 FORI=0TO4:K=(C%7)*5+I:B=[K]:IFB>=0:I=5:N=B%13+1ELSEN=T
9 NEXT:LC10,22:?CHR$(24);:IFABS(N-T)%11<>1?"ウゴカセマセン":GOTO7
10 U=0:V=18:X=B:GOSUB20:T=N:[Y]=[K]:[K]=-1:Z=Z+1:?"□":P=K/5*4:Q=(6-(K%5))*2:LCP,Q-2:?"┃□□□":LCP,Q-1:?"┗━━━":LCP,Q:?"┃□□□":LCP,Q+1:?"┃□□□"
11 IFC>0IF[K-5]>=0GOTO13
12 LCP,Q:?"□":LCP,Q+1:?"□"
13 IFC=6OR[K+5]<0LCP+4,Q-2:?"┃":LCP+4,Q:?"□":LCP+4,Q+1:?"□"
14 GOTO6
20 LCU+4,V+1:?"┃":LCU,V+2:?"┃□□□┃":LCU,V+3:?"┗━━━┛"
21 R=X%13+1:LCU,V:?"┏━━━┓":LCU,V+1:?"┃";CHR$(X/13+228);R;:RETURN

MixJuiceでのダウンロードURLは下記になります。
ソリティアゴルフ http://tagiyasoft.blog.jp/solitaire_golf.bin

以下のように入力してD/Lしてください。
NEW
? MJ GET tagiyasoft.blog.jp/solitaire_golf.bin

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