C++游戏制作入门小游戏(迷宫)此篇只适用于新手

2023-11-05

  • 最近有些无聊,于是翻了翻以前的代码,找到了之前第一次编的游戏,想起以前学完C++无从下手的感觉,就把它加了点备注,当做一篇入门教程发出来了。
  • 这是用DevC++写的,参考自一位大佬写的贪吃蛇。

下面上图

在这里插入图片描述PS:开始界面我现在看来是相当的丑_φ(❐_❐✧
在这里插入图片描述
好吧菜单也不是很好看(/"≡ _ ≡)/~┴┴
在这里插入图片描述

下面是具体步骤:

1:打开你的编程软件,新建项目Console Application

在这里插入图片描述
在这里插入图片描述
2:将各个.h和.cpp的文件加入项目
在这里插入图片描述
3:编译运行即可,不过我仅在DevC++的C++11标准下运行调试过,另外应该有不少在用VC6.0的朋友,VC6是没有C++11标准的,别试了。(记得把自己的编译器调成C++11标准)

准备完成,接下来让我们看代码吧

main.cpp

#include "controller.h"

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv) {
	Controller c;//构造类Controller 
	c.Game();//游戏开始
	return 0;
}

controller.h

#ifndef CONTROLLER_H//#ifndef排除重名 
#define CONTROLLER_H//定义头文件名 

class Controller
{
	public:
		Controller(){}
		
		void Start();
		void Game();
		int Menu();			
};

#endif//CONTROLLER_H

controller.cpp

#include "controller.h"
#include "tools.h"
#include "map.h"
#include "ball.h"
#include "picture.h"

#include <iostream>
#include <windows.h>
#include <conio.h>
#include <stdlib.h>

#define Mapamount 2//地图总数 

void Controller::Start()//开始游戏界面 
{
	SetWindowSize(40,30);//设置40*30的界面窗口(此为定义函数,具体在tools类中,下同) 
	SetColor(3);//字体颜色为湖蓝色 
	
	Picture *start=new Picture();//创造动态Picture类 
	start->PrintStart();//开始动画 
	delete start;//释放start 
	
	SetCursorPosition(14,23);//改变光标位置,此后不在重复提起 
	SetColor(4);//字体颜色为红色 
	system("pause");
}

void Controller::Game()//游戏开始 
{
	char ch;
	int key,MapId;//key为菜单选项,MapId为地图序号 
		
	Controller *menu=new Controller();//创造动态Controller类 
	Ball *ball=new Ball();//创造动态Ball类 
	Picture *interface1=new Picture();//创造动态Picture类(ps:interface是系统变量,无法声明) 
	
	Start();//游戏开始界面 
	MapId=1;//初始化地图ID 
    
	while(true)//在选择退出游戏前无限循环 
	{
	    Map *map=new Map();//创造动态Map类
		
		system("color 70");//黑字白底 
		system("cls");//清除开始界面 
		
		if(key==3) 
		{
			MapId=rand()%Mapamount+1;//在已有地图中随机生成一个 
		}
		map->PrintInitmap();//打印初始地图 
		
		switch(MapId)//选择地图 
		{
			case 1:
			{	
				map->PrintMap1();
		        break;
			}
			case 2:
			{
				map->PrintMap2();
				break; 
			}
			default:
				break;
		}
		Point *Endpoint=new Point(map->endpoint.GetX(),map->endpoint.GetY());//设置一个记录结束点指针判断是否到达终点 

		ball->GetWall(map,MapId);//在球中记录表示墙的点 
		ball->ChangeBall(map->startpoint.GetX(),map->startpoint.GetY());//初始化球的坐标 
		
		delete map;//释放map 
		
	    interface1->PrintInterface1();//打印菜单界面 
	      
	    SetCursorPosition(39,28);//不让光标影响游戏
		key=ball->Move(menu,Endpoint);
		/*此处设计不合理,因不影响游戏,所以太懒不想改 
		   在球的移动函数里调用菜单函数,返回key来决定是否更改地图*/ 

		delete Endpoint;//释放Endpoint 	
	}
	delete menu,ball,interface1;//释放menu,ball,interface1
}

int Controller::Menu()//菜单函数 
{	
    char ch;	
	int key=1;//初始化菜单选项 
	
	for(;ch!=13;)//通过回车来取消循环 
	{ 	
		switch(key)
		{
			case 1:
			{
				SetColor(2);//表示选中(绿字黑底) 
				
				SetCursorPosition(32,16);
	            std::cout<<"1:继续游戏";
	            
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
				FOREGROUND_INTENSITY|FOREGROUND_RED|
	            BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE);//取消选中(红字白底) 
	            
	            SetCursorPosition(32,19);
				std::cout<<"2:重新开始";
				
				SetCursorPosition(32,22);
				std::cout<<"3:更换地图";
	            
	            SetCursorPosition(32,25);
				std::cout<<"4:退出游戏";
	            break;
			}
			case 2:
			{
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
				FOREGROUND_INTENSITY|FOREGROUND_RED|
	            BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE);//取消选中
				
				SetCursorPosition(32,16);
	            std::cout<<"1:继续游戏";
	            
	            SetColor(2);//表示选中 
	            
	            SetCursorPosition(32,19);
				std::cout<<"2:重新开始";
				
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
				FOREGROUND_INTENSITY|FOREGROUND_RED|
	            BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE);//取消选中
	            
	            SetCursorPosition(32,22);
	            std::cout<<"3:更换地图";
	            
				SetCursorPosition(32,25);
				std::cout<<"4:退出游戏";
				break; 
			}
			case 3:
			{
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
				FOREGROUND_INTENSITY|FOREGROUND_RED|
	            BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE);//取消选中
	            
				SetCursorPosition(32,16);
	            std::cout<<"1:继续游戏";
	            
	            SetCursorPosition(32,19);
				std::cout<<"2:重新开始";
				
				SetColor(2);//表示选中 
				
				SetCursorPosition(32,22);
	            std::cout<<"3:更换地图";
	            
	            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
				FOREGROUND_INTENSITY|FOREGROUND_RED|
	            BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE);//取消选中
	            
	            SetCursorPosition(32,25);
				std::cout<<"4:退出游戏";
	            break;
			}
			case 4:
			{
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
				FOREGROUND_INTENSITY|FOREGROUND_RED|
	            BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE);//取消选中
	            
				SetCursorPosition(32,16);
	            std::cout<<"1:继续游戏";
	            
	            SetCursorPosition(32,19);
				std::cout<<"2:重新开始";
				
				SetCursorPosition(32,22);
	            std::cout<<"3:更换地图";
	            
	            SetColor(2);//表示选中 
	            
				SetCursorPosition(32,25);
				std::cout<<"4:退出游戏";
				break; 
			}
			default:
				break;
		}
		ch=getch();
		/*此处说明:键入上下左右键会出现两个ascii码值
		  分别为上:224,72 下:224,80 左:224,75 右:224,77*/
		
		switch(ch)
		{
			case -32:
			{
				ch=getch();
				switch(ch)
				{
					case 72://上移 
					{
						if(key!=1)
							key--;
						else
						    key=4;//超过上限,循环 
						break;	
					}
					case 80://下移 
					{
							
						if(key!=4)
							key++;
						else
						    key=1;//超过下限,循环 
						break;
				    }
				    default:
				    	break;
				}
			}
			default:
				break;
		}
	}
	
	switch(key)//各菜单选项的实现 
	{
		case 1:
		{
			SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
	        FOREGROUND_INTENSITY|FOREGROUND_RED|
	        BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE);//取消选中 
	
	        SetCursorPosition(32,16);
 	        std::cout<<"1:继续游戏";
            break;
		}
		case 2:
			system("cls");//清除屏幕,重新开始 
			return 2;
		case 3:
			return 3;
		case 4:
		{
			system("cls");
			exit(0);//退出游戏 
		}		
		default:
			break;
	}
	return key;	
}

map.h

#ifndef MAP_H
#define MAP_H

#include "point.h"

#include <vector>//不知道的童鞋请百度具体用法 

class Map
{    
	public:
		Map()
		{
			int i,j;
			
			for(i=0;i<=29;i+=29)//利用双重循环向initmap压入各点 
				for(j=0;j<=29;j++)
					initmap.emplace_back(Point(i,j));
					
			for(i=1;i<=28;i++)
			    for(j=0;j<=29;j+=29)
			        initmap.emplace_back(Point(i,j));
		}
		Point startpoint,endpoint;//记录初始点与终点 
		
	    void PrintInitmap();
		void PushMap1();
		void PushMap2();
		void PrintMap1();
		void PrintMap2();
	private:
		std::vector<Point> initmap;
		std::vector<Point> map1;
		std::vector<Point> map2;
		/*这里可以加入新的地图,本项目只演示两张
		(ps:地图其实可以用遍历算法得到,因这里是入门讲解,不做讨论)*/ 
	friend class Ball;//让小球可以调用地图 
 };
 
 #endif//MAP_H

