2019年 3月 29日
ユニットやアイテムの一覧と同じように、領有している国の一覧表示を作った。

外周のアイコンだけ揃ってきたけど、そろそろ開発も終盤に差し掛かっている。
左下の地図のアイコンを押すとマップ一覧になる。

ソートも出来る、これは人口の小さい順かな。

治安の悪い順。

国の並び順。

首都はその勢力のカラーになるように今の所してる。
一覧をタップすると、その国の表示になる。

ソースはユニットやアイテムの一覧のを流用している。
; 属領選択画面
dim mselkx1,20
dim mselkx2,20
dim mselky1,20
dim mselky2,20
mselkx1(11)=0 : mselkx2(11)=70
mselkx1(12)=mselkx2(11) : mselkx2(12)=mselkx1(12)+120
mselkx1(13)=mselkx2(12) : mselkx2(13)=mselkx1(13)+120
mselkx1(14)=mselkx2(13) : mselkx2(14)=mselkx1(14)+120
mselkx1(15)=mselkx2(14) : mselkx2(15)=mselkx1(15)+120
mselkx1(16)=mselkx2(15) : mselkx2(16)=wx
mselkx1(17)=0 : mselkx2(17)=wx
repeat 6,11
mselky1(cnt)=0 : mselky2(cnt)=47
loop
mselky1(17)=47+38*7 : mselky2(17)=wy
repeat 7,1
mselkx1(cnt)=0 : mselkx2(cnt)=wx
mselky1(cnt)=47+38*(cnt-1)
mselky2(cnt)=47+38*(cnt)
loop
*mselect
repeat 25 : msel(cnt)=0 : loop ; クリア
mselb=0 ; 最大数
repeat 25,1 ; 所有マップ一覧
if mpl(cnt)=pn : msel(mselb)=cnt : mselb+
loop
mself2=0 : mseln=0 : msel_yg=0
repeat ;------- メイン ----------------
;------- 入力 -------
ky=0 : kb=0
repeat 1
if kc>0 : kc- : break
ky=msel_key() ; タップ座標
stick kb,256 ; ボタン
loop
if ky=17 and kb=256 : break ; 戻る
;------- スクロール処理 -------
repeat 1 ; スクロール
if kb=256 {
if msel_kn=0 : msel_kn=1 : msel_ky=mousey
break
}
if msel_kn=0 : break : else : msel_kn=0
msel_dy=-(mousey-msel_ky)/20 ; 移動量
if msel_dy!0 : break ; スクロール中
if 1<=ky and ky<=7 {
mseln=msel(msel_yg+ky-1) : if mseln>0 : mself2=1 ; 選択
break
}
if 11<=ky and ky<=21 : msel_kf=1 : break ; ソートへ
if 22<=ky and ky<=25 : msel_kf=1 : break ; ソートへ
if 41<=ky and ky<=46 : msel_kf=1 : break ; ソートへ
loop
if mself2=1 : break ; 国を選択して戻る
if msel_yg>0 and msel_dy<0 : msel_yg- : msel_dy+
if msel_yg+7<mselb and msel_dy>0 : msel_yg+ : msel_dy-
;------- その他 ----------------
repeat 1 ; ソート
if msel_kf=0 : break
msel_kf=0
if mselb<2 : break ; 1体のみ
msel_kn=0 ; 入力をフラットに
; 照合データ
if ky=11 : dn=0 : bblsf=(bblsf+1)\2 ; 国
if ky=12 : dn=1 : bblsf=(bblsf+1)\2 ; 人口
if ky=13 : dn=2 : bblsf=(bblsf+1)\2 ; 魔術
if ky=14 : dn=3 : bblsf=(bblsf+1)\2 ; マナ
if ky=15 : dn=4 : bblsf=(bblsf+1)\2 ; 治安
if ky=16 : dn=7 : bblsf=0 ; 建物
repeat mselb-1 : cnt2=mselb-cnt-1 ; バブルソート昇順
repeat cnt2
n1=msel(cnt) : nd1=md(n1*mdb+dn)
n2=msel(cnt+1) : nd2=md(n2*mdb+dn)
if bblsf=0 : if nd1>=nd2 : continue ; 降順
if bblsf=1 : if nd1<=nd2 : continue ; 昇順
msel(cnt)=n2 : msel(cnt+1)=n1 ; 入れ替え
loop
loop
loop
;------- 表示 -------
redraw 0
color 0,0,0 : boxf : color 255,255,255
msel_put ; 表示
redraw 1
await 1000/20
loop ;---------------------------------
kc=3
return
#deffunc msel_put
gmulcolor 255,255,255
color 240,240,240 : font "",26
pos mselkx1(11)+5,mselky1(11)+11 : mes "MAP"
pos mselkx1(12)+12,mselky1(12)+11 : mes "人 口"
pos mselkx1(13)+8,mselky1(13)+11 : mes "魔 術"
pos mselkx1(14)+7,mselky1(14)+11 : mes "マ ナ"
pos mselkx1(15)+8,mselky1(15)+11 : mes "治 安"
pos mselkx1(16)+7,mselky1(16)+11 : mes "建築物"
pos mselkx1(17)+304,mselky1(17)+7 : celput slw,4 ; 戻る
pos mselkx1(17)+210,mselky1(17)+12 : mes "BACK"
pos mselkx1(17)+380,mselky1(17)+12 : mes "戻る"
n=msel_yg : f=0
repeat 7 : cnt2=cnt
if msel(n)=0 : break
mdg=msel(n)*mdb
y=mselky1(cnt2+1)+2
font "",28
if mpc(pn)=msel(n) : color pld(pn*10+1),pld(pn*10+2),pld(pn*10+3)
pos mselkx1(11)+5,y+3 : mes msel(n) ; 国
color 240,240,240
pos mselkx1(12)+5,y+3 : mes md(mdg+1)/100 ; 人口
pos mselkx1(13)+5,y+3 : mes md(mdg+2)/100 ; 魔術
pos mselkx1(14)+5,y+3 : mes md(mdg+3)/100 ; マナ
pos mselkx1(15)+5,y+3 : mes md(mdg+4)/1000 ; 治安
pos mselkx1(16)+5,y+3 : mes buls(md(mdg+7)) ; 建築物
n+
loop
return
#defcfunc msel_key ; 選択画面入力
x=mousex : y=mousey : msel_keyn=0
repeat 7,1 ; 選択
if mselkx1(cnt)<=x and mselky1(cnt)<=y and mselkx2(cnt)>=x and mselky2(cnt)>=y : msel_keyn=cnt : break
if mselkx1(10+cnt)<=x and mselky1(10+cnt)<=y and mselkx2(10+cnt)>=x and mselky2(10+cnt)>=y : msel_keyn=10+cnt : break
loop
return msel_keyn
一通り建築物や政府を実装し、配備や建築物を元に災害や国の伸張、発見等の効果を調整したので、もう一度「マップ戦略」のアルゴリズムを練り直す作業に入ってる、これはまた骨になりそう。
先日、政府追加の記事にコメントさせて頂いたmzkです。
ありがとうございます。
21でビルドしてもキットカットで起動出来たので余り気にせず最新版で良いのかもですね。
ところで、defcfunc内でif分岐後に別のユーザー関数から戻り値を取られていますが、これはAndroid実機でも問題なく動きますか?
(#defcfunc msel_key内のif mselkx1(cnt)<=x以降など)
hsptvの掲示板にも書いたのですが、似たような事をするとwin上のF5では起動出来るのですが実機では強制終了でした。エミュレータは試していません。
あと、Rドさんのドット絵は「商用利用はご勘弁を」と書かれていたのですが、商用利用可能なドット絵でモンスター素材などあればご紹介頂けると嬉しいです。
情報ありがとうございます。
これまた長い間アンドロイドでの動作確認をしてないので、動かない可能性があります(笑)
まずマニュアルにはこうあります(3.5β4、更新しないとなあ)
#defcfuncによる複数パラメーターを持つユーザー定義関数の呼び出しで、パラメーター省略時に正しく実行が行なわれない不具合が報告されています
#defcfuncによるユーザー定義関数の呼び出し内で、awaitやwait、stopなどタスクが停止状態になる命令を実行するとエラー(40)が発生しますので使用を避けてください
#defcfunc、#deffunc命令によるユーザー定義呼び出し先でgosub命令を使用した際に、呼び出し先のサブルーチンで引数にアクセスできない不具合が報告されています
前回アンドロイドで起動確認した時のソースに、
#defcfunc isel_key ; 選択画面入力
x=mousex : y=mousey : isel_keyn=0
repeat 9,1 : n1=cnt : n2=cnt+10x and iselky2(n1)>=y : isel_keyn=n1 : break x and iselky2(n2)>=y : isel_keyn=n2 : break
if iselkx1(n1)
if iselkx1(n2)
loop
return isel_keyn
というのがあったので、動く事は動いていたと思います。
mselkx1(cnt)というのは関数では無くて、座標の配列変数です。
今回ご指摘いただいて、改めて#defcfuncを使わず、なるべく#deffuncで行ったほうが良さそうですね、ありがとうございます。
Rドットさん、前に確認した時は商用 OKだったはずなんですけど(勘違いだったかな)どうなったんでしょう。
今サイトを確認しようとしたらサイトが無くなっていたので、確認のできる場所があれば教えていただけませんか。
Rドットさんの素材が使えなければ、この計画は頓挫せざるえません。
他の素材について、最近調べてないんですけど、HI-TIMEさん、それから今もあるのか『星宝転生ジュエルセイバー』のフリー素材が最強と言われますけど、モンスターではありません。
有料にしても FCのウィザードリィ風のドットグラフィック 1件(DLsiteとかで)しか見た事が無くて、モンスターの絵を描くのは大変なので、素材としてあまり無いというのが前に調べた時の実情だと思います。
あれから新たに公開してる人がいるのか、google先生に聞いてみるしかありませんね(笑)
スマホでゲームを作ってるプロの方は、お金を出してネットで依頼製作してるようですし、そういえばその FC風の Wizグラを使ってるのも見た事あります。
ありがとうございます。
配列変数でしたか、すみません。
defcfuncで書くとすっきりするので便利なのですが難しいですね。
Rドさんのページは以下に移転しているようです。
http://rpgdot3319.g1.xrea.com
ソザイのページに商用利用についての記載がありますが、素材としての二次配布についての言及なのか、ゲームとしての商用利用についての言及か曖昧かもしれません。掲示板で伺ってみるのが良いかもしれませんね。
エフェクトは結構フリー素材が多いですがモンスター素材は貴重ですね。
RPGドットさんの URL情報、とても助かりました。
ありがとうございます。
RPGドットさんの掲示板にて、商用許可申請の御返答いただきました。
「はじめまして。
連絡いただけましたので商用OKです!
本件で料金が発生することはアリマセン
でわでわ~」
という事でした。
RPGドットさん、ありがとうございました。