0
点赞
收藏
分享

微信扫一扫

自定义实现hashmap-python

君之言之 2023-10-03 阅读 46
c语言

1.调整控制台窗口大小

#define  _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>

#include <stdio.h>
int main()
{


	system("mode con lines=15 cols=25");//调整窗口大小
	return 0;
}

在这里插入图片描述

2.清掉控制台屏幕上的字

#define  _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>

#include <stdio.h>
int main()
{


	system("mode con lines=15 cols=25");
	system("cls");//清屏操作
	getchar();//不让程序退出,等待读字符
	return 0;
}

在这里插入图片描述

3. 枚举类型定义地图中空地,墙,目的地,箱子,玩家

enum  Mine
{
	SPACE,  //空地
	WALL,//墙
	DEST,  //目的地
	BOX,  //箱子
	PLAYER//玩家
};

4.定义二维数组做地图,并且打印出来看看效果

//定义一个二维数组,做地图 空地0  墙1  目的地2  箱子3  玩家4    箱子在目的地 5  玩家在目的地6,与枚举类型对应上了
int map[10][10] =
{
	{0,0,0,0,0,0,0,0,0,0},
	{0,0,0,1,1,1,0,0,0,0},
	{0,0,0,1,2,1,1,1,1,0},
	{0,1,1,1,3,0,3,2,1,0},
	{0,1,2,3,4,0,1,1,1,0},
	{0,1,1,1,1,3,1,0,0,0},
	{0,0,0,0,1,2,1,0,0,0},
	{0,0,0,0,1,1,1,0,0,0},
	{0,0,0,0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0,0,0,0}
};

void printmap()
{for(int i=0;i<10;i++)
{
	for (int j = 0; j < 10; j++)
	{
		printf("%d ", map[i][j]);





	}
	printf("\n");




}






}
int main()
{

	while (1)
	{
		system("mode con lines=15 cols=25");
		system("cls");//清屏操作
		printmap();
		getchar();//不让程序退出,等待读字符
	}
	return 0;
}

5.修改printmap函数为gamedraw()函数

void gamedraw()
{
	for (int i = 0; i < 10; i++)
	{
		for (int j = 0; j < 10; j++)
		{
			 
				switch (map[i][j])
				{case SPACE://如果二维数组元素为0
					printf("  ");  //空地        //一个中文字符相当于二个英文字符
					break;
				case WALL://如果二维数组元素为1
					printf("■");//墙
					break;
				case DEST://如果二维数组元素为2
					printf("☆");//目的地
					break;
				case BOX://如果二维数组元素为3
					printf("□");//箱子
					break;
				case PLAYER://如果二维数组元素为4
					printf("♀");//玩家
					break;
				case PLAYER+DEST://如果二维数组元素为6
					printf("♂");//玩家在目的地
					break;
				case BOX+DEST://如果二维数组元素为5
					printf("★");箱子在目的地
					break;
                }






		}
				
printf("\n");
	}





}

6.按键控制移动

int i = 0; int j = 0;//定义不要在for循环里面,要不然出作用域就会被销毁
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j < 10; j++)
		{
			if (map[i][j] == PLAYER||map[i][j] == PLAYER+DEST)
			{
				goto end;
			}
		}
	}
end:;//找到直接来这里
void keyevent()
{
	int i = 0; int j = 0;
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j < 10; j++)
		{
			if (map[i][j] == PLAYER || map[i][j] == PLAYER + DEST)
			{
				goto end;
			}
		}
	}
