【求助】c++也能寫迷宮嗎?><"

Home Home
<< 1 2 >>
跳頁: (共 2 頁)
引用 | 編輯 凱西男孩
2005-03-28 14:13
樓主
推文 x0
請問各位大大有人會的嗎?我們老 ..

訪客只能看到部份內容,免費 加入會員



獻花 x0
引用 | 編輯 唐老鴨
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++也能寫迷宮嗎?><":
可以阿...基本上迷宮的意思就是只有些路可以走....有些路不能走嘛....所以你就宣告一個八乘八的陣列....有些設為0...有些設為1....1就代表可以走...0就不行....基本原理就是這樣啦....
PS.我說錯的話請其他的大大代為說明囉.....
沒錯...基本上就是這樣寫...
然後再加上一些基礎判別來向前後左右走~
表情

獻花 x0
引用 | 編輯 凱西男孩
2005-03-28 17:37
3樓
  
上面的大大,陣列我們是教過,可是我們是教最基本的東西,你們說的那些根本聽不懂= =可以請你們在說明詳細一點嗎?對不起,小弟我笨笨地QQ。謝謝你們喔!

獻花 x0
引用 | 編輯 唐老鴨
2005-03-28 17:55
4樓
  
下面是引用凱西男孩於2005-03-28 17:37發表的 Re:【求助】c++也能寫迷宮嗎?><":
上面的大大,陣列我們是教過,可是我們是教最基本的東西,你們說的那些根本聽不懂= =可以請你們在說明詳細一點嗎?對不起,小弟我笨笨地QQ。謝謝你們喔!

就譬如我宣告一個陣列 int[2][2]=({1,1},{0,1}}......[0][0]是起點....[1][1]是終點.....那你就知道一開始往下走不行阿....因為[1][0]等於0...當然往左或上也不行....因為小於陣列的索引值....所以只能往右走阿....就是[0][1].....所以你上下左右的移動....就是移動你陣列的索引值阿....然後取出該值....就知道哪條路可不可以走了....就是這樣判斷的.....
這樣應該很詳細了吧 表情

獻花 x0
引用 | 編輯 rockster
2005-03-28 19:28
5樓
  
原來可以用array作座標系統@@

獻花 x0
引用 | 編輯 凱西男孩
2005-03-28 23:23
6樓
  
謝謝大大喔!我在跟朋友討論看看,把你的想法跟他說看看,thank you!

獻花 x0
引用 | 編輯 codeboy
2005-03-28 23:52
7樓
  
我這邊是有類似的程式碼...想想之後再看看你的程式跟我的有什麼不同
比較好~ 表情 共勉之~ 表情

獻花 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
引用 | 編輯 rockster
2005-03-30 07:42
13樓
  
要寫AI!?
其實要怎麼寫啊?

ps.我正在想辦法用vb寫解master mind的程式...

獻花 x0
引用 | 編輯 Freelife
2005-03-30 14:01
14樓
  
走迷宮的基本原則,就是沿著同一面牆走~
這樣就可以走到出口~

不必考慮什麼AI的~不要想太複雜了~
還是算基礎啦~ 表情

獻花 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-30 23:29
17樓
  
嗚嗚~這位大大你寫出來的東西怎麼用說的= =不是用走地,好奇怪說><"

獻花 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++也能寫迷宮嗎?><":
引用8樓的"夷希微"提供的地圖做說明

假設左上是起點,右下是終點

(1)判斷四邊的順序是,右->下->左->上->右.....
.......

謝謝大大的說明....
懂啦....
原來這就是你說的沿牆壁走法阿....
哈哈....
蠻有趣的 表情 .....

獻花 x0
引用 | 編輯 codeboy
2005-03-31 11:23
21樓
  
這一篇非常值得進入經華區阿... 表情
又學到不少阿~ 表情

獻花 x0
引用 | 編輯 凱西男孩
2005-03-31 13:44
22樓
  
謝謝各位大大提供的意見,我會在跟同學討論的,我們課本買來根本沒用,因為那是原文書= =再一次謝謝你們喔!

獻花 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
引用 | 編輯 凱西男孩
2005-04-01 00:34
27樓
  
不是我懶的看,是因為這學期我又去打工賺錢,時間都花在打工上面,才想到來這邊問看看有沒有大大會的。嗯~總之謝謝各位大大了。thank you! 表情

獻花 x0
引用 | 編輯 凱西男孩
2005-04-01 01:53
28樓
  
我同學傳了一個自已會動的迷宮給我看,請問有沒有大大會的,教一下吧!要8*8的喔!謝謝~ 表情

獻花 x0
引用 | 編輯 凱西男孩
2005-04-01 01:56
29樓
  
嗚嗚嗚~它不給我放執行檔啦!可惡~就是要一個8*8它自已會動的迷宮而以,真傷腦筋= =

獻花 x0
<< 1 2 >>
跳頁: (共 2 頁)