Hextrategy インフォメーション画面とユニットのセレクト画面を刷新した


2018年 12月21日
 
 
 大分ゲーム部分が出来てきたので、この辺で一応映ればいいやという感じで仮に作っていたインフォメーション画面とユニットのセレクト画面を刷新する。
 
 
 国のインフォメーション画面


 
 
 整えたのはユニット表示の部分だけど、まずこの画面で REMOVEボタンを押して配備解除できるようにした。


 
 
 まだ表示しか作ってないけど、部隊横の FORCEボタンを押すと攻め込む時の出撃部隊を選ぶ事ができる。


 
 
 カード表示部分の上半分を押せばユニットセレクト画面になる。

 画面 1ページ

 今回ページは 3ページになった、下部の ← →でページを切り替えられる。

 ↑ ↓で出現 Lvの降順、昇順でソートできる。

 HP、コスト、属性は押すたびに降順と昇順で切り替わりソート。

 前から無いと不便だと思っていた配備表示は、国、配備場所、隊列の表示になってる、これでユニットを選ぶときに、どの国のどこに配備されているのか分かる。

 そして新しく削除ボタンを作ってユニットを削除できるようにした。
 
 
 2ページ目

 筋力、魔力、知力、魅力、特殊を降順、昇順で切り替えソートできる。
 
 
 3ページ目

 攻撃力、防御力、魔攻力、魔防力、必要装備知性を降順、昇順で切り替えソート表示する。
 
 
 作ったグラフィック


 
 
 
 ソース

; 選択画面--------------------------------

	self=0		; モード切り替え

	selx1=0;7	; 名前
	selx2=180	; 降順
	selx3=245	; 昇順

	selx4=0		; ページ左
	selx5=150	; 戻る
	selx6=490	; ページ右

	selxk=56	; 間隔
	 selx7=310	; 種別始め
	 selx8=selx7+selxk
	 selx9=selx8+selxk
	 selx10=selx9+selxk
	 selx11=selx10+selxk

	selxk=69	; 間隔
	 selx12=310	; HP
	 selx13=selx12+selxk ; 配備
	 selx14=selx13+selxk ; コスト
	 selx15=selx14+selxk ; 属性
	 selx16=selx15+selxk ; 削除

	sely1=0;10	; 種別始め
	sely2=47	; ユニット始め
	selyk=38	; 行間隔
	sely3=sely2+selyk*7 ; ページ切り替え、戻る


	dim selkx1,40 ; タップ座標
	dim selkx2,40
	dim selky1,40
	dim selky2,40

	repeat 7,1 ; ユニットxy座標
	 selkx1(cnt)=0 : selkx2(cnt)=640-1
	 selky1(cnt)=sely2+selyk*(cnt-1)
	 selky2(cnt)=sely2+selyk*(cnt)-1

	 selkx1(30+cnt)=selx16 : selkx2(30+cnt)=640-1 ; 削除
	 selky1(30+cnt)=sely2+selyk*(cnt-1)
	 selky2(30+cnt)=sely2+selyk*(cnt)-1
	loop


	selkx1(11)=0		: selkx2(11)=selx2-1	; 名前
	selkx1(12)=selx2	: selkx2(12)=selx3-1	; 降順
	selkx1(13)=selx3	: selkx2(13)=selx7-1	; 昇順

	repeat 3,11 ; 上のy座標
	 selky1(cnt)=0 : selky2(cnt)=sely2-1
	loop


	selkx1(17)=selx7	: selkx2(17)=selx8-1	; 筋力
	selkx1(18)=selx8	: selkx2(18)=selx9-1	; 魔力
	selkx1(19)=selx9	: selkx2(19)=selx10-1	; 知力
	selkx1(20)=selx10	: selkx2(20)=selx11-1	; 魅力
	selkx1(21)=selx11	: selkx2(21)=wx-1		; 特殊

	repeat 10,17 ; 上のy座標
	 selky1(cnt)=0 : selky2(cnt)=sely2-1
	loop


	selkx1(14)=selx4	: selkx2(14)=selx5-1	; ←
	selkx1(15)=selx5	: selkx2(15)=selx6-1	; 戻る
	selkx1(16)=selx6	: selkx2(16)=wx-1		; →

	repeat 3,14 ; 下のy座標
	 selky1(cnt)=sely3 : selky2(cnt)=wy-1
	loop


	selkx1(22)=selx12	: selkx2(22)=selx13-1	; HP
	selkx1(23)=selx13	: selkx2(23)=selx14-1	; 配備
	selkx1(24)=selx14	: selkx2(24)=selx15-1	; コスト
	selkx1(25)=selx15	: selkx2(25)=selx16-1	; 属性
	selkx1(26)=selx16	: selkx2(26)=wx-1		; 消去



#defcfunc sel_key ; 選択画面入力

	x=mousex : y=mousey : sel_keyn=0

	if self=0 {
	 repeat 7,31 ; 削除
	  if selkx1(cnt)<=x and selky1(cnt)<=y and selkx2(cnt)>=x and selky2(cnt)>=y : sel_keyn=cnt : break
	 loop
	 if sel_keyn=0 {
	  repeat 16,1
	   if selkx1(cnt)<=x and selky1(cnt)<=y and selkx2(cnt)>=x and selky2(cnt)>=y : sel_keyn=cnt : break
	  loop
	  repeat 5,22
	   if selkx1(cnt)<=x and selky1(cnt)<=y and selkx2(cnt)>=x and selky2(cnt)>=y : sel_keyn=cnt : break
	  loop
	 }
	}

	if self=1 or self=2 {
	 repeat 21,1
	  if selkx1(cnt)<=x and selky1(cnt)<=y and selkx2(cnt)>=x and selky2(cnt)>=y : sel_keyn=cnt : break
	 loop
	}

	return sel_keyn