end:;
	char ch = _getch();
	printf("%d    %c", ch, ch);//w 119 a 97 s 115  d 100

















}
	switch (ch)
	{
	case 119:
	case 'w ':
	case 'W':
		break;
	case 97:
	case 'a ':
	case'A':
		break;
	case 115:
	case 's ':
	case'S':
		break;
	case 100:
	case 'd ':
	case'D':
		break;
	}
 if (map[i - 1][j] == SPACE||map[i - 1][j] == DEST)
		 {
			 map[i - 1][j] += PLAYER;
			 map[i][j] -= PLAYER;



		 }
 else  if(map[i-1][j]==BOX||map[i-1][j]==BOX+DEST)
		 {
			 if (map[i - 2][j] == SPACE || map[i - 2][j] == DEST)
			 {//完成玩家上面有箱子,箱子的上面是空地或者是目的地都可以推动
				 map[i - 2][j] += BOX;//玩家上面的上面加一个箱子
				 map[i - 1][j] = map[i - 1][j] - BOX + PLAYER;//玩家的上面减去一个箱子加上一个玩家
				 map[i][j] -= PLAYER;//玩家消失在原来位置





			 }



		 }

处理完的函数上键

case 119:
	case 'w ':
	case 'W':
		if (map[i - 1][j] == SPACE || map[i - 1][j] == DEST)
		{
			map[i - 1][j] += 4;
			map[i][j] -= 4;



		}
		else  if (map[i - 1][j] == BOX || map[i - 1][j] == BOX + DEST)
		{
			if (map[i - 2][j] == SPACE || map[i - 2][j] == DEST)
			{
				map[i - 2][j] += BOX;
				map[i - 1][j] = map[i - 1][j] - BOX + PLAYER;
				map[i][j] -= PLAYER;//玩家消失在原来位置





			}



		}
		break;

在这里插入图片描述
向上推了一下,如果懂了上键怎么移动,别的也就会处理了
在这里插入图片描述
整体的keyevent()

void keyevent()
{
	int i = 0; int j = 0;
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j < 10; j++)
		{
			if (map[i][j] == PLAYER || map[i][j] == PLAYER + DEST)
			{
				goto end;
			}
		}
	}
end:;
	char ch = _getch();
	switch (ch)
	{
	case 119:
	case 'w ':
	case 'W':
		if (map[i - 1][j] == SPACE || map[i - 1][j] == DEST)
		{
			map[i - 1][j] += PLAYER;
			map[i][j] -=  PLAYER;



		}
		else  if (map[i - 1][j] == BOX || map[i - 1][j] == BOX + DEST)
		{
			if (map[i - 2][j] == SPACE || map[i - 2][j] == DEST)
			{
				map[i - 2][j] += BOX;
				map[i - 1][j] = map[i - 1][j] - BOX + PLAYER;
				map[i][j] -= PLAYER;//玩家消失在原来位置





			}



		}
		break;
	case 97:
	case 'a ':
	case'A':
		if (map[i][j - 1] == SPACE || map[i][j - 1] == DEST)
		{
			map[i][j - 1] += PLAYER;
			map[i][j] -=  PLAYER;



		}
		else  if (map[i][j - 1] == BOX || map[i][j - 1] == BOX + DEST)
		{
			if (map[i][j - 2] == SPACE || map[i][j - 2] == DEST)
			{
				map[i][j - 2] += BOX;
				map[i][j - 1] = map[i][j - 1] - BOX + PLAYER;
				map[i][j] -= PLAYER;//玩家消失在原来位置





			}



		}
		break;
	case 115:
	case 's ':
	case'S':
		if (map[i + 1][j] == SPACE || map[i + 1][j] == DEST)
		{
			map[i + 1][j] += PLAYER;
			map[i][j] -= PLAYER;



		}
		else  if (map[i + 1][j] == BOX || map[i + 1][j] == BOX + DEST)
		{
			if (map[i + 2][j] == SPACE || map[i + 2][j] == DEST)
			{
				map[i + 2][j] += BOX;
				map[i + 1][j] = map[i + 1][j] - BOX + PLAYER;
				map[i][j] -= PLAYER;//玩家消失在原来位置





			}



		}
		break;
	case 100:
	case 'd ':
	case'D':
		if (map[i][j + 1] == SPACE || map[i][j + 1] == DEST)
		{
			map[i][j + 1] +=  PLAYER;
			map[i][j] -=  PLAYER;



		}
		else  if (map[i][j + 1] == BOX || map[i][j + 1] == BOX + DEST)
		{
			if (map[i][j + 2] == SPACE || map[i][j + 2] == DEST)
			{
				map[i][j + 2] += BOX;
				map[i][j + 1] = map[i][j + 1] - BOX + PLAYER;
				map[i][j] -= PLAYER;//玩家消失在原来位置





			}



		}
		break;
	}


}

