2019年 10月 18日
前回のイベントウインドウを使って、SAVE、LOADを表示して操作する画面を作る。
SAVEとLOADのボタンは次の通り。
SAVEボタンを押す。
セーブ箇所は表示の関係で 3つ、下のオートセーブはターン終了時に自動でセーブされる場所で、この画面ではセーブできない。
文字は後でグラソフトで描く事にする。
1番を押してみる。
ハイ、イイエはオートセーブの場所に表示する。
ハイを押すと
セーブしてセーブしたと表示される。
ロードを押す。
見た感じ変わらないので、後で画面のどこかに SAVE、LOADの表示を作ろうと思う。
1番を押してみる。
ハイを押すとロードする。
ロードの場合オートセーブからもロードできる。
それではソースを。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 |
*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で大きさを定義するのに使っている。
今回は以上です。
次はタイトル画面を作ると思う。