void 移動(void)
{マップCG;
if(anMAP[charA-10] == 1 || (anMAP[charA-10] == 2 && anMAP[charA-20] == 1))
{MENU_ADD(1, "上へ移動");}
if(anMAP[charA+01] == 1 || (anMAP[charA+01] == 2 && anMAP[charA+02] == 1))
{MENU_ADD(2, "右へ移動");}
if(anMAP[charA+10] == 1 || (anMAP[charA+10] == 2 && anMAP[charA+20] == 1))
{MENU_ADD(3, "下へ移動");}
if(anMAP[charA-01] == 1 || (anMAP[charA-01] == 2 && anMAP[charA-02] == 1))
{MENU_ADD(4, "左へ移動");}
if(
anMAP[charA-10] == 2 && anMAP[charA-20] == 3 ||
anMAP[charA+01] == 2 && anMAP[charA+02] == 3 ||
anMAP[charA+10] == 2 && anMAP[charA+20] == 3 ||
anMAP[charA-01] == 2 && anMAP[charA-02] == 3)
{MENU_ADD(5, "封印!");}
MENU_ADD(6, "やりなおし");
int nMove = MENU_SELECT();
switch(nMove)
{
case 1:if(anMAP[charA-10] == 2 && anMAP[charA-20] == 1)
{anMAP[charA-20] = 2;anMAP[charA-10] = 1;}charA = charA-10;break;
case 2:if(anMAP[charA+01] == 2 && anMAP[charA+02] == 1)
{anMAP[charA+02] = 2;anMAP[charA+01] = 1;}charA = charA+01;break;
case 3:if(anMAP[charA+10] == 2 && anMAP[charA+20] == 1)
{anMAP[charA+20] = 2;anMAP[charA+10] = 1;}charA = charA+10;break;
case 4:if(anMAP[charA-01] == 2 && anMAP[charA-02] == 1)
{anMAP[charA-02] = 2;anMAP[charA-01] = 1;}charA = charA-01;break;
case 5:jump エンディング;
case 6:マップ;}
}
移動とその結果について書かれた関数。
主人公の位置より一つ上の位置に要素数1(通路)が入っているか、
要素数2(大将軍)で、かつ、二つ上の位置に要素数1が入っているなら、
上へ行くことができる。
主人公の位置より一つ右の位置に要素数1(通路)が入っているか、
要素数2(大将軍)で、かつ、二つ右の位置に要素数1が入っているなら、
上へ行くことができる。
....
という条件で4つの選択肢を登録する。さらに、
主人公の位置より一つ上の位置に要素数2が入り、
二つ上の位置に要素数3(光の壺)が入っている、
または、
主人公の位置より一つ右の位置に要素数2が入り、
二つ右の位置に要素数3(光の壺)が入っている、
または、・・・・
という条件で、エンディング用選択肢を登録する。
最後にマップ初期化用の選択肢を登録する。
次に選択肢を選んだときの結果を出す。
上へ移動を選んだとき、
一つ上の位置の要素数が1ならそのままキャラを上へ進ませ、
もし一つ上の位置に要素数2で、かつ、二つ上の位置に要素数1が入っているなら、
要素数2を二つ上の位置にずらし、一つ上の位置を1にする。
右へ移動を選んだとき、
一つ右の位置の要素数が1ならそのままキャラを右へ進ませ、
もし一つ右の位置に要素数2で、かつ、二つ右の位置に要素数1が入っているなら、
要素数2を二つ右の位置にずらし、一つ右の位置を1にする。
・・・・
エンディング用選択肢を選んだとき、
エンディング関数へ飛ぶ。
マップ初期化用の選択肢を選んだとき、
もう一度マップと主人公の位置を初期値に戻す。