7.多组地图的制作,修改map数组

int map[3][10][10] =
{
	{
	{0,0,0,0,0,0,0,0,0,0},
	{0,0,0,1,1,1,0,0,0,0},
	{0,0,0,1,2,1,1,1,1,0},
	{0,1,1,1,3,0,3,2,1,0},
	{0,1,2,3,4,0,1,1,1,0},
	{0,1,1,1,1,3,1,0,0,0},
	{0,0,0,0,1,2,1,0,0,0},
	{0,0,0,0,1,1,1,0,0,0},
	{0,0,0,0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0,0,0,0}
	},

	{
	{0,0,0,0,0,0,0,0,0,0},
	{0,0,1,1,0,0,1,1,0,0},
	{0,1,0,2,1,1,2,0,1,0},
	{1,0,0,0,3,0,0,0,0,1},
	{1,0,0,0,4,3,0,0,0,1},
	{0,1,0,0,3,3,0,0,1,0},
	{0,0,1,0,0,0,0,1,0,0},
	{0,0,0,1,2,2,1,0,0,0},
	{0,0,0,0,1,1,0,0,0,0},
	{0,0,0,0,0,0,0,0,0,0}
	},
	{
	{0,0,0,0,1,0,0,0,0,0},
	{0,0,0,1,0,1,0,0,0,0},
	{0,0,1,2,3,0,1,0,0,0},
	{0,1,0,0,0,0,0,1,0,0},
	{1,2,3,0,4,0,0,0,1,0},
	{0,1,0,0,0,0,0,3,2,1},
	{0,0,1,0,3,0,0,0,1,0},
	{0,0,0,1,2,0,0,1,0,0},
	{0,0,0,0,1,0,1,0,0,0},
	{0,0,0,0,0,1,0,0,0,0}
	}
};

将所有map[][]改成map[level][][];每通过一关,level++;

8.通关判断

bool jude()
{

	for (int i = 0; i < 10; i++)
	{
		for (int j = 0; j < 10; j++)
		{
			if (map[level][i][j] == BOX)
			{
				return false;
			}
		}
	}






}

	if (jude())
		{
			level++;
			if (level > 2)
			{
				
				printf("oioioioioioioioi奥哈呦学妹你通过了!");
			
				_getch();
				break;
			}
		}

9.程序源码(无图形库)

#define  _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
enum  Mine
{
	SPACE,  //空地
	WALL,//墙
	DEST,  //目的地
	BOX,  //箱子
	PLAYER//玩家





};
int level = 0;
//定义一个二维数组,做地图 空地0  墙1  目的地2  箱子3  玩家4    箱子在目的地 5  玩家在目的地6,与枚举类型对应上了
int map[3][10][10] =
{
	{
	{0,0,0,0,0,0,0,0,0,0},
	{0,0,0,1,1,1,0,0,0,0},
	{0,0,0,1,2,1,1,1,1,0},
	{0,1,1,1,3,0,3,2,1,0},
	{0,1,2,3,4,0,1,1,1,0},
	{0,1,1,1,1,3,1,0,0,0},
	{0,0,0,0,1,2,1,0,0,0},
	{0,0,0,0,1,1,1,0,0,0},
	{0,0,0,0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0,0,0,0}
	},

	{
	{0,0,0,0,0,0,0,0,0,0},
	{0,0,1,1,0,0,1,1,0,0},
	{0,1,0,2,1,1,2,0,1,0},
	{1,0,0,0,3,0,0,0,0,1},
	{1,0,0,0,4,3,0,0,0,1},
	{0,1,0,0,3,3,0,0,1,0},
	{0,0,1,0,0,0,0,1,0,0},
	{0,0,0,1,2,2,1,0,0,0},
	{0,0,0,0,1,1,0,0,0,0},
	{0,0,0,0,0,0,0,0,0,0}
	},
	{
	{0,0,0,0,1,0,0,0,0,0},
	{0,0,0,1,0,1,0,0,0,0},
	{0,0,1,2,3,0,1,0,0,0},
	{0,1,0,0,0,0,0,1,0,0},
	{1,2,3,0,4,0,0,0,1,0},
	{0,1,0,0,0,0,0,3,2,1},
	{0,0,1,0,3,0,0,0,1,0},
	{0,0,0,1,2,0,0,1,0,0},
	{0,0,0,0,1,0,1,0,0,0},
	{0,0,0,0,0,1,0,0,0,0}
	}
};

