2017年 9月23日
アイテムの選択画面を整理する。
まずタップ座標を作って
; アイテム選択画面-------------------------------- iselx1=10 : iselxk=60 isely1=11 : isely2=51 : iselyk=38 iselx2=305 iselx3=iselx2+iselxk iselx4=iselx3+iselxk iselx5=iselx4+iselxk iselx6=iselx5+iselxk dim iselkx1,20 ; タップ座標 dim iselkx2,20 dim iselky1,20 dim iselky2,20 repeat 9,1 iselkx1(cnt)=0 : iselkx2(cnt)=wx iselky1(cnt)=isely2+iselyk*(cnt-1)-6 iselky2(cnt)=isely2+iselyk*(cnt)-6 iselky1(cnt+10)=0 iselky2(cnt+10)=isely2-6 loop iselky1(9)=iselky1(8) : iselky2(8)=wy : selky2(9)=wy k=4 iselkx1(8)=0 : iselkx2(8)=wx/2 iselkx1(9)=wx/2 : iselkx2(9)=wx iselkx1(11)=0 : iselkx2(11)=iselx2-k iselkx1(12)=iselx2-k : iselkx2(12)=iselx3-k iselkx1(13)=iselx3-k : iselkx2(13)=iselx4-k iselkx1(14)=iselx4-k : iselkx2(14)=iselx5-k iselkx1(15)=iselx5-k : iselkx2(15)=iselx6-k iselkx1(16)=iselx6-k : iselkx2(16)=wx
これは表示の座標も含まれていて、それを元にタップ座標を作っている。
表示してタップエリアを確認して調整。

それを元にキー座標を返す関数を作る。
#defcfunc isel_key ; 選択画面入力 x=mousex : y=mousey : isel_keyn=0 repeat 9,1 : n1=cnt : n2=cnt+10 if iselkx1(n1)<x and iselky1(n1)<y and iselkx2(n1)>x and iselky2(n1)>=y : isel_keyn=n1 : break if iselkx1(n2)<x and iselky1(n2)<y and iselkx2(n2)>x and iselky2(n2)>=y : isel_keyn=n2 : break loop return isel_keyn
アイテム選択は 1~7、外すボタンは 8、戻るボタンは 9、ソート座標は11~16の値が返る。
表示も整えて、こんな感じ。

キャラ選択のをコピペして改造してあるので、押してすべらせればスクロールもする。
8枠の 1つを潰して「外す」のと「戻る」のを加えた、これは後でキャラ選択にもつける予定。
選択画面のソース。
/////// アイテム選択画面 //////////////////////
*iselect
dim isel,ib+1 ; 一時選択キャラNo.一覧
repeat ib ; クリア
isel(cnt)=0
loop
sbn=equsi(kyg) ; 装備場所
pn=mpl(kn) ; プレイヤー
n=0 ; 自勢力のアイテムをピックアップ
repeat ib,1
ig=idb*cnt ; ItemNo.
if id(ig)=0 : continue
if id(ig+10)!pn : continue ; 自勢力で無い
if id(ig+19)=un : continue ; そのキャラが持ってる
if sbn=1 : if id(ig+9)!1 and id(ig+9)!2 : continue ; 右手
if sbn=2 : if id(ig+9)!1 and id(ig+9)!3 and id(ig+9)!4 and id(ig+9)!5 : continue ; 左手
if sbn=3 {
if id(ig+9)>5 : continue ; 複数手
if kyg=0 and id(ig+9)=4 : continue ; 左端で左両手装備
if kyg=ud(ug+11)-1 and id(ig+9)=2 : continue ; 右端で右両手装備
}
if sbn=4 : if id(ig+9)!6 : continue ; 防具
if sbn=5 : if id(ig+9)<7 : continue ; 特殊
if sbn=6 : if id(ig+9)!7 and id(ig+9)!9 and id(ig+9)!10 : continue ; アイテム
isel(n)=cnt : n+ ; アイテムNo.登録
loop
iselb=n ; 総数
iself=0 : iseln=0 : sel_yg=0 : ky=0 : kb=0
repeat ;------- メイン ----------------
;------- 入力 -------
repeat 1
if kc>0 : kc- : break
ky=isel_key() ; タップ座標
stick kb,256 ; ボタン
loop
if ky=8 and kb=256 : remove_syo : break ; 外す
if ky=9 and kb=256 : break ; 戻る
;------- スクロール処理 -------
repeat 1 ; スクロール
if kb=256 {
if isel_kn=0 : isel_kn=1 : isel_ky=mousey
break
}
if isel_kn=0 : break : else : isel_kn=0
isel_dy=-(mousey-isel_ky)/20 ; 移動量
if isel_dy=0 : if 1<=ky and ky<=7 : iseln=isel(sel_yg+ky-1) : iself=1 ; 選択
loop
if iself=1 : break ; 選択して戻る
if sel_yg>0 and isel_dy<0 : sel_yg- : isel_dy+
if sel_yg+7<iselb and isel_dy>0 : sel_yg+ : isel_dy-
;------- その他 ----------------
repeat 1 ; ソート
if kb!256 : break ; タップしてない
if ky<11 or 16<ky : break
if iselb<2 : break ; 少ない
isel_kn=0
if ky=11 : dn=0 ; 照合データ
if ky=12 : dn=12 ; 攻撃
if ky=13 : dn=13 ; 防御
if ky=14 : dn=7 ; 射程
if ky=15 : dn=30 ; 属性
if ky=16 : dn=14 ; 特殊
repeat iselb-1 : cnt2=iselb-cnt ; バブルソート
repeat cnt2
n1=isel(iselb-cnt) : nd1=id(n1*idb+dn)
n2=isel(iselb-cnt-1): nd2=id(n2*idb+dn)
if nd1<=nd2 : continue
isel(iselb-cnt)=n2 : isel(iselb-cnt-1)=n1 ; 入れ替え
loop
loop
loop
;------- 表示 -------
redraw 0
color 0,0,0 : boxf : color 255,255,255
isel_put ; 表示
dg_put
redraw 1
await 1000/20
loop ;---------------------------------
kc=3
return
これで大体装備装置はできたと思うので、次は装備したものをステータス計算するプログラムを作る。