/////// ユニット選択画面 //////////////////////

#deffunc sel_set ; selセット

	repeat pub : sel(cnt)=0 : loop ; クリア

	selb=0		; 最大数

	pn=mpl(m)	; プレイヤー

	if pn>0 {	; 英雄勢力の一覧
	 repeat pub,udsh(pn)
	  ug=(cnt)*udb
	   if ud(ug)=0 : continue
	  sel(selb)=cnt : selb+
	 loop
	}

	if pn=0 { ; 中立勢力の一覧
	 uc=udsn(m)
	 repeat nub
	  ug=(uc+cnt)*udb
	   if ud(ug)=0 : continue
	  sel(selb)=uc+cnt : selb+
	 loop
	}

	return


*select

	sel_set ; selセット

	seln=0 : sel_yg=0 : self2=0

	bblsf=0 ; バブルソートフラグ、降順、昇順

	repeat ;------- メイン ----------------

;------- 入力 -------

	 ky=0 : kb=0
	 repeat 1
	  if kc>0 : kc- : break
	  ky=sel_key()	; タップ座標
	  stick kb,256	; ボタン
	 loop

	 if ky=14 and kb=256 : kc=3 : self- : if self<0 : self=2 ; ページ-
	 if ky=16 and kb=256 : kc=3 : self+ : if self>2 : self=0 ; ページ+

	 if ky=15 and kb=256 : break ; 戻る


;------- スクロール処理 -------

	 repeat 1 ; スクロール
	  if kc>0 : break
	  if kb=256 {
				if sel_kn=0 : sel_kn=1 : sel_ky=mousey
				break
				}
	  if sel_kn=0 : break : else : sel_kn=0

	  sel_dy=-(mousey-sel_ky)/20 ; 移動量
	   if sel_dy!0 : break ; スクロール中

	  if 1<=ky and ky<=7 { ; 選択
	   seln=sel(sel_yg+ky-1)
	   if ud(seln*udb+28)=0 : self2=1 : break ; 選択
	   if ud(seln*udb+28)=1 : seln=0 : break ; 既に使われている
	   break
	  }

	  if 31<=ky and ky<=37 { ; 削除
	   seln=sel(sel_yg+ky-31)
	   un_del pn,seln ; ユニット消去

	   n=sel_yg+ky-31
	   repeat selb ; selを1つ詰める
	    sel(n+cnt)=sel(n+1+cnt)
	    if sel(n+cnt)=0 : break
	   loop
	   selb-

	   kc=5
	   break
	  }

	  if 11<=ky and ky<=13 : sel_kf=1 : break ; ソートへ
	  if 17<=ky and ky<=25 : sel_kf=1 : break ; ソートへ
	 loop

	 if self2=1 : break ; 選択して戻る

	 if sel_yg>0 and sel_dy<0 : sel_yg- : sel_dy+ ; スクロール処理
	 if sel_yg+7<selb and sel_dy>0 : sel_yg+ : sel_dy-


	 repeat 1 ; ソート
	  if sel_kf=0 : break
	  sel_kf=0

	  if selb<2 : break ; 1体のみ
	  sel_kn=0 ; 入力をフラットに

	 
; 照合データ

	  if ky=11 : dn=0 : bblsf=(bblsf+1)\2 ; 名前
	  if ky=12 : dn=0 : bblsf=0	; 降順
	  if ky=13 : dn=0 : bblsf=1	; 昇順

	  switch self
	   case 0
	    if ky=22 : dn=26 : bblsf=(bblsf+1)\2 ; HP
	    if ky=23 : dn=13 : bblsf=(bblsf+1)\2 ; 配備
	    if ky=24 : dn=29 : bblsf=(bblsf+1)\2 ; コスト
	    if ky=25 : dn=8  : bblsf=(bblsf+1)\2 ; 属性
	   swbreak

	   case 1
	    if 17<=ky and ky<=20 : dn=ky+4 : bblsf=0 ; 筋力~魅力
	    if ky=21 : dn=8 : bblsf=(bblsf+1)\2 ; 特殊
	   swbreak

	   case 2
	    if ky=17 : dn=11 : bblsf=0 ; 攻撃
	    if ky=18 : dn=12 : bblsf=0 ; 防御
	    if ky=19 : dn=14 : bblsf=0 ; 魔攻
	    if ky=20 : dn=15 : bblsf=0 ; 魔防
	    if ky=21 : dn=30 : bblsf=(bblsf+1)\2 ; 装備知力
	   swbreak
	  swend

	  if bblsf=0 {
	   repeat selb-1 : cnt2=selb-cnt ; バブルソート降順
	    repeat cnt2

	     n1=sel(selb-cnt)	: nd1=ud(n1*udb+dn)
	     n2=sel(selb-cnt-1)	: nd2=ud(n2*udb+dn)

	     if nd1<=nd2 : continue
	     sel(selb-cnt)=n2 : sel(selb-cnt-1)=n1 ; 入れ替え
	    loop
	   loop
	  }

	  if bblsf=1 {
	   repeat selb-1 : cnt2=selb-cnt-1 ; バブルソート昇順
	    repeat cnt2

	     n1=sel(cnt)	: nd1=ud(n1*udb+dn)
	     n2=sel(cnt+1)	: nd2=ud(n2*udb+dn)

	     if nd1<=nd2 : continue
	     sel(cnt)=n2 : sel(cnt+1)=n1 ; 入れ替え
	    loop
	   loop
	  }

	 loop


;------- 表示 -------

	 redraw 0
	  color 0,0,0 : boxf : color 255,255,255
	  sel_put				; 表示
	 dg_put
	 redraw 1


	 await 1000/20

	loop ;---------------------------------

	kc=3

	return

コメントを残す

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