【求助】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 页)