map.cpp

#include "map.h"
#include "tools.h" 
#include "point.h"

#include <windows.h>

void Map::PrintInitmap()//打印初始地图 
{
	for(auto &point :initmap)
	{
		SetColor(0);//黑字黑底:打印墙 
		point.PrintSquare();//打印方块(ps:为了整齐划,字符还是用的方块,其实不需要) 
		Sleep(10);//利用打印时延来营造动画效果,下同 
	}
}

void Map::PrintMap1()//打印地图一 
{
	PushMap1();//map1中压入各点 
	
	for(auto &point :map1)//不知道auto在for循环中使用的自行百度 
    {
		point.PrintSquare();//打印方块 
		Sleep(10);
	}
	
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
	FOREGROUND_INTENSITY|FOREGROUND_RED|
	BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE);//红字白底 
	
	startpoint.ChangePoint(3,28);
	startpoint.PrintCircular();//打印小初始点 
	endpoint.ChangePoint(28,14);
	endpoint.PrintSquare();//打印 终点 
}

void Map::PrintMap2()//打印地图二 
{
	PushMap2();//map2中压入各点 
	
	for(auto &point :map2)
    {
		point.PrintSquare();
		Sleep(0);
	}
	
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
	FOREGROUND_INTENSITY|FOREGROUND_RED|
	BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE);//红字白底 
	
	startpoint.ChangePoint(1,7); 
	startpoint.PrintCircular();
	endpoint.ChangePoint(28,18);
	endpoint.PrintSquare();
}

