C++ 定义一个地图类和地点类,开发一个小游戏。

一、问题描述:
  • 地图中有若干地点,到达每个地点可以随机获取金钱和食物(补给点),补给后补给点消失,并随即出现在其他地方。
  • 玩家随机进入地图的某一个点,通过a,w,d,s分别控制向左、向上、向右、向下移动,玩家不可走出边界。
  • 玩家每次移动,系统告诉玩家距离最近的三个补给点的距离(采用曼哈顿距离),玩家每移动一步,消耗若干食物,没有食物时,game over。

二、具体实现:
1、系统需要告诉玩家距离最近的三个补给点,这个需要知道的是曼哈顿距离如何去计算。下面代码是地点类内的一个函数,参数列表里面分别是补给点的坐标以及当前玩家的坐标。abs()函数是math头文件的求绝对值函数。最后返回曼哈顿距离。
int Manhattan(int supply_X,int supply_Y,int x,int y)//计算曼哈顿距离 
	{
		int distant_x;
		int distant_y;
		distant_x=abs(supply_X-x);
		distant_y=abs(supply_Y-y);
		distant = distant_x + distant_y;
		return distant;
	}
2、计算完十个补给点距离玩家位置的曼哈顿距离后,我们需要对这十个补给点的曼哈顿距离进行排序(从小到大)。然后再输出距离最近的三个补给点的距离。
void sort()
{
	for(int k=0; k<9; k++)//对十个补给点的曼哈顿距离进行排序 (从小到大) 
	{
		for(int m=0; m<10-k-1; m++ )
		{
			if(arrayDistant[m] > arrayDistant[m+1])//如果前面大于后面,则交换 
			{
				int temp;
				temp=arrayDistant[m+1];
				arrayDistant[m+1]=arrayDistant[m];
				arrayDistant[m]=temp;
			}
		}
	}

    cout << "距离最近的三个补给点的距离分别为 :";
	//提示玩家最近的三个补给点距离
	for(int k=0;k<3;k++) 
	{
		cout  << arrayDistant[k] << " ";
	}		
	cout << endl;	
}		
3、 我们再创建一个Move()函数,供玩家进行移动。玩家移动的同时,金钱和食物都要发生变化,还要注意的是不可以越界!!!
	void Move()
	{
		while(Food>=0 && success==1 && c!='o')
		{
			for(int i=0;i<10;i++)
			{
				arrayDistant[i]=Manhattan(supply__x[i],supply__y[i],x,y);
			}
			sort();//随着玩家坐标的移动,距离各补给点的距离也随之改变 ,需重新排序 	
			system("pause");
			system("cls");
			cout << "w--上,s--下,a--左,d--右,o--退出游戏,请输入 :"<> c;
			switch(c)
			{
				case 'w':	x--;
						if(x>0&&x<31)
						{	
							array[x][y]='#';
							Food_();
							flag=Judge();
						}
						else
						{
							success=0;
							cout << "越界,You fail !!!"<0&&x<31)
						{	
							array[x][y]='#';
							Food_();
							flag=Judge();
						}
						else
						{
							success=0;
							cout << "越界,You fail !!!"<0&&y<31)
						{
							array[x][y]='#';
							Food_();
							flag=Judge();
						}	
						else
						{
							success=0;
							cout << "越界,You fail !!!"<0&&y<31)
						{
						array[x][y]='#';
						Food_();
						flag=Judge();
						}
						else
						{
							success=0;
							cout << "越界,You fail !!!"<=TargetMoney && Food>=0)
			{
				cout<<"达到目标金额You Win !!!"<
4、我们可以用Judge()函数来判断是否到达补给点。
int Judge()//判断是否到达补给点 
	{
		if(distant==0)
		{
			Money1 += rand()%50+300;
			Food += rand()%5;
			cout<<"到达一个补给点,请寻找另外一个补给点!" <
5、测试代码。
int main()
{

//测试小游戏 
	system("cls");
	system("color  f4");
	cout << "游戏规则说明:" 															<> num; 
	Place text3(10.0,num);
	text3.Move() ;
	return 0;
}

三、完整代码如下。

#include
#include
#include
#include
#include
#include
using namespace std;
//小游戏 
class Place
{
public:
	Place(float food,int targetMoney):Food(food),TargetMoney(targetMoney),count(10),success(1)//初始化金钱和食物 
	{
		srand(time(NULL));
		x=rand()%30+1;//随机生成的初始坐标 x,y
		y=rand()%30+1;	
		for(int h=0;h<10;h++)
		{
			supply__y[count]=0;
			supply__x[count]=0;
		}
		while( count >= 0 )//生成补给点 
		{	int supply_X;
			int supply_Y;
			supply_X =rand()%30+1;
			supply_Y =rand()%30+1;
			if(supply_X == x && supply_Y == y)//判断补给点坐标是否和当前玩家的坐标重合 ,若重合则需重新生成 
			{
				continue;
			}				
			array[supply_X][supply_Y]=1;
			supply__y[count]=supply_Y;
			supply__x[count]=supply_X;
			count--;
		}
		Money1=rand()%1000+500;
	}
void sort()
{
	for(int k=0; k<9; k++)//对十个补给点的曼哈顿距离进行排序 (从小到大) 
	{
		for(int m=0; m<10-k-1; m++ )
		{
			if(arrayDistant[m] > arrayDistant[m+1])//如果前面大于后面,则交换 
			{
				int temp;
				temp=arrayDistant[m+1];
				arrayDistant[m+1]=arrayDistant[m];
				arrayDistant[m]=temp;
			}
		}
	}
	cout << "距离最近的三个补给点的距离分别为 :";
	//提示玩家最近的三个补给点距离
	for(int k=0;k<3;k++) 
	{
		cout  << arrayDistant[k] << " ";
	}		
	cout << endl;	
}		
int Manhattan(int supply_X,int supply_Y,int x,int y)//计算曼哈顿距离 
	{
		int distant_x;
		int distant_y;
		distant_x=abs(supply_X-x);
		distant_y=abs(supply_Y-y);
		distant = distant_x + distant_y;
		return distant;
	}
	
	void Move()
	{
		while(Food>=0 && success==1 && c!='o')
		{
			for(int i=0;i<10;i++)
			{
				arrayDistant[i]=Manhattan(supply__x[i],supply__y[i],x,y);
			}
			sort();//随着玩家坐标的移动,距离各补给点的距离也随之改变 ,需重新排序 	
			system("pause");
			system("cls");
			cout << "w--上,s--下,a--左,d--右,o--退出游戏,请输入 :"<> c;
			switch(c)
			{
				case 'w':	x--;
						if(x>0&&x<31)
						{	
							array[x][y]='#';
							Food_();
							flag=Judge();
						}
						else
						{
							success=0;
							cout << "越界,You fail !!!"<0&&x<31)
						{	
							array[x][y]='#';
							Food_();
							flag=Judge();
						}
						else
						{
							success=0;
							cout << "越界,You fail !!!"<0&&y<31)
						{
							array[x][y]='#';
							Food_();
							flag=Judge();
						}	
						else
						{
							success=0;
							cout << "越界,You fail !!!"<0&&y<31)
						{
						array[x][y]='#';
						Food_();
						flag=Judge();
						}
						else
						{
							success=0;
							cout << "越界,You fail !!!"<=TargetMoney && Food>=0)
			{
				cout<<"达到目标金额You Win !!!"<> num; 
	Place text3(10.0,num);
	text3.Move() ;
	return 0;
}

你可能感兴趣的:(C++,c++,算法,开发语言)