推箱子c语言

最近比较无聊所以做了一个简单的推箱子游戏

直接上源码了e  QAQ

#include<stdio.h>//预处理命令标准的输入输出函数库
#include<conio.h>//键盘输入函数库
#include<stdlib.h>//系统标准输出函数
//0:空地 1:墙 2:箱子要放的位置   5:人与星号重叠6:箱子与星号重叠 3:人+-3 4:箱子:+-4
int map[7][7] = {0,0,1,1,1,1,0,
				 1,1,1,0,0,1,0,
				 1,3,0,2,4,1,1,
				 1,0,0,0,4,0,1,
				 1,0,1,2,0,0,1,
	             1,0,0,0,0,0,1,
	             1,1,1,1,1,1,1
				};
void PrintMap()
{
	int i, j;
	for (i = 0; i < 7; i++)
	{
		for (j = 0; j < 7; j++)
		{
			switch (map[i][j])
			{
				//0:空地 1:墙 2:箱子要放的位置   5:人与星号重叠6:箱子与星号重叠 3:人+-3 4:箱子:+-4
			case 0: printf("  "); break; 
			case 1: printf("■"); break; 
			case 2: printf("☆"); break; 
			case 3: printf("♀");  break;
			case 4: printf("□"); break; 
			case 5: printf("♀"); break;
			case 6: printf("★"); break; 
			default:
				break;
			}
		}
		printf("\n");
	}
}
//0:空地 1:墙 2:箱子要放的位置   5:人与星号重叠6:箱子与星号重叠 3:人+-3 4:箱子:+-4
void PlayGame()
{
	int i, j;
	int x, y;//(x,y)人的坐标
	//获取人的坐标
	for(i=0;i<7;i++)
		for(j=0;j<7;j++)
			if (map[i][j] == 3||map[i][j]==5)
			{
				x = i;
				y = j;
			}
	char ch;
	ch = _getch();//无显示输入
	//switch:用于判别不同键的输入
	switch (ch)
	{
	case 'R':
	case 'r':break;
	case 's':
	case 'S':
		if (map[x + 1][y] == 0||map[x+1][y]==2)//下一个去的地方为空地或为箱子待放地
		{
			map[x + 1][y] +=3;  //下一个去的位置变为人
		    map[x][y] -= 3;//清除当前位置
		}
		else if (map[x + 1][y] == 4||map[x+1][y]==6)//下一个去的地方放着箱子
		{
			if (map[x + 2][y] == 0 || map[x+2][y] == 2)//下一个位置为空地或者为箱子时
			{
				map[x + 2][y] += 4;
				map[x + 1][y] = map[x + 1][y] - 4 + 3;
				if(map[x][y]==5)
				map[x][y] -= 3;//清除当前位置
				else if (map[x][y] == 3)
				 map[x][y] -= 3;
			}
		}
		else;
		break;
	case 'w':
	case 'W':
		if (map[x - 1][y] == 0 || map[x - 1][y] == 2)//下一个去的地方为空地或为箱子待放地
		{
			map[x - 1][y] += 3;  //下一个去的位置变为人
			map[x][y] -= 3;
		}
		else if (map[x - 1][y] == 4 || map[x - 1][y] == 6)//下一个去的地方放着箱子
		{
			if (map[x - 2][y] == 0 || map[x-2][y] == 2)//下一个位置为空地或者为箱子时
			{
				map[x - 2][y] += 4;
				map[x - 1][y] = map[x - 1][y] - 4 + 3;
				if (map[x][y] == 5)
					map[x][y] -= 3;//清除当前位置
				else if (map[x][y] == 3)
					map[x][y] -= 3;
			}
		}
		else;
		break;
	case 'd':
	case 'D':
		if (map[x][y+1] == 0 || map[x][y+1] == 2)//下一个去的地方为空地或为箱子待放地
		{
			map[x][y+1] += 3;  //下一个去的位置变为人
			map[x][y] -= 3;
		}
		else if (map[x][y+1] == 4 || map[x ][y+1] == 6)//下一个去的地方放着箱子
		{
			if (map[x ][y+2] == 0 || map[x][y+2] == 2)//下一个位置为空地或者为箱子时
			{
				map[x ][y+2] += 4;
				map[x ][y+1] = map[x ][y+1] - 4 + 3;
				if (map[x][y] == 5)
					map[x][y] -= 3;//清除当前位置
				else if (map[x][y] == 3)
					map[x][y] -= 3;
			}
		}
		else;
		break;
	case 'a':
	case 'A':
		if (map[x][y - 1] == 0 || map[x][y - 1] == 2)//下一个去的地方为空地或为箱子待放地
		{
			map[x][y - 1] += 3;  //下一个去的位置变为人
			map[x][y] -= 3;
		}
		if (map[x][y - 1] == 4 || map[x][y - 1] == 6)//下一个去的地方放着箱子
		{
			if (map[x][y - 2] == 0 || map[x][y-2] == 2)//下一个位置为空地或者为箱子时
			{
				map[x][y - 2] += 4;
				map[x][y - 1] = map[x][y - 1] - 4 + 3;
				if (map[x][y] == 5)
					map[x][y] -= 3;//清除当前位置
				else if (map[x][y] == 3)
					map[x][y] -= 3;
			}
		}
		else
		break;
	default:
		break;
	}


}

int  main()
{
	while (1) {
		PrintMap();
		PlayGame();
		system("cls");
	}
	return 0;
}

运行效果:

自我感觉还是不错的。。。以后说不定会给他加上图形界面什么的。。。哈哈哈哈哈。

猜你喜欢

转载自blog.csdn.net/weixin_42143003/article/details/86670875