/*压入地图一中各点(ps:此处过于繁琐,只用作讲解,各位看官可以无视,
以下代码仅仅是将各点一个个输入map数组中,感兴趣童靴自行百度如何生成迷宫地图)*/
void Map::PushMap1()
{
	map1.clear();
    map1.emplace_back(Point(1,28));
	map1.emplace_back(Point(1,24));
    map1.emplace_back(Point(1,23));
	map1.emplace_back(Point(1,12));
	map1.emplace_back(Point(1,11));
	map1.emplace_back(Point(1,2));
	map1.emplace_back(Point(2,4));
	map1.emplace_back(Point(2,5));
	map1.emplace_back(Point(2,6));
	map1.emplace_back(Point(2,8));
	map1.emplace_back(Point(2,9));
	map1.emplace_back(Point(2,14));
	map1.emplace_back(Point(2,16));
	map1.emplace_back(Point(2,17));
	map1.emplace_back(Point(2,18));
	map1.emplace_back(Point(2,19));
	map1.emplace_back(Point(2,20));
	map1.emplace_back(Point(2,21));
	map1.emplace_back(Point(2,23));
	map1.emplace_back(Point(2,26));
	map1.emplace_back(Point(2,28));
	map1.emplace_back(Point(3,2));
	map1.emplace_back(Point(3,3));
	map1.emplace_back(Point(3,4));
	map1.emplace_back(Point(3,6));
	map1.emplace_back(Point(3,7));
	map1.emplace_back(Point(3,8));
	map1.emplace_back(Point(3,9));
	map1.emplace_back(Point(3,10));
	map1.emplace_back(Point(3,11));
	map1.emplace_back(Point(3,12));
	map1.emplace_back(Point(3,13));
	map1.emplace_back(Point(3,14));
	map1.emplace_back(Point(3,15));
	map1.emplace_back(Point(3,16));
	map1.emplace_back(Point(3,20));
	map1.emplace_back(Point(3,25));
	map1.emplace_back(Point(3,26));
	map1.emplace_back(Point(4,10));
	map1.emplace_back(Point(4,16));
	map1.emplace_back(Point(4,18));
	map1.emplace_back(Point(4,19));
	map1.emplace_back(Point(4,20));
	map1.emplace_back(Point(4,21));
	map1.emplace_back(Point(4,22));
	map1.emplace_back(Point(4,23));
	map1.emplace_back(Point(4,25));
	map1.emplace_back(Point(4,28));
	map1.emplace_back(Point(5,1));
	map1.emplace_back(Point(5,2));
	map1.emplace_back(Point(5,3));
	map1.emplace_back(Point(5,4));
	map1.emplace_back(Point(5,5));
	map1.emplace_back(Point(5,6));
	map1.emplace_back(Point(5,7));
	map1.emplace_back(Point(5,8));
	map1.emplace_back(Point(5,10));
	map1.emplace_back(Point(5,12));
	map1.emplace_back(Point(5,13));
	map1.emplace_back(Point(5,14));
	map1.emplace_back(Point(5,16));
	map1.emplace_back(Point(5,18));
	map1.emplace_back(Point(5,23));
	map1.emplace_back(Point(5,25));
	map1.emplace_back(Point(5,27));
	map1.emplace_back(Point(5,28));
	map1.emplace_back(Point(6,1));
	map1.emplace_back(Point(6,5));
	map1.emplace_back(Point(6,10));
	map1.emplace_back(Point(6,12));
	map1.emplace_back(Point(6,16));
	map1.emplace_back(Point(6,20));
	map1.emplace_back(Point(6,21));
	map1.emplace_back(Point(6,25));
	map1.emplace_back(Point(7,3));
	map1.emplace_back(Point(7,7));
	map1.emplace_back(Point(7,8));
	map1.emplace_back(Point(7,10));
	map1.emplace_back(Point(7,12));
	map1.emplace_back(Point(7,14));
	map1.emplace_back(Point(7,15));
	map1.emplace_back(Point(7,16));
	map1.emplace_back(Point(7,17));
	map1.emplace_back(Point(7,18));
	map1.emplace_back(Point(7,19));
	map1.emplace_back(Point(7,20));
	map1.emplace_back(Point(7,23));
	map1.emplace_back(Point(7,24));
	map1.emplace_back(Point(7,25));
	map1.emplace_back(Point(7,27));
	map1.emplace_back(Point(8,2));
	map1.emplace_back(Point(8,3));
	map1.emplace_back(Point(8,4));
	map1.emplace_back(Point(8,5));
	map1.emplace_back(Point(8,6));
	map1.emplace_back(Point(8,7));
	map1.emplace_back(Point(8,10));
	map1.emplace_back(Point(8,12));
	map1.emplace_back(Point(8,14));
	map1.emplace_back(Point(8,20));
	map1.emplace_back(Point(8,21));
	map1.emplace_back(Point(8,22));
	map1.emplace_back(Point(8,23));
	map1.emplace_back(Point(8,27));
	map1.emplace_back(Point(9,8));
	map1.emplace_back(Point(9,10));
	map1.emplace_back(Point(9,12));
	map1.emplace_back(Point(9,16));
	map1.emplace_back(Point(9,17));
	map1.emplace_back(Point(9,18));
	map1.emplace_back(Point(9,23));
	map1.emplace_back(Point(9,25));
	map1.emplace_back(Point(9,26));
	map1.emplace_back(Point(9,27));
	map1.emplace_back(Point(10,1));
	map1.emplace_back(Point(10,2));
	map1.emplace_back(Point(10,3));
	map1.emplace_back(Point(10,4));
	map1.emplace_back(Point(10,5));
	map1.emplace_back(Point(10,7));
	map1.emplace_back(Point(10,8));
	map1.emplace_back(Point(10,10));
	map1.emplace_back(Point(10,12));
	map1.emplace_back(Point(10,13));
	map1.emplace_back(Point(10,14));
	map1.emplace_back(Point(10,16));
	map1.emplace_back(Point(10,18));
	map1.emplace_back(Point(10,19));
	map1.emplace_back(Point(10,20));
	map1.emplace_back(Point(10,21));
	map1.emplace_back(Point(10,25));
	map1.emplace_back(Point(11,4));
	map1.emplace_back(Point(11,8));
	map1.emplace_back(Point(11,10));
	map1.emplace_back(Point(11,14));
	map1.emplace_back(Point(11,15));
	map1.emplace_back(Point(11,16));
	map1.emplace_back(Point(11,18));
	map1.emplace_back(Point(11,21));
	map1.emplace_back(Point(11,22));
	map1.emplace_back(Point(11,23));
	map1.emplace_back(Point(11,24));
	map1.emplace_back(Point(11,25));
	map1.emplace_back(Point(11,27));
	map1.emplace_back(Point(12,2));
	map1.emplace_back(Point(12,6));
	map1.emplace_back(Point(12,8));
	map1.emplace_back(Point(12,10));
	map1.emplace_back(Point(12,11));
	map1.emplace_back(Point(12,12));
	map1.emplace_back(Point(12,20));
	map1.emplace_back(Point(12,27));
	map1.emplace_back(Point(13,2));
	map1.emplace_back(Point(13,3));
	map1.emplace_back(Point(13,4));
	map1.emplace_back(Point(13,6));
	map1.emplace_back(Point(13,7));
	map1.emplace_back(Point(13,10));
	map1.emplace_back(Point(13,14));
	map1.emplace_back(Point(13,15));
	map1.emplace_back(Point(13,16));
	map1.emplace_back(Point(13,17));
	map1.emplace_back(Point(13,18));
	map1.emplace_back(Point(13,20));
	map1.emplace_back(Point(13,21));
	map1.emplace_back(Point(13,22));
	map1.emplace_back(Point(13,23));
	map1.emplace_back(Point(13,24));
	map1.emplace_back(Point(13,25));
	map1.emplace_back(Point(13,26));
	map1.emplace_back(Point(13,27));
	map1.emplace_back(Point(14,3));
	map1.emplace_back(Point(14,7));
	map1.emplace_back(Point(14,9));
	map1.emplace_back(Point(14,10));
	map1.emplace_back(Point(14,12));
	map1.emplace_back(Point(14,13));
	map1.emplace_back(Point(14,14));
	map1.emplace_back(Point(14,18));
	map1.emplace_back(Point(14,22));
	map1.emplace_back(Point(15,2));
	map1.emplace_back(Point(15,3));
	map1.emplace_back(Point(15,4));
	map1.emplace_back(Point(15,5));
	map1.emplace_back(Point(15,7));
	map1.emplace_back(Point(15,10));
	map1.emplace_back(Point(15,16));
	map1.emplace_back(Point(15,18));
	map1.emplace_back(Point(15,19));
	map1.emplace_back(Point(15,20));
	map1.emplace_back(Point(15,22));
	map1.emplace_back(Point(15,23));
	map1.emplace_back(Point(15,24));
	map1.emplace_back(Point(15,25));
	map1.emplace_back(Point(15,26));
	map1.emplace_back(Point(15,27));
	map1.emplace_back(Point(16,5));
	map1.emplace_back(Point(16,7));
	map1.emplace_back(Point(16,8));
	map1.emplace_back(Point(16,9));
	map1.emplace_back(Point(16,10));
	map1.emplace_back(Point(16,12));
	map1.emplace_back(Point(16,13));
	map1.emplace_back(Point(16,14));
	map1.emplace_back(Point(16,15));
	map1.emplace_back(Point(16,16));
	map1.emplace_back(Point(16,20));
	map1.emplace_back(Point(16,26));
	map1.emplace_back(Point(17,1));
	map1.emplace_back(Point(17,2));
	map1.emplace_back(Point(17,3));
	map1.emplace_back(Point(17,5));
	map1.emplace_back(Point(17,6));
	map1.emplace_back(Point(17,16));
	map1.emplace_back(Point(17,17));
	map1.emplace_back(Point(17,18));
	map1.emplace_back(Point(17,20));
	map1.emplace_back(Point(17,21));
	map1.emplace_back(Point(17,22));
	map1.emplace_back(Point(17,23));
	map1.emplace_back(Point(17,24));
	map1.emplace_back(Point(17,27));
	map1.emplace_back(Point(17,28));
	map1.emplace_back(Point(18,6));
	map1.emplace_back(Point(18,7));
	map1.emplace_back(Point(18,8));
	map1.emplace_back(Point(18,9));
	map1.emplace_back(Point(18,10));
	map1.emplace_back(Point(18,11));
	map1.emplace_back(Point(18,12));
	map1.emplace_back(Point(18,13));
	map1.emplace_back(Point(18,14));
	map1.emplace_back(Point(18,18));
	map1.emplace_back(Point(18,25));
	map1.emplace_back(Point(19,2));
	map1.emplace_back(Point(19,3));
	map1.emplace_back(Point(19,4));
	map1.emplace_back(Point(19,5));
	map1.emplace_back(Point(19,6));
	map1.emplace_back(Point(19,10));
	map1.emplace_back(Point(19,14));
	map1.emplace_back(Point(19,16));
	map1.emplace_back(Point(19,19));
	map1.emplace_back(Point(19,20));
	map1.emplace_back(Point(19,21));
	map1.emplace_back(Point(19,22));
	map1.emplace_back(Point(19,23));
	map1.emplace_back(Point(19,24));
	map1.emplace_back(Point(19,25));
	map1.emplace_back(Point(19,26));
	map1.emplace_back(Point(19,27));
	map1.emplace_back(Point(20,2));
	map1.emplace_back(Point(20,8));
	map1.emplace_back(Point(20,10));
	map1.emplace_back(Point(20,12));
	map1.emplace_back(Point(20,14));
	map1.emplace_back(Point(20,16));
	map1.emplace_back(Point(20,17));
	map1.emplace_back(Point(20,25));
	map1.emplace_back(Point(20,27));
	map1.emplace_back(Point(21,2));
	map1.emplace_back(Point(21,4));
	map1.emplace_back(Point(21,5));
	map1.emplace_back(Point(21,6));
	map1.emplace_back(Point(21,7));
	map1.emplace_back(Point(21,8));
	map1.emplace_back(Point(21,10));
	map1.emplace_back(Point(21,12));
	map1.emplace_back(Point(21,16));
	map1.emplace_back(Point(21,19));
	map1.emplace_back(Point(21,21));
	map1.emplace_back(Point(21,22));
	map1.emplace_back(Point(21,23));
	map1.emplace_back(Point(21,24));
	map1.emplace_back(Point(22,2));
	map1.emplace_back(Point(22,7));
	map1.emplace_back(Point(22,8));
	map1.emplace_back(Point(22,9));
	map1.emplace_back(Point(22,10));
	map1.emplace_back(Point(22,12));
	map1.emplace_back(Point(22,13));
	map1.emplace_back(Point(22,14));
	map1.emplace_back(Point(22,15));
	map1.emplace_back(Point(22,17));
	map1.emplace_back(Point(22,18));
	map1.emplace_back(Point(22,19));
	map1.emplace_back(Point(22,25));
	map1.emplace_back(Point(22,27));
	map1.emplace_back(Point(23,2));
	map1.emplace_back(Point(23,3));
	map1.emplace_back(Point(23,4));
	map1.emplace_back(Point(23,5));
	map1.emplace_back(Point(23,12));
	map1.emplace_back(Point(23,19));
	map1.emplace_back(Point(23,21));
	map1.emplace_back(Point(23,22));
	map1.emplace_back(Point(23,23));
	map1.emplace_back(Point(23,24));
	map1.emplace_back(Point(23,27));
	map1.emplace_back(Point(24,2));
	map1.emplace_back(Point(24,6));
	map1.emplace_back(Point(24,7));
	map1.emplace_back(Point(24,8));
	map1.emplace_back(Point(24,9));
	map1.emplace_back(Point(24,11));
	map1.emplace_back(Point(24,14));
	map1.emplace_back(Point(24,15));
	map1.emplace_back(Point(24,16));
	map1.emplace_back(Point(24,17));
	map1.emplace_back(Point(24,20));
	map1.emplace_back(Point(24,26));
	map1.emplace_back(Point(24,27));
	map1.emplace_back(Point(25,2));
	map1.emplace_back(Point(25,4));
	map1.emplace_back(Point(25,5));
	map1.emplace_back(Point(25,9));
	map1.emplace_back(Point(25,11));
	map1.emplace_back(Point(25,13));
	map1.emplace_back(Point(25,18));
	map1.emplace_back(Point(25,21));
	map1.emplace_back(Point(25,22));
	map1.emplace_back(Point(25,24));
	map1.emplace_back(Point(25,25));
	map1.emplace_back(Point(26,2));
	map1.emplace_back(Point(26,11));
	map1.emplace_back(Point(26,13));
	map1.emplace_back(Point(26,15));
	map1.emplace_back(Point(26,16));
	map1.emplace_back(Point(26,18));
	map1.emplace_back(Point(26,19));
	map1.emplace_back(Point(26,20));
	map1.emplace_back(Point(26,24));
	map1.emplace_back(Point(26,27));
	map1.emplace_back(Point(27,2));
	map1.emplace_back(Point(27,3));
	map1.emplace_back(Point(27,4));
	map1.emplace_back(Point(27,5));
	map1.emplace_back(Point(27,6));
	map1.emplace_back(Point(27,7));
	map1.emplace_back(Point(27,8));
	map1.emplace_back(Point(27,9));
	map1.emplace_back(Point(27,10));
	map1.emplace_back(Point(27,11));
	map1.emplace_back(Point(27,13));
	map1.emplace_back(Point(27,16));
	map1.emplace_back(Point(27,22));
	map1.emplace_back(Point(27,23));
	map1.emplace_back(Point(27,25));
	map1.emplace_back(Point(27,26));
	map1.emplace_back(Point(27,27));
	map1.emplace_back(Point(28,13));
	map1.emplace_back(Point(28,15));
	map1.emplace_back(Point(28,18));
	map1.emplace_back(Point(28,19));
	map1.emplace_back(Point(28,21));
}

