2019年 10月 18日
前回のイベントウインドウを使って、SAVE、LOADを表示して操作する画面を作る。
SAVEとLOADのボタンは次の通り。
SAVEボタンを押す。
セーブ箇所は表示の関係で 3つ、下のオートセーブはターン終了時に自動でセーブされる場所で、この画面ではセーブできない。
文字は後でグラソフトで描く事にする。
1番を押してみる。
ハイ、イイエはオートセーブの場所に表示する。
ハイを押すと
セーブしてセーブしたと表示される。
ロードを押す。
見た感じ変わらないので、後で画面のどこかに SAVE、LOADの表示を作ろうと思う。
1番を押してみる。
ハイを押すとロードする。
ロードの場合オートセーブからもロードできる。
それではソースを。
*save trn1=0 dtf1=0 : exist "gm_data1.dat" if strsize!-1 { dtf1=1 : dim dtn2,strsize bload "gm_data1.dat",dtn2 trn1=dtn2(3) } trn2=0 dtf2=0 : exist "gm_data2.dat" if strsize!-1 { dtf2=1 : dim dtn2,strsize bload "gm_data2.dat",dtn2 trn2=dtn2(3) } trn3=0 dtf3=0 : exist "gm_data3.dat" if strsize!-1 { dtf3=1 : dim dtn2,strsize bload "gm_data3.dat",dtn2 trn3=dtn2(3) } trn0=0 dtf0=0 : exist "gm_data0.dat" if strsize!-1 { dtf0=1 : dim dtn2,strsize bload "gm_data0.dat",dtn2 trn0=dtn2(3) } svb=0 : savef=0 repeat svky=save_key() dg svky,1 dg dtf1,3 dg dtf2,4 dg dtf3,5 dg dtf0,6 stick svb switch savef case 0 ; 待機 if svb!256 or svky=4 : swbreak if svky=0 : savef=10 : swbreak ; 終わり dt_no=svky : savef=1 swbreak case 1 ; セーブしますか if svb!256 : swbreak x=mousex : y=mousey if 400<=x and svy1(4)<=y and 500>=x and svy2(4)>=y { save2 : savef=2 : c=0 if dt_no=1 : trn1=dtn2(3) : dtf1=1 if dt_no=2 : trn2=dtn2(3) : dtf2=1 if dt_no=3 : trn3=dtn2(3) : dtf3=1 ;if dt_no=4 : trn0=dtn2(3) : dtf0=1 swbreak } savef=0 swbreak case 2 ; セーブしました c+ : if c=100 : savef=10 if svb!256 : swbreak savef=10 swbreak swend if savef=10 : break ; 終わり redraw 0 color 0,0,0 : boxf : color 255,255,255 map_put ; マップ表示 color 190,190,190 boxf 400,svy1(4),500,svy2(4) evw 0,28+16,24,35,13 ; イベントウインドウ表示 evw 1,28+16,24,35,13 ; イベントウインドウ表示 color 203,172,49 repeat 3,1 line svx1,24+8+cnt*64,svx2,24+8+cnt*64 loop s="SAVE 1" : bfp s,svx1+32,svy1(1)+24,0 if dtf1=1 : s="TURN "+trn1 : bfp s,svx1+200,svy1(1)+24,0 s="SAVE 2" : bfp s,svx1+32,svy1(2)+24,0 if dtf2=1 : s="TURN "+trn2 : bfp s,svx1+200,svy1(2)+24,0 s="SAVE 3" : bfp s,svx1+32,svy1(3)+24,0 if dtf3=1 : s="TURN "+trn3 : bfp s,svx1+200,svy1(3)+24,0 evw 0,28+16,192+24+24+16,35,5 ; イベントウインドウ表示 evw 1,28+16,192+24+24+16,35,5 ; イベントウインドウ表示 switch savef case 0 s="AUTO SAVE" : bfp s,svx1+32,svy1(4)+24,0 if dtf0=1 : s="TURN "+trn0 : bfp s,svx1+200,svy1(4)+24,0 swbreak case 1 color 255,255,255 if dt_no=4 { pos svx1+32,svy1(4)+24 : mes "AUTO SAVE にセーブしますか" } else { pos svx1+32,svy1(4)+24 : mes ""+dt_no+" 番にセーブしますか" } pos 400,svy1(4)+24 : s="YES" : bfp s,400,svy1(4)+24,0 pos 400,svy1(4)+24 : s="NO" : bfp s,500,svy1(4)+24,0 swbreak case 2 color 255,255,255 pos svx1+32,svy1(4)+24 : mes ""+dt_no+" 番にセーブしました" swbreak swend dg_put /* n=255 repeat 4,1 color n,n,n : n-=64 boxf svx1,svy1(cnt),svx2,svy2(cnt) loop */ redraw 1 await 1000/20 loop return *load dtf1=0 : exist "gm_data1.dat" if strsize!-1 { dtf1=1 : dim dtn2,strsize bload "gm_data1.dat",dtn2 trn1=dtn2(3) } dtf2=0 : exist "gm_data2.dat" if strsize!-1 { dtf2=1 : dim dtn2,strsize bload "gm_data2.dat",dtn2 trn2=dtn2(3) } dtf3=0 : exist "gm_data3.dat" if strsize!-1 { dtf3=1 : dim dtn2,strsize bload "gm_data3.dat",dtn2 trn3=dtn2(3) } dtf0=0 : exist "gm_data0.dat" if strsize!-1 { dtf0=1 : dim dtn2,strsize bload "gm_data0.dat",dtn2 trn0=dtn2(3) } svb=0 : savef=0 repeat svky=save_key() dg svky,1 stick svb switch savef case 0 ; 待機 if svb!256 : swbreak if svky=0 : savef=10 : swbreak ; 終わり if svky=1 and dtf1=1 : dt_no=1 : savef=1 if svky=2 and dtf2=1 : dt_no=2 : savef=1 if svky=3 and dtf3=1 : dt_no=3 : savef=1 if svky=4 and dtf0=1 : dt_no=0 : savef=1 swbreak case 1 ; ロードしますか if svb!256 : swbreak x=mousex : y=mousey if 400<=x and svy1(4)<=y and 500>=x and svy2(4)>=y { load2 : savef=2 : c=0 /* if dt_no=1 : trn1=dtn2(3) : dtf1=1 if dt_no=2 : trn2=dtn2(3) : dtf2=1 if dt_no=3 : trn3=dtn2(3) : dtf3=1 if dt_no=4 : trn0=dtn2(3) : dtf0=1 */ swbreak } savef=0 swbreak case 2 ; ロードしました c+ : if c=100 : savef=10 if svb!256 : swbreak savef=10 swbreak swend if savef=10 : break ; 終わり redraw 0 color 0,0,0 : boxf : color 255,255,255 map_put ; マップ表示 evw 0,28+16,24,35,13 ; イベントウインドウ表示 evw 1,28+16,24,35,13 ; イベントウインドウ表示 color 203,172,49 repeat 3,1 line svx1,24+8+cnt*64,svx2,24+8+cnt*64 loop s="SAVE 1" : bfp s,svx1+32,svy1(1)+24,0 if dtf1=1 : s="TURN "+trn1 : bfp s,svx1+200,svy1(1)+24,0 s="SAVE 2" : bfp s,svx1+32,svy1(2)+24,0 if dtf2=1 : s="TURN "+trn2 : bfp s,svx1+200,svy1(2)+24,0 s="SAVE 3" : bfp s,svx1+32,svy1(3)+24,0 if dtf3=1 : s="TURN "+trn3 : bfp s,svx1+200,svy1(3)+24,0 evw 0,28+16,192+24+24+16,35,5 ; イベントウインドウ表示 evw 1,28+16,192+24+24+16,35,5 ; イベントウインドウ表示 switch savef case 0 s="AUTO SAVE" : bfp s,svx1+32,svy1(4)+24,0 if dtf0=1 : s="TURN "+trn0 : bfp s,svx1+200,svy1(4)+24,0 swbreak case 1 color 255,255,255 if dt_no=0 { pos svx1+32,svy1(4)+24 : mes "AUTO SAVE からロードしますか" } else { pos svx1+32,svy1(4)+24 : mes ""+dt_no+" 番からロードしますか" } pos 400,svy1(4)+24 : s="YES" : bfp s,400,svy1(4)+24,0 pos 400,svy1(4)+24 : s="NO" : bfp s,500,svy1(4)+24,0 swbreak case 2 color 255,255,255 if dt_no=0 : pos svx1+32,svy1(4)+24 : mes "AUTO SAVE からロードしました" : swbreak pos svx1+32,svy1(4)+24 : mes ""+dt_no+" 番からロードしました" swbreak swend dg_put /* n=255 repeat 4,1 color n,n,n : n-=64 boxf svx1,svy1(cnt),svx2,svy2(cnt) loop */ redraw 1 await 1000/20 loop return #defcfunc save_key ; SAVE画面入力 x=mousex : y=mousey : save_keyn=0 repeat 4,1 ; 選択 if svx1<=x and svy1(cnt)<=y and svx2>=x and svy2(cnt)>=y : save_keyn=cnt : break loop return save_keyn ; SAVE画面座標 svx1=28+16+8 svx2=28+16+8+34*16 dim svy1,4 dim svy2,4 repeat 3 svy1(cnt+1)=24+8+cnt*64 svy2(cnt+1)=svy1(cnt+1)+64 loop svy1(4)=264 svy2(4)=264+64
始めに exist “gm_data1.dat”で、セーブデータがあるかどうか確認し、ターン数のデータを取得する。
strsizeにはデータ量が入るので、そのまま dimで大きさを定義するのに使っている。
今回は以上です。
次はタイトル画面を作ると思う。