void gamedraw()
{
	for (int i = 0; i < 10; i++)
	{
		for (int j = 0; j < 10; j++)
		{
			 
				switch (map[level][i][j])
				{case SPACE:
					printf("  ");          //一个中文字符相当于二个英文字符
					break;
				case WALL:
					printf("■");
					break;
				case DEST:
					printf("☆");
					break;
				case BOX:
					printf("□");
					break;
				case PLAYER:
					printf("♀");
					break;
				case PLAYER+DEST:
					printf("♂");
					break;
				case BOX+DEST:
					printf("★");
					break;
                }






		}
				
printf("\n");
	}





}
void keyevent()
{
	int i = 0; int j = 0;
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j < 10; j++)
		{
			if (map[level][i][j] == PLAYER || map[level][i][j] == PLAYER + DEST)
			{
				goto end;
			}
		}
	}
end:;
	char ch = _getch();
	switch (ch)
	{
	case 119:
	case 'w ':
	case 'W':
		if (map[level][i - 1][j] == SPACE || map[level][i - 1][j] == DEST)
		{
			map[level][i - 1][j] += 4;
			map[level][i][j] -= 4;



		}
		else  if (map[level][i - 1][j] == BOX || map[level][i - 1][j] == BOX + DEST)
		{
			if (map[level][i - 2][j] == SPACE || map[level][i - 2][j] == DEST)
			{
				map[level][i - 2][j] += BOX;
				map[level][i - 1][j] = map[level][i - 1][j] - BOX + PLAYER;
				map[level][i][j] -= PLAYER;//玩家消失在原来位置





			}



		}
		break;
	case 97:
	case 'a ':
	case'A':
		if (map[level][i][j - 1] == SPACE || map[level][i][j - 1] == DEST)
		{
			map[level][i][j - 1] += 4;
			map[level][i][j] -= 4;



		}
		else  if (map[level][i][j - 1] == BOX || map[level][i][j - 1] == BOX + DEST)
		{
			if (map[level][i][j - 2] == SPACE || map[level][i][j - 2] == DEST)
			{
				map[level][i][j - 2] += BOX;
				map[level][i][j - 1] = map[level][i][j - 1] - BOX + PLAYER;
				map[level][i][j] -= PLAYER;//玩家消失在原来位置





			}



		}
		break;
	case 115:
	case 's ':
	case'S':
		if (map[level][i + 1][j] == SPACE || map[level][i + 1][j] == DEST)
		{
			map[level][i + 1][j] += PLAYER;
			map[level][i][j] -= PLAYER;



		}
		else  if (map[level][i + 1][j] == BOX || map[level][i + 1][j] == BOX + DEST)
		{
			if (map[level][i + 2][j] == SPACE || map[level][i + 2][j] == DEST)
			{
				map[level][i + 2][j] += BOX;
				map[level][i + 1][j] = map[level][i + 1][j] - BOX + PLAYER;
				map[level][i][j] -= PLAYER;//玩家消失在原来位置





			}



		}
		break;
	case 100:
	case 'd ':
	case'D':
		if (map[level][i][j + 1] == SPACE || map[level][i][j + 1] == DEST)
		{
			map[level][i][j + 1] += 4;
			map[level][i][j] -= 4;



		}
		else  if (map[level][i][j + 1] == BOX || map[level][i][j + 1] == BOX + DEST)
		{
			if (map[level][i][j + 2] == SPACE || map[level][i][j + 2] == DEST)
			{
				map[level][i][j + 2] += BOX;
				map[level][i][j + 1] = map[level][i][j + 1] - BOX + PLAYER;
				map[level][i][j] -= PLAYER;//玩家消失在原来位置





			}



		}
		break;
	}


}
bool jude()
{

	for (int i = 0; i < 10; i++)
	{
		for (int j = 0; j < 10; j++)
		{
			if (map[level][i][j] == BOX)
			{
				return false;
			}
		}
	}






}