void Map::PushMap2()
{
	map2.clear();
	map2.emplace_back(Point(1,16));
	map2.emplace_back(Point(1,17));
	map2.emplace_back(Point(1,18));
	map2.emplace_back(Point(1,19));
	map2.emplace_back(Point(2,2));
	map2.emplace_back(Point(2,3));
	map2.emplace_back(Point(2,4));
	map2.emplace_back(Point(2,6));
	map2.emplace_back(Point(2,8));
	map2.emplace_back(Point(2,9));
	map2.emplace_back(Point(2,10));
	map2.emplace_back(Point(2,12));
	map2.emplace_back(Point(2,13));
	map2.emplace_back(Point(2,14));
	map2.emplace_back(Point(2,19));
	map2.emplace_back(Point(2,21));
	map2.emplace_back(Point(2,22));
	map2.emplace_back(Point(2,24));
	map2.emplace_back(Point(2,26));
	map2.emplace_back(Point(2,27));
	map2.emplace_back(Point(3,2));
	map2.emplace_back(Point(3,5));
	map2.emplace_back(Point(3,10));
	map2.emplace_back(Point(3,15));
	map2.emplace_back(Point(3,17));
	map2.emplace_back(Point(3,18));
	map2.emplace_back(Point(3,19));
	map2.emplace_back(Point(3,22));
	map2.emplace_back(Point(3,25));
	map2.emplace_back(Point(4,2));
	map2.emplace_back(Point(4,4));
	map2.emplace_back(Point(4,6));
	map2.emplace_back(Point(4,7));
	map2.emplace_back(Point(4,8));
	map2.emplace_back(Point(4,11));
	map2.emplace_back(Point(4,12));
	map2.emplace_back(Point(4,13));
	map2.emplace_back(Point(4,14));
	map2.emplace_back(Point(4,16));
	map2.emplace_back(Point(4,20));
	map2.emplace_back(Point(4,22));
	map2.emplace_back(Point(4,24));
	map2.emplace_back(Point(4,27));
	map2.emplace_back(Point(4,28));
	map2.emplace_back(Point(5,2));
	map2.emplace_back(Point(5,4));
	map2.emplace_back(Point(5,9));
	map2.emplace_back(Point(5,16));
	map2.emplace_back(Point(5,18));
	map2.emplace_back(Point(5,20));
	map2.emplace_back(Point(5,22));
	map2.emplace_back(Point(5,24));
	map2.emplace_back(Point(5,26));
	map2.emplace_back(Point(6,2));
	map2.emplace_back(Point(6,4));
	map2.emplace_back(Point(6,5));
	map2.emplace_back(Point(6,6));
	map2.emplace_back(Point(6,8));
	map2.emplace_back(Point(6,10));
	map2.emplace_back(Point(6,12));
	map2.emplace_back(Point(6,13));
	map2.emplace_back(Point(6,14));
	map2.emplace_back(Point(6,16));
	map2.emplace_back(Point(6,18));
	map2.emplace_back(Point(6,20));
	map2.emplace_back(Point(6,22));
	map2.emplace_back(Point(6,24));
	map2.emplace_back(Point(6,27));
	map2.emplace_back(Point(7,2));
	map2.emplace_back(Point(7,6));
	map2.emplace_back(Point(7,11));
	map2.emplace_back(Point(7,14));
	map2.emplace_back(Point(7,18));
	map2.emplace_back(Point(7,20));
	map2.emplace_back(Point(7,22));
	map2.emplace_back(Point(7,24));
	map2.emplace_back(Point(7,26));
	map2.emplace_back(Point(8,2));
	map2.emplace_back(Point(8,3));
	map2.emplace_back(Point(8,4));
	map2.emplace_back(Point(8,7));
	map2.emplace_back(Point(8,9));
	map2.emplace_back(Point(8,10));
	map2.emplace_back(Point(8,13));
	map2.emplace_back(Point(8,15));
	map2.emplace_back(Point(8,16));
	map2.emplace_back(Point(8,18));
	map2.emplace_back(Point(8,20));
	map2.emplace_back(Point(8,22));
	map2.emplace_back(Point(8,24));
	map2.emplace_back(Point(8,27));
	map2.emplace_back(Point(9,6));
	map2.emplace_back(Point(9,7));
	map2.emplace_back(Point(9,9));
	map2.emplace_back(Point(9,12));
	map2.emplace_back(Point(9,17));
	map2.emplace_back(Point(9,20));
	map2.emplace_back(Point(9,20));
	map2.emplace_back(Point(9,22));
	map2.emplace_back(Point(9,24));
	map2.emplace_back(Point(9,26));
	map2.emplace_back(Point(10,1));
	map2.emplace_back(Point(10,2));
	map2.emplace_back(Point(10,3));
	map2.emplace_back(Point(10,5));
	map2.emplace_back(Point(10,11));
	map2.emplace_back(Point(10,13));
	map2.emplace_back(Point(10,14));
	map2.emplace_back(Point(10,15));
	map2.emplace_back(Point(10,17));
	map2.emplace_back(Point(10,19));
	map2.emplace_back(Point(10,20));
	map2.emplace_back(Point(10,22));
	map2.emplace_back(Point(10,24));
	map2.emplace_back(Point(10,27));
	map2.emplace_back(Point(11,4));
	map2.emplace_back(Point(11,7));
	map2.emplace_back(Point(11,8));
	map2.emplace_back(Point(11,9));
	map2.emplace_back(Point(11,10));
	map2.emplace_back(Point(11,17));
	map2.emplace_back(Point(11,22));
	map2.emplace_back(Point(11,24));
	map2.emplace_back(Point(11,26));
	map2.emplace_back(Point(12,2));
	map2.emplace_back(Point(12,6));
	map2.emplace_back(Point(12,12));
	map2.emplace_back(Point(12,13));
	map2.emplace_back(Point(12,14));
	map2.emplace_back(Point(12,15));
	map2.emplace_back(Point(12,17));
	map2.emplace_back(Point(12,18));
	map2.emplace_back(Point(12,19));
	map2.emplace_back(Point(12,20));
	map2.emplace_back(Point(12,21));
	map2.emplace_back(Point(12,22));
	map2.emplace_back(Point(12,24));
	map2.emplace_back(Point(12,27));
	map2.emplace_back(Point(13,2));
	map2.emplace_back(Point(13,5));
	map2.emplace_back(Point(13,8));
	map2.emplace_back(Point(13,9));
	map2.emplace_back(Point(13,10));
	map2.emplace_back(Point(13,11));
	map2.emplace_back(Point(13,15));
	map2.emplace_back(Point(13,23));
	map2.emplace_back(Point(13,24));
	map2.emplace_back(Point(13,26));
	map2.emplace_back(Point(14,3));
	map2.emplace_back(Point(14,4));
	map2.emplace_back(Point(14,7));
	map2.emplace_back(Point(14,13));
	map2.emplace_back(Point(14,15));
	map2.emplace_back(Point(14,16));
	map2.emplace_back(Point(14,17));
	map2.emplace_back(Point(14,18));
	map2.emplace_back(Point(14,19));
	map2.emplace_back(Point(14,20));
	map2.emplace_back(Point(14,21));
	map2.emplace_back(Point(14,27));
	map2.emplace_back(Point(15,1));
	map2.emplace_back(Point(15,5));
	map2.emplace_back(Point(15,7));
	map2.emplace_back(Point(15,9));
	map2.emplace_back(Point(15,10));
	map2.emplace_back(Point(15,11));
	map2.emplace_back(Point(15,12));
	map2.emplace_back(Point(15,23));
	map2.emplace_back(Point(15,24));
	map2.emplace_back(Point(15,25));
	map2.emplace_back(Point(15,26));
	map2.emplace_back(Point(15,27));
	map2.emplace_back(Point(16,2));
	map2.emplace_back(Point(16,3));
	map2.emplace_back(Point(16,5));
	map2.emplace_back(Point(16,7));
	map2.emplace_back(Point(16,9));
	map2.emplace_back(Point(16,13));
	map2.emplace_back(Point(16,14));
	map2.emplace_back(Point(16,15));
	map2.emplace_back(Point(16,16));
	map2.emplace_back(Point(16,17));
	map2.emplace_back(Point(16,18));
	map2.emplace_back(Point(16,19));
	map2.emplace_back(Point(16,20));
	map2.emplace_back(Point(16,21));
	map2.emplace_back(Point(16,22));
	map2.emplace_back(Point(17,5));
	map2.emplace_back(Point(17,7));
	map2.emplace_back(Point(17,10));
	map2.emplace_back(Point(17,11));
	map2.emplace_back(Point(17,22));
	map2.emplace_back(Point(17,24));
	map2.emplace_back(Point(17,25));
	map2.emplace_back(Point(17,26));
	map2.emplace_back(Point(17,27));
	map2.emplace_back(Point(18,2));
	map2.emplace_back(Point(18,3));
	map2.emplace_back(Point(18,5));
	map2.emplace_back(Point(18,7));
	map2.emplace_back(Point(18,8));
	map2.emplace_back(Point(18,12));
	map2.emplace_back(Point(18,14));
	map2.emplace_back(Point(18,16));
	map2.emplace_back(Point(18,17));
	map2.emplace_back(Point(18,18));
	map2.emplace_back(Point(18,19));
	map2.emplace_back(Point(18,20));
	map2.emplace_back(Point(18,22));
	map2.emplace_back(Point(18,27));
	map2.emplace_back(Point(19,4));
	map2.emplace_back(Point(19,5));
	map2.emplace_back(Point(19,9));
	map2.emplace_back(Point(19,10));
	map2.emplace_back(Point(19,13));
	map2.emplace_back(Point(19,14));
	map2.emplace_back(Point(19,16));
	map2.emplace_back(Point(19,20));
	map2.emplace_back(Point(19,23));
	map2.emplace_back(Point(19,24));
	map2.emplace_back(Point(19,25));
	map2.emplace_back(Point(19,27));
	map2.emplace_back(Point(20,1));
	map2.emplace_back(Point(20,2));
	map2.emplace_back(Point(20,4));
	map2.emplace_back(Point(20,6));
	map2.emplace_back(Point(20,7));
	map2.emplace_back(Point(20,11));
	map2.emplace_back(Point(20,14));
	map2.emplace_back(Point(20,16));
	map2.emplace_back(Point(20,18));
	map2.emplace_back(Point(20,20));
	map2.emplace_back(Point(20,22));
	map2.emplace_back(Point(20,27));
	map2.emplace_back(Point(21,4));
	map2.emplace_back(Point(21,8));
	map2.emplace_back(Point(21,9));
	map2.emplace_back(Point(21,12));
	map2.emplace_back(Point(21,15));
	map2.emplace_back(Point(21,16));
	map2.emplace_back(Point(21,18));
	map2.emplace_back(Point(21,20));
	map2.emplace_back(Point(21,22));
	map2.emplace_back(Point(21,24));
	map2.emplace_back(Point(21,25));
	map2.emplace_back(Point(21,26));
	map2.emplace_back(Point(22,2));
	map2.emplace_back(Point(22,3));
	map2.emplace_back(Point(22,4));
	map2.emplace_back(Point(22,6));
	map2.emplace_back(Point(22,9));
	map2.emplace_back(Point(22,10));
	map2.emplace_back(Point(22,13));
	map2.emplace_back(Point(22,16));
	map2.emplace_back(Point(22,18));
	map2.emplace_back(Point(22,20));
	map2.emplace_back(Point(22,22));
	map2.emplace_back(Point(22,27));
	map2.emplace_back(Point(23,6));
	map2.emplace_back(Point(23,7));
	map2.emplace_back(Point(23,10));
	map2.emplace_back(Point(23,11));
	map2.emplace_back(Point(23,14));
	map2.emplace_back(Point(23,18));
	map2.emplace_back(Point(23,20));
	map2.emplace_back(Point(23,23));
	map2.emplace_back(Point(23,24));
	map2.emplace_back(Point(23,25));
	map2.emplace_back(Point(23,27));
	map2.emplace_back(Point(24,1));
	map2.emplace_back(Point(24,2));
	map2.emplace_back(Point(24,3));
	map2.emplace_back(Point(24,4));
	map2.emplace_back(Point(24,5));
	map2.emplace_back(Point(24,9));
	map2.emplace_back(Point(24,12));
	map2.emplace_back(Point(24,15));
	map2.emplace_back(Point(24,16));
	map2.emplace_back(Point(24,17));
	map2.emplace_back(Point(24,18));
	map2.emplace_back(Point(24,20));
	map2.emplace_back(Point(24,22));
	map2.emplace_back(Point(24,27));
	map2.emplace_back(Point(25,6));
	map2.emplace_back(Point(25,8));
	map2.emplace_back(Point(25,10));
	map2.emplace_back(Point(25,12));
	map2.emplace_back(Point(25,13));
	map2.emplace_back(Point(25,15));
	map2.emplace_back(Point(25,20));
	map2.emplace_back(Point(25,22));
	map2.emplace_back(Point(25,24));
	map2.emplace_back(Point(25,25));
	map2.emplace_back(Point(25,26));
	map2.emplace_back(Point(26,2));
	map2.emplace_back(Point(26,4));
	map2.emplace_back(Point(26,10));
	map2.emplace_back(Point(26,15));
	map2.emplace_back(Point(26,17));
	map2.emplace_back(Point(26,18));
	map2.emplace_back(Point(26,19));
	map2.emplace_back(Point(26,22));
	map2.emplace_back(Point(26,27));
	map2.emplace_back(Point(27,3));
	map2.emplace_back(Point(27,5));
	map2.emplace_back(Point(27,6));
	map2.emplace_back(Point(27,7));
	map2.emplace_back(Point(27,8));
	map2.emplace_back(Point(27,9));
	map2.emplace_back(Point(27,11));
	map2.emplace_back(Point(27,12));
	map2.emplace_back(Point(27,13));
	map2.emplace_back(Point(27,14));
	map2.emplace_back(Point(27,15));
	map2.emplace_back(Point(27,17));
	map2.emplace_back(Point(27,19));
	map2.emplace_back(Point(27,21));
	map2.emplace_back(Point(27,23));
	map2.emplace_back(Point(27,24));
	map2.emplace_back(Point(27,25));
	map2.emplace_back(Point(27,26));
	map2.emplace_back(Point(27,27));
	map2.emplace_back(Point(28,1));			
}

