2019年 11月 15日
そろそろ 1ヶ月になるので途中経過で更新する。
今作ってるのはタイトルとゲームスタート時のマップ選択画面だ。
まずタイトル。
タイトルのグラを付けてないので、機能とタップエリアだけ表示している。
NEWGAME でマップ作成から、CONTINUEはセーブデータ画面になる。
NEWGAME
下の NOを押すとランダムでマップを次々と作成する。
左の S、M、Lはヒーローの多さを選択、右の S、M、Lはマップの大きさを選択する。
マップ Sで作成。
マップ Lで作成。
マップ L、ヒーロー Lで作成。
YESを押すと次はプレイヤー選択画面になる。
この画面では HEXを押すたびに、ヒーロー → プレイヤー → 中立と切り替わる。
NEXTを押すと次はカラーを変更する画面になる。
ヒーローの国をタップするとカラー選択画面になる。
色を選ぶと入れ替わる。
COLOR下の HEXが紫から白になってる。
STARTを押すと始まるが、まだこの画面からゲームになるとバグで落ちる。
それではソースを置くけど、作成途中なのでグチャグチャだ。
タイトル
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 |
;---------- TITLE ---------- #deffunc credit ; クレジット creditf=0 : kc=5 repeat repeat 1 if kc>0 : kc- : break stick kb if kb=256 : kc=5 : creditf+ loop if creditf=1 : break redraw 0 color 1,1,1 : boxf : color 255,255,255 pos 100,100 : mes "hituji kougaku" pos 100,130 : mes "alte" pos 100,150 : mes "angek maker" pos 100,180 : mes "sitonohane" redraw 1 await 1000/10 loop return #deffunc option ; オプション ; mevo ; muvo ; sevo ; credit return *titl ky=0 : kb=0 : kc=5 repeat repeat 1 if kc>0 : kc- : break ky=titl_key() : stick kb loop ; NEW GAME if kb=256 and ky=1 { ;new_game ;if new_gamef=1 : hextf=0 : mainf=5 : break gsf=0 : mainf=4 : break } ; CONTINUE if kb=256 and ky=2 { save_putf=0 : gosub *load if savef=11 : mainf=5 : break ; ロードした } ; OPTION if kb=256 and ky=4 : credit : ky=0 ; CREDIT クレジット if kb=256 and ky=5 : mainf=6 : break ; EXIT redraw 0 color 1,1,1 : boxf : color 160,160,160;255,255,255 repeat 5,1 boxf tix1,tiy1(cnt),tix2,tiy2(cnt) loop color 255,255,255 pos tix1+20,tiy1(1)+10 : mes "NEW GAME" pos tix1+20,tiy1(2)+10 : mes "CONTINUE" pos tix1+20,tiy1(3)+10 : mes "OPTION" pos tix1+20,tiy1(4)+10 : mes "CREDIT" pos tix1+20,tiy1(5)+10 : mes "EXIT" dg_put redraw 1 await 1000/10 loop return |
マップ作成
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 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 |
#deffunc map_check ; 6回同じ処理なので一つにまとめ ;if map(m)=0 : return ; 地形無し f=0 repeat 25 : cn=cnt if mf(cn)=0 : break ; 登録はもう無いよ if mf(cn)=m : f=1 : break ; 登録済み loop if f=1 : return ; 登録済み mf(cn)=m ; チェック済みに登録 return #deffunc map_build int map_buildn ; map生成(消す数) repeat ;------- マップ生成 ------- repeat 26 ; リセット map(cnt)=0 mf(cnt)=0 loop mapg=0 ; いくつ地形を作ったか mfn=0 ; 次に処理する MAP No. repeat 25,1 ; MAPを地形で埋める r=rnd(6)+1 : map(cnt)=r loop repeat map_buildn ; ランダムにn個地形を消す repeat r=rnd(25)+1 if map(r)=0 : continue map(r)=0 : break await 0 loop loop /* repeat map_buildn ; ランダムにn個地形を消す r=rnd(25)+1 ;if cnt=0 : r=1 ;if cnt=1 : r=4 ;if cnt=2 : r=25 map(r)=0 loop */ ;map(2)=0 repeat 25,1 if map(cnt)=0 : continue mapg+ ; 地形有りのマス数 loop /* bn=0 ; 地形無しのマス数 repeat 25,1 if map(cnt)=0 : bn+ loop mapg=25-bn ; 地形有りのマス数 */ repeat 25,1 ; 始めるマップの位置 if map(cnt)>0 : mapn=cnt : mf(mfn)=mapn : mfn+ : break loop f=0 repeat 25 ; 隣接マップ順に順次確認処理------------------------------- repeat 6,1 m=hmv(mapn,cnt) if m=0 : continue if map(m)=0 : continue map_check ; マップチェックと書き込み処理 loop /* repeat 6,1 : mapnc=cnt m=hmv(mapn,mapnc) map_check ; マップチェックと書き込み処理 loop */ mapn=mf(mfn) ; 次にチェックする地形 if mapn=0 : break ; が無いなら終わり mfn+ ; if mapg=mfn : f=2 : break ; チェック数とマス最大数が同じなら全部繋がってるとみなして完成 loop if mapg=mfn : break loop return #deffunc map_bd1 ; マップ生成 repeat 26 : mpl(cnt)=0 : loop ; 支配しているマップ map_build map_buildg /* map(1) =0,0,3,0,0,0,3,0,0,3 map(11)=0,0,3,0,0,3,0,0,3,0 map(21)=0,3,0,0,0 */ repeat 26 : mf(cnt)=0 : loop ; リセット n=0 repeat 25,1 ; 存在するHEX if map(cnt)=0 : continue mf(n)=cnt : n+ loop repeat 26 : hf(cnt)=0 : loop ; 生存フラグリセット ;plb=map_hrn ; ヒーロー数 if mapg<plb : plb=mapg ; 最大ヒーロー数 repeat plb,1 : pn=cnt ; 各勢力首都を設定 if pn=1 : hf(pn)=1 : else : hf(pn)=2 ; 生存フラグ ;if cnt=1 : m=1 : mpl(m)=pn : mpc(pn)=m ;if cnt=2 : m=25 : mpl(m)=pn : mpc(pn)=m : ;mpl(7)=pn ;if cnt=3 : m=16 : mpl(m)=pn : mpc(pn)=m : mpl(19)=pn ;if cnt=4 : m=3 : mpl(m)=pn : mpc(pn)=m ;if cnt=5 : m=22 : mpl(m)=pn : mpc(pn)=m ;continue if n=0 : r=0 : else : r=rnd(n) m=mf(r) ; マップNo. ;if pn=1 : m=1 ;if pn=2 : m=25 mpl(m)=pn : mpc(pn)=m ; 首都設定 md(m*mdb+7)=1 ; 建物を城に n- if pn=1 and map_s_setn>0 : map(m)=map_s_setn mf(r)=0 repeat 25 if r+cnt+1>=26 : break if mf(r+cnt+1)=0 : break mf(r+cnt)=mf(r+cnt+1) ; 詰める loop loop /* redraw 0 repeat 25,1 pos 300+cnt/10*20,40+cnt\10*20 : mes hf(cnt) loop redraw 1 pkey */ repeat 25,1 if map(cnt)=0 : continue ;if mpl(cnt)=1 { md(cnt*mdb+1)=5000 ; 人口 md(cnt*mdb+2)=msml ; 魔術 ;if mpl(cnt)=0 : md(cnt*mdb+2)=100 ; 魔術 md(cnt*mdb+3)=msnl ; マナ ;if mpl(cnt)=0 : md(cnt*mdb+3)=100 ; マナ md(cnt*mdb+4)=50000 ; 治安% ;} /* else { md(cnt*mdb+1)=5000*2 ; 人口 md(cnt*mdb+2)=msml*2 ; 魔術 md(cnt*mdb+3)=3000*2 ; マナ md(cnt*mdb+4)=50000+20000 ; 治安% } */ ; マップデータ(0=、1=人口、2=魔術、3=マナ、4=治安、5=攻撃、6=防御、7=建造物、8=、9=) loop ;repeat 5 : pmp(cnt+1)=100000 : loop return #deffunc map_bd2 ; マップセット repeat 25,1 pubn(cnt)=pubk+pubc ; 初期ユニット上限数 pubsn(cnt)=0 ; 初期人材府の数 pibn(cnt)=pibk+pibc ; 初期アイテム上限数 pibsn(cnt)=0 ; 初期鍛冶屋の数 loop ; UNIT 初期配置------------------------------------------- repeat plb,1 : pn=cnt ; プレイヤー m=mpc(pn) ; HEX zn=map(m);n=rnd(6)+1 ; 属性 ;if pn=1 : map(m)=1 ;n=4 ;if pn=1 : n=24 ;if pn=2 : n=12 ;if pn=3 : n=12 ;if pn=4 : n=3 ;if pn=5 : n=3 repeat msuh : cnt2=cnt ; 英雄の初期人数 ;repeat pubn(pn) : cnt2=cnt ; 英雄の初期人数 un_fd m,1 ; 人材発見 ;cn=rnd(cha_syu(zn))+cha_zoks(zn) ;unt 1,cn ; ユニット登録 /* ;if pn=1 and cnt2=1 : cn=16 ;if cnt2=1 : cn=51 repeat pub,plb*pub+1 un=cnt : ug=un*udb ; ユニットNo. if ud(ug)=0 : break loop ud(ug)=cn ; cnキャラ種類 repeat 9,1 ud(ug+cnt)=cd(cnt,cn) ; データ loop repeat 5 ud(ug+21+cnt)=ud(ug+1+cnt) ; データ loop ud(ug+8)=cd(8,cn) ; 特殊能力 ud(ug+10)=pn ; 所属 repeat 2 : ud(ug+11+cnt)=ud(ug+21) : loop ; 攻防値 repeat 3,16 ; 装備 ud(ug+cnt)=cd(cnt,cn) loop ud(ug+19)=cd(3,cn)/20-ud(ug+18)+1 ; アイテム装備数 ud(ug+26)=ud(ug+25) ; HP ;if pn=1 and cnt2=1 : ud(ug+26)=ud(ug+26)/10 */ hper_set pn,un ; ヒーローの順列セット ;gosub *jyun_put ;if cnt2>9 : continue ;mu(m*10+cnt2)=un ; 領主、部隊配置 ;if pn!1 and cnt2>1 : mu(m*10+cnt2)=0 ;ud(ug+13)=m*10+cnt2 ; 配属 loop loop ;un_data_dpt /* repeat plb : cnt2=cnt hug=cnt2*hub redraw 0 color 1,1,1 : boxf : color 255,255,255 pos 10,300 : mes cnt2 repeat 40 pos (cnt\15)*40+10,(cnt/15)*20+10 : mes hr1(hug+cnt) pos (cnt\15)*40+10,(cnt/15)*20+100 : mes hr2(hug+cnt) pos (cnt\15)*40+10,(cnt/15)*20+200 : mes hr5(hug+cnt) loop redraw 1 pkey loop */ ; 中立UNIT 初期配置------------------------------------------- pn=0 repeat 25,1 : m=cnt ; 中立国 f=0 repeat plb,1 if m=mpc(cnt) : f=1 : break ; HEX loop if f=1 or mpl(m)>0 : continue ; ヒーローの土地 if map(m)=0 : continue ; 空白地 zn=map(m) ; 属性 repeat msun : cnt2=cnt un_fd m,1 ; 人材発見 ;cn=rnd(cha_syu(zn))+cha_zoks(zn) ;unt 2,cn : if un=0 : break ; ユニット登録 /* repeat ub-1,1 un=cnt : ug=un*udb ; ユニットNo. if ud(ug)=0 : break loop ud(ug)=cn ; cnキャラ種類 repeat 9,1 ud(ug+cnt)=cd(cnt,cn) ; データ loop repeat 5 ud(ug+21+cnt)=ud(ug+1+cnt) ; データ loop ud(ug+8)=cd(8,cn) ; 特殊能力 ud(ug+10)=pn ; 所属 repeat 2 : ud(ug+11+cnt)=ud(ug+21) : loop ; 攻防値 repeat 3,16 ; 装備 ud(ug+cnt)=cd(cnt,cn) loop ud(ug+19)=cd(3,cn)/20-ud(ug+18)+1 ; アイテム装備数 ud(ug+26)=ud(ug+25) ; HP */ nper_set m,un ; 中立の順列セット ;gosub *jyun_put2 ;un_dpt 7 ;mu(m*10+cnt2)=un ; 領主、部隊配置 ;ud(ug+13)=m*10+cnt2 ; 配属 loop loop ; ITEM初期配置 ---------------------------------------- ;n=1 repeat plb,1 : pn=cnt ; プレイヤー m=mpc(pn) ; マップNo. repeat msih cnt2=cnt /* repeat 1000 r=rnd(itb) : if itd(16,r)>0 : itn=r : break ; アイテム種類 loop */ /* if pn=1 and cnt2=0 : itn=321 : itt 1,itn : hiper_set pn,in : continue if pn=1 and cnt2=1 : itn=322 : itt 1,itn : hiper_set pn,in : continue if pn=1 and cnt2=2 : itn=323 : itt 1,itn : hiper_set pn,in : continue if pn=1 and cnt2=3 : itn=324 : itt 1,itn : hiper_set pn,in : continue if pn=1 and cnt2=4 : itn=325 : itt 1,itn : hiper_set pn,in : continue if pn=1 and cnt2=5 : itn=326 : itt 1,itn : hiper_set pn,in : continue if pn=1 and cnt2=6 : itn=327 : itt 1,itn : hiper_set pn,in : continue if pn=1 and cnt2=7 : itn=328 : itt 1,itn : hiper_set pn,in : continue if pn=1 and cnt2=8 : itn=329 : itt 1,itn : hiper_set pn,in : continue /* if pn=1 and cnt2=9 : itn=310 : itt 1,itn : hiper_set pn,in : continue if pn=1 and cnt2=10 : itn=311 : itt 1,itn : hiper_set pn,in : continue if pn=1 and cnt2=11 : itn=312 : itt 1,itn : hiper_set pn,in : continue if pn=1 and cnt2=12 : itn=313 : itt 1,itn : hiper_set pn,in : continue if pn=1 and cnt2=13 : itn=314 : itt 1,itn : hiper_set pn,in : continue */ ;if pn=1 : gosub *ijyun_put1 it_fd m,1 ; アイテム発見 ;itt 1,itn : if in=0 : break hiper_set pn,in ; アイテム順列のセット ;if pn=1 : gosub *ijyun_put1 ;if /*pn=1 and*/ cnt2<9 : itn=251+cnt ;if /*pn=1 and*/ cnt2<10 : itn=261+cnt ;if /*pn=1 and*/ cnt2<9 : itn=281+cnt ;if /*pn=1 and*/ cnt2<9 : itn=291+cnt ;if /*pn=1 and*/ cnt2<14 : itn=301+cnt ;if /*pn=1 and*/ cnt2<9 : itn=321+cnt ;if cnt2<3 : itn=83 ;if pn=1 and cnt2<7 : itn=253 /* in=n : n+ ; アイテムNo. ig=in*idb ; データ位置 repeat idb id(ig+cnt)=itd(cnt,itn) ; データ loop id(ig)=itn id(ig+10)=pn ; 所属PL */ loop loop ; 中立アイテム repeat 25,1 : m=cnt ; 中立国 f=0 repeat plb if m=mpc(cnt) : f=1 : break ; HEX loop if f=1 or mpl(m)>0 : continue ; ヒーローの土地 if map(m)=0 : continue ; 空白地 repeat msin : cnt2=cnt it_fd m,1 /* repeat r=rnd(itb) : if itd(16,r)>0 : itn=r : break ; アイテム種類 loop itt 2,itn : if in=0 : break */ niper_set m,in ; アイテム順列のセット ;gosub *ijyun_put2 loop loop ;un_data_dpt ; 英雄の人材配置 ---------------------------- repeat plb,1 : pn=cnt ; プレイヤー m=mpc(pn) ; 首都 pmu_rst pn ; ユニット配置解除 ;if pn=1 : un_data_dpt peq_rst pn ; 装備解除 ;if pn=1 : un_data_dpt hrs_copy ; 英雄のユニット操作順列コピー ;if pn=1 : un_data_dpt his_copy ; 英雄のアイテム操作順列コピー ;if pn=1 : un_data_dpt un=hrs5(0) : if un>0 : mu(m*mdb)=un : ud(un*udb+13)=m*mdb : hrs_del un ; 領主配置 ;if pn=1 : un_data_dpt repeat hub ; 列の順列をリセット hrt1(cnt)=0 : hrt2(cnt)=0 : hrt3(cnt)=0 loop hrt1c=0 : hrt2c=0 : hrt3c=0 ; 現在の列の順番をリセット hrt1qc=0 : hrt2qc=0 : hrt3qc=0 ; 現在の列の順番をリセット repeat 9,1 ; 装備 if cnt\2=2 { ; 2回目 hrs_eq 2 : if un=0 : hrs_eq 1 break } hrs_eq 1 : if un=0 : hrs_eq 2 ; 1と3回目 loop hrt1c=0 : hrt2c=0 : hrt3c=0 ; 現在の列の順番をリセット hrt1qc=0 : hrt2qc=0 : hrt3qc=0 ; 現在の列の順番をリセット repeat 3 : knc=m*mdb+cnt*3 ; 配備 repeat 3,1 if cnt=1 { ; 1列目 un=hrt1(hrt1c) : if un>0 : mu(knc+1)=un : ud(un*udb+13)=knc+1 : hrt1c+ : continue un=hrt2(hrt2c) : if un>0 : mu(knc+1)=un : ud(un*udb+13)=knc+1 : hrt2c+ : continue un=hrt3(hrt3c) : if un>0 : mu(knc+1)=un : ud(un*udb+13)=knc+1 : hrt3c+ : continue } if cnt=2 { ; 3列目 un=hrt3(hrt3c) : if un>0 : mu(knc+3)=un : ud(un*udb+13)=knc+3 : hrt3c+ : continue un=hrt2(hrt2c) : if un>0 : mu(knc+3)=un : ud(un*udb+13)=knc+3 : hrt2c+ : continue un=hrt1(hrt1c) : if un>0 : mu(knc+3)=un : ud(un*udb+13)=knc+3 : hrt1c+ : continue } if cnt=3 { ; 2列目 un=hrt2(hrt2c) : if un>0 : mu(knc+2)=un : ud(un*udb+13)=knc+2 : hrt2c+ : continue un=hrt1(hrt1c) : if un>0 : mu(knc+2)=un : ud(un*udb+13)=knc+2 : hrt1c+ : continue un=hrt3(hrt3c) : if un>0 : mu(knc+2)=un : ud(un*udb+13)=knc+2 : hrt3c+ : continue } loop if hrt1(hrt1c)=0 and hrt2(hrt2c)=0 and hrt3(hrt3c)=0 : break ; 全員使った loop wpck m ; 戦力値計測 repeat 25,1 ; MAP最大脅威値 if mpl(cnt)!pn : continue wpb(cnt)=wp(m) loop loop ;if pn=1 : un_data_dpt ; 中立の人材配置 ---------------------------- pn=0 ; NPCに設定 repeat 25,1 : m=cnt ; 中立国 f=0 repeat plb,1 if m=mpc(cnt) : f=1 : break ; HEX loop if f=1 : continue ; ヒーローの土地 if map(m)=0 : continue ; 空白地 if mpl(cnt) neutral_deploy ; 中立ユニットの装備と配備 wpck m ; 戦力値計測 loop /* repeat 25,1 if mpl(cnt)=0 and map(cnt)>0 : mpl(cnt)=1 loop */ ;mpl(13)=1 return #deffunc map_set map_setf=0 : kc=5 repeat ky=0 : kb=0 : ckn=0 : kkn=0 repeat 1 ; 入力 if kc>0 : kc- : break ckey if map_setf=2 : kkey 1 : else : kkey 0 stick kb loop switch map_setf case 0 ; hero change if kb!256 : swbreak if ckn=10 : map_setf=1 : swbreak ; colorへ進む if ckn=11 : gsf=0 : break ; マップビルドへ戻る if kkn=0 : swbreak if mpl(kkn)=0 { ; 空白地 repeat 25,1 if hf(cnt)=0 : hf(cnt)=2 : pn=cnt : break loop mpl(kkn)=pn : mpc(pn)=kkn swbreak } if mpl(kkn)>0 { ; ヒーロー地 pn=mpl(kkn) if hf(pn)=2 : hf(pn)=1 : swbreak ; CPUならプレイヤーに if hf(pn)=1 { ; プレイヤーなら空白地に hf(pn)=0 : mpc(pn)=0 : mpl(kkn)=0 swbreak } } swbreak case 1 ; color change if kb!256 : swbreak kc=5 if ckn=10 : mainf=5 : break ; ゲームスタート if ckn=11 : map_setf=0 : swbreak ; 戻る if mpl(kkn)>0 : pn=mpl(kkn) : map_setf=2 : swbreak swbreak case 2 ; color select if kb!256 : swbreak kn=5 if ckn=9 { ; リセット repeat 25,1 pcln(cnt)=cnt loop map_setf=1 : swbreak } if ckn>0 : map_setf=1 : swbreak ; 戻る if kkn=0 : swbreak if kkn=25 : map_setf=3 : swbreak ; ユーザーカラー n=0 ; カラーチェンジ repeat 25,1 if kkn=pcln(cnt) : n=cnt : break loop if n=0 : pcln(pn)=kkn : map_setf=1 : swbreak pcln(n)=pcln(pn) : pcln(pn)=kkn : map_setf=1 ; 入れ替え swbreak swend ; BACK END redraw 0 color 1,1,1 : boxf : color 120,120,120 switch map_setf case 0 ; player map_put2 gmulcolor 255,255,255 s="player" : bfp s,cxyd(0,7)-4 ,cxyd(1,7)+13,5 s="change" : bfp s,cxyd(0,8)-4 ,cxyd(1,8)+13,5 s="next" : bfp s,cxyd(0,10)+7,cxyd(1,10)+1,5 s="back" : bfp s,cxyd(0,11)+7,cxyd(1,11)+1,5 swbreak case 1 ; color map_put2 gmulcolor 255,255,255 s="color" : bfp s,cxyd(0,7)+2 ,cxyd(1,7)+13,5 s="change" : bfp s,cxyd(0,8)-4 ,cxyd(1,8)+13,5 s="start" : bfp s,cxyd(0,10)+2,cxyd(1,10)+1,5 s="back" : bfp s,cxyd(0,11)+7,cxyd(1,11)+1,5 swbreak case 2 ; color change map_put3 gmulcolor 255,255,255 s="color" : bfp s,cxyd(0,7)+2 ,cxyd(1,7)+13,5 s="reset" : bfp s,cxyd(0,9)+2 ,cxyd(1,9)+1 ,5 s="select" : bfp s,cxyd(0,8)-4 ,cxyd(1,8)+13,5 s="back" : bfp s,cxyd(0,11)+7,cxyd(1,11)+1,5 swbreak swend color 255,255,255 pos 10,50 : mes "nmf "+map_setf pos 10,70 : mes "kb "+kb pos 10,90 : mes "ky "+ky pos 10,110: mes "kc "+kc pos 10,130: mes "ckn "+ckn pos 10,150: mes "kkn "+kkn pos 10,170: mes "pn "+pn /* repeat 25,1 pos 100+(cnt/10*100),10+(cnt\10*20) : mes "pcln "+cnt+" "+pcln(cnt) loop */ redraw 1 await 1000/20 loop return #deffunc new_game ngx1=150 : ngx2=490 dim ngy1,4 dim ngy2,4 ngy1(1)=70 : ngy2(1)=ngy1(1)+50 ngy1(2)=150 : ngy2(2)=ngy1(2)+50 ngy1(3)=230 : ngy2(3)=ngy1(3)+50 kc=5 repeat ky=0 : kb=0 : ckn=0 repeat 1 if kc>0 : kc- : break if new_gamef=0 : ky=ng_key() if new_gamef=1 : ckey stick kb loop switch new_gamef case 0 if kb!256 : swbreak ; RANDOM MAP if ky=1 : map_bd1 : kc=5 : new_gamef=1 ; SCENARIO MAP ; BACK if ky=3 : mainf=3 : break ; タイトルへ戻る swbreak ; このマップで良いですか? ; Is this map good? ; YES NO BACK case 1 if kb!256 : swbreak kc=5 if ckn=9 { if map_hrnf=1 : plb=2+rnd(6) if map_hrnf=2 : plb=8+rnd(8) if map_hrnf=3 : plb=16+rnd(10) if map_buildgf=1 : map_buildg=25-rnd(7)-2 if map_buildgf=2 : map_buildg=25-rnd(8)-9 if map_buildgf=3 : map_buildg=25-rnd(9)-17 ;if map_buildgf=0 : map_buildg=7 map_bd1 } if ckn=10 : gsf=1 : break;new_gamef=1 if ckn=11 : new_gamef=0 if ckn=2 : map_hrnf=1 ; 少 if ckn=3 : map_hrnf=2 ; 中 if ckn=4 : map_hrnf=3 ; 多 if ckn=13 : map_buildgf=1 ; 小 if ckn=14 : map_buildgf=2 ; 中 if ckn=15 : map_buildgf=3 ; 大 ;if ckn=16 : map_buildgf=0 ; リセット swbreak swend redraw 0 color 1,1,1 : boxf : color 120,120,120 switch new_gamef case 0 repeat 3,1 boxf ngx1,ngy1(cnt),ngx2,ngy2(cnt) loop color 255,255,255 pos ngx1+10,ngy1(1)+10 : mes "RANDOM MAP" pos ngx1+10,ngy1(2)+10 : mes "SCENARIO MAP" pos ngx1+10,ngy1(3)+10 : mes "BACK" swbreak case 1 map_put2 : gmulcolor 255,255,255 ; Is this map good? s="is" : bfp s,cxyd(0,1)+9 ,cxyd(1,1)+13,5 s="this" : bfp s,cxyd(0,6)+7 ,cxyd(1,6)+13,5 s="map" : bfp s,cxyd(0,7)+13,cxyd(1,7)+13,5 s="good?": bfp s,cxyd(0,8)+2 ,cxyd(1,8)+13,5 ; YES NO BACK s="no" : bfp s,cxyd(0,9 )+18,cxyd(1,9 )+1,5 s="yes" : bfp s,cxyd(0,10)+13,cxyd(1,10)+1,5 s="back" : bfp s,cxyd(0,11)+7 ,cxyd(1,11)+1,5 ; ヒーローの多さ repeat 3,1 if map_hrnf=cnt : n=255 : else : n=160 gmulcolor n,n,n if cnt=1 : s="s" : bfp s,cxyd(0,2)+10 ,cxyd(1,2)+20,5 if cnt=2 : s="m" : bfp s,cxyd(0,3)+10 ,cxyd(1,3)+20,5 if cnt=3 : s="l" : bfp s,cxyd(0,4)+10 ,cxyd(1,4)+20,5 loop ; マップの大きさ repeat 3,1 if map_buildgf=cnt : n=255 : else : n=160 gmulcolor n,n,n if cnt=1 : s="s" : bfp s,cxyd(0,13)+10 ,cxyd(1,13)+20,5 if cnt=2 : s="m" : bfp s,cxyd(0,14)+10 ,cxyd(1,14)+20,5 if cnt=3 : s="l" : bfp s,cxyd(0,15)+10 ,cxyd(1,15)+20,5 loop repeat 4 if map_buildgf=cnt : break loop swbreak swend /* color 255,255,255 pos 10,50 : mes "nmf "+new_gamef pos 10,70 : mes "kb "+kb pos 10,90 : mes "ky "+ky pos 10,110: mes "kc "+kc pos 10,130: mes "ckn "+ckn pos 10,150: mes "mgf "+map_buildgf pos 10,170: mes "mbgf "+map_buildg pos 10,190: mes "mhrf "+map_hrnf */ redraw 1 await 1000/20 loop return *game_start new_gamef=0 repeat switch gsf case 0 : new_game : swbreak case 1 : map_set : swbreak swend if mainf!4 : break loop ;map_bd1 ; マップ生成 ;map_bd2 ; マップセット return |