int main()
{
	system("mode con lines=15 cols=25");
	//system("cls");//清屏操作
	while (1)
	{
		
	
		
		gamedraw();
		
		//_getch();
		if (jude())
		{
			level++;
			if (level > 2)
			{
				
				printf("oioioioioioioioi奥哈呦学妹你通过了!");
			
				_getch();
				break;
			}
		}keyevent();
		
	}
	getchar();//不让程序退出,等待读字符
	return 0;
}

10.演示1

20231002_124830

11.加图形库版本

12.头文件增加

#include <graphics.h >

13.定义保存空地,目的地,玩家,箱子,墙,箱子推到目的地图片的类

IMAGE  ima_all[6];

14.将图片image文件放在.cpp文件同目录下

在这里插入图片描述
image文件夹是自己创建的,用于放推箱子的素材,就是图片,图片可以在网上自己找推箱子的图片
在这里插入图片描述

15.加载图片函数

void loadimg()
{
	
	for (int i = 0; i < 6; i++)
	{
		char file[20] = "";
		sprintf(file,"./images/%d.png", i);
		loadimage(ima_all + i,file, 40, 40);
		

	}





}

16. gamedraw函数的修改

void gamedraw()
{
	for (int i = 0; i < 10; i++)
	{
		for (int j = 0; j < 10; j++)
		{
			int x = j * 40;
			int y = i * 40;

			switch (map[level][i][j])
			{
			case SPACE:
				putimage(x, y, ima_all+2);         //一个中文字符相当于二个英文字符
				break;
			case WALL:
				putimage(x, y, ima_all+1);
				break;
			case DEST:
				putimage(x, y, ima_all+4);
				break;
			case BOX:
				putimage(x, y, ima_all+3);
				break;
			case PLAYER:
				putimage(x, y, ima_all);
				break;
			case PLAYER + DEST:
				putimage(x, y, ima_all);
				break;
			case BOX + DEST://就是箱子推到目的地
				putimage(x, y, ima_all+5);
				break;
			}






		}

		
	}





}

在这里插入图片描述

17.主函数修改

int main()
{
	initgraph(400, 400);
	loadimg();
	//system("mode con lines=15 cols=25");
	//system("cls");//清屏操作
	while (1)
	{
		
	
		
		gamedraw();
		
		//_getch();
		if (jude())
		{
			level++;
			if (level > 2)
			{
				
				//printf("oioioioioioioioi奥哈呦学妹你通过了!");
			
				_getch();
				break;
			}
		}keyevent();
		
	}
	getchar();//不让程序退出,等待读字符
	return 0;
}

18.游戏通关显示

settextcolor(BLACK);//字体颜色
				settextstyle(25, 0, "微软雅黑");//字体风格
				setbkmode(TRANSPARENT);//字体背景透明
				
				outtextxy(100, 100, "oioioioioioioioi奥哈呦学妹你通过了!");//字体显示位置,以及内容
				_getch();
				break;

19.程序源码(带图形库版)