picture.h

#ifndef PICTURE_H
#define PICTURE_H

#include "point.h"

#include <vector>//之前提到,略过 
#include <stdio.h>

class Picture
{
	public:
		Picture(){}
		
		void PrintStart();
		void PrintInterface1();
		void PushStart();
		void PushInterface1();
	private:
	    std::vector<Point> start;//开始界面 
		std::vector<Point> interface1;//菜单的边框 
};

#endif//PICTURE_H

picture.cpp

#include "picture.h"
#include "tools.h"

#include <windows.h>
#include <stdio.h>

void Picture::PrintStart()//打印开始界面 
{
	PushStart();//start中压入各点 
	for(auto &point: start)
	{
		point.PrintDiamond();//打印菱形 
		Sleep(10);//之前提到,略过 
	}	
}

void Picture::PrintInterface1()//打印开始菜单界面 
{
	SetCursorPosition(33,4);
	printf("迷");
	
	SetCursorPosition(36,4);
	printf("宫"); 
	
	SetCursorPosition(32,11);
	printf("选择上下左右来");
	
	SetCursorPosition(31,12);
	printf("控制小球的方向,");
	
	SetCursorPosition(31,13);
	printf("使其到达终点。");
	
	SetCursorPosition(32,16);
	printf("1:继续游戏");
	
	SetCursorPosition(32,19);
	printf("2:重新开始");
	
	SetCursorPosition(32,22);
	printf("3:更换地图");
	
	SetCursorPosition(32,25);
	printf("4:退出游戏");
	PushInterface1();

	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
		FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|
	BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE);//青字白底 
	
	SetCursorPosition(31,8);
	printf(" - - - - - - - -");
	
	for(auto &point :interface1)
		point.PrintDiamond();//打印菱形 
}

