迷路探索プログラムについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ぽち

迷路探索プログラムについて

#1

投稿記事 by ぽち » 14年前

プログラムの勉強を始めて1ヶ月ほどの初心者です。
現在簡単な迷路探索プログラムを作っているのですが、ほぼで出しで躓いてしまいました。
map[4][9]がプレイヤーで、map[4][9]の上の座標。すなわちmap[4][8]が0であったならば、
map[4][8]を1とする。というつもりで作ったプログラムです。
ですが、コンパイルするとなぜか1がmap[9][5]にでてきてしまいます。
いったいなぜなのでしょうか?一人では見直しても原因が分からなくて困っています。
原因が分かる方どうかお願いします。
下が自分が考えたプログラムです。

コード:

#include<iostream>
#include<windows.h>
using namespace std; 

//0=通れる道
//1=自分が通った道
//2=壁
//3=ゴール
//プレイヤーの座標は map[4,9] #
//ゴールの座標は map[2,6]
int map[10][10]={
	              {2,2,2,2,2,2,2,2,2,2},
		 {2,0,0,0,0,0,3,2,0,2},
		 {2,0,0,2,0,2,2,2,0,2},
		 {2,0,0,2,0,2,0,2,2,2},
		 {2,0,0,2,0,2,0,2,0,2},
		 {2,0,2,2,0,2,0,2,0,2},
		 {2,0,2,0,0,0,0,2,0,2},
		 {2,0,2,0,2,2,2,2,2,2},
		 {2,0,2,1,2,0,0,0,0,2},
		 {2,2,2,2,2,2,2,2,2,2},
};

int ix,iy;
int px,py;

int main(){
 ix=0;//map配列for文用
 iy=0;//map配列for文用
 px=4;//プレイヤー初期位置
 py=9;//プレイヤー初期位置
 cout<<"プレイヤー位置map{"<<px<<"]["<<py<<"]\n";
//マップの表示
 for(ix=0;ix<10;ix++){
	 for(iy=0;iy<10;iy++){
		 cout << map[ix][iy];
	 }
	 
	 cout<<"\n";
 }
 //Sleep(1000);

 //プレイヤーの↑が0だったらpy-1としてpyに代入
 if(map[px][py-1]==0) {
	 py=py-1;
	 map[px][py]=1;
 }
 cout<<"プレイヤー位置map{"<<px<<"]["<<py<<"]\n";
 
for(ix=0;ix<10;ix++){
	 for(iy=0;iy<10;iy++){
		 cout << map[ix][iy];
	 }
	 
	 cout<<"\n";
 }
 
  return 0;
}

non
記事: 1097
登録日時: 15年前

Re: 迷路探索プログラムについて

#2

投稿記事 by non » 14年前

ぽち さんが書きました: map[4][9]がプレイヤーで、map[4][9]の上の座標。すなわちmap[4][8]が0であったならば、
map[4][8]を1とする。というつもりで作ったプログラムです。
ですが、コンパイルするとなぜか1がmap[9][5]にでてきてしまいます。
下はそのままの実行結果です。
プレイヤー位置map{4][9]
2222222222
2000003202
2002022202
2002020222
2002020202
2022020202
2020000202
2020222222
2021200002
2222222222
プレイヤー位置map{4][8]
2222222222
2000003202
2002022202
2002020222
2002020212
2022020202
2020000202
2020222222
2021200002
2222222222

まず、プログラムのxは右方向でしょうか?それとも下方向でしょうか?
最初のマップの状態で、1がプレーヤーのいる場所でしょうか?
配列は0から始まるので、
map[3][8]かmap[8][3]ですよ。
non

ぽち

Re: 迷路探索プログラムについて

#3

投稿記事 by ぽち » 14年前

まず、プログラムのxは右方向でしょうか?それとも下方向でしょうか?
最初のマップの状態で、1がプレーヤーのいる場所でしょうか?
配列は0から始まるので、
map[3][8]かmap[8][3]ですよ。

ixやpxは右方向です

1がプレイヤーです

つまるところ
2222222222
2000003202
2002022202
2002020222
2002020212
2022020202
2020000202
2021222222
2021200002
2222222222

のようにしたいわけです。

non
記事: 1097
登録日時: 15年前

Re: 迷路探索プログラムについて

#4

投稿記事 by non » 14年前

コード:

 px=4;//プレイヤー初期位置
 py=9;//プレイヤー初期位置
 cout<<"プレイヤー位置map{"<<px<<"]["<<py<<"]\n";
//マップの表示
 for(ix=0;ix<10;ix++){
     for(iy=0;iy<10;iy++){
         cout << map[ix][iy];
     }
     
     cout<<"\n";
 }
前にも、申し上げましたように、
プレーヤーの初期位置がmapと違います。
また、 map[ix][iy] ではxは下方向です。
non

ぽち

Re: 迷路探索プログラムについて

#5

投稿記事 by ぽち » 14年前

すみません理解してませんでした。
プレイヤーは map[8][3]ってことですね

閉鎖

“C言語何でも質問掲示板” へ戻る