在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例C/C++游戏开发 → c++ 迷宫游戏 源码下载

c++ 迷宫游戏 源码下载

C/C++游戏开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:0.47M
  • 下载次数:92
  • 浏览次数:1626
  • 发布时间:2017-05-07
  • 实例类别:C/C++游戏开发
  • 发 布 人:MSmile
  • 文件格式:.zip
  • 所需积分:2
 相关标签: 游戏 迷宫

实例介绍

【实例简介】

【实例截图】

【核心代码】


#include<iostream>
#include<string>
#include<stdlib.h>
#include<windows.h>
#include<time.h>
#include <conio.h>
using namespace std;

#define Size 15
#define maxsmall 7
#define smallroad 6
#define mouse 4
#define start 2
#define end 3
#define wall 1
#define road 0
#define up 0
#define down 1
#define left 2
#define right 3
#define Esc 5
bool iftime=false;
const int Max=1000;
class Cirqueue
{
public :
	Cirqueue(){front=rear=Max-1;}
	void Enqueue(int x)
	{
        if((rear 1)%Max==front)
			cout<<"Queue Full"<<endl;
		else
		{
			rear=(rear 1)%Max;
			data[rear]=x;
		}
	}
	int Dequeue()
	{  
		if(rear==front)
			return 0;
		else
		{  
			
			front=(front 1)%Max;
			return data[front];
		}
	}
	int empty()
	{
		if(rear==front)
			return 0;
		return 1;
	}
	void deleteall()
	{
		while(empty()!=0)
		{
			Dequeue();
		}
	}
private:
	int front,rear;
	int data[Max];
};Cirqueue q;
class Map
{
private:
	char maparr[Size 1][Size 1];
    int direction;
	
public:
    Map();
	int count;
	void creatmap(int x,int y);
	void meungame(int number);
	void startpaint();
	void creatall();
	int startgame();
	void roaddisplay();
	void smallroaddisplay(int x,int y);
	void display(int i,int j);
	int walk();
};
void meun();
void gameexplain();
void remove(int x,int y) 
{
	COORD coord;
	coord.X=x;
	coord.Y=y;
	SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord );
}
void hidden()
{
	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	CONSOLE_CURSOR_INFO cci;
	GetConsoleCursorInfo(hOut,&cci);
	cci.bVisible=0;
	SetConsoleCursorInfo(hOut,&cci);
}
HANDLE hThread1;
DWORD WINAPI Thread1(LPVOID lpParameter)
{                                
	int i=15;
	iftime=false;
	while(1)
	{   	
		remove(2,17);
		printf("\r\t%02d",i);
		if(i==0)
		{  
			iftime=true;
			TerminateThread(hThread1, 0);
			CloseHandle(hThread1);
			break; 
		}
		Sleep(1000);
		i--;	
	} 	
	return 0;
}

