走迷宫

/* 
* 程序的版权和版本声明部分: 
* Copyright (c) 2012, 烟台大学计算机学院 
* All rights reserved. 
* 文件名称:【数组】迷宫.cpp 
* 作    者:毛通 
* 完成日期:2012 年 12月 03日 
* 版 本 号:v1.0  

*/

 

#include<iostream>
#include<conio.h>
using namespace std;


void draw(void);             //函数声明    
void up(void);
void down(void);
void left(void);
void right(void);
void change(void);


int map[10][20]=                                          
	{
		{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
		{1,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1},
		{1,0,1,0,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,1},
		{1,0,0,0,0,0,0,1,1,0,0,0,1,0,1,1,0,1,0,1},
		{1,0,1,1,0,1,0,0,0,1,0,0,0,0,0,1,1,0,0,1},
		{1,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,1},
		{1,0,1,0,1,1,0,0,0,1,0,0,1,0,0,1,0,0,0,1},
		{1,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1,0,0,0,1},
		{1,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,3,1},
    	{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
	};                                                //数组初始化的模式
	int x=1,y=1;             //x y的值需要改变 定义全局变量  
	int x1=0,y1=0;            //x1 y1的值需要改变 定义全局变量
	bool victory=false;      //bool变量 开始时为假 用来结束
int main()
{   

	draw();                //先画原图
    char (ch);
	while(!victory)     //victory为假时 执行
	{
		char (ch);      //字符变量

	    ch=getch();      //得到字符

	    switch (ch)
		{
		case 'w': up();    change();system("cls");draw();break;      
		case 'a': left();  change();system("cls");draw();break;
		case 's': down();  change();system("cls");draw();break;
		case 'd': right(); change();system("cls");draw();break;
		
		}
	}
		
	
	cout<<"恭喜你 你赢啦!"<<endl;
	return 0;
}
void  up()                  //改变数组行列
{ 
	if(1!=map[x-1][y])
	{
		
		x1=x;
		y1=y;
		x=x-1;
	}
}
void down()
{
	if(1!=map[x+1][y])
	{
		x1=x;
		y1=y;
		x=x+1;
	}
}

void right()
{
	if(1!=map[x][y+1])
	{
		x1=x;
		y1=y;
		y=y+1;
	}

}

void left()
{
	if(1!=map[x][y-1])
	{
		x1=x;
		y1=y;
	    y=y-1;
	}
}

void  draw()                                      //画迷宫
{
	for (int val = 0; val < 10; ++val)         //行
	{
		for (int flag = 0; flag < 20; ++flag)  //列
		{
			if (1 == map[val][flag])          //1 为	墙
			{
				cout << "# ";
			}
			else
			
			    if (0 == map[val][flag])        //0 为 路
				{
				    cout << "  ";
				}

			else if (2 == map[val][flag])         //2 为 人
			{
				cout << '\001'<<" ";
			}
			
			else if (3==map[val][flag])        //3 为 心
				cout<<'\003'<<" ";
		}
	
		cout << endl;                         //勿忘换行
	}
}

void change()                            //改变迷宫的初始值  (error c2601 自定义函数不能在其他函数里面 通常因为上面的函数大括号没正确匹配)
{
	if (3 == map[x][y])                  //如果吃到心,则胜利
	{
		victory = true;
	}
	map[x][y] = 2;                      // 原来的路为人
	map[x1][y1] = 0;                    // 原来的人为路
} 



/*
运行结果:


心得体会:   简单数组解决
知识点总结:
*/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值