/*压入开始界面各点(就是开始的迷宫两个大字,本人艺术细胞有限,
自己看着都觉得不怎么样,喜欢的朋友可以自己修改)*/
void Picture::PushStart()
{
	start.emplace_back(Point(3,4));
    start.emplace_back(Point(4,5));
	start.emplace_back(Point(5,6));
	start.emplace_back(Point(3,7));
    start.emplace_back(Point(4,7));
	start.emplace_back(Point(5,7));
	start.emplace_back(Point(6,7));
    start.emplace_back(Point(6,8));
 	start.emplace_back(Point(5,9));
  	start.emplace_back(Point(4,10));
   	start.emplace_back(Point(4,11));
   	start.emplace_back(Point(5,12));
   	start.emplace_back(Point(6,13));
   	start.emplace_back(Point(6,14));
   	start.emplace_back(Point(5,15));
   	start.emplace_back(Point(4,16));
   	start.emplace_back(Point(3,17));
   	start.emplace_back(Point(4,17));
   	start.emplace_back(Point(5,17));
   	start.emplace_back(Point(6,17));
   	start.emplace_back(Point(7,17));
   	start.emplace_back(Point(8,17));
   	start.emplace_back(Point(9,17));
   	start.emplace_back(Point(10,17));
   	start.emplace_back(Point(11,17));
   	start.emplace_back(Point(12,17));
  	start.emplace_back(Point(13,17));
  	start.emplace_back(Point(14,17));
   	start.emplace_back(Point(15,17));
   	start.emplace_back(Point(16,17));
   	start.emplace_back(Point(17,17));
   	start.emplace_back(Point(18,17));
   	start.emplace_back(Point(19,17));
   	start.emplace_back(Point(20,17));
   	start.emplace_back(Point(7,11));
   	start.emplace_back(Point(8,11));
   	start.emplace_back(Point(9,11));
   	start.emplace_back(Point(10,11));
   	start.emplace_back(Point(11,11));
    start.emplace_back(Point(12,11));
   	start.emplace_back(Point(13,11));
    start.emplace_back(Point(14,11));
   	start.emplace_back(Point(15,11));
   	start.emplace_back(Point(16,11));
   	start.emplace_back(Point(17,11));
   	start.emplace_back(Point(18,11));
   	start.emplace_back(Point(19,11));
	start.emplace_back(Point(13,5));
	start.emplace_back(Point(13,6));
	start.emplace_back(Point(13,7));
	start.emplace_back(Point(13,8));
	start.emplace_back(Point(13,9));
	start.emplace_back(Point(13,10));
	start.emplace_back(Point(13,12));
	start.emplace_back(Point(13,13));
	start.emplace_back(Point(13,14));
	start.emplace_back(Point(13,15));
	start.emplace_back(Point(13,16));
    start.emplace_back(Point(7,5));
    start.emplace_back(Point(8,6));
    start.emplace_back(Point(9,7));
	start.emplace_back(Point(10,8));
	start.emplace_back(Point(11,9));
	start.emplace_back(Point(12,10));
	start.emplace_back(Point(19,5));
	start.emplace_back(Point(18,6));
	start.emplace_back(Point(17,7));
	start.emplace_back(Point(16,8));
	start.emplace_back(Point(15,9));
	start.emplace_back(Point(14,10));
	start.emplace_back(Point(12,12));
	start.emplace_back(Point(11,13));
	start.emplace_back(Point(10,14));
	start.emplace_back(Point(9,15));
	start.emplace_back(Point(8,16));
	start.emplace_back(Point(14,12));
	start.emplace_back(Point(15,13));
	start.emplace_back(Point(16,14));
    start.emplace_back(Point(17,15));
	start.emplace_back(Point(18,16));
	start.emplace_back(Point(29,4));
	start.emplace_back(Point(30,5));
	start.emplace_back(Point(31,6));
    start.emplace_back(Point(25,7));
	start.emplace_back(Point(26,7));
	start.emplace_back(Point(27,7));
	start.emplace_back(Point(28,7));
	start.emplace_back(Point(29,7));
	start.emplace_back(Point(30,7));
	start.emplace_back(Point(31,7));
	start.emplace_back(Point(32,7));
	start.emplace_back(Point(33,7));
	start.emplace_back(Point(34,7));
	start.emplace_back(Point(35,7));
	start.emplace_back(Point(36,7));
	start.emplace_back(Point(37,7));
	start.emplace_back(Point(25,8));
	start.emplace_back(Point(25,9));
	start.emplace_back(Point(25,10));
	start.emplace_back(Point(37,8));
	start.emplace_back(Point(37,9));
	start.emplace_back(Point(37,10));
	start.emplace_back(Point(29,9));
	start.emplace_back(Point(30,9));
	start.emplace_back(Point(31,9));
	start.emplace_back(Point(32,9));
	start.emplace_back(Point(33,9));
	start.emplace_back(Point(29,10));
	start.emplace_back(Point(29,11));
	start.emplace_back(Point(29,12));
	start.emplace_back(Point(33,10));
	start.emplace_back(Point(33,11));
	start.emplace_back(Point(33,12));
	start.emplace_back(Point(30,12));
	start.emplace_back(Point(31,12));
	start.emplace_back(Point(32,12));
	start.emplace_back(Point(29,14));
	start.emplace_back(Point(30,14));
	start.emplace_back(Point(31,14));
	start.emplace_back(Point(32,14));
	start.emplace_back(Point(33,14));
	start.emplace_back(Point(29,15));
	start.emplace_back(Point(29,16));
	start.emplace_back(Point(29,17));
	start.emplace_back(Point(33,15));
	start.emplace_back(Point(33,16));
	start.emplace_back(Point(33,17));
	start.emplace_back(Point(30,17));
	start.emplace_back(Point(31,17));
	start.emplace_back(Point(32,17));
}

/*直到这里,我才想到用循环压入各点,然后把之前的一处代码修改就懒的再改了,
我敲了几百行的地图啊 ,啊啊啊啊啊啊啊啊啊啊 */
void Picture::PushInterface1()
{
	int i,j;
	
	for(i=30;i<=39;i++)
		for(j=0;j<=29;j+=29)
			interface1.emplace_back(Point(i,j));
			
	for(i=30;i<=39;i+=9)
		for(j=1;j<=28;j++)
			interface1.emplace_back(Point(i,j));
			
	for(j=3;j<=5;j+=2)
		for(i=32;i<=37;i++)
			interface1.emplace_back(Point(i,j));
			
	for(i=32,j=4;i<=37;i+=5)
		interface1.emplace_back(Point(i,j));
}

point.h

#ifndef POINT_H
#define POINT_H

class Point
{
	public:
		Point(){}
		Point(const int x,const int y):x(x),y(y){}
		
		int GetX();
		int GetY();
		void PrintSquare();
		void PrintCircular();
		void PrintDiamond();
		void ClearPoint();
		void ChangePoint(const int x,const int y);
	private:
		int x,y;
};

#endif//POINT_H

point.cpp

#include "point.h"
#include "tools.h"

#include <iostream>

int Point::GetX()//得到点的横坐标 
{
	return this->x;
}

int Point::GetY()//得到点的纵坐标 
{
	return this->y;
}

void Point::PrintSquare()//打印方块 
{
	SetCursorPosition(x,y);//让光标移动到点的坐标 
	std::cout<<"■";
}

void Point::PrintCircular()//打印圆圈 
{
	SetCursorPosition(x,y);
	std::cout<<"●";
}

void Point::ClearPoint()//打印空格(消除原字符) 
{
	SetCursorPosition(x,y);
	std::cout<<" ";
}

void Point::PrintDiamond()//打印菱形 
{
	SetCursorPosition(x,y);
	std::cout<<"◆";
}

void Point::ChangePoint(const int x,const int y)//改变点的坐标 
{
	this->x=x;
	this->y=y;
}

tools.h

#ifndef TOOLS_H
#define TOOLS_H 

void SetWindowSize(int x,int y);
void SetColor(int colorId);
void SetCursorPosition(int x,int y);

#endif//TOOLS_H

tools.cpp

#include "stdio.h"
#include "tools.h"

#include <windows.h>

/*
    colorId
	黑色 = 0      蓝色 = 1      绿色 = 2      湖蓝色 = 3
    红色 = 4      紫色 = 5      黄色 = 6      白色 = 7
    灰色 = 8      淡蓝色=9      淡绿色=A      白色=C
    淡紫色=D      淡黄色=E      亮白色=F*/

/*SetConsoleTexeAttribute(GetStdHandle(STD_OUTPUT_HANDLE,颜色)
  白色 BACKGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE);
  红色 BACKGROUND_INTENSITY|BACKGROUND_RED);
  绿色 BACKGROUND_INTENSITY|BACKGROUND_GREEN);
  蓝色 BACKGROUND_INTENSITY|BACKGROUND_BLUE);
  黄色 BACKGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_GREEN);
  粉色 BACKGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_BLUE);
  青色 BACKGROUND_INTENSITY|BACKGROUND_GREEN|BACKGROUND_BLUE);
*/
void SetWindowSize(int cols,int lines)//调整窗口大小 
{
	system("title 迷宫");//设置窗口标题
	char cmd[50];//设置命令字符 
	sprintf(cmd,"c:\\windows\\system32\\mode con cols=%d lines=%d",cols*2,lines);//一个图形宽占两字符所以乘二
	system(cmd);//system(mode con cols=x*2,lines=y) 
}


void SetColor(int colorId)//调整字体颜色 
{
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),colorId1);//不知道的童鞋请自行百度 
} 

void SetCursorPosition(int x,int y)//改变光标位置 
{
	COORD pos;//COORD是什么了?自己百度 
	pos.X=x*2;
	pos.Y=y;
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);//同上 
}

