人控制方向:
#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;
}