#define  _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>//_getch()函数头文件
#include <stdbool.h>//bool类型的头函数
#include <graphics.h >//图形库头文件
//定义一个二维数组,做地图
//空地0  墙1  目的地2  箱子3  玩家4    箱子在目的地 5  玩家在目的地6
IMAGE  ima_all[6];
int level = 0;
void loadimg()
{
	
	for (int i = 0; i < 6; i++)
	{
		char file[20] = "";
		sprintf(file,"./images/%d.png", i);
		loadimage(ima_all + i,file, 40, 40);
		

	}





}
enum  Mine
{
	SPACE,  //空地
	WALL,//墙
	DEST,  //目的地
	BOX,  //箱子
	PLAYER//玩家





};
int map[3][10][10] =
{
	{
	{0,0,0,0,0,0,0,0,0,0},
	{0,0,0,1,1,1,0,0,0,0},
	{0,0,0,1,2,1,1,1,1,0},
	{0,1,1,1,3,0,3,2,1,0},
	{0,1,2,3,4,0,1,1,1,0},
	{0,1,1,1,1,3,1,0,0,0},
	{0,0,0,0,1,2,1,0,0,0},
	{0,0,0,0,1,1,1,0,0,0},
	{0,0,0,0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0,0,0,0}
	},

	{
	{0,0,0,0,0,0,0,0,0,0},
	{0,0,1,1,0,0,1,1,0,0},
	{0,1,0,2,1,1,2,0,1,0},
	{1,0,0,0,3,0,0,0,0,1},
	{1,0,0,0,4,3,0,0,0,1},
	{0,1,0,0,3,3,0,0,1,0},
	{0,0,1,0,0,0,0,1,0,0},
	{0,0,0,1,2,2,1,0,0,0},
	{0,0,0,0,1,1,0,0,0,0},
	{0,0,0,0,0,0,0,0,0,0}
	},
	{
	{0,0,0,0,1,0,0,0,0,0},
	{0,0,0,1,0,1,0,0,0,0},
	{0,0,1,2,3,0,1,0,0,0},
	{0,1,0,0,0,0,0,1,0,0},
	{1,2,3,0,4,0,0,0,1,0},
	{0,1,0,0,0,0,0,3,2,1},
	{0,0,1,0,3,0,0,0,1,0},
	{0,0,0,1,2,0,0,1,0,0},
	{0,0,0,0,1,0,1,0,0,0},
	{0,0,0,0,0,1,0,0,0,0}
	}
};



void gamedraw()
{
	for (int i = 0; i < 10; i++)
	{
		for (int j = 0; j < 10; j++)
		{
			int x = j * 40;
			int y = i * 40;

			switch (map[level][i][j])
			{
			case SPACE:
				putimage(x, y, ima_all+2);         //一个中文字符相当于二个英文字符
				break;
			case WALL:
				putimage(x, y, ima_all+1);
				break;
			case DEST:
				putimage(x, y, ima_all+4);
				break;
			case BOX:
				putimage(x, y, ima_all+3);
				break;
			case PLAYER:
				putimage(x, y, ima_all);
				break;
			case PLAYER + DEST:
				putimage(x, y, ima_all);
				break;
			case BOX + DEST:
				putimage(x, y, ima_all+5);
				break;
			}






		}

		
	}





}
void keyevent()
{
	int i = 0; int j = 0;
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j < 10; j++)
		{
			if (map[level][i][j] == PLAYER||map[level][i][j] == PLAYER+DEST)
			{
				goto end;
			}
		}
	}
