Enjoy programming more!
Kidspod is a post site which supports young programmers.
First step to join us.
Register as a member
For members

2023/02/17 21:46:28

MixJuice GET URL : kidspod.club/mj/2183

アクロス(ピクロス風パズル)

■説明
ピクロス風のパズルですが、ルールはピクロスとは違います。
8x8のマスに絵が隠されています。
ヒントを参考に盤を塗りながら、正しい絵を見つけてください。
塗った所の数字を足したものがヒントになっています。
全ての現在値が全てのヒントと一致すると自動的にクリアします。
添付の画像を参考にしてください。

■画面構成
 12345678
1         横の合計(ヒント) 横の合計(現在値)








 縦の合計(ヒント)

 縦の合計(現在値)

■操作
カーソル移動:← → ↑ ↓
塗る:C
しるしをつける:X
消す:Z

※しるしはメモです。合計に加算されません。

■面の構成
全部で28面用意しています。各面はキャラクターコードを読み込んで作成しています。
パラメータを変更すると用意した面以外もチャレンジできます。
10行にあるS=#720の所が最初に読みだすキャラクターコードのアドレスです。
S=0にするとキャラクターコード0の空白からスタートし、全部で256面になります。
S=#30*8にすると数字の0から始まります。
S=#41*8にするとアルファベットのAから始まります。
S=#B1*8にするとカタカナのアから始まります。

キャラクターコード表はこちら
https://15jamrecipe.jimdofree.com/%E3%83%84%E3%83%BC%E3%83%AB/%E3%82%AD%E3%83%A3%E3%83%A9%E3%82%AF%E3%82%BF%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%89%E4%B8%80%E8%A6%A7/

■ひみつ
デバッグ用に面セレクトとカンニングの機能を作りました。
容量に余裕があったので、機能は残してあります。
ひみつのボタンを押すと使えます。ボタンは探してみてネ。

■変数
A WORK
C チェック用
I FOR
J FOR
K INKEY()
M 面数-1
S キャラクターコードを読みだす最初のアドレス
X カーソルX座標
Y カーソルY座標
[0]~[7]横の合計(現在値)
[8]~[15]縦の合計(現在値)
[16]~[23]横の合計(ヒント)
[24]~[31]縦の合計(ヒント)

■プログラム
10 クリア、初期値設定
20-40 面描写
50 カーソル移動処理
60 Zが押された処理
70 Xが押された処理
80 Cが押された処理
85 ?が押されたとき面セレクト
87 ?が押されたときカンニング
90 クリア処理
100 50へ戻る
110-120 合計値計算、クリアチェック計算
130 全面クリア処理

  • 1
  • 2
  • 1
  • 2

SOURCE CODE

10 CLV:CLP:S=#720
20 @A:CLS:FORI=0TO31:[I]=0:NEXT:FORI=0TO7:LCI+1,0:?I+1:LC0,I+1:?I+1:A=PEEK(S+M*8+I):FORJ=0TO7:[I+16]=[I+16]+A>>(7-J)&1*(J+1):[J+24]=[J+24]+A>>(7-J)&1*(I+1):NEXT:NEXT
30 FORJ=0TO7:LC10,J+1:?[J+16]:IF[J+24]>9LCJ+1,10:?[J+24]/10
40 LCJ+1,11:?[J+24]%10:X=J:Y=J:GSB@C:NEXT:X=0:Y=0:LC16,0:?M+1;"メン"
50 @B:K=INKEY():LCX+1,Y+1,1:X=(X-(K=28)+(K=29)+8)%8:Y=(Y-(K=30)+(K=31)+8)%8:C=16
60 IFK=90||K=122LCX+1,Y+1:?" ":GSB@C
70 IFK=88||K=120LCX+1,Y+1:?"・":GSB@C
80 IFK=67||K=99LCX+1,Y+1:?CHR$(2):GSB@C
85 IFK=127LC0,16:?"(1-";(#800-S)/8;")";:INPUTM:M=M-1:GOTO@A
87 IFK=8FORI=0TO7:FORJ=0TO7:LCJ+1,I+1:?PEEK(S+M*8+I)>>(7-J)&1:NEXT:NEXT
90 IF!CLC0,16:?"CLEAR!":WAIT120:M=M+1:IFS+M*8>#7FFGOTO@EELSEGOTO@A
100 GOTO@B
110 @C:[X+8]=0:[Y]=0:FORI=0TO7:[X+8]=[X+8]+(SCR(X+1,I+1)=2)*(I+1):[Y]=[Y]+(SCR(I+1,Y+1)=2)*(I+1):NEXT:LC13,Y+1:?[Y];" ":LCX+1,13:IF[X+8]>9?[X+8]/10ELSE?" "
120 LCX+1,14:?[X+8]%10:FORI=0TO15:C=C-([I]=[I+16]):NEXT:RTN
130 @E:LC0,16:?"ALL CLEAR!

COMMENT