int main()
{   
	char choich;
	while(true)
	{  	
		int number=1;
		hidden();
		meun();
		cin>>choich;
		int select,flag=0;
		string go;
		switch(choich)
		{
		case '1':
		    system("cls");
			while(true)
			{
				Map map;
				map.creatall();
				flag=0;
				while(true)
				{ 
					map.meungame(number);
					system("cls");
					map.startpaint();
					cout<<"====================="<<endl;
					cout<<"........倒计时......."<<endl;
					hThread1 = CreateThread(NULL, 0, Thread1, NULL, 0, NULL);	
					Sleep(1000);
					select=map.startgame(); 
					if(select==1 && iftime==false)
					{	 
						map.roaddisplay();
						TerminateThread(hThread1, 0);
						CloseHandle(hThread1);
						remove(2,18);
						cout<<"......恭喜你成功走出迷宫......"<<endl;
						cout<<"  .............................."<<endl;
						while(true)
						{   
							cout<<"如果想查看最短路径ok"<<endl;
							cout<<"是否继续闯关yes/no"<<endl;
							cin>>go;
							if(go=="yes")
							{
								flag=0;
								number  ;
							}
							else if(go=="no")
								flag=1;
							else if(go=="ok") 
							{
								flag=-1;
								system("cls");
								map.smallroaddisplay((Size 1)/2,(Size 1)/2);
								cout<<endl;
								system("pause");
							}
							else
							{   
								flag=-1;
								cout<<"对不起,您输入的方式无效,请重新输入yes/no"<<endl;
							}
							if(flag==1||flag==0)
								break;
						}
						if(flag==1||flag==0)
							break;
					}
					if(select==-1 && iftime==true)
					{  
						TerminateThread(hThread1, 0);
						CloseHandle(hThread1);
						remove(2,18);
						cout<<"未在规定时间内走出迷宫,闯关失败"<<endl;
						cout<<"是否再一次闯本关(yes) 或 退出(no)"<<endl;
						while(cin>>go)
						{
							if(go=="yes")
							{
							    flag=0;
								q.deleteall();
								break;
							}
							else if(go=="no")
							{
								flag=1;
								break;
							}
							else
								cout<<"输入不规范请重新输入yes/no"<<endl;
						} 
					}
					if(select==0||flag==1)
					{   
						TerminateThread(hThread1, 0);
						CloseHandle(hThread1);
						break;
					}
				}
				if(flag==1||select==0)
				{  
				system("cls");
					break;
				}
			}
			break;
		case '2':
			gameexplain();
			system("cls");
			break;
		case '3':
			exit(0);
			break;
		default:
			cout<<"输入的不规范,请重新输入"<<endl;
		    system("pause");
			system("cls");
			break;
		}
	}
    return 0;
}
void meun()
{   

	cout<<"★.....★.....★.....★.....★.....★.....★.....★.....★"<<endl;
    cout<<"                                                          "<<endl;
	cout<<"                                                          "<<endl;
	cout<<"                  欢 迎 进 入 迷 宫 游 戏                 "<<endl;
	cout<<"                                                          "<<endl;
	cout<<"                                                          "<<endl;
	cout<<"                      1 . 开 始 游 戏                     "<<endl;
	cout<<"                                                          "<<endl;
	cout<<"                      2 . 游 戏 说 明                     "<<endl;
	cout<<"                                                          "<<endl;
	cout<<"                      3 . 退 出 游 戏                     "<<endl;
	cout<<"                                                          "<<endl;
    cout<<"                                                          "<<endl;
	cout<<"                                                          "<<endl;
	cout<<"★.....★.....★.....★.....★.....★.....★.....★.....★"<<endl;
}
void gameexplain()
{
	system("cls");
	cout<<"........................................................."<<endl;
    cout<<"                                                         "<<endl;
	cout<<"                                                         "<<endl;
	cout<<"         1.键盘方向键控制,上下左右行走                  "<<endl;
	cout<<"                                                         "<<endl;
	cout<<"            up向上                                       "<<endl;
	cout<<"            down向下                                     "<<endl;
	cout<<"            left向左                                     "<<endl;
	cout<<"            right向右                                    "<<endl;
	cout<<"                                                         "<<endl;
	cout<<"         2.在规定的30内走出迷宫则为成功,                "<<endl;
	cout<<"                                                         "<<endl;
    cout<<"             若给定时间内不能走出迷宫则失败              "<<endl;
	cout<<"                                                         "<<endl;
	cout<<"         3.游戏中途如想退出,请按ESC键                   "<<endl;
	cout<<"                                                         "<<endl;
	cout<<"........................................................."<<endl;
	system("pause");
}
void Map::meungame(int number)
{  
	system("cls");
	count=number;
	cout<<"                                         "<<endl;
	cout<<"           ◤ 第"<<count<<"关 ◢         "<<endl;
	cout<<"                                         "<<endl;
	cout<<"                                         "<<endl;
	system("pause");
}
Map::Map()
{
	int i,j;
	count=0;
	for(i=1;i<=Size;i  )
		for(j=1;j<=Size;j  )
			maparr[i][j]=wall;
}
void Map::startpaint()
{  
	maparr[(Size 1)/2][(Size 1)/2]=mouse; 
	maparr[Size-1][Size]=end; 
	for(int i=1;i<=Size;i  )
	{
		for(int j=1;j<=Size;j  )
		{  
			if(maparr[i][j]==mouse && (i!=(Size 1)/2 || j!=(Size 1)/2))
				maparr[i][j]=road;
			display(i,j);
		}
		cout<<endl;
	}
}
void Map::display(int i,int j)
{    
	remove(2*j-2,i-1);
	switch(maparr[i][j])
	{
	case start:
		cout<<"入";
		break; 
	case end:
		cout<<"出";
		break; 
	case wall:
		cout<<"■";
		break; 
	case road:
		cout<<"  ";
		break; 
	case mouse :
		cout<<"♀";
		break;
	case smallroad:
		cout<<"*";
		break;
	case maxsmall:
		cout<<"@";
		break;
	}
}
void Map::creatmap(int x,int y)
{
	int c[4][2]={0,1,1,0,0,-1,-1,0}; 
	int i,j,t;
	for(i=0;i<4;i  )
	{
		j=rand()%4;
		t=c[i][0];c[i][0]=c[j][0];c[j][0]=t;
		t=c[i][1];c[i][1]=c[j][1];c[j][1]=t;
	}
	maparr[x][y]=road;
	for(i=0;i<4;i  )
		if(maparr[x 2*c[i][0]][y 2*c[i][1]]==wall)
		{
			maparr[x c[i][0]][y c[i][1]]=road;
			creatmap(x 2*c[i][0],y 2*c[i][1]);
		}
}
void Map::creatall()
{       
	srand((unsigned)time(NULL));
	creatmap(2*(rand()%(Size/2) 1),2*(rand()%(Size/2) 1)); 
	
} 
int Map::walk()
{
	char c;
	while(c=getch())
	{   
		if(c==27) return Esc; 
		if(c==72) return left; 
		if(c==80) return right; 
		if(c==75) return up; 
		if(c==77) return down; 
	}
	return -1;
}
int Map::startgame()
{    
	int x=(Size 1)/2;
	int y=(Size 1)/2;
	int flag=0,select;
	while(iftime!=true)
	{
		select=walk(); 
		q.Enqueue(x);
		q.Enqueue(y);
		switch(select)
		{
		case up:
			if(maparr[x][y-1]!=wall)
			{   
				maparr[x][y]=road;
				maparr[x][y-1]=mouse;
				display(x,y);
				display(x,y-1);
				y--;
			}
			break;
		case down:
			if(maparr[x][y 1]!=wall)
			{   
				maparr[x][y]=road;
				maparr[x][y 1]=mouse;
				display(x,y);
				display(x,y 1);
				y  ;
			}
			break;
		case left:
			if(maparr[x-1][y]!=wall)
			{   
				maparr[x][y]=road;
				maparr[x-1][y]=mouse;
				display(x,y);
				display(x-1,y);
				x--;
			}
			break;
		case right:
			if(maparr[x 1][y]!=wall)
			{   
				maparr[x][y]=road;
				maparr[x 1][y]=mouse;
				display(x,y);
				display(x 1,y);
				x  ;
			}
			break;
		case Esc:
			flag=1;
			break;
		default:
			break;
		}
		if(maparr[Size-1][Size]==mouse||flag==1)
			break;
		if(iftime==true)
			return -1;
	}
	if(flag==1)
		return 0;
	return 1;
}
void Map::roaddisplay()
{  
	int x,y;
	while(true)
	{   
		x=q.Dequeue();
		y=q.Dequeue();
		maparr[x][y]=6;
		if(x==0)
			break;
		else
		{
			display(x,y);
			maparr[x][y]=road;
		}
	}
}
void Map::smallroaddisplay(int x,int y)
{    
	int direction[][2]={{0,1},{1,0},{0,-1},{-1,0}};
	int p=0,i=0,j=0;
	int arr[100]={0};
	int brr[100]={0};
	int record[100]={0};
	int visited[Size 1][Size 1]={0};
	arr[p]=x;
	brr[p]=y;
	maparr[x][y]=road;
	while(true)
	{
		i=i 1;
		if(i<=4)
		{
			x=arr[p] direction[i-1][0];
			y=brr[p] direction[i-1][1];
			if(y<=Size && x<=Size)
			{
				if(maparr[x][y]==road && visited[x][y]==0)
				{
					p  ;
					record[p]=i;
					arr[p]=x;
					brr[p]=y;
					visited[x][y]=1;
					i=0;
				}
			}
		}
		else
		{
			i=record[p];
			p--;
		}
		if(x==Size-1 && y==Size-1)
			break;
	}
	for(j=1;j<=p;j  )
			maparr[arr[j]][brr[j]]=7;
	for(int k=1;k<=Size;k  )
		for( j=1;j<=Size;j  ) 
			display(k,j);
}
	
	


标签: 游戏 迷宫

实例下载地址

c++ 迷宫游戏 源码下载

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警