人控制方向:
#include<iostream> using namespace std; #define n 8 int * createMaze(){ int i,j; int * a; a=new int[n*n]; for(i=0;i<n;i++){ for(j=0;j<n;j++){ *(a+n*i+j)=0; } } *(a+n*0+1)=3; *(a+n*1+1)=1;*(a+n*1+2)=1;*(a+n*1+3)=1;*(a+n*1+5)=1; *(a+n*2+3)=1;*(a+n*2+4)=1;*(a+n*2+5)=1; *(a+n*3+1)=1;*(a+n*3+2)=1;*(a+n*3+3)=1;*(a+n*3+5)=1; *(a+n*4+2)=1;*(a+n*4+4)=1; *(a+n*5+1)=1;*(a+n*5+2)=1;*(a+n*5+4)=1;*(a+n*5+5)=1;*(a+n*5+6)=1; *(a+n*6+2)=1;*(a+n*6+3)=1;*(a+n*6+4)=1;*(a+n*6+6)=1; *(a+n*7+6)=1; return a; } void printMaze(int * a){ int i,j; for(i=0;i<n;i++){ for(j=0;j<n;j++){ if(*(a+n*i+j)==1){ cout<<" "<<" "; } else if(*(a+n*i+j)==3){ cout<<"*"<<" "; } else{ cout<<"#"<<" "; } } cout<<endl; } } void run(int * a,char ch){ int i,j; for(i=0;i<n;i++){ for(j=0;j<n;j++){ if(*(a+n*i+j)==3){ switch(ch){ case ‘w‘: if(*(a+n*(i-1)+j)==1){ *(a+n*i+j)=1; *(a+n*(i-1)+j)=3; return; } else{ return; } case ‘a‘: if(*(a+n*i+j-1)==1){ *(a+n*i+j)=1; *(a+n*i+j-1)=3; return; } else{ return; } case ‘s‘: if(*(a+n*(i+1)+j)==1){ *(a+n*i+j)=1; *(a+n*(i+1)+j)=3; return; } else{ return; } case ‘d‘: if(*(a+n*i+j+1)==1){ *(a+n*i+j)=1; *(a+n*i+j+1)=3; return; } else{ return; } default: return; } } } } } int main(){ int * a; char direction; a=createMaze(); printMaze(a); while(*(a+n*7+6)!=3){ cout<<"请选择方向(w,a,s,d):"; cin>>direction; run(a,direction); printMaze(a); } cout<<"恭喜你,顺利到达终点!"<<endl; return 0; }
程序自动判断方向:
#include<iostream> using namespace std; #define n 8 int * record=new int[n*n]; int initRecord(int * a){ int i,j; for(i=0;i<n;i++){ for(j=0;j<n;j++){ *(record+n*i+j)=0; } } return 0; } void printRecord(){ int i,j; for(i=0;i<n;i++){ for(j=0;j<n;j++){ cout<<*(record+n*i+j)<<" "; } cout<<endl; } } int * createMaze(){ int i,j; int * a; a=new int[n*n]; for(i=0;i<n;i++){ for(j=0;j<n;j++){ *(a+n*i+j)=0; } } *(a+n*0+1)=3; *(a+n*1+1)=1;*(a+n*1+2)=1;*(a+n*1+3)=1;*(a+n*1+5)=1; *(a+n*2+3)=1;*(a+n*2+4)=1;*(a+n*2+5)=1;*(a+n*2+6)=1; *(a+n*3+1)=1;*(a+n*3+2)=1;*(a+n*3+3)=1;*(a+n*3+5)=1; *(a+n*4+1)=1;*(a+n*4+4)=1; *(a+n*5+1)=1;*(a+n*5+2)=1;*(a+n*5+4)=1;*(a+n*5+5)=1;*(a+n*5+6)=1; *(a+n*6+2)=1;*(a+n*6+3)=1;*(a+n*6+4)=1;*(a+n*6+6)=1; *(a+n*7+6)=1; return a; } void printMaze(int * a){ int i,j; for(i=0;i<n;i++){ for(j=0;j<n;j++){ if(*(a+n*i+j)==1||*(a+n*i+j)==2){ cout<<" "; } else if(*(a+n*i+j)==3){ cout<<"★"; } else{ cout<<"■"; } } cout<<endl; } } void run(int * a,char ch){ int i,j; for(i=0;i<n;i++){ for(j=0;j<n;j++){ if(*(a+n*i+j)==3){ *(record+n*i+j)=*(record+n*i+j)+1; switch(ch){ case ‘w‘: if(*(a+n*(i-1)+j)==1){//将其限定在通道内 if(*(a+n*i+j-1)==0&&*(a+n*(i+1)+j)==0&&*(a+n*i+j+1)==0){ *(a+n*i+j)=2; *(a+n*(i-1)+j)=3; return; } else{ if(*(record+n*i+j)==4){ *(a+n*i+j)=2; *(a+n*(i-1)+j)=3; return; } else{ *(a+n*i+j)=1; *(a+n*(i-1)+j)=3; return; } } } else{ return; } case ‘a‘: if(*(a+n*i+j-1)==1){ if(*(a+n*(i+1)+j)==0&&*(a+n*(i-1)+j)==0&&*(a+n*i+j+1)==0){ *(a+n*i+j)=2; *(a+n*i+j-1)=3; return; } else{ if(*(record+n*i+j)==4){ *(a+n*i+j)=2; *(a+n*i+j-1)=3; return; } else{ *(a+n*i+j)=1; *(a+n*i+j-1)=3; return; } } } else{ return; } case ‘s‘: if(*(a+n*(i+1)+j)==1){ if(*(a+n*(i+1)+j)==0&&*(a+n*i+j-1)==0&&*(a+n*i+j+1)==0){ *(a+n*i+j)=2; *(a+n*(i+1)+j)=3; return; } else{ if(*(record+n*i+j)==4){ *(a+n*i+j)=2; *(a+n*(i+1)+j)=3; return; } else{ *(a+n*i+j)=1; *(a+n*(i+1)+j)=3; return; } } } else{ return; } case ‘d‘: if(*(a+n*i+j+1)==1){ if(*(a+n*(i+1)+j)==0&&*(a+n*(i-1)+j)==0&&*(a+n*i+j-1)==0){ *(a+n*i+j)=2; *(a+n*i+j+1)=3; return; } else{ if(*(record+n*i+j)==4){ *(a+n*i+j)=2; *(a+n*i+j+1)=3; return; } else{ *(a+n*i+j)=1; *(a+n*i+j+1)=3; return; } } } else{ return; } default: return; } } } } } char getDirection(int * a){ int i,j; for(i=0;i<n;i++){ for(j=0;j<n;j++){ if(*(a+n*i+j)==3){ if(*(a+n*i+j+1)==1){//*(a+n*(i-1)+j)==1为了将游戏人物限定在通道之内;1为通道,0为障碍物; return ‘d‘; } else if(*(a+n*(i+1)+j)==1){ return ‘s‘; } else if(*(a+n*i+j-1)==1){ return ‘a‘; } else if(*(a+n*(i-1)+j)==1){ return ‘w‘; } } } } return ‘s‘; } int main(){ int * a; int count=1; char step; a=createMaze(); printMaze(a); initRecord(a); cout<<"请按任意键进行下一步!"<<endl; while(*(a+n*7+6)!=3){ cout<<"第"<<count<<"步:"; cin>>step; run(a,getDirection(a)); printMaze(a); count++; } cout<<"恭喜你,顺利到达终点!"<<endl; printRecord(); return 0; }
原文:http://blog.csdn.net/u011700203/article/details/25009385