ball.h

#ifndef BALL_H
#define BALL_H

#include "controller.h"
#include "point.h"
#include "map.h"

#include <vector>

class Ball
{    
	public:
		Ball(){}
		
		int Move(Controller *menu,Point *endpoint);
		void ChangeBall(int x,int y);
		void GetWall(Map *map,int MapId);
		bool Arive(Point *endpoint);//话说bool应该都知道是什么意思吧
		bool UnColide();
	private:
	    Point ball;
	    std::vector<Point> wall;
	
};

#endif//BALL_H

ball.cpp

#include "ball.h"
#include "controller.h"
#include "tools.h"

#include <iostream>
#include <conio.h>
#include <windows.h> 

void Ball::ChangeBall(int x,int y)//改变小球位置 
{
	this->ball.ChangePoint(x,y);
}

int Ball::Move(Controller *menu,Point *endpoint)//
{
	int key=1;//初始化key 
	char ch;
		
	for(;key!=2 && key!=3;)//key=1继续游戏,key=4函数内已经退出程序了 
	{
	    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
	    FOREGROUND_INTENSITY|FOREGROUND_RED|
	    BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE);//红字白底
	    
	    ch=getch();
		switch(ch)
		{
		    
			case -32://Controller类中已做说明 
			{
				ch=getch();
				
				switch(ch)
				{
					case 72://向上
					{
					    ball.ClearPoint();//清除原来的点 
					    this->ChangeBall(ball.GetX(),ball.GetY()-1);//改变坐标 
						if(UnColide())//如果没有碰撞 
						    ball.PrintCircular();
						else//发生碰撞 
						{
						    this->ChangeBall(ball.GetX(),ball.GetY()+1);//回到原来坐标 
							ball.PrintCircular();
					    }  
						break; 
					}
					case 80://向下 
					{
						ball.ClearPoint();
						this->ChangeBall(ball.GetX(),ball.GetY()+1);
						if(UnColide())
						    ball.PrintCircular();
						else
						{
							this->ChangeBall(ball.GetX(),ball.GetY()-1);
							ball.PrintCircular();
						}    
						break;
					}
					case 75://向左 
					{
						ball.ClearPoint();
						this->ChangeBall(ball.GetX()-1,ball.GetY());
						if(UnColide())
						    ball.PrintCircular();
						else
						{
							this->ChangeBall(ball.GetX()+1,ball.GetY());
							ball.PrintCircular();
						}    
						break;
					}
					case 77://向右 
					{
						ball.ClearPoint();
						this->ChangeBall(ball.GetX()+1,ball.GetY());
						if(UnColide())
						    ball.PrintCircular();
						else
						{
							this->ChangeBall(ball.GetX()-1,ball.GetY());
							ball.PrintCircular();
						}    
						break;
					}
					default:
						break;	
				}
				break;
			}
			case 27://键入Esc键 
				{
					key=menu->Menu();//打开菜单选择key 
					break;
				}
			default:
				break;
		}
		if(Arive(endpoint))//如果到达终点 
		{
			system("cls");
	        SetCursorPosition(17,15);
	        std::cout<<"恭喜你,过关了!";
	        getch();//暂停 
	        return key;//其实就是返回1,下同 
		}
	}
	return key;
	
}

void Ball::GetWall(Map *map,int MapId)//将发生碰撞的点记入小球 
{
	wall.clear();//防止上一次的循环,避免重复压入相同的点 
	switch(MapId)//选择当前地图压入 
	{
		case 1:
		{
			for(auto &point :map->map1)
			    wall.emplace_back(point);
			break;
		}
		case 2:
		{
			for(auto &point :map->map2)
			    wall.emplace_back(point);
			break;
		}
		default:
		    break; 
	}
	
	for(auto &point :map->initmap)//压入初始地图的点 
		wall.emplace_back(point);
}

bool Ball::Arive(Point *endpoint)//判断是否到达终点 
{
	if(ball.GetX()==endpoint->GetX() && ball.GetY()==endpoint->GetY())
	    return true;	
	else
		return false;   
}

bool Ball::UnColide()//判断是否碰撞 
{
	for(auto &point :wall)
		if(point.GetX()==ball.GetX() && point.GetY()==ball.GetY())
		    return false;
	return true;
}

PS:我想能看到这的都是勇士,这组代码因当时年少,冗余过多,仅供参考,大家可以复制下来编译运行一遍加深理解

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++游戏制作入门小游戏(迷宫)此篇只适用于新手 的相关文章

  • 鹅厂内部干货

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 作者介绍 陈阳 Younger 2011年加入腾讯 现就职于腾讯游戏增值服务部 负责AMS游戏营销平台 致力于研究和推动Web及大前端相关技术的发展 一 微信小游戏 H5小游戏及微信
  • XboxOne的kinect在Unity上的开发——开始界面

    好的 欢迎大家来看这个系列的第二部分的内容 这一次呢 我们就直接进入主题 开发切水果游戏本身 这次的切水果的demo呢 我们选择使用ugui来制作 因为ugui相对于NGUI的各种优势 让我们选择了ugui 关于这些呢 大家可以参考我的另一
  • 【Unity Shader】浅析Unity shader中RenderType的作用及_CameraDepthNormalsTexture

    初学Unity ShaderLab的时候 一定有接触过Unity Shader中的Tags标签块 比如 span span LightMode Vertex Queue Transparent IgnoreProjector True Re
  • 游戏开发unity杂项知识系列:抗锯齿处理

    游戏中需要进行抗锯齿处理的地方非常多 这里先写两点 一个是通过使用unity自带的抗锯齿设置 QualitySettings 可以参考下面的连接 QualitySettings也可以通过代码去设置 unity图片抗锯齿设置 LCHUIHUI
  • Niagara官方示例笔记 - 盘点自带重要模块

    Emitter State life cycle生命周期控制 发射器选择system 所有发射器都在system的state里设置生命周期 选择self 发射器独立控制 可以给发射器创建不同类型变量 使用set parameter模块计算
  • UE4 材质 生成随机数

    参考之前的文章中关于随机数和noize的 https papalqi cn 201707 cid 558 html
  • 【游戏客户端面试题干货】--2021年最新游戏客户端面试干货(lua篇)

    游戏客户端面试题干货 2021年度最新游戏客户端面试干货 lua篇 大家好 我是Lampard 经过春招一番艰苦奋战之后 我终于是进入了心仪的公司 今天给大家分享一下我在之前精心准备的一套面试知识 今天和大家分享的是lua的面试题 本人亲测
  • Cocos2d-android游戏引擎

    什么是游戏引擎 游戏引擎是指一些已编写好的可编辑游戏系统或者一些交互式实时图像应用程序的核心组件 这些系统为游戏设计者提供各种编写游戏所需的各种工具 其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始 Cocos2d家族 coc
  • Unity2020版本RenderSettings的命令位置(晕轮的属性)《Unity游戏开发入门经典》

    在Unity游戏开发入门经典这本书中 第六章灯光里 有出现关于晕轮的设置 在Edit gt Render Settings中 但书内的Unity已经是老版本了 在新版本中 关于晕轮的设置已经变了位置 在Unity2020中 单击 菜单栏Wi
  • 游戏开发UE4知识系列:流关卡与无缝地图切换

    参考 流关卡与无缝地图切换 官方文档 https docs unrealengine com zh CN Engine LevelStreaming index html
  • 知物由学

    导读 随着智能设备的普及 手机游戏逐渐占据整个游戏市场的大头 伴随着手机游戏的风靡 外挂也将其邪恶的触手伸向了这一领域 反外挂的战场从 PC 端蔓延到了移动端 由于移动设备与 PC 终端之间天然存在的巨大差异 外挂的类型也存在较大差异 主要
  • C++ 游戏开发 打地鼠详解 (含.h文件和.cpp文件)

    基于easyx的打地鼠游戏 期末大作业 C语言版本请见 C语言 打地鼠游戏 超级详解 各个函数与算法 设计思路与流程 一 游戏简介 游戏简介 疯狂打地鼠 是一款经典的单机休闲益智类小游戏 调皮的小地鼠们又出来活动了 你需要做的就是将他们砸回
  • Python 设计真实反弹球算法及原理分析 (使用物理定律)

    文章简单地使用物理定律 编写程序模拟真实世界中的碰撞 在开始正式讲解之前 先看这两个代码 把球掉头 ball speed 0 ball speed 0 ball speed 1 ball speed 1 可以看到 这个代码直接把球的速度反了
  • unity中通过touch旋转、放大和缩小物体以及滑动方向的判断

    unity中通过touch旋转 放大和缩小物体以及滑动方向的判断这个需求在游戏开发中也是非常频繁 话不多说直接上代码 using System Collections using System Collections Generic usi
  • unity期末个人作品-落笔洞寻宝探险之旅(寻宝游戏)

    落笔洞寻宝探险之旅 unity寻宝游戏 下载链接在文章下方 为了增添生活的乐趣开发的这款落笔洞寻宝游戏 主要内容为人物在落笔山脉寻找金币 右上角有金币计数器 找到所有金币则获胜 山中有障碍物 触碰会掉血50 人物生命值为100 血量为0则游
  • 使用库函数sqrt求平方根 C语言入门

    欢迎关注笔者 你的支持是持续更博的最大动力 目录 问题描述 库函数 头文件 代码 其他 问题描述 使用库函数sqrt求平方根 库函数 库文件 Library function C C 标准规定的 编译器自带的函数 库函数顾名思义就是库里已存
  • Unity 使用Photon Server 联网开发(二)游戏同步+房间列表

    photon联机的配置 直接去官网下载Pun的资源包导入项目 设置PhotonServerSettings配置文件 配置appid 通讯协议 服务器地址 端口号 服务器地址可以配置成自己本地服务器 云服务器 直接使用photon服务器 也可
  • 游戏引擎:打造梦幻游戏世界的秘密武器

    介绍 游戏引擎是游戏开发中不可或缺的工具 它为开发者提供了构建游戏世界所需的各种功能和工具 本文将介绍游戏引擎的概念 使用方法以及一个完整的游戏项目示例 游戏引擎的概念 游戏引擎是一种软件框架 它提供了游戏开发所需的各种功能和工具 包括图形
  • ue5新手零基础学习教程 Unreal Engine 5 Beginner Tutorial - UE5 Starter Course

    ue5新手零基础学习教程 Unreal Engine 5 Beginner Tutorial UE5 Starter Course 教程大小解压后 4 96G 语言 英语 中英文字幕 机译 时长 4小时56分 1920X1080 mp4 虚
  • Unity3d Terrain地形制作系列(一)

    游戏简单地形 地形制作 地形制作 第一步在场景里加载一个地形对象 第二步 我们在属性面板里找到绘制地形 然后选择Set Height 绘制高度 应该我们要制作低凹的效果 所有先让他有个高度 不然是不能实现低凹的效果 如图 我们然后选择绘制地

