驾驶卡丁车

2024-03-29 02:58
文章标签 驾驶 卡丁车

本文主要是介绍驾驶卡丁车,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

小Q正在设计一款2D卡丁车游戏,你的任务是帮助小Q实现其中的一部分功能。

在这款游戏中,游戏地图是一张 n 行 m 列的网格,从上到下依次编号为第 1 行到第 n 行,从左往右依次编号为第 1 列到第 m 列,其中第 i 行第 j 列的格子的坐标为 (i,j),每个格子要么是可以通行的平地,要么是不可通行的障碍。

在地图上的某个平地格子处有一辆由玩家操控的卡丁车。卡丁车的移动速率为 v,并且一共有8种可能的朝向,分别为:

  • "上":前进一步时,将从 (x,y) 移动到 (x−1,y)。
  • "下":前进一步时,将从 (x,y) 移动到 (x+1,y)。
  • "左":前进一步时,将从 (x,y) 移动到 (x,y−1)。
  • "右":前进一步时,将从 (x,y) 移动到 (x,y+1)。
  • "左上":前进一步时,将从 (x,y) 移动到 (x−1,y−1)。
  • "右上":前进一步时,将从 (x,y) 移动到 (x−1,y+1)。
  • "左下":前进一步时,将从 (x,y) 移动到 (x+1,y−1)。
  • "右下":前进一步时,将从 (x,y) 移动到 (x+1,y+1)。

一开始卡丁车朝上位于某个平地格子处,其初始移动速率为 v=0。接下来玩家将依次输入 q 条操作指令,每条操作指令是下列中的一种:

  • "L":卡丁车朝向往左转 45 度。
  • "R":卡丁车朝向往右转 45 度。
  • "U":卡丁车的速率由 v 增大至 v+1。
  • "D":卡丁车的速率由 vvv 减小至 max⁡(v−1,0)。

在执行完每条操作指令后,卡丁车都会沿着其朝向前进 v 步,在移动结束后才会继续响应后续指令。在前进的过程中,如果某一步尝试驶入某个障碍格子或者尝试驶出地图,那么说明卡丁车发生了碰撞,它将就此结束移动,在保持朝向的同时速率 v 降低为 0。特别要注意的是,当朝向是斜45度时,为了防止"穿模"现象的发生,如果卡丁车两侧都是障碍,那么卡丁车同样将被认为发生了碰撞。例如卡丁车朝向右下,现在将从 (x,y) 移动到 (x+1,y+1),那么如果 (x+1,y) 和 (x,y+1) 都是障碍,则卡丁车发生了碰撞。

请写一个程序,在执行完每条操作指令后且卡丁车完成移动之后,汇报卡丁车的坐标以及这次移动过程中是否发生了碰撞。

Input

第一行包含两个正整数 n 和 m (1≤n,m≤50),表示地图的尺寸。

接下来 n 行,第 i 行包含一个长度为 m 的字符串,其中第 j 个字符描述格子 (i,j)。如果它是".",则说明 (i,j) 是平地;如果它是"#",则说明 (i,j) 是障碍;如果它是"*",则说明 (i,j) 是平地,且卡丁车位于此。输入数据保证存在恰好一个"*"。

接下来一行包含一个正整数 q (1≤q≤500),表示指令的数量。

接下来一行包含一个长度为 q 的字符串,每个字符是四种指令中的一种,依次描述每条指令。

Output

输出 q 行,第 i 行输出执行完第 i 条指令且卡丁车完成移动之后的相关信息。如果这一次卡丁车没有发生碰撞,那么输出"x y";如果这一次卡丁车发生了碰撞,那么输出"Crash! x y"。其中 x 和 y 表示卡丁车的坐标为 (x,y)。

Example

Input

5 4
....
##..
..#.
.*..
....
12
URULLULLLLUD

Output

3 2
Crash! 3 2
Crash! 3 2
3 2
3 2
Crash! 3 2
3 2
3 2
3 2
3 2
4 3
4 3

Input

10 10
####....##
##.......#
#....##...
#...####..
#...####..
#...####..
#.........
#...####..
....####..
*...####..
16
UURUURRULUULLUUD

Output

9 1
Crash! 9 1
9 1
8 2
6 4
Crash! 6 4
6 4
7 5
7 6
7 8
Crash! 7 10
7 10
7 10
6 10
4 10
3 10

思路:

首先要记得找到卡丁车的位置之后要将其换成平地,以及横纵坐标每增加一个都要判断其有没有撞到,所以要一步一旬(函数move())。

方向可以取8的模来防止dir超出8。

#include<iostream>
using namespace std;
const int N=55,M=500;
int n,m,q;
char G[N][N],ins[M];
int sx,sy;
int v=0,dir=0;
char ch='#';
int d[8][2]={{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}};//上     右上   右    右下  下   左下    左     左上
bool move();
int main()
{scanf("%d %d",&n,&m);getchar();//回车符for(int i=0;i<n;i++)scanf("%s",G[i]);for(int i=0;i<n;i++)for(int j=0;j<m;j++)if(G[i][j]=='*'){sx=i;sy=j;G[i][j]=ch+11;}scanf("%d",&q);scanf("%s",ins);for(int i=0;i<q;i++){if(ins[i]=='U')v++;else if(ins[i]=='D'){v--;if(v<0)v=0;}else if(ins[i]=='R')dir=(dir+1)%8;else if(ins[i]=='L')dir=(dir+7)%8; if(move())printf("%d %d\n",sx+1,sy+1);else{printf("Crash! %d %d\n",sx+1,sy+1);v=0;}}return 0;
}
bool move()
{for(int j=1;j<=v;j++){int tx=sx+d[dir][0];int ty=sy+d[dir][1];if(tx<0||tx>=n||ty<0||ty>=m||G[tx][ty]=='#') return false;if((dir==1||dir==3||dir==5||dir==7)&&G[sx][ty]=='#'&&G[tx][sy]=='#') return false;sx=tx,sy=ty;}return true;
}

