C语言小游戏——推箱子(基础版)

2023-11-01

1.游戏界面

2.游戏说明

贪吃蛇游戏按键说明:

升级版的功能:可以进行通关模式,通过方向键WSAD键或者上下左右键,可以改变人移动方向的改变:

3.程序分析

第一部分——绘制并打印地图(使用二维数组):

//地图
//0:空地		1:墙壁	3:箱子的目的地	4:箱子
//6:人		7:箱子和目的地重合		9:人站在目的地
int g_map[10][12] =
{
		{1,1,1,1,1,0,0,0,0,0,0,0},
		{1,0,0,0,1,0,1,1,1,0,0,0},
		{1,0,4,0,1,0,1,1,1,1,1,1},
		{1,0,4,6,1,0,1,0,0,0,3,1},
		{1,1,1,4,1,1,1,0,0,0,3,1},
		{0,1,0,0,0,0,0,0,0,0,3,1},
		{0,1,0,0,0,1,0,0,0,0,0,1},
		{0,1,0,0,0,1,0,0,0,0,0,1},
		{0,1,1,1,1,1,0,0,0,0,0,1},
		{0,0,0,0,0,0,1,1,1,1,1,1},
};

void DrapMap();				//打印地图
/*===========================================*/
//打印地图
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("\n");
	}
}

第二部分——获取玩家位置,控制方向:


//获取玩家坐标
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;
}

//往上
void Up()
{
	POINT pos = GetGamerPosition();

	//1.人的前面是空地
	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;
	}
	//2.人的前面是目的地
	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;
	}
	//3.人的前面是箱子
	if (g_map[pos.x - 1][pos.y] == 4)
	{
		//a.箱子的前面是空地
		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;
		}
		//b.箱子的前面是目的地
		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;
		}
	}
	//4.人的前面是箱子和目的地的重合
	if (g_map[pos.x - 1][pos.y] == 7)
	{
		//a.箱子的前面是空地
		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;
		}
		//b.箱子的前面是目的地
		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;
		}
	}
}

//往下
void Down()
{
	POINT pos = GetGamerPosition();

	//1.人的前面是空地
	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;
	}
	//2.人的前面是目的地
	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;
	}
	//3.人的前面是箱子
	if (g_map[pos.x + 1][pos.y] == 4)
	{
		//a.箱子的前面是空地
		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;
		}
		//b.箱子的前面是目的地
		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;
		}
	}
	//4.人的前面是箱子和目的地的重合
	if (g_map[pos.x + 1][pos.y] == 7)
	{
		//a.箱子的前面是空地
		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;
		}
		//b.箱子的前面是目的地
		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;
		}
	}
}

//往左
void Left()
{
	POINT pos = GetGamerPosition();

	//1.人的前面是空地
	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;
	}
	//2.人的前面是目的地
	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;
	}
	//3.人的前面是箱子
	if (g_map[pos.x][pos.y - 1] == 4)
	{
		//a.箱子的前面是空地
		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;
		}
		//b.箱子的前面是目的地
		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;
		}
	}
	//4.人的前面是箱子和目的地的重合
	if (g_map[pos.x][pos.y - 1] == 7)
	{
		//a.箱子的前面是空地
		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;
		}
		//b.箱子的前面是目的地
		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;
		}
	}
}

//往右
void Right()
{
	POINT pos = GetGamerPosition();

	//1.人的前面是空地
	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;
	}
	//2.人的前面是目的地
	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;
	}
	//3.人的前面是箱子
	if (g_map[pos.x][pos.y + 1] == 4)
	{
		//a.箱子的前面是空地
		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;
		}
		//b.箱子的前面是目的地
		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;
		}
	}
	//4.人的前面是箱子和目的地的重合
	if (g_map[pos.x][pos.y + 1] == 7)
	{
		//a.箱子的前面是空地
		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;
		}
		//b.箱子的前面是目的地
		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;
		}
	}
}

4.整个游戏源代码

#include <stdio.h>
#include <Windows.h>
#include <stdlib.h>
#include <conio.h>

//地图
//0:空地		1:墙壁	3:箱子的目的地	4:箱子
//6:人		7:箱子和目的地重合		9:人站在目的地
int g_map[10][12] =
{
		{1,1,1,1,1,0,0,0,0,0,0,0},
		{1,0,0,0,1,0,1,1,1,0,0,0},
		{1,0,4,0,1,0,1,1,1,1,1,1},
		{1,0,4,6,1,0,1,0,0,0,3,1},
		{1,1,1,4,1,1,1,0,0,0,3,1},
		{0,1,0,0,0,0,0,0,0,0,3,1},
		{0,1,0,0,0,1,0,0,0,0,0,1},
		{0,1,0,0,0,1,0,0,0,0,0,1},
		{0,1,1,1,1,1,0,0,0,0,0,1},
		{0,0,0,0,0,0,1,1,1,1,1,1},
};


