2012年05月14日投稿 / 投稿者 : 名無しさん / タグ : 投稿プログラム ゲーム QRコード mkII専用
麻雀牌を使うあのパズルゲームです。
権利関係でサン電子さんから怒られたら消してください>管理人さん
さすがに、もう大丈夫だとは思いますが。
2012-05-25 20:30 下記バグ修正しました。PRGのQRとリストを更新しました。ついでに面選択時キーリピートつけました。
2012-05-21 22:13 バグ報告。14, 20, 33, 52, 64, 81面が開始できません。後日修正します。すみません。
2012-05-19 22:43 初期配置ルーチンを変更。どの面も100%解けるようになりました(汗。PRGのQRとリストを更新
2012-05-15 01:53 QR、リスト更新
2012-05-14 23:00 投稿
各面の配置は乱数で決めています。
ただ、同じ配置を再現できるように乱数ルーチンは自前で用意しました。
しかし、乱数で配置を決めるとほとんど解けないような面ばかりできてしまったので、
少しだけハマリが少ないように微調整しています。
それでも結構難しいです・・・(汗
一応6面までは解けることを確認しましたが、初見だと負けると思います。
私が下手なだけかもしれませんが(笑)
配置を決めるルーチンを変更しました。どの面も100%解けます。
(2chのプチコンスレで素晴らしい方法を教えて下さった>>28さんthx!)
描画は全部GRPです。
GCOPYが予想以上に速かったので選択/消去する度に下から全部再描画してます。
7frameで完了するので良しとしました。
プチコンmkII 向けの QR コードです。
- CLEAR:ACLS
- SYSBEEP=FALSE
- VISIBLE 1,1,1,1,1,1
- PNLTYPE ”OFF”
- CHRINIT ”BGU0”
- BGPAGE 1:BGCLR 0
- BGFILL 1,0,0,31,23,10,0,0,0
- GPAGE 0,3,3:GCLS 0:GPRIO 2
- GRPDRAW=1
- GPAGE 1,GRPDRAW,GRPDRAW XOR 1:GCLS 0:GPRIO 2
- LOAD ”GRP2:MJSOL”,FALSE
- GOSUB @PAL_SET
- DIM MEN0(5,17*10)
- DIM MEN1(5,17*10)
- DIM MEN2(5,17*10)
- DIM U(37)
- GOSUB @MEN_INIT
- STAGE=1
- @FROM_TITLE
- GOSUB @TITLE
- S=STAGE
- IF S==14 OR S==20 OR S==33 THEN S=S+100
- IF S==52 OR S==64 OR S==81 THEN S=S+100
- A=S:GOSUB @RANDOMIZE
- GOSUB @MEN_INIT3
- GPAGE 1,GRPDRAW,GRPDRAW XOR 1
- GOSUB @REDRAW
- LOCATE 10,13:PRINT ” Б GIVE UP”
- ’−−−−−−−−−−−−−−−−−−−−−−
- MODE=0
- DEL_COUNT=0
- TIMER=0
- TIME0$=TIME$
- SELN0=0
- @MAIN_LOOP
- GOSUB @TCH_CHECK
- IF !RET THEN @MAIN_LOOP_0
- IF !(MODE==0) THEN @MAIN_LOOP_1
- IF SELZ==9 THEN @MAIN_LOOP_0
- SELZ0=SELZ
- SELY0=SELY
- SELX0=SELX
- SELN0=MEN1(SELZ,SELY*17+SELX)
- MODE=1
- BEEP 9 ’ センタク
- GOTO @MAIN_LOOP_2
- @MAIN_LOOP_1
- ’ MODE==1
- IF !(SELZ==9) THEN @MAIN_LOOP_3
- MODE=0
- SELZ0=9
- BEEP 48 ’キャンセル
- GOTO @MAIN_LOOP_2
- @MAIN_LOOP_3
- ’ SELZ!=9
- SELN1=MEN1(SELZ,SELY*17+SELX)
- IF SELN0!=SELN1 THEN @MAIN_LOOP_4
- IF SELZ0==SELZ AND SELY0==SELY AND SELX0==SELX THEN @MAIN_LOOP_4
- ’ イッチ
- MEN1(SELZ0,SELY0*17+SELX0)=0
- MEN1(SELZ,SELY*17+SELX)=0
- MODE=0
- SELZ0=9
- BEEP 60 ’ケス
- DEL_COUNT=DEL_COUNT+1
- GOTO @MAIN_LOOP_2
- @MAIN_LOOP_4
- BEEP 48 ’キャンセル
- MODE=0
- SELZ0=9
- @MAIN_LOOP_2
- GOSUB @REDRAW
- PALANIM_C=0:PALANIM_W=0
- @MAIN_LOOP_0
- GOSUB @PALANIM
- LOCATE 12,20
- PRINT RIGHT$(” ”+STR$(FLOOR(TIMER/60)),3);”:”;RIGHT$(”0”+STR$(TIMER%60),2)
- IF TIME0$!=TIME$ THEN TIME0$=TIME$:TIMER=TIMER+1
- VSYNC 1
- IF DEL_COUNT==72 THEN @FANFARE
- IF BUTTON(2) AND 32 THEN BEEP 13:GOTO @FROM_TITLE
- GOTO @MAIN_LOOP
- ’−−−−−−−−−−−−−−−−−−−−−−
- @FANFARE
- BGMPLAY 5
- @FANFARE_0
- VSYNC 1
- IF BGMCHK() GOTO @FANFARE_0
- STAGE=STAGE+1
- GOTO @FROM_TITLE
- ’−−−−−−−−−−−−−−−−−−−−−−
- @TCH_CHECK
- RET=FALSE
- IF !(TCHST AND TCHTIME==1) THEN RETURN
- XX=TCHX:YY=TCHY
- RET=TRUE
- F=FALSE
- SELZ=9
- ’−−− Z=4 −−−
- X=FLOOR((XX+10+12−10)/16)
- Y=FLOOR((YY+4+12−10)/20)
- IF MEN1(4,Y*17+X)==0 THEN @TCH_CHK_4
- SELZ=4:SELY=Y:SELX=X
- RETURN
- @TCH_CHK_4
- ’−−− Z=3 −−−
- X=FLOOR((XX+10+12)/16)
- Y=FLOOR((YY+4+12)/20)
- IF Y>8 THEN @TCH_CHK_3
- IF MEN1(3,Y*17+X)==0 THEN @TCH_CHK_3
- IF MEN1(4,4*17+7)==0 THEN F=TRUE
- IF F THEN SELZ=3:SELY=Y:SELX=X
- RETURN
- @TCH_CHK_3
- ’−−− Z=2 −−−
- X=FLOOR((XX+10+8)/16)
- Y=FLOOR((YY+4+8)/20)
- IF MEN1(2,Y*17+X)==0 THEN @TCH_CHK_2
- IF MEN1(2,Y*17+X+1)==0 THEN F=TRUE
- IF MEN1(2,Y*17+X−1)==0 THEN F=TRUE
- IF F THEN SELZ=2:SELY=Y:SELX=X
- RETURN
- @TCH_CHK_2
- ’−−− Z=1 −−−
- X=FLOOR((XX+10+4)/16)
- Y=FLOOR((YY+4+4)/20)
- IF MEN1(1,Y*17+X)==0 THEN @TCH_CHK_1
- IF MEN1(1,Y*17+X+1)==0 THEN F=TRUE
- IF MEN1(1,Y*17+X−1)==0 THEN F=TRUE
- IF F THEN SELZ=1:SELY=Y:SELX=X
- RETURN
- @TCH_CHK_1
- ’−−− Z=0 −−−
- X=FLOOR((XX+10)/16)
- IF X==1 THEN YY=YY−10
- IF X>=14 THEN YY=YY+10
- Y=FLOOR((YY+4)/20)
- IF Y>8 OR Y<0 THEN @TCH_CHK_0
- IF MEN1(0,Y*17+X)==0 THEN @TCH_CHK_0
- IF X==2 AND (Y==4 OR Y==5) THEN @TCH_CHK_01
- IF X==14 THEN @TCH_CHK_02
- IF X==13 AND (Y==4 OR Y==5) THEN @TCH_CHK_03
- IF MEN1(0,Y*17+X+1)==0 THEN F=TRUE
- IF MEN1(0,Y*17+X−1)==0 THEN F=TRUE
- GOTO @TCH_CHK_04
- @TCH_CHK_01
- IF MEN1(0,Y*17+X+1)==0 THEN F=TRUE
- IF MEN1(0,4*17+1)==0 THEN F=TRUE
- GOTO @TCH_CHK_04
- @TCH_CHK_02
- IF MEN1(0,Y*17+X+1)==0 THEN F=TRUE
- IF (MEN1(0,4*17+13)==0 AND MEN1(0,5*17+13)==0) THEN F=TRUE
- GOTO @TCH_CHK_04
- @TCH_CHK_03
- IF MEN1(0,5*17+X+1)==0 THEN F=TRUE
- IF MEN1(0,Y*17+X−1)==0 THEN F=TRUE
- @TCH_CHK_04
- IF F THEN SELZ=0:SELY=Y:SELX=X
- @TCH_CHK_0
- RETURN
- ’−−−−−−−−−−−−−−−−−−−−−−
- @PALANIM
- PALANIM_W=PALANIM_W+1
- IF PALANIM_W>5 THEN PALANIM_W=0
- IF PALANIM_W!=1 THEN RETURN
- P=16+PALANIM_C
- PALANIM_C=PALANIM_C+1
- IF PALANIM_C>5 THEN PALANIM_C=0
- COLREAD(”GRP”,P),R,G,B
- C$=HEX$(R,2)+HEX$(G,2)+HEX$(B,2)
- COLSET ”GRP”,15,C$
- RETURN
- ’−−−−−−−−−−−−−−−−−−−−−−
- @PUT_PAI
- C0=C0−1
- Y3=(C0/9 AND &HFF)*24+C1
- X3=(C0%9)*20
- Y4=Y1
- IF X0<2 THEN Y4=Y4+10
- IF X0>13 THEN Y4=Y4−10
- GCOPY 2,X3,Y3,X3+19,Y3+23,X1,Y4,FALSE
- RETURN
- ’−−−−−−−−−−−−−−−−−−−−−−
- @MEN_INIT
- GPAGE 1,2,1
- FOR Z=0 TO 4
- FOR Y=0 TO 9
- FOR X=0 TO 16
- Y0=10*Z+Y
- X0=X+192
- C=GSPOIT(X0,Y0)
- IF C!=1 THEN @ME_IN_0
- MEN0(Z,Y*17+X)=1
- @ME_IN_0
- NEXT
- NEXT
- NEXT
- MEN_NUM=1
- RETURN
- ’−−−−−−−−−−−−−−−−−−−−−−
- @MEN_INIT2
- FOR I=1 TO 36
- U(I)=0
- NEXT
- A=36
- FOR Z=0 TO 4
- FOR Y=0 TO 9
- FOR X=0 TO 16
- IF MEN0(Z,Y*17+X)==0 THEN @ME_IN2_0
- @ME_IN2_1
- GOSUB @RAND
- R=R+1
- IF U(R)==4 GOTO @ME_IN2_1
- IF Z>2 THEN @ME_IN2_3
- ’ オナシ゛ ハイ ハ トナリ キンシ
- IF MEN1(Z,Y*17+X−1)==R THEN @ME_IN2_1
- @ME_IN2_3
- IF Z==0 OR Z>=3 THEN @ME_IN2_2
- ’ オナシ゛ ハイ ノ カサナリ キンシ
- FOR ZZ=0 TO Z−1
- IF MEN1(ZZ,Y*17+X)==R THEN @ME_IN2_1
- NEXT
- @ME_IN2_2
- MEN1(Z,Y*17+X)=R
- U(R)=U(R)+1
- @ME_IN2_0
- NEXT
- NEXT
- NEXT
- RETURN
- ’−−−−−−−−−−−−−−−−−−−−−−
- @MEN_INIT3
- ’−−−−−
- FOR I=1 TO 36
- U(I)=0
- NEXT
- ’−−−−−
- FOR Z=0 TO 3
- FOR Y=1 TO 8
- FOR X=2 TO 13
- N=0
- IF MEN0(Z,Y*17+X)==1 THEN N=99
- MEN2(Z,Y*17+X)=N
- NEXT
- NEXT
- NEXT
- MEN2(0,4*17+1)=99
- MEN2(0,5*17+14)=99
- MEN2(0,5*17+15)=99
- MEN2(4,4*17+7)=99
- ’−−−−−
- FOR Z=0 TO 2
- FOR Y=1 TO 8
- FOR X=2 TO 13
- IF MEN2(Z,Y*17+X)==0 THEN @ME_IN3_01
- N=99
- IF MEN2(Z,Y*17+X−1)==0 THEN N=98
- IF MEN2(Z,Y*17+X+1)==0 THEN N=98
- MEN2(Z,Y*17+X)=N
- @ME_IN3_01
- NEXT
- NEXT
- NEXT
- MEN2(0,4*17+1)=98
- MEN2(0,5*17+2)=99
- MEN2(0,5*17+14)=99
- MEN2(0,4*17+13)=99
- MEN2(0,5*17+15)=98
- MEN2(4,4*17+7)=98
- ’−−−−−
- COUNT=0
- @ME_IN3_00
- A=36:GOSUB @RAND:R=R+1
- IF U(R)==4 THEN @ME_IN3_00
- U(R)=U(R)+2
- RR=R
- ’−−−−
- @ME_IN3_10
- A=8:GOSUB @RAND:Y0=R+1
- A=15:GOSUB @RAND:X0=R+1
- Z0=4
- @ME_IN3_12
- N=MEN2(Z0,Y0*17+X0)
- IF N==98 THEN @ME_IN3_11
- IF Z0>0 THEN Z0=Z0−1:GOTO @ME_IN3_12
- GOTO @ME_IN3_10
- @ME_IN3_11
- MEN1(Z0,Y0*17+X0)=RR
- ’−−
- @ME_IN3_20
- A=8:GOSUB @RAND:Y1=R+1
- A=15:GOSUB @RAND:X1=R+1
- IF Y0==Y1 AND X0==X1 THEN @ME_IN3_20
- Z1=4
- @ME_IN3_22
- N=MEN2(Z1,Y1*17+X1)
- IF N==98 THEN @ME_IN3_21
- IF Z1>0 THEN Z1=Z1−1:GOTO @ME_IN3_22
- GOTO @ME_IN3_20
- @ME_IN3_21
- MEN1(Z1,Y1*17+X1)=RR
- ’−−
- FOR I=0 TO 1
- ZZ=Z0:YY=Y0:XX=X0
- IF I==1 THEN ZZ=Z1:YY=Y1:XX=X1
- MEN2(ZZ,YY*17+XX)=0
- IF ZZ==0 THEN @ME_IN3_30
- IF ZZ!=4 THEN @ME_IN3_31
- ’ Z==4
- MEN2(3,4*17+7)=98
- MEN2(3,4*17+8)=98
- MEN2(3,5*17+7)=98
- MEN2(3,5*17+8)=98
- GOTO @ME_IN3_40
- @ME_IN3_31
- ’ Z==1,2,3
- N=99
- IF MEN2(ZZ−1,YY*17+XX−1)==0 THEN N=98
- IF MEN2(ZZ−1,YY*17+XX+1)==0 THEN N=98
- MEN2(ZZ−1,YY*17+XX)=N
- @ME_IN3_30
- IF MEN2(ZZ,YY*17+XX−1)==99 AND MEN2(ZZ+1,YY*17+XX−1)==0 THEN MEN2(ZZ,YY*17+XX−1)=98
- IF MEN2(ZZ,YY*17+XX+1)==99 AND MEN2(ZZ+1,YY*17+XX+1)==0 THEN MEN2(ZZ,YY*17+XX+1)=98
- IF XX==1 THEN MEN2(0,5*17+2)=98
- IF XX==14 THEN MEN2(0,4*17+13)=98
- ’−
- IF XX!=13 THEN @ME_IN3_40
- IF MEN2(0,5*17+14)!=99 THEN @ME_IN3_40
- IF YY!=4 AND YY!=5 THEN @ME_IN3_40
- IF MEN2(0,4*17+13)==0 AND MEN2(0,5*17+13)==0 THEN MEN2(0,5*17+14)=98
- @ME_IN3_40
- NEXT
- COUNT=COUNT+2
- IF COUNT<36*4 THEN @ME_IN3_00
- RETURN
- ’−−−−−−−−−−−−−−−−−−−−−−
- @REDRAW
- GCLS
- FOR Z0=0 TO 3
- IF Z0==0 THEN SX=1:SY=1:EX=15:EY=8
- IF Z0==1 THEN SX=5:SY=2:EX=10:EY=7
- IF Z0==2 THEN SX=6:SY=3:EX=9:EY=6
- IF Z0==3 THEN SX=7:SY=4:EX=8:EY=5
- Y1=−4−Z0*4+SY*20
- FOR Y0=SY TO EY
- X1=−10−Z0*4+SX*16
- FOR X0=SX TO EX
- C1=0
- IF Z0==SELZ0 AND Y0==SELY0 AND X0==SELX0 THEN C1=96
- C0=MEN1(Z0,Y0*17+X0)
- IF C0!=0 THEN GOSUB @PUT_PAI
- X1=X1+16
- NEXT X0
- Y1=Y1+20
- NEXT Y0
- NEXT Z0
- Z0=4:Y0=4:X0=7
- C1=0
- IF Z0==SELZ0 AND Y0==SELY0 AND X0==SELX0 THEN C1=96
- C0=MEN1(Z0,Y0*17+X0)
- IF C0==0 THEN @REDRAW_0
- X1=−10−Z0*4+X0*16+10
- Y1=−4−Z0*4+Y0*20+10
- GOSUB @PUT_PAI
- @REDRAW_0
- GRPDRAW=GRPDRAW XOR 1
- GPAGE 1,GRPDRAW,GRPDRAW XOR 1
- RETURN
- ’−−−−−−−−−−−−−−−−−−−−−−
- @TIME_COUNT
- IF X0==1 THEN @TI_CO_0
- TIME_COUNTER=MAINCNTL
- RETURN
- @TI_CO_0
- X0=MAINCNTL−TIME_COUNTER
- RETURN
- ’−−−−−−−−−−−−−−−−−−−−−−
- @RANDOMIZE
- RAND_X=A
- RETURN
- ’−−−−−−−−−−−−−−−−−−−−−−
- @RAND
- RAND_X=(RAND_X*31+1235) AND 16383
- R=FLOOR((RAND_X/16384)*A)
- RETURN
- ’−−−−−−−−−−−−−−−−−−−−−−
- @PAL_SET
- RESTORE @PAL_DATA
- FOR I=0 TO 23
- READ C$
- COLSET ”GRP”,I,C$
- NEXT
- RETURN
- @PAL_DATA
- DATA ”000000”,”DEA673”,”E7B67B”,”BDC7CE”
- DATA ”CED7DE”,”FFFFFF”,”000000”,”FF0000”
- DATA ”00AA00”,”3982C6”,”000000”,”000000”
- DATA ”000000”,”000000”,”000000”,”74BCFF”
- DATA ”74BCFF”,”A2D2FF”,”D0E8FF”,”FFFFFF”
- DATA ”D1E9FF”,”A3D3FF”,”74BCFF”,”000000”
- ’−−−−−−−−−−−−−−−−−−−−−−
- @TITLE
- CLS
- X=10
- @TITLE_0
- S$=RIGHT$(” ”+STR$(STAGE),2)
- LOCATE X, 8:PRINT ” ↑”
- LOCATE X, 9:PRINT ” STAGE= ← ”;S$;” →”
- LOCATE X,10:PRINT ” ↓”
- LOCATE X,11:PRINT ””
- LOCATE X,12:PRINT ” А START”
- VSYNC 1
- GOSUB @KEYREPEAT
- IF KEYREP AND 1 THEN STAGE=STAGE+10
- IF KEYREP AND 2 THEN STAGE=STAGE−10
- IF KEYREP AND 4 THEN STAGE=STAGE−1
- IF KEYREP AND 8 THEN STAGE=STAGE+1
- IF STAGE<0 THEN STAGE=100+STAGE
- IF STAGE>99 THEN STAGE=STAGE−100
- IF BUTTON(2) AND 16 THEN BEEP 7:GOTO @TITLE_1
- GOTO @TITLE_0
- @TITLE_1
- CLS
- LOCATE X, 9:PRINT ” STAGE= ”;S$;” ”
- RETURN
- ’−−−−−−−−−−−−−−−−−−−−−−
- @KEYREPEAT
- KEYREP=0
- K=BUTTON() AND 15
- IF K!=KEYREP_P THEN @KEYREP_1 ELSE @KEYREP_2
- @KEYREP_1
- KEYREP_P=K
- KEYREP_C=0
- KEYREP_F=TRUE
- KEYREP=BTRIG()
- RETURN
- @KEYREP_2
- IF K==0 THEN RETURN
- KEYREP_C=KEYREP_C+1
- C=6
- IF KEYREP_F THEN C=20
- IF KEYREP_C<C THEN RETURN
- KEYREP=K
- KEYREP_C=0
- KEYREP_F=FALSE
- RETURN
- ’−−−−−−−−−−−−−−−−−−−−−−
- @LOOP
- VSYNC 1
- GOTO @LOOP
- ’−−−−−−−−−−−−−−−−−−−−−−
- ’−−−−−−−−−−−−−−−−−−−−−−
- ’−−−−−−−−−−−−−−−−−−−−−−
この作品に対するコメントがあれば一言どうぞ。
表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.153 秒 | このページの最終更新 : 2022/09/20 (火) 12:44:19 (565d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30