引用 | 編輯
唐老鴨
2005-03-28 16:32 |
1樓
▲ ▼ |
可以阿...基本上迷宮的意思就是只有些路可以走....有些路不能走嘛....所以你就宣告一個八乘八的陣列....有些設為0...有些設為1....1就代表可以走...0就不行....基本原理就是這樣啦....
PS.我說錯的話請其他的大大代為說明囉..... x1 |
引用 | 編輯
codeboy
2005-03-28 17:23 |
2樓
▲ ▼ |
下面是引用唐老鴨於2005-03-28 16:32發表的 Re:【求助】c++也能寫迷宮嗎?><":沒錯...基本上就是這樣寫... 然後再加上一些基礎判別來向前後左右走~ x0 |
引用 | 編輯
凱西男孩
2005-03-28 17:37 |
3樓
▲ ▼ |
上面的大大,陣列我們是教過,可是我們是教最基本的東西,你們說的那些根本聽不懂= =可以請你們在說明詳細一點嗎?對不起,小弟我笨笨地QQ。謝謝你們喔!
x0 |
引用 | 編輯
唐老鴨
2005-03-28 17:55 |
4樓
▲ ▼ |
下面是引用凱西男孩於2005-03-28 17:37發表的 Re:【求助】c++也能寫迷宮嗎?><": 就譬如我宣告一個陣列 int[2][2]=({1,1},{0,1}}......[0][0]是起點....[1][1]是終點.....那你就知道一開始往下走不行阿....因為[1][0]等於0...當然往左或上也不行....因為小於陣列的索引值....所以只能往右走阿....就是[0][1].....所以你上下左右的移動....就是移動你陣列的索引值阿....然後取出該值....就知道哪條路可不可以走了....就是這樣判斷的..... 這樣應該很詳細了吧 x0 |
引用 | 編輯
夷希微
2005-03-29 02:23 |
8樓
▲ ▼ |
呵呵~怎麼可以說老師要整死你們呢~這個程式並不難的呀 ^^
小妹來雞婆一下,幫您畫迷宮,不過走迷宮的程式您要自己寫~嘻嘻 ^^y C 的寫法如下: 複製程式 #include <stdio.h> void main(void) { int MAP[8][8]={{1,0,1,1,1,1,1,1}, {1,0,1,0,1,0,0,1}, {1,0,1,0,1,0,1,1}, {1,0,1,0,0,0,0,1}, {1,0,0,0,1,1,0,1}, {1,0,1,0,0,1,0,1}, {1,0,1,0,1,1,0,1}, {1,1,1,1,1,1,2,1}}; int x,y; for(x=0;x<8;x++) { for(y=0;y<8;y++) { if(MAP[x][y]==1)printf("■"); else printf(" "); } printf("\n"); } } C++ 的寫法如下: 複製程式 #include <iostream.h> void main(void) { int MAP[8][8]={{1,0,1,1,1,1,1,1}, {1,0,1,0,1,0,0,1}, {1,0,1,0,1,0,1,1}, {1,0,1,0,0,0,0,1}, {1,0,0,0,1,1,0,1}, {1,0,1,0,0,1,0,1}, {1,0,1,0,1,1,0,1}, {1,1,1,1,1,1,2,1}}; int x,y; for(x=0;x<8;x++) { for(y=0;y<8;y++) { if(MAP[x][y]==1)cout << "■"; else cout << " "; } cout << endl; } } 加油唷 ^_^ x2 |
引用 | 編輯
凱西男孩
2005-03-29 13:54 |
9樓
▲ ▼ |
哈哈~各位大大都好厲害喔!我有去圖書館借書來看說,可是那個都是C語言的比較多,沒想到有小妹妹肯教我= =嗚嗚~好感動喔!謝謝你們大家喔!感激不盡。
x0 |
引用 | 編輯
凱西男孩
2005-03-29 23:29 |
10樓
▲ ▼ |
阿勒~~我會錯意了= =原本以為是畫個圖出來就好了,可是剛才同學說要讓它自已走出迷官,搞笑喔~我們程式也才教基礎的東西而以,叫我們寫那個,全班當掉><"有大大會寫的嗎?教導教導一下好嗎?= =謝謝
x0 |
引用 | 編輯
凱西男孩
2005-03-29 23:32 |
11樓
▲ ▼ |
嗚嗚~我會錯老師的意思了,原來還要讓它自已走完迷宮,我們只教基礎的程式而以,而且那節課也不是專門的程式課,叫我們寫那個,等於全班當掉= =有大大會走迷宮的嗎?教一下吧!謝謝><
x0 |
引用 | 編輯
唐老鴨
2005-03-30 03:03 |
12樓
▲ ▼ |
下面是引用凱西男孩於2005-03-29 23:32發表的 Re:【求助】c++也能寫迷宮嗎?><": 程式碼幫你寫好POST在下面了.....後來覺得舉例太麻煩....直接幫你寫部分的程式好了.... x0 |
引用 | 編輯
凱西男孩
2005-03-30 17:01 |
15樓
▲ ▼ |
這個算是基礎= =阿嗚~a系狼。問題來了,全班沒人會><夠搞笑吧!有沒有大大肯幫寫一下程式碼的呀!小弟我實在是力不從心呀!感激不盡唷!
x0 |
引用 | 編輯
唐老鴨
2005-03-30 17:49 |
16樓
▲ ▼ |
14樓大大說的寫法我不會....
所以希望那位大大也可以教我說.... 我給你我剛寫好的程式碼..... 但這不是完整版的..... 裡面還要加入一些判斷.... 避免重複走的部分..... 若是你的題目有兩種以上的走法.... 那就又更麻煩囉..... 那些部分我就留給你寫囉..... 我也只會這種寫法.... 看不懂在提問題吧..... 複製程式 #include <iostream> using namespace std; #define ROW 3 #define COL 3 struct walk { int vertical; int horizon; } move[4]; //不加入重覆判斷 void main() { int maze[ROW][COL]={{1,1,0},{0,1,1},{0,0,2}}; int row=0; int col=0; int dir; int next_row; int next_col; //往上走 move[0].vertical=-1; move[0].horizon=0; //往下走 move[1].vertical=1; move[1].horizon=0; //往左走 move[2].vertical=0; move[2].horizon=-1; //往右走 move[3].vertical=0; move[3].horizon=1; cout<<"(0,0)=>"; while(maze[row][col]!=2) { //隨機取一個方向 dir=rand()%4; next_row=row+move[dir].vertical; next_col=col+move[dir].horizon; if((maze[next_row][next_col]!=0)&&((next_row>=0)&&(next_row<ROW))&&((next_col>=0)&&(next_col<COL))) { if(dir==0) cout<<"向上走=>"; else if(dir==1) cout<<"向下走=>"; else if(dir==2) cout<<"向左走=>"; else cout<<"向右走=>"; cout<<"("; cout<<next_row; cout<<","; cout<<next_col; cout<<")=>"; row=next_row; col=next_col; } } cout<<"終點"; } x0 |
引用 | 編輯
唐老鴨
2005-03-31 04:26 |
18樓
▲ ▼ |
下面是引用凱西男孩於2005-03-30 23:29發表的 Re:【求助】c++也能寫迷宮嗎?><": 你不是要電腦自己走ㄇ= ="???? 還是要你自己按鍵盤走阿.... 妳題目改來改去的.... 這樣我很難幫你耶 ..... 我寫的就是從起點(0,0)開始.... 終點是(2,2)..... 考慮電腦可以走的方向.... 然後做移動.... 最後將所有電腦走的路線列印出來..... 這不就是電腦自己移動了ㄇ ..... 只是我沒有把判斷重複路線的部分寫完.... 還有判斷叉路最後走錯退回的部分.... 剩下的給你寫讓你發揮.... 但我已經至少幫你寫了一半了.... 如果妳是要畫個迷宮.... 然後讓電腦幫你走.... 妳幹嘛要走呢 ??? 讓電腦模擬人腦的方式.... 看電腦走的結果就好了阿.... 除非你是要畫圖然後慢慢看電腦走.... 那你就補圖上去.....加入一些時間的函數.... 讓電腦慢慢移動給你看囉..... 不然就是還是由你自己按鍵盤走(原來的題目意思= =").... 那就比較簡單了.... 你就自己寫就好了..... x0 |
引用 | 編輯
Freelife
2005-03-31 10:30 |
19樓
▲ ▼ |
引用8樓的"夷希微"提供的地圖做說明
假設左上是起點,右下是終點 (1)判斷四邊的順序是,右->下->左->上->右..... (2)假設第1個判斷的方向是"右"。 (3)程式一開始,判斷右邊有沒有路 ->沒有,判斷下一個"下"->有,往下走一步。 (4)由於程式要求的是,沿著牆走,所以第二步之後,要確認牆所在的方向。 所以要從你上次走的方向"下",它的上一個判斷值開始,也就是"右"。 (5)以上述的方式做判斷,整理出走每一步的方法如下: ->起點在左上的位置。 ->第1步,"右"沒有路,改走"下",有路,往下一步。 ->第2步,從"下"的上一個判斷開始,"右"沒有路,改走"下",有路,往下一步。 ->第3步,從"下"的上一個判斷開始,"右"沒有路,改走"下",有路,往下一步。 ->第4步,從"下"的上一個判斷開始,"右"沒有路,改走"下",有路,往下一步。 ->第5步,從"下"的上一個判斷開始,"右"有路,往下一步。 ->第6步,從"右"的上一個判斷開始,"上"沒有路,改走"右",有路,往下一步。 ->第7步,從"右"的上一個判斷開始,"上"有路,往下一步。 ->第8步,從"上"的上一個判斷開始,"左"沒有路,改走"上",有路,往下一步。 ->第9步,從"上"的上一個判斷開始,"左"沒有路,改走"上",有路,往下一步。 ->第10步,從"上"的上一個判斷開始,"左"、"上"、"右"都沒有路,改走"下",有路,往下一步。 ->第11步,從"下"的上一個判斷開始,"右"沒有路,改走"下",有路,往下一步。 ->第12步,從"下"的上一個判斷開始,"右"有路,往下一步。 以此類推,一直走下去,最後就可以走到終點了。 如有錯誤,請各位不吝指教 x0 |
引用 | 編輯
唐老鴨
2005-03-31 10:55 |
20樓
▲ ▼ |
下面是引用Freelife於2005-03-31 10:30發表的 Re:【求助】c++也能寫迷宮嗎?><": 謝謝大大的說明.... 懂啦.... 原來這就是你說的沿牆壁走法阿.... 哈哈.... 蠻有趣的 ..... x0 |
引用 | 編輯
凱西男孩
2005-03-31 17:10 |
23樓
▲ ▼ |
請問有哪位好心的大大可以幫我跟同學改一下程式碼,要把它改成8*8的,我們兩個改不出來= =麻煩一下qq,以下是程式碼,要改成8*8的喔!thank you!這個原本是4*5的= =麻煩各位大大了~
#include <iostream> #include <iomanip> #include <ctime> using namespace std; void reset(char(*)[5]); void print(const char(*)[5]); void d_reset(bool*); const char MAP[4][5]={ {Ƈ',Ɔ',Ɔ',Ƈ',Ƈ'}, {Ƈ',Ƈ',Ɔ',Ƈ',Ɔ'}, {Ɔ',Ƈ',Ƈ',Ɔ',Ɔ'}, {Ƈ',Ƈ',Ƈ',Ƈ',Ƈ'}}; int main (){ cout <<"MAP:" << endl; print(MAP); cout <<"search:" << endl; char a[4][5]={Ɔ'}; reset(a); int p[2] = {0, 0}; while(a[p[0]][p[1]]==Ƈ') { srand(time(0)); static int i=0; static bool d[4]={0}; if(i==0 && p[1]<4 && a[p[0]][p[1]+1]==Ƈ') {a[p[0]][p[1]]='*' p[1]+=1; d_reset(d); i=rand()%4;} else if(i==1 && p[0]<3 && a[p[0]+1][p[1]]==Ƈ') {a[p[0]][p[1]]='*' p[0]+=1; d_reset(d); i=rand()%4;} else if(i==2 && p[0]>0 && a[p[0]-1][p[1]]==Ƈ') {a[p[0]][p[1]]='*' p[0]-=1; d_reset(d); i=rand()%4;} else if(i==3 && p[1]>0 && a[p[0]][p[1]-1]==Ƈ') {a[p[0]][p[1]]='*' p[1]-=1; d_reset(d); i=rand()%4;} else { d=1; if(d[0]==1&&d[1]==1&&d[2]==1&&d[3]==1) {reset(a); i=0; d_reset(d); p[0]=0; p[1]=0;} else {while(d==1){i=rand()%4;}}} if(p[0]==3 && p[1]==4) { a[3][4]='*' print(a); cout << "success!!" << endl; char y; cout << "search next?(y/n) "; cin >> y; if(y=='n') break; reset(a); p[0]=p[1]=0; i=0; } } system("pause"); return 0; } void reset(char(*a)[5]) { for(int i=0; i<4; i++) for(int j=0; j<5; j++) a[j] = MAP[j]; } void print(const char(*A)[5]) { for(int i=0; i<4; i++) { for(int j=0; j<5; j++) cout << setw(2) << A[j]; cout << endl; } } void d_reset(bool* d) { for(int i=0; i<4; i++) d=0; } x0 |
引用 | 編輯
唐老鴨
2005-03-31 18:38 |
24樓
▲ ▼ |
老實說....
我看不懂你再寫什麼..... 沒有一個完整題目.... 也不知道你要的需求.... 更不知道你給的程式碼寫的是否是對是錯..... 要別人怎麼幫你改 x0 |
引用 | 編輯
codeboy
2005-03-31 19:09 |
25樓
▲ ▼ |
下面是引用凱西男孩於2005-03-31 13:44發表的 Re:【求助】c++也能寫迷宮嗎?><": 原文書不是沒用..而是你懶的看吧~.. 大部分的時候...原文書比中文書來的有用~ 搞技術的人應該都之知道原文書的重要的~ x1 |
引用 | 編輯
唐老鴨
2005-03-31 19:17 |
26樓
▲ ▼ |
下面是引用codeboy於2005-03-31 19:09發表的 Re:Re:【求助】c++也能寫迷宮嗎?><": 這個我認同.... 因為國內的書很多都翻譯國外的..... 而且原文書大都寫的比較詳盡.... 雖然看會比較累一點.... 但學的也比較深入 .... x0 |