void DrapMap();				//打印地图
POINT GetGamerPosition();	//获取玩家坐标
void Up();					//往上
void Down();				//往下
void Left();				//往左
void Right();					//往右

int main()
{
	//设置标题
	SetConsoleTitle(L"推箱子");
	//设置窗口的大小
	system("mode con cols=26 lines=12");
	while (1)
	{
		//清屏
		system("cls");
		//打印地图
		DrapMap();

		//getchar();
		//scanf();    这两个需要按回车才能输入
		char ch = _getch();
		switch (ch)
		{
		case 'w':case 72:	//往上
			Up();
			break;
		case 's':case 80:	//往下
			Down();
			break;
		case 'a':case 75:	//往左
			Left();
			break;
		case 'd':case 77:	//往右
			Right();
			break;
		}
	}

	return 0;
}

/*===========================================*/
//打印地图
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("\n");
	}
}

//获取玩家坐标
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;
}

//往上
void Up()
{
	POINT pos = GetGamerPosition();

	//1.人的前面是空地
	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;
	}
	//2.人的前面是目的地
	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;
	}
	//3.人的前面是箱子
	if (g_map[pos.x - 1][pos.y] == 4)
	{
		//a.箱子的前面是空地
		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;
		}
		//b.箱子的前面是目的地
		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;
		}
	}
	//4.人的前面是箱子和目的地的重合
	if (g_map[pos.x - 1][pos.y] == 7)
	{
		//a.箱子的前面是空地
		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;
		}
		//b.箱子的前面是目的地
		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;
		}
	}
}

//往下
void Down()
{
	POINT pos = GetGamerPosition();

	//1.人的前面是空地
	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;
	}
	//2.人的前面是目的地
	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;
	}
	//3.人的前面是箱子
	if (g_map[pos.x + 1][pos.y] == 4)
	{
		//a.箱子的前面是空地
		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;
		}
		//b.箱子的前面是目的地
		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;
		}
	}
	//4.人的前面是箱子和目的地的重合
	if (g_map[pos.x + 1][pos.y] == 7)
	{
		//a.箱子的前面是空地
		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;
		}
		//b.箱子的前面是目的地
		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;
		}
	}
}

//往左
void Left()
{
	POINT pos = GetGamerPosition();

	//1.人的前面是空地
	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;
	}
	//2.人的前面是目的地
	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;
	}
	//3.人的前面是箱子
	if (g_map[pos.x][pos.y - 1] == 4)
	{
		//a.箱子的前面是空地
		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;
		}
		//b.箱子的前面是目的地
		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;
		}
	}
	//4.人的前面是箱子和目的地的重合
	if (g_map[pos.x][pos.y - 1] == 7)
	{
		//a.箱子的前面是空地
		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;
		}
		//b.箱子的前面是目的地
		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;
		}
	}
}

//往右
void Right()
{
	POINT pos = GetGamerPosition();

	//1.人的前面是空地
	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;
	}
	//2.人的前面是目的地
	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;
	}
	//3.人的前面是箱子
	if (g_map[pos.x][pos.y + 1] == 4)
	{
		//a.箱子的前面是空地
		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;
		}
		//b.箱子的前面是目的地
		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;
		}
	}
	//4.人的前面是箱子和目的地的重合
	if (g_map[pos.x][pos.y + 1] == 7)
	{
		//a.箱子的前面是空地
		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;
		}
		//b.箱子的前面是目的地
		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;
		}
	}
}

感谢阅读,如有不足之处,欢迎来指正。谢谢!

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

C语言小游戏——推箱子(基础版) 的相关文章

