Dripです。
ナットさん、こんにちは。シミュレーションRPGに挑戦するには配列変数の知識と
簡単なものでも敵の思考ルーチン(AI)を作れる技術が必要になります。
プログラム初心者の方には少しハードルが高いかもしれませんね。
下に最高に簡略化させたキャラクター移動ルーチンのサンプルを示します。
恐らくこれ以上簡略化させることは難しいと思われます。
//----------------------------- ここから ------------------------------
//マウスクリックで移動させるキャラクタを選択し、
//移動したい場所をクリックするとその位置へ移動します。"
size=32 //キャラクタサイズ
maxx=8 //マップサイズX
maxy=4 //マップサイズY
objmax=4 //キャラクタ最大数
screen 0,maxx*size,maxy*size
dim objx,objmax //キャラクタ位置初期化 (X)
dim objy,objmax //キャラクタ位置初期化 (Y)
objx=0,1,2,3 //キャラクタを設置 (X座標)
objy=0,0,0,0 //キャラクタを設置 (Y座標)
font "MS ゴシック",size
mode=-1 //mode=-1はキャラクタ選択モード
//mode>-1はキャラクタ移動モード
repeat
stick ky
redraw 0
color 255,255,255:boxf:color 200,210,220 //背景をマスでクリアする
repeat maxx,1:line cnt*size,0,cnt*size,maxy*size:loop
repeat maxy,1:line 0,cnt*size,maxx*size,cnt*size:loop
repeat objmax //キャラクタの描画開始
if cnt=mode:color ,,255:else:color 255 //キャラクタの位置を決めてる途中はキャラクタの色を青、それ以外は赤に。
pos objx(cnt)*size,objy(cnt)*size //キャラクタの位置を指定
if mode=-1 & ky=256:{ //もしもキャラクタ選択モードでマウスクリックされたら
if mousex/size=objx(cnt) & mousey/size=objy(cnt):{ //しかも描画中のキャラクタはマウスの下にいたら
ky=0 //今の1フレームだけkyマウスクリックをクリアする。
mode=cnt //modeに移動させるキャラクタIDを代入し、キャラクタ移動モードにセットする。
}
}
mes "★" //キャラクタを描画する
loop
if mode>-1 & ky=256:{ //もしもキャラクタ移動モードになっていて、マウスクリックされたら
objx(mode)=mousex/size //その座標にキャラクタを移動させる
objy(mode)=mousey/size
mode=-1 //キャラクタ選択モードに戻す
}
redraw 1
await 15
loop
//----------------------------- ここまで ------------------------------
このサンプルはキャラクタの重なり判定や移動中のアクション等、移動に関係ないものを
極力省いたものです。ルーチンの有用性より、解り易さを重要視して書かれています。
余談ですが、プログラムを勉強する場合は、面倒くさがらずに複雑なプログラムでも
一行一行入念に観察し、かじりつく精神と忍耐が必要です。またそれがプログラムの面白い
ところでもあります。
WEBやマニュアルを参考に、ナットさんも自分で考えたプログラムが思い通りに動いた時の
快感を、HSPを通して是非体感してみてください。きっと大きな前進になると思います。