タイトル通りです。
移動可能範囲の調べ方が分かりません・・・。
自分はオセロやはさみ将棋の様に一方向を番兵まで調べる、という簡単な方法なら実装出来るくらいの知識量です。
環境はVC++(仕様言語はC言語) DXライブラリ。
こちらのフォーラムでもかなりの回数登場しているhttp://www5f.biglobe.ne.jp/~kenmo/program/SLG/move/move.htmlを参考にしてみたのですが、どうにも・・・。
このサイトでは二つの関数を交互に呼び出して索敵している様なのですが、最初一方向を調べつくした後一マス戻って左を調べ、また戻って右を調べ・・・の時点で詰まりました。
if(移動ポイント>0){
Search(一マス上へずらした座標の引数,移動ポイント-1);
}else if(移動ポイント == 0){
Search(一マス戻した後左へずらした座標の引数,移動ポイント) ←ここで移動ポイントの引数をどうすれば良いのか分からず止まりました・・・。
上のサイトよりももう少し踏み入った説明のされているサイトがありましたら是非ご紹介下さい(一応調べてはみたのですが・・。)
考え方のヒントだけでも構いませんので、教えて頂ければこちらで自力でどうにかします。
SLG 移動範囲の求め方について
Re: SLG 移動範囲の求め方について
なぜか、朝早くから、眠れないので暇つぶしにサンプルを作りました。
自分で解析してね。
自分で解析してね。
#include <stdio.h>
#include <conio.h>
void Search(int,int,int);
void Search4(int,int,int);
int map[12][12]={0};
void init_map(void)
{
int i,j;
for(i=1;i<11;i++){
for(j=1;j<11;j++)
map[i][j]=-1;
}
}
void disp_map(void)
{
int i,j;
for(i=0;i<12;i++){
for(j=0;j<12;j++)
printf("%2d ",map[i][j]);
printf("\n");
}
}
void debug(int y,int x,int move)
{
printf("%d %d %d\n",y,x,move);
disp_map();
printf("PUSH ENTER\n");
getche();
}
void Search(int y,int x,int move)
{
if(move-1<map[y][x])
return;
Search4(y,x,move-1);
}
void Search4(int y,int x,int move)
{
map[y][x]=move;
debug(y,x,move);
if(move<=0)
return;
Search(y-1,x ,move);
Search(y ,x-1,move);
Search(y ,x+1,move);
Search(y+1,x ,move);
}
int main(void)
{
init_map();
Search4(6,6,3);
return 0;
}non
-
あさか
Re: SLG 移動範囲の求め方について
お返事有難う御座います。
自分のゲームではマスの値は地形によって変えているタイプだったためちょっと違った形になってしまいましたが、骨組みはnonさんのものと似たプログラムを組ませて頂きました。
有難う御座いますm(_ _)m
関数のif文内にreturnを設けるだけで関数の処理をキャンセルして呼び出し元に戻るという事を初めて知りました・・・orz
自分のゲームではマスの値は地形によって変えているタイプだったためちょっと違った形になってしまいましたが、骨組みはnonさんのものと似たプログラムを組ませて頂きました。
有難う御座いますm(_ _)m
関数のif文内にreturnを設けるだけで関数の処理をキャンセルして呼び出し元に戻るという事を初めて知りました・・・orz