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