随机推荐

  • 一文概括常用图像处理算法

    本文总结了11种常用的图像处理算法 包含了预处理算法以及检测算法 并介绍了一些常用的开发库 一 算法 预处理算法 检测算法 在采集完图像后 首先会对图像进行预处理操作 保证图像的对比度清晰 水平 方便后续图像处理 常用的图像处理算法 1 图
  • 数学建模专栏 - 聚类分析入门:基本概念和MATLAB实现

    摘要 本文将介绍聚类分析的基本概念和MATLAB的实现方法 我们将先介绍聚类分析的概念和应用场景 然后介绍聚类算法的基本原理 最后用一个实际案例来演示如何使用MATLAB进行聚类分析 1 简介 聚类分析是一种无监督学习方法 用于将数据集分成
  • 关于servlet上传图片,显示不出来报 Get http://localhost:9095/assets/img/head/1656901332651.jpg 404错误

    目录 第一种解决方法 第二种解决方法 第三种方法 配置虚拟路径 不建议尝试 上传图片的工具类 我的tomcat是放在E liulanqi apache tomcat 9 0 62 webapps 第一种解决方法 将上传的图片路径改为上到到t
  • Java知识点汇总--多态

    Java多态 1 多态 1 1 多态的概述 1 2 多态中的成员访问特点 1 3 多态的好处和弊端 1 4 多态中的转型 1 5 多态的案例 1 多态 1 1 多态的概述 什么是多态 同一个对象 在不同时刻表现出来的不同形态 多态的前提 要
  • openGL增强表面细节----法线贴图

    openGL系列文章目录 文章目录 openGL系列文章目录 前言 一 具体实现思路 二 代码 主程序c 着色器程序 效果 源码下载 前言 凹凸贴图的一种替代方法是使用查找表来替换法向量 这样我们就可以在不依赖数学函 数的情况下 对凸起进行
  • 【运维篇】四、服务日志控制

    文章目录 1 日志基础 2 记录日志 3 快速创建日志对象 4 日志级别更改 5 日志输出格式控制 6 日志记录到文件 1 日志基础 日志的作用 编程期调试代码 记录日常运营重要信息 峰值流量 平均响应时长 记录应用报错信息 错误堆栈 运营
  • 游戏开发jenkins杂谈系列:使用Extended Choice Parameter参数化构建

    可以查看 https blog csdn net qq1105273619 article details 91352562
  • IDEA打包jar包详尽流程

    打包流程 1 打开菜单栏File Project Structure 2 点击Artifacts 3 点击 JAR From module with depenencies 4 后弹出如下界面 自此开始 各种问题就来了 首先Module中
  • 基于CC2530的Zstack协议栈的SX1278调试记录

    SX1278Lora模块串口调试记录 串口调试代码 串口获取调试信息 SPI驱动IO口模拟 加深理解用 SX1278的通讯时序 SX1278 SPI通讯间隔要求 SX1278 寄存器设置 实例 实际调试 LORA信道划分建议 关于带宽 只是
  • [Elasticsearch]源码解析:ES如何避免脚本中的危险操作

    一 简述 在我们使用ES进行脚本操作的时候 可以在脚本中使用painless等脚本语言 但我们是否有想过在脚本中进行危险操作类似System exit 0 的时候 ES是怎么规避这种风险的 不废话 上例子 POST trick search
  • (二十八)admin-boot项目之基于MDC的全局日志追踪

    二十八 基于MDC的全局日志追踪 项目地址 https gitee com springzb admin boot 如果觉得不错 给个 star 简介 这是一个基础的企业级基础后端脚手架项目 主要由springboot为基础搭建 后期整合一
  • 服务器怎样创建多台虚拟主机,服务器是如何实现多台虚拟主机

    服务器是如何实现多台虚拟主机 内容精选 换一换 弹性云服务器 Elastic Cloud Server 是一种可随时自动获取 计算能力可弹性伸缩的云服务器 可帮助您打造可靠 安全 灵活 高效的应用环境 确保服务持久稳定运行 提升运维效率 通
  • 调用VSPD的DLL进行二次开发异常解决的解决方法。

    最近在学习 设想做一个实现虚拟串口的C 程序 因为我不会写驱动 于是参考老哥的方法 调用VSPD的DLL开放接口进行实现 从VSPD虚拟COM口安装包解出独立的驱动安装包 虚拟串口开发和EXE程序反解压 http blog csdn net
  • 开机f8修复电脑步骤_只要按一个键,可以修复很多电脑小故障

    经常遇到 客户的电脑开机进不了系统 卡在修复界面 半天没反应 有的开机在检测界面 一直没反应 还有的因为运行的程序太多 开个机要耐着性子 等10多分钟 才能使用电脑 还一直很慢 很卡 要重装系统 又担心很多程序找不到安装程序 只能一直忍 很
  • Python无法打开excel文档解决办法

    问题 无法打开excel文档 解决办法 安装xlrd模块 在cmd命令行下执行 pip install pyexcel xls 如果以上方法无法解决 继续报以下问题 pandas无法打开 xlsx文件 xlrd biffh XLRDErro
  • QQ js_sdk第三方授权登录 自定义登录按钮

    STEP 1 QQ放置页面添加 img src qq png function qqLogin QC Login showPopup 替换APPID和回调页面即可 STEP 2
  • 获取百度翻译内容

    import requests url https fanyi baidu com sug s input 请输入你要翻译的英文单词 dic kw s resp requests post url data dic print resp j
  • 【Unity】常见的角色移动旋转

    在Unity 3D游戏引擎中 可以使用不同的方式对物体进行旋转 以下是几种常见的旋转方式 欧拉角 Euler Angles 欧拉角是一种常用的旋转表示方法 通过绕物体的 X Y 和 Z 轴的旋转角度来描述物体的旋转 在Unity中 可以通过
  • mysql 报错 your password has expired.To log in you must change itusing a client that supports expired

    学习java少不了和数据库打交道 在使用 Navicat 连接 mysql 的时候 出现了这个错误 这表示你设置的密码过期了 这里我们重新设置一下密码即可 1 打开 cmd 窗口 进入 mysql 的 bin 目录下 2 连接mysql m
  • C++游戏制作入门小游戏(迷宫)此篇只适用于新手

    最近有些无聊 于是翻了翻以前的代码 找到了之前第一次编的游戏 想起以前学完C 无从下手的感觉 就把它加了点备注 当做一篇入门教程发出来了 这是用DevC 写的 参考自一位大佬写的贪吃蛇 下面上图 PS 开始界面我现在看来是相当的丑 好吧菜单