随机推荐

  • 图像数据处理 pytorch

    coding utf 8 Transfer Learning Tutorial Author Sasank Chilamkurthy
  • 双非计算机学硕报录比竟然有28:1?深圳大学20考研居然如此爆炸!

    深圳大学是一所双非大学 计算机学科评估B 软件工程学科评估没有 由于计算机实力在双非中很强 而且地处广东深圳 是信息行业和互联网行业比较发达的地区 因此深圳大学很受考生欢迎 但是深圳大学也很难考 深圳大学基本所有计算机相关专业都考408 这
  • 【Git】(一)基本操作

    读完本文后 您会了解 1 如何在本地配置GIT环境 2 环境配置成功后 如何从远端下载一个已有仓库到本地 1 配置全局用户名 邮箱 git config global user name username git config global
  • LeetCode 0198. House Robber

    问题简析 作为职业小偷 我要去打家劫舍 但是注意如果两家相邻房子在同一夜被打劫了 则会触发警报 现在给定一个非负整数构成的数列 代表连续的若干房屋中的财产数量 计算一晚上最多能偷多少钱 例如 nums 1 2 3 1 最大值为1 3 4 n
  • 论文End To End speech里一种seq2seq

    在End To End speech里介绍了一种更好的seq2seq的模型 效果我没有实际比较过 但是思路值得学习 接下来分享下 我的理解 虽然这篇论文讲的是Text To speech 但是主要模型架构使用的是seq2seq 主要的改进也
  • 高效真实的云渲染算法

    高效真实的云渲染算法 转 原文链接 http www cnblogs com effulgent archive 2008 10 06 1305029 html 原文 Realistic and Fast Cloud Rendering N
  • 飞书与IAI国际广告奖,协同实现国内营销史上的创新“云终审”

    防疫时期 线下营销活动暂停或无限延期 转型线上迫在眉睫 而想要高效地进行线上远程办公 一套实用而全面的线上协同工具不可或缺 今天的主角 IAI国际广告奖 是由中国传媒大学广告学院与IAI国际广告研究所联合主办的中国大型广告作品案例评选活动
  • 随笔:MySQL 查询事务状态字段说明

    今天一个朋友想查看一下的MySQL层事务提交状态经历的过程 比如我们常说的prapare flush sync commit 几个阶段 但是找了一下发现视乎没有视图可以看到一共看了3个地方 information schema INNODB
  • Elasticsearch实战(十二)---搜索推荐 match_phrase_prefix及fuzzy错误拼写模糊查询

    Elasticsearch实战 搜索推荐 match phrase prefix 文章目录 Elasticsearch实战 搜索推荐 match phrase prefix 1 搜索推荐场景 1 1 准备数据 2 搜索推荐实现 2 1 ma
  • nginx报404 not found错误解决

    一般报404错误都是因为nginx做了伪静态 去除了框架的index php 访问某域名时 去掉index php目录时达到效果一样 如 www test1 index php test2跟www test1 test2效果一致 在vhos
  • stm32flash碰到hex文件出错,读取超慢, 占用内存超多的问题解决

    这个问题是因为sdcc生成的hex的每行的地址并不是排序的好的 有些高的地址在前面 低的地址在后面 这样的话 stm32flash这个hex c并不能处理这个情况 里面有一个逻辑是用来填补0xff的 当后面的地址比前面大 一减得负数 但是变
  • TCP协议详解(三次握手,传输数据,四次挥手)

    首先来了解一下什么是TCP 传输控制协议 简单点来讲TCP它是一种网络通信协议 旨在通过internet发送数据包 TCP是OSI层中的传输层协议 第四层 用于通过传输和确保通过支持网络和internet传递消息来在远程计算机之间创建连接
  • React Native环境及项目配置搭建

    安装RN环境卡了我好久 在网上搜了很多都不全遇到很多坎儿 时至今日我终于装好了 打算写一个详细过程造福大众 也算是对自己总结更深层的记忆 1 首先看官网 React 注意要点 必须要有node javaJDK和AndroidStudio 再
  • iOS 4层结构(iOS技术概要)—— Media 层(二)

    Media层 媒体层提供了图形 音频和视频技术支持 以达到移动设备上极佳的多媒体体验 一 图形技术 高品质图形是iOS应用程序非常重要的一部分 最简单 和最有效 的方法来创建一个应用程序是使用预渲染图片与UI标准控件结合实现系统绘制 然而
  • 如何用git将本地文件放到github上

    1 在github上新建一个仓库 2 使用如下命令操作 前提 本地已安装git 使用git Bash运行如下代码 git init 使本地文件夹成为一个本地git仓库 运行后文件夹下会生成一个 git文件夹 git add 将本地文件夹添加
  • Seata解析-数据源代理DataSourceProxy详解

    本文基于seata 1 3 0版本 前面通过十多篇文章详细介绍了TC端 从这篇文章开始介绍RM RM是资源管理器 资源指的就是数据库 RM主要与分支事务有关 RM会处理业务数据 在 Seata解析 seata部署启动初体验 中 使用了类Da
  • osg学习(五十二)加载的牛模型cow.osg没有纹理 黑色

    1 纹理文件 Images reflect rgb 没有正确加载 2 Android 的gles中没有glTexGen函数 需要通过着色器程序实现 参看C 学习 三三六 球面贴图Sphere mapping 立方体贴图Cube mappin
  • 02黑马数据结构笔记之单向链表搭建(list)

    02黑马数据结构笔记之单向链表搭建 list 1 思路 以STL的容器list类似 将各个数据节点存放在链表当中 实现是靠一个结构体来管理各个数据节点 定义一个节点类型 typedef struct Node 接收任何数据 void dat
  • 远程访问群晖Drive并挂载为电脑磁盘同步备份文件「无需公网IP」

    文章目录 前言 1 群晖Synology Drive套件的安装 1 1 安装Synology Drive套件 1 2 设置Synology Drive套件 1 3 局域网内电脑测试和使用 2 使用cpolar远程访问内网Synology D
  • C语言小游戏——推箱子(基础版)

    推箱子 1 游戏界面 2 游戏说明 3 程序分析 4 整个游戏源代码 1 游戏界面 2 游戏说明 贪吃蛇游戏按键说明 升级版的功能 可以进行通关模式 通过方向键WSAD键或者上下左右键 可以改变人移动方向的改变 3 程序分析 第一部分 绘制