C++ 迷宫游戏

介绍

本程序是根据广度优先遍历算法的思想设计的一款迷宫游戏,游戏设计了两种模式一种自动游戏模式,一种手动模式。因为项目在 Linux 开发,需要在 Windows 开发的,请查看源代码中需要修改地方的备注。

截图

C++ 迷宫游戏_第1张图片
C++ 迷宫游戏_第2张图片
C++ 迷宫游戏_第3张图片

代码

#include 
#include 			//标准库
#include 			//延时函数
#include 			//getchar	
#include 			
#include 		//终端设置

#define MAX_X 20
#define MAX_Y 30
bool flag = false;
bool slow = false;
bool autogame = true;

using namespace std;

int maze[MAX_X][MAX_Y];		//迷宫

//路线栈
class stack_of_maze{
private:
	//记录迷宫坐标
	struct node
	{
		int x;
		int y;
		char direction;  	//上一步路径(如何来的)
		node* next;
	};
	node* head;
public:
	stack_of_maze(){
		head = NULL;
	}

	~stack_of_maze(){
		node* p = head;
		while(head!=NULL){
			head = head->next;
			delete p;
			p = head;
		}
	}

	//压栈
	void push(int xx,int yy,char ddirection){
		node* new_node = new node;
		if(new_node!=NULL){
			new_node->x = xx;
			new_node->y = yy;
			new_node->direction = ddirection;
			new_node->next = NULL;

			if(head==NULL)
				head = new_node;
			else{
				new_node->next = head;
				head = new_node;
			}
		}
		else
			cout<<"内存分配失败"<next;
			xx = p->x;
			yy = p->y;
			delete p;
		}
		return head;
	}

	void print(){
		if(head!=NULL){
			node* p = head;
			while(p!=NULL){
				cout<<" "<x<<" "<y<<" "<direction<next;
			}
		}
		else
			cout<<"栈为空,打印失败"<替代此函数
char getch(){
	char ch;   
    static struct termios oldt, newt;				//保存原有终端属性和新设置的终端属性
    tcgetattr( STDIN_FILENO, &oldt);				//获得终端原有属性并保存在结构体oldflag

    //设置新的终端属性
    newt = oldt;
    newt.c_lflag &= ~(ICANON);          
    tcsetattr( STDIN_FILENO, TCSANOW, &newt);

    //取消回显
    system("stty -echo");
    ch = getchar();
    system("stty echo");    

    tcsetattr( STDIN_FILENO, TCSANOW, &oldt);		//让终端恢复为原有的属性
	return ch;
}

void move(){
	int x=1,y=1;					//出发点	
	while(1){
		switch(getch()){
			case 's':
				if(maze[x+1][y]==0){
					maze[x][y] = 0;
					x = x + 1;
					maze[x][y] = 7;			//当前位置
					printMaze();
					if((x==MAX_X-1)&&(y==MAX_Y-2)){
						cout<<"\n\n              成功走出"<

你可能感兴趣的:(C++)