アイテムの選択画面を整理した


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

 
 
 これで大体装備装置はできたと思うので、次は装備したものをステータス計算するプログラムを作る。
 
 

コメントを残す

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