K - 迷宫问题

24 篇文章 0 订阅
14 篇文章 0 订阅

本题是广搜加深搜的题,注意要从0,0开始

#include<cstdio>
#include<queue>
using namespace std;
const int N=5;
const int maxn=10;
int d[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; 
int g[N][N];
struct node{
	int x,y;
}from[maxn][maxn];
node s={0,0},e={4,4};
void dfs(int x,int y)
{
	if(x==0&&y==0)
	{
		printf("(0, 0)\n");
		return;
	}
	dfs(from[x][y].x,from[x][y].y);
	printf("(%d, %d)\n",x,y);
}
void bfs()
{
	queue<node> q;
	g[0][0]=1;
	q.push(s);
	while(!q.empty())
	{
		s=q.front();q.pop();
		if(s.x==e.x&&s.y==e.y)	return;
		for(int i=0;i<4;i++)
		{
			node th=s;
			th.x+=d[i][0];th.y+=d[i][1];
			int x=th.x,y=th.y;
			//printf("%d %d\n",x,y);
			if(x<0||x>N-1||y<0||y>N-1||g[x][y])	continue;
			q.push(th);
			g[x][y]=1;
			from[x][y]=s;
		}
	}
}
int main()
{
	//freopen("K.txt","r",stdin);
	for(int i=0;i<N;i++)
		for(int j=0;j<N;j++)
			scanf("%d",&g[i][j]);
	bfs();
	dfs(N-1,N-1);
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、设计目的 本课程设计旨在利用C语言实现一个迷宫游戏,通过设计游戏规则和实现游戏界面,让学生进一步熟悉C语言的语法和编程思想,提高编程能力和动手能力。 二、设计要求 1. 实现一个迷宫游戏,包括游戏规则和游戏界面。 2. 游戏规则:玩家需要通过键盘控制移动角色,寻找出路并逃脱迷宫。 3. 游戏界面:设计迷宫地图,可以使用字符或者图形界面,要求简洁明了,易于操作。 4. 程序具有一定的可扩展性,可以添加新的关卡和游戏元素。 三、设计思路 1. 迷宫地图的设计 迷宫地图采用字符界面实现,使用二维字符数组来存储地图信息。地图信息包括墙壁、道路、起点、终点等元素,通过不同的字符来表示不同的元素。例如,使用“#”表示墙壁,“ ”表示道路,“S”表示起点,“E”表示终点。 2. 角色移动的实现 玩家通过键盘控制角色移动,可以使用WASD或者方向键来控制上下左右移动。移动时需要判断当前位置是否可以通过,如果是墙壁则无法通过,如果是道路则可以通过。同时需要判断是否到达终点,如果到达终点则游戏结束。 3. 游戏规则的设计 游戏规则包括角色移动、寻找出路和游戏结束等方面。玩家需要通过移动角色来寻找出路,如果无法找到出路则游戏结束。同时,玩家需要注意避开陷阱和敌人等游戏元素,否则会减少生命值。 4. 程序可扩展性的实现 为了保证程序的可扩展性,可以将关卡信息和游戏元素信息存储在配置文件中,程序启动时读取配置文件并根据配置文件来生成地图和游戏元素。同时,可以使用函数指针来实现不同关卡和游戏元素的自定义处理,方便后期扩展。 四、程序设计 1. 地图信息的存储和输出 迷宫地图采用字符界面实现,使用二维字符数组来存储地图信息。地图信息包括墙壁、道路、起点、终点等元素,通过不同的字符来表示不同的元素。例如,使用“#”表示墙壁,“ ”表示道路,“S”表示起点,“E”表示终点。 ```c char map[10][10] = { {'#','#','#','#','#','#','#','#','#','#'}, {'#',' ','#',' ','#',' ','#',' ',' ','#'}, {'#',' ','#',' ','#',' ','#',' ','#','#'}, {'#',' ','#',' ','#',' ','#',' ','#','#'}, {'#',' ','#',' ','#',' ','#',' ','#','#'}, {'#',' ','#',' ','#',' ','#',' ','#','#'}, {'#',' ','#',' ','#',' ','#',' ','#','#'}, {'#',' ',' ',' ','#',' ',' ',' ','#','#'}, {'#','#','#','#','#',' ','#','#','#','#'}, {'#','#','#','#','#','#','#','#','#','#'} }; void print_map() { int i, j; for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) { printf("%c", map[i][j]); } printf("\n"); } } ``` 2. 角色移动的实现 玩家通过键盘控制角色移动,可以使用WASD或者方向键来控制上下左右移动。移动时需要判断当前位置是否可以通过,如果是墙壁则无法通过,如果是道路则可以通过。同时需要判断是否到达终点,如果到达终点则游戏结束。 ```c int player_x = 1; int player_y = 1; void move_player(int dx, int dy) { if (map[player_x+dx][player_y+dy] != '#') { map[player_x][player_y] = ' '; player_x += dx; player_y += dy; if (map[player_x][player_y] == 'E') { printf("Congratulations, you win!\n"); exit(0); } map[player_x][player_y] = 'P'; } } void handle_input() { char input; scanf("%c", &input); switch(input) { case 'w': case 'W': case 'k': move_player(-1, 0); break; case 's': case 'S': case 'j': move_player(1, 0); break; case 'a': case 'A': case 'h': move_player(0, -1); break; case 'd': case 'D': case 'l': move_player(0, 1); break; default: break; } } ``` 3. 游戏规则的设计 游戏规则包括角色移动、寻找出路和游戏结束等方面。玩家需要通过移动角色来寻找出路,如果无法找到出路则游戏结束。同时,玩家需要注意避开陷阱和敌人等游戏元素,否则会减少生命值。 ```c int life = 3; void check_life() { if (life <= 0) { printf("Game over!\n"); exit(0); } } void handle_collision() { switch(map[player_x][player_y]) { case 'E': break; case 'T': life--; check_life(); break; default: break; } } ``` 4. 主函数的实现 主函数负责游戏的初始化和循环处理,包括输出地图、处理用户输入、处理碰撞事件等。 ```c int main() { while (1) { print_map(); handle_input(); handle_collision(); } return 0; } ``` 五、总结 本课程设计通过实现一个迷宫游戏来加深对C语言的理解和掌握,通过设计游戏规则和实现游戏界面来提高编程能力和动手能力。通过本课程设计,学生可以进一步熟悉C语言的语法和编程思想,提高编程实践能力和创新能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值