end:;
	char ch = _getch();
	//printf("%d    %c", ch, ch);//w 119 a 97 s 115  d 100
	switch (ch)
	{case 119:
	 case 'w ':
	 case 'W':
		 if (map[level][i - 1][j] == SPACE||map[level][i - 1][j] == DEST)
		 {
			 map[level][i - 1][j] += 4;
			 map[level][i][j] -= 4;



		 }
		 else  if(map[level][i-1][j]==BOX||map[level][i-1][j]==BOX+DEST)
		 {
			 if (map[level][i - 2][j] == SPACE || map[level][i - 2][j] == DEST)
			 {
				 map[level][i - 2][j] += BOX;
				 map[level][i - 1][j] = map[level][i - 1][j] - BOX + PLAYER;
				 map[level][i][j] -= PLAYER;//玩家消失在原来位置





			 }



		 }

		break;
	case 97:
	case 'a ':
	case'A':
		if (map[level][i][j-1] == SPACE || map[level][i][j-1] == DEST)
		{
			map[level][i][j-1] += 4;
			map[level][i][j] -= 4;



		}
		else  if (map[level][i][j-1] == BOX || map[level][i][j-1] == BOX + DEST)
		{
			if (map[level][i][j-2] == SPACE || map[level][i][j-2] == DEST)
			{
				map[level][i][j-2] += BOX;
				map[level][i][j-1] = map[level][i][j-1] - BOX + PLAYER;
				map[level][i][j] -= PLAYER;//玩家消失在原来位置





			}



		}
		break;
	case 115:
	case 's ':
	case'S':
		if (map[level][i+1][j] == SPACE || map[level][i+1][j] == DEST)
		{
			map[level][i+1][j] += 4;
			map[level][i][j] -= 4;



		}
		else  if (map[level][i+1][j] == BOX || map[level][i+1][j] == BOX + DEST)
		{
			if (map[level][i+2][j] == SPACE || map[level][i+2][j] == DEST)
			{
				map[level][i+2][j] += BOX;
				map[level][i+1][j] = map[level][i+1][j] - BOX + PLAYER;
				map[level][i][j] -= PLAYER;//玩家消失在原来位置





			}



		}
		break;
	case 100:
	case 'd ':
	case'D':
		if (map[level][i][j+1] == SPACE || map[level][i][j+1] == DEST)
		{
			map[level][i][j+1] += 4;
			map[level][i][j] -= 4;



		}
		else  if (map[level][i][j+1] == BOX || map[level][i][j+1] == BOX + DEST)
		{
			if (map[level][i][j+2] == SPACE || map[level][i][j +2] == DEST)
			{
				map[level][i][j+2] += BOX;
				map[level][i][j+1] = map[level][i][j+1] - BOX + PLAYER;
				map[level][i][j] -= PLAYER;//玩家消失在原来位置





			}



		}
		break;








	}



}

bool jude()
{
	
	for (int i = 0; i < 10; i++)
	{
		for (int j = 0; j < 10; j++)
		{
			if (map[level][i][j] == BOX)
			{
				return false;
			}
		}
	}






}
int main()
{
	initgraph(10 * 40, 10 * 40);
	loadimg();
	system("mode con lines=15 cols=25");//调整窗口大小
	
	while (1)
	{
		//system("cls");
		gamedraw();
		if (jude())
		{
			level++;
			if (level > 2)
			{
				settextcolor(BLACK);
				settextstyle(25, 0, "微软雅黑");
				setbkmode(TRANSPARENT);
				
				outtextxy(100, 100, "oioioioioioioioi奥哈呦学妹你通过了!");
				_getch();
				break;
			}
		}
			keyevent();
			
		}
	getchar();//不让程序退出
	return 0;
		
	}

20.演示2

20231002_153153

21.关卡的增加

22.关卡重开

int mapreset[3][10][10] =
{
	{
	{0,0,0,0,0,0,0,0,0,0},
	{0,0,0,1,1,1,0,0,0,0},
	{0,0,0,1,2,1,1,1,1,0},
	{0,1,1,1,3,0,3,2,1,0},
	{0,1,2,3,4,0,1,1,1,0},
	{0,1,1,1,1,3,1,0,0,0},
	{0,0,0,0,1,2,1,0,0,0},
	{0,0,0,0,1,1,1,0,0,0},
	{0,0,0,0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0,0,0,0}
	},

	{
	{0,0,0,0,0,0,0,0,0,0},
	{0,0,1,1,0,0,1,1,0,0},
	{0,1,0,2,1,1,2,0,1,0},
	{1,0,0,0,3,0,0,0,0,1},
	{1,0,0,0,4,3,0,0,0,1},
	{0,1,0,0,3,3,0,0,1,0},
	{0,0,1,0,0,0,0,1,0,0},
	{0,0,0,1,2,2,1,0,0,0},
	{0,0,0,0,1,1,0,0,0,0},
	{0,0,0,0,0,0,0,0,0,0}
	},
	{
	{0,0,0,0,1,0,0,0,0,0},
	{0,0,0,1,0,1,0,0,0,0},
	{0,0,1,2,3,0,1,0,0,0},
	{0,1,0,0,0,0,0,1,0,0},
	{1,2,3,0,4,0,0,0,1,0},
	{0,1,0,0,0,0,0,3,2,1},
	{0,0,1,0,3,0,0,0,1,0},
	{0,0,0,1,2,0,0,1,0,0},
	{0,0,0,0,1,0,1,0,0,0},
	{0,0,0,0,0,1,0,0,0,0}
	}
};
void keyevent()
{
	int i = 0; int j = 0;
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j < 10; j++)
		{
			if (map[level][i][j] == PLAYER || map[level][i][j] == PLAYER + DEST)
			{
				goto end;
			}
		}
	}
