Hextrategy タイトルとゲームスタート画面を作ってる


2019年 11月 15日
 
 
 そろそろ 1ヶ月になるので途中経過で更新する。

 今作ってるのはタイトルとゲームスタート時のマップ選択画面だ。
 
 
 まずタイトル。

 タイトルのグラを付けてないので、機能とタップエリアだけ表示している。

 NEWGAME でマップ作成から、CONTINUEはセーブデータ画面になる。
 
 

 NEWGAME

 下の NOを押すとランダムでマップを次々と作成する。

 左の S、M、Lはヒーローの多さを選択、右の S、M、Lはマップの大きさを選択する。
 
 
 マップ Sで作成。


 
 
 マップ Lで作成。


 
 
 マップ L、ヒーロー Lで作成。


 
 
 YESを押すと次はプレイヤー選択画面になる。

 この画面では HEXを押すたびに、ヒーロー → プレイヤー → 中立と切り替わる。


 
 
 NEXTを押すと次はカラーを変更する画面になる。


 
 
 ヒーローの国をタップするとカラー選択画面になる。


 
 
 色を選ぶと入れ替わる。

 COLOR下の HEXが紫から白になってる。


 
 
 STARTを押すと始まるが、まだこの画面からゲームになるとバグで落ちる。
 
 
 
 それではソースを置くけど、作成途中なのでグチャグチャだ。

 タイトル

;---------- 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

 
 
 マップ作成

#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

コメントを残す

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