zoukankan      html  css  js  c++  java
  • 简易迷宫游戏

    人控制方向:

    #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; }



  • 相关阅读:
    python的继承、封装、多态 --面向对象的特征
    ab压测工具简介
    dotnet core Console事件处理机制
    屹立千年,只为你一个回眸
    Derivative of the Sigmoid function
    Merge Overlapping Intervals
    Array of products
    Longest Peak
    javascript事件的注册方式总结
    纯css实现圆柱体-超简单!
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/6949966.html
Copyright © 2011-2022 走看看