这篇关于驾驶卡丁车的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/857415

相关文章

PRN(20201231):驾驶人驾驶决策机制遵循最小作用量原理

王建强, 郑讯佳, 黄荷叶. 驾驶人驾驶决策机制遵循最小作用量原理[J]. 中国公路学报, 2020, v.33;No.200(04):159-172. 观点: 为提升智能汽车的自主决策能力,使其能够学习人的决策智慧以适应复杂多变的道路交通环境,需要揭示驾驶人决策机制。 依据: 物理学中常用最小作用量原理解释自然界(包括物理和生物行为)极值现象。同时,最小作用量原理还用于解释蚂蚁在觅

【自动驾驶】控制算法(八)横向控制Ⅱ | Carsim 与 Matlab 联合仿真基本操作

写在前面: 🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝 个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。 🔍 本文系 清流君 原创之作,荣幸在CSDN首发🐒 若您觉得内容有价值,还请评论告知一声,以便更多人受益。 转载请注明出处,尊重原创,从我做起。 👍 点赞、评论、收藏,三连走一波,让我们一起养成好习惯😜 在这里,您将

自动驾驶系列—记忆泊车技术:未来驾驶的智能伴侣

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中一起航行,共同成长,探索技术的无限可能。 🚀 探索专栏:学步_技术的首页 —— 持续学习,不断进步,让学习成为我们共同的习惯,让总结成为我们前进的动力。 🔍 技术导航: 人工智能:深入探讨人工智

【自动驾驶】汽车智能驾驶计算芯片

文章目录 概述 术语 硬件要求 软件要求 性能要求 安全性要求 可靠性要求 试验方法 概述         本文介绍汽车智能驾驶计算芯片的软硬件要求、 可靠性和安全性要求、 性能要求,和相应的试验方法。除了用于汽车智能驾驶, 其他领域的计算芯片可参照执行。 术语         智能驾驶计算芯片 (computing chip),用于L0至L5驾驶自动化功能计算

自动驾驶真正踏出迈向“用户”的第一步:IROS24新SOTA提出个性化的实例迁移模仿学习

导读: 本文针对自动驾驶规划任务,提出了一种基于实例的迁移模仿学习方法,通过预先训练的微调框架从专家域迁移专业知识,以解决用户域数据稀缺问题。实验结果显示,该方法能有效捕捉用户驾驶风格并实现具有竞争力的规划性能,但仍需开发合适的用户风格测量方法。©️【深蓝AI】编译 1. 摘要 个性化运动规划在自动驾驶领域中具有重要意义,可以满足个人用户的独特需求。然而,以往的工作在同时解决两个关键问题

VLM视觉语言大模型在智能驾驶中的应用

VLM在自动驾驶中的任务  single or multiple Object Referring 即带条件的目标检测,用语言指示模型识别图像中特定目标。 Referred Object Tracking 和Object Referring相比,Object Referring Tracking会根据自然语言描述在连续帧中对目标进行跟踪。 Open-Vocabulary 3D Objec

【自动驾驶】控制算法(七)离散规划轨迹的误差计算

写在前面: 🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝 个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。 🔍 本文系 清流君 原创之作,荣幸在CSDN首发🐒 若您觉得内容有价值,还请评论告知一声,以便更多人受益。 转载请注明出处,尊重原创,从我做起。 👍 点赞、评论、收藏,三连走一波,让我们一起养成好习惯😜 在这里,您将

B站视频自动驾驶master(1)

apollo Planning规划模块大详解,学会应对所有疑难场景_哔哩哔哩_bilibili

【ShuQiHere】自动驾驶技术与各大汽车品牌的战略布局:全球竞赛与中国崛起

【ShuQiHere】:从“萝卜快跑”的成功谈起 🌟 2024年,中国的自动驾驶领域迎来了一个具有里程碑意义的事件——百度的“萝卜快跑”(Apollo Go)项目在多个城市成功试运营🎉。这一经过十年精心研发的自动驾驶出租车服务,不仅展示了中国科技企业在自动驾驶技术上的迅猛进步,更象征着中国在全球科技竞赛中的强势崛起🏆。 “萝卜快跑”从一开始的概念到如今的商业化落地,走过了一段充满挑战的历

自动驾驶---什么是Frenet坐标系?

1 背景         为什么提出Frenet坐标系?Frenet坐标系的提出主要是为了解决自动驾驶系统在路径规划的问题,它基于以下几个原因: 符合人类的驾驶习惯: 人类驾驶员在驾驶过程中,通常不会关心自己距离起点的横向和纵向距离,而是会关注车辆相对于道路的相对位置,比如与车道线的距离。Frenet坐标系提供了一种与人类驾驶习惯相符的描述方式,使得自动驾驶系统能够更好地模拟人类的驾驶行为。