Hextrategy SAVE、LOADの表示を作った


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で大きさを定義するのに使っている。
 
 
 今回は以上です。

 次はタイトル画面を作ると思う。
 
 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です