end:;
	char ch = _getch();
	//printf("%d    %c", ch, ch);//w 119 a 97 s 115  d 100
	switch (ch)
	{
	case 119:
	case 'w ':
	case 'W':
		if (map[level][i - 1][j] == SPACE || map[level][i - 1][j] == DEST)
		{
			map[level][i - 1][j] += 4;
			map[level][i][j] -= 4;



		}
		else  if (map[level][i - 1][j] == BOX || map[level][i - 1][j] == BOX + DEST)
		{
			if (map[level][i - 2][j] == SPACE || map[level][i - 2][j] == DEST)
			{
				map[level][i - 2][j] += BOX;
				map[level][i - 1][j] = map[level][i - 1][j] - BOX + PLAYER;
				map[level][i][j] -= PLAYER;//玩家消失在原来位置





			}



		}

		break;
	case 97:
	case 'a ':
	case'A':
		if (map[level][i][j - 1] == SPACE || map[level][i][j - 1] == DEST)
		{
			map[level][i][j - 1] += 4;
			map[level][i][j] -= 4;



		}
		else  if (map[level][i][j - 1] == BOX || map[level][i][j - 1] == BOX + DEST)
		{
			if (map[level][i][j - 2] == SPACE || map[level][i][j - 2] == DEST)
			{
				map[level][i][j - 2] += BOX;
				map[level][i][j - 1] = map[level][i][j - 1] - BOX + PLAYER;
				map[level][i][j] -= PLAYER;//玩家消失在原来位置





			}



		}
		break;
	case 115:
	case 's ':
	case'S':
		if (map[level][i + 1][j] == SPACE || map[level][i + 1][j] == DEST)
		{
			map[level][i + 1][j] += 4;
			map[level][i][j] -= 4;



		}
		else  if (map[level][i + 1][j] == BOX || map[level][i + 1][j] == BOX + DEST)
		{
			if (map[level][i + 2][j] == SPACE || map[level][i + 2][j] == DEST)
			{
				map[level][i + 2][j] += BOX;
				map[level][i + 1][j] = map[level][i + 1][j] - BOX + PLAYER;
				map[level][i][j] -= PLAYER;//玩家消失在原来位置





			}



		}
		break;
	case 100:
	case 'd ':
	case'D':
		if (map[level][i][j + 1] == SPACE || map[level][i][j + 1] == DEST)
		{
			map[level][i][j + 1] += 4;
			map[level][i][j] -= 4;



		}
		else  if (map[level][i][j + 1] == BOX || map[level][i][j + 1] == BOX + DEST)
		{
			if (map[level][i][j + 2] == SPACE || map[level][i][j + 2] == DEST)
			{
				map[level][i][j + 2] += BOX;
				map[level][i][j + 1] = map[level][i][j + 1] - BOX + PLAYER;
				map[level][i][j] -= PLAYER;//玩家消失在原来位置





			}



		}
		break;
	case 'r':///新增
	case'R' :///新增
		for (int i = 0; i < 10; i++)///新增
		{///新增
			for (int j = 0; j < 10; j++)///新增
			{
				map[level][i][j] = mapreset[level][i][j];///新增




			}///新增
		}///新增
		break;///新增








	}///新增



}
举报

相关推荐

0 条评论