C++推箱子-完整版

前段时间,有个小朋友问可不可以用C++做小游戏呢,于是就有了下面的C++版推箱子。一起来欣赏一下孩子们的推箱子吧!

//Boxgame 2020.10.12 By ZYX DevCPP 5.9.2 Compile.
#include<iostream>
#include<windows.h>
#include<stdlib.h>
#include<conio.h>

//0:空地; 1:墙壁 3:箱子的目的地;4:箱子 6:人; 7:箱子和目的地重合; 9:人站在目的地
//map:此处地图代码已隐藏,可在公众号”智阅荟"回复222下载完整源代码含地图,二维码见本页底部。
int g_map[10][12]= {
	{},
	{},
	{},
	{},
	{},
	{},
	{},
	{},
	{},
	{},
};

//Draw a map
void Drapmap()
{
	for(int i=0; i<10; i++) {

		for(int j=0; j<12; j++) {
			switch(g_map[i][j]) {
				case 0:
					printf("  ");
					break;
				case 1:
					printf("■");
					break;
				case 3:
					printf("☆");
					break;
				case 4:
					printf("※");
					break;
				case 6:
					printf("♀");
					break;
				case 7:
					printf("◎");
					break;
				case 9:
					printf("♂");
					break;
			}
		}
		printf("
");
	}
}
POINT GetGamerPosition()
{
	POINT pos= {-1,-1};
	for(int i=0; i<10; i++) {
		for(int j=0; j<12; j++) {
			if(g_map[i][j]==6 || g_map[i][j]==9) {
				pos.x=i;
				pos.y=j;
				return pos;
			}
		}
	}
	return pos;
}
//0:空地; 1:墙壁 3:箱子的目的地;4:箱子 6:人; 7:箱子和目的地重合; 9:人站在目的地
//keyup
void up()
{
	POINT pos=GetGamerPosition();
	if(g_map[pos.x-1][pos.y]==0) {
		g_map[pos.x-1][pos.y]=6;

		if(g_map[pos.x][pos.y]==9)
			g_map[pos.x][pos.y]=3;
		else
			g_map[pos.x][pos.y]=0;
	}
	if(g_map[pos.x-1][pos.y]==3) {
		g_map[pos.x-1][pos.y]=9;
		if (g_map[pos.x][pos.y]==9)
			g_map[pos.x][pos.y]=3;
		else
			g_map[pos.x][pos.y]=0;
	}

	if(g_map[pos.x-1][pos.y]==4) {
		if(g_map[pos.x-2][pos.y]==0) {
			g_map[pos.x-2][pos.y]=4;
			g_map[pos.x-1][pos.y]=6;
			if(g_map[pos.x][pos.y]==9)
				g_map[pos.x][pos.y]=3;
			else
				g_map[pos.x][pos.y]=0;
		} else {
			if(g_map[pos.x-2][pos.y]==3) {
				g_map[pos.x-2][pos.y]=7;
				g_map[pos.x-1][pos.y]=6;
				if(g_map[pos.x][pos.y]==9)
					g_map[pos.x][pos.y]=3;
				else
					g_map[pos.x][pos.y]=0;

			}

		}

	}
	if(g_map[pos.x-1][pos.y]==7) {
		if(g_map[pos.x-2][pos.y]==0) {
			g_map[pos.x-2][pos.y]=4;
			g_map[pos.x-1][pos.y]=9;
			if(g_map[pos.x][pos.y]==9)
				g_map[pos.x][pos.y]=3;
			else
				g_map[pos.x][pos.y]=0;
		} else {
			if(g_map[pos.x-2][pos.y]==3) {
				g_map[pos.x-2][pos.y]=7;
				g_map[pos.x-1][pos.y]=9;
				if(g_map[pos.x][pos.y]==9)
					g_map[pos.x][pos.y]=3;
				else
					g_map[pos.x][pos.y]=0;

			}
		}
	}
}
//0:空地; 1:墙壁 3:箱子的目的地;4:箱子 6:人; 7:箱子和目的地重合; 9:人站在目的地

//keydown
void down()
{
	POINT pos=GetGamerPosition();
	if(g_map[pos.x+1][pos.y]==0) {
		g_map[pos.x+1][pos.y]=6;

		if(g_map[pos.x][pos.y]==9)
			g_map[pos.x][pos.y]=3;
		else
			g_map[pos.x][pos.y]=0;
	}
	if(g_map[pos.x+1][pos.y]==3) {
		g_map[pos.x+1][pos.y]=9;
		if (g_map[pos.x][pos.y]==9)
			g_map[pos.x][pos.y]=3;
		else
			g_map[pos.x][pos.y]=0;
	}

	if(g_map[pos.x+1][pos.y]==4) {
		if(g_map[pos.x+2][pos.y]==0) {
			g_map[pos.x+2][pos.y]=4;
			g_map[pos.x+1][pos.y]=6;
			if(g_map[pos.x][pos.y]==9)
				g_map[pos.x][pos.y]=3;
			else
				g_map[pos.x][pos.y]=0;
		} else {
			if(g_map[pos.x+2][pos.y]==3) {
				g_map[pos.x+2][pos.y]=7;
				g_map[pos.x+1][pos.y]=6;
				if(g_map[pos.x][pos.y]==9)
					g_map[pos.x][pos.y]=3;
				else
					g_map[pos.x][pos.y]=0;

			}

		}

	}
	if(g_map[pos.x+1][pos.y]==7) {
		if(g_map[pos.x+2][pos.y]==0) {
			g_map[pos.x+2][pos.y]=4;
			g_map[pos.x+1][pos.y]=9;
			if(g_map[pos.x][pos.y]==9)
				g_map[pos.x][pos.y]=3;
			else
				g_map[pos.x][pos.y]=0;
		} else {
			if(g_map[pos.x+2][pos.y]==3) {
				g_map[pos.x+2][pos.y]=7;
				g_map[pos.x+1][pos.y]=9;
				if(g_map[pos.x][pos.y]==9)
					g_map[pos.x][pos.y]=3;
				else
					g_map[pos.x][pos.y]=0;

			}
		}
	}
}

//keyleft
void left()
{

	POINT pos=GetGamerPosition();
	if(g_map[pos.x][pos.y-1]==0) {
		g_map[pos.x][pos.y-1]=6;

		if(g_map[pos.x][pos.y]==9)
			g_map[pos.x][pos.y]=3;
		else
			g_map[pos.x][pos.y]=0;
	}
	if(g_map[pos.x][pos.y-1]==3) {
		g_map[pos.x][pos.y-1]=9;
		if (g_map[pos.x][pos.y]==9)
			g_map[pos.x][pos.y]=3;
		else
			g_map[pos.x][pos.y]=0;
	}

	if(g_map[pos.x][pos.y-1]==4) {
		if(g_map[pos.x][pos.y-2]==0) {
			g_map[pos.x][pos.y-2]=4;
			g_map[pos.x][pos.y-1]=6;
			if(g_map[pos.x][pos.y]==9)
				g_map[pos.x][pos.y]=3;
			else
				g_map[pos.x][pos.y]=0;
		} else {
			if(g_map[pos.x][pos.y-2]==3) {
				g_map[pos.x][pos.y-2]=7;
				g_map[pos.x][pos.y-1]=6;
				if(g_map[pos.x][pos.y]==9)
					g_map[pos.x][pos.y]=3;
				else
					g_map[pos.x][pos.y]=0;

			}

		}

	}
	if(g_map[pos.x][pos.y-1]==7) {
		if(g_map[pos.x][pos.y-2]==0) {
			g_map[pos.x][pos.y-2]=4;
			g_map[pos.x][pos.y-1]=9;
			if(g_map[pos.x][pos.y]==9)
				g_map[pos.x][pos.y]=3;
			else
				g_map[pos.x][pos.y]=0;
		} else {
			if(g_map[pos.x][pos.y-2]==3) {
				g_map[pos.x][pos.y-2]=7;
				g_map[pos.x][pos.y-1]=9;
				if(g_map[pos.x][pos.y]==9)
					g_map[pos.x][pos.y]=3;
				else
					g_map[pos.x][pos.y]=0;

			}
		}
	}
}

//keyright
void right()
{
	POINT pos=GetGamerPosition();
	if(g_map[pos.x][pos.y+1]==0) {
		g_map[pos.x][pos.y+1]=6;

		if(g_map[pos.x][pos.y]==9)
			g_map[pos.x][pos.y]=3;
		else
			g_map[pos.x][pos.y]=0;
	}
	if(g_map[pos.x][pos.y+1]==3) {
		g_map[pos.x][pos.y+1]=9;
		if (g_map[pos.x][pos.y]==9)
			g_map[pos.x][pos.y]=3;
		else
			g_map[pos.x][pos.y]=0;
	}

	if(g_map[pos.x][pos.y+1]==4) {
		if(g_map[pos.x][pos.y+2]==0) {
			g_map[pos.x][pos.y+2]=4;
			g_map[pos.x][pos.y+1]=6;
			if(g_map[pos.x][pos.y]==9)
				g_map[pos.x][pos.y]=3;
			else
				g_map[pos.x][pos.y]=0;
		} else {
			if(g_map[pos.x][pos.y+2]==3) {
				g_map[pos.x][pos.y+2]=7;
				g_map[pos.x][pos.y+1]=6;
				if(g_map[pos.x][pos.y]==9)
					g_map[pos.x][pos.y]=3;
				else
					g_map[pos.x][pos.y]=0;

			}

		}

	}
	if(g_map[pos.x][pos.y-1]==7) {
		if(g_map[pos.x][pos.y+2]==0) {
			g_map[pos.x][pos.y+2]=4;
			g_map[pos.x][pos.y+1]=9;
			if(g_map[pos.x][pos.y]==9)
				g_map[pos.x][pos.y]=3;
			else
				g_map[pos.x][pos.y]=0;
		} else {
			if(g_map[pos.x][pos.y+2]==3) {
				g_map[pos.x][pos.y+2]=7;
				g_map[pos.x][pos.y+1]=9;
				if(g_map[pos.x][pos.y]==9)
					g_map[pos.x][pos.y]=3;
				else
					g_map[pos.x][pos.y]=0;

			}
		}
	}
}

//GetRestBox
int GetRestBox()
{
	int CountBox=0;
	for(int i=0; i<10; i++) {
		for(int j=0; j<12; j++) {
			if (g_map[i][j]==4)
				CountBox++;
		}
	}
	return CountBox;
}
//main
int main()
{

	SetConsoleTitle("智阅荟推箱子");
	system("mode con cols=26 lines=12");


	while(1) {

		if(GetRestBox()==0) {
			//MessageBox(NULL,"你成功了!","祝贺你:",MB_OK);
			//NextLevel++; //开启下一关	未完成,大家可以继续写下一关
		}
		system("cls");
		Drapmap();
		char ch=getch();


		switch(ch) {
			case 'w' :
			case 'W' :
			case 72 :
				up();
				break;
			case 's' :
			case 'S' :
			case 80 :
				down();
				break;
			case 'a' :
			case 'A' :
			case 75 :
				left();
				break;
			case 'd' :
			case 'D' :
			case 77 :
				right();
				break;
		}
	}
	return 0;
}

本文的C++源文件可以在微信号”智阅荟“回复222下载:

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

欢迎关注公众号:「智阅荟」,懂技术,更懂你!

↑关注上方公众号回复 222 即可下载源代码↑

  

原文地址:https://www.cnblogs.com/hbqjzx/p/13802382.html