合肥工业大学机器人足球仿真robcup作业一(python实现)附代码有注释
import re # 导入正则表达式模块
# 更改这个元组内容的顺序即可给改变数据对应的顺序,不用改变封装好的函数
Position = ('Direction', 'Distance', 'DirChng', 'DistChng', 'BodyDir', 'HeadDir') # 使用tuple元组不可修改其内容def outPutInfo(info):"""格式化输出解析出来的数据包:param info: 解析出来的信息包:return: 无"""hear = info['hear'] # 获取听到的数据包see = info['see'] # 获取看到的数据包if hear != '':print("在 {} 周期 hear 从 {} 方向 听到了 {};".format(hear['time'], hear['Sender'], hear['Message']))passif see != '':print('在 {} 周期 see'.format(see['time']), end=' ')see = see['obj_list'] # 去掉第一个时间for item in see:for key, value in item.items(): # 获取信息if 'ObjName'.__eq__(key):print(item[key], end=' ')elif 'Direction'.__eq__(key):print("距离我的 Direction 是 {},".format(item[key]), end=' ')elif 'Distance'.__eq__(key):print("Distance 是 {},".format(item[key]), end=' ')elif 'DirChng'.__eq__(key):print("DirChng 是 {},".format(item[key]), end=' ')elif 'DistChng'.__eq__(key):print("DistChng 是 {},".format(item[key]), end=' ')elif 'BodyDir'.__eq__(key):print("它的 BodyDir 是 {}".format(item[key]), end=' ')elif 'HeadDir'.__eq__(key):print("和 HeadDir 是 {}".format(item[key]), end=';')passprint() # 添加一个换行,使得输出更直观passpassdef decode(msg):"""对消息进行解析:param msg: 要解析的字符串:return: 解析完的数据包"""package = packMsg(msg) # 首先将整个消息分块打包,分出大的数据包worked_msg = {'hear': '', 'see': ''}if not package: # 如果分离出的数据包是空的,说明传入的字符串没有数据print('未检测到数据包!')else:for item in package: # 循环最外层的大数据包msg_type = re.findall('[(](.*?) ',item)[0] # 拿到数据包的类型if 'see'.__eq__(msg_type): # 如果数据包是see类型see = {'type': 'see', 'time': re.findall(r'\d+', item)[0]}obj_info = packMsg(item, 1) # 跳过第一个左括号# print(obj_info)obj_list = [] # 创建一个对象列表,用于存储对象for obj in obj_info: # 循环所有对象信息tmp = dict()tmp['ObjName'] = re.findall('[(]{2}(.*?)[)]', obj)[0] # 拿到名字信息# print(tmp)position_info = re.findall('[)](.*?)[)]',obj)[0] # 拿到位置信息position_info = position_info.split(' ') # 将位置信息分割出来# print(position_info)i = 0for pos in position_info: # 循环每个对象的位置信息if pos != '':tmp[Position[i]] = pos# print(pos)i += 1passpassobj_list.append(tmp) # 将对象加入到对象列表中passsee['obj_list'] = obj_list# print(see)worked_msg['see'] = seepass # 处理完看到的信息elif 'hear'.__eq__(msg_type):item = item[1:len(item)-1] # 去掉最外面的左右括号hear = {'type': 'hear', 'time': item.split(' ')[1], 'Sender': item.split(' ')[2], 'Message': item.split(' ')[3]}worked_msg['hear'] = hearpass # 处理完听到的信息pass # 最外层循环的大数据包,pass # 数据处理完成return worked_msgdef packMsg(msg,start=0):"""匹配一对括号里面所有内容惊醒打包:param msg: 要打包的信息:param start: 检查的起始位置,默认是0从头来开始:return: 打包完成的信息包组成的列表,若没有消息包就返回空列表"""num = 0index = 0tmp = []msg = msg[start:]for s in msg:if s == '(':num += 1if num == 1:start = indexelif s == ')':num -= 1if num == 0:tmp.append(msg[start:index+1])start = index+1index += 1return tmpif __name__ == '__main__':msg = input("请输入你需要解析的字符串信息:")# msg = '(hear 1022 -30 passto(23,24))(see 1022 ((ball) -20 20 1 -2) ((player hfut1 2) 45 23 0.5 1 22 40 ) ((goal r) 12 20) ((Line r) -30))'# msg = '(see 2022 ((player hfut2 8) 40 23 1 6 21 33 ) ((goal r) 15 30) ((f r t 20)5 24 ))(hear 2022 -10 “passball”)'# msg = '(hear 2022 -10 “passball”)'print('\033[1;31m程序是按照作业PPT参数的顺序进行解包和输出的!\033[0m')worked_info = decode(msg) # 对接受的数据进行解析outPutInfo(worked_info) # 格式化输出# print(worked_info) # 可以查看解析后的数据包"""
样例输入:
(hear 1022 -30 passto(23,24))(see 1022 ((ball) -20 20 1 -2) ((player hfut1 2) 45 23 0.5 1 22 40 ) ((goal r) 12 20) ((Line r) -30))
样例输出:
在 1022 周期 hear 从 -30 方向 听到了 passto(23,24);
在 1022 周期 see ball 距离我的 Distance 是 -20, Direction 是 20, DirChng 是 1, DistChng 是 -2,
player hfut1 2 距离我的 Distance 是 45, Direction 是 23, DirChng 是 0.5, DistChng 是 1, 它的 BodyDir 是 22 和 HeadDir 是 40;
goal r 距离我的 Distance 是 12, Direction 是 20,
Line r 距离我的 Distance 是 -30,
"""
合肥工业大学机器人足球仿真robcup作业一(python实现)附代码有注释相关推荐
- 合肥工业大学机器人足球仿真robcup作业二(python实现)附代码有注释
用面向对象的思维设计相关类,从而实现直线与直线.直线与圆.直线与矩形的交点. 要求各给出每个案例的至少一个示例的程序. 这是第二次机器人足球的作业代码,写的比较潦草,但是用的方法还是通俗易懂的,基本都 ...
- 合肥工业大学机器人足球仿真robcup作业三(python实现)附代码有注释
第三次作业 题目:已知2个点的信息,定位自己的绝对坐标. 设图中C(0,0),P1(-52.5,-32), P2(-52.5, 32), P3(52.5,32), P4(52.5,-32), P5(0 ...
- 机器人足球仿真第一次作业
机器人足球仿真第一次作业 机器人足球仿真是一门与RoboCup有关的一门课程,讲到了有关球员的决策,球队的开发等知识. 这是老师布置的第一次作业,基本任务就是解析字符串,其功能相当于uva中Prase ...
- 合肥工业大学机器人技术作业一
合肥工业大学机器人技术作业一 题目: 在机器人足球比赛中,server和球员client之间通过发送字符串来进行信息交互,其中server要把某球员的听觉和视觉信息发送给该球员,信息的格式如下所示: ...
- 机器人足球仿真中的三角进攻算法研究
摘 要:机器人足球仿真系统提供了实时对抗环境下研究多智能体协作问题的一个良好平台.本文基于仿真环境下的理论基础及模型,通过逐场次逐帧地测试与分析研究,设计出用于控制机器人协作队形的三角进攻算法,并对基 ...
- 合肥工业大学机器人技术五十六题
合肥工业大学机器人技术五十六题 题目要求 //拿球后行为,利用已有 Worldmodel(21) (1)在 playOn 模式下,拿到球以后朝前方快速带球. (2)在 PlayOn 模式下,拿到球以后 ...
- python五子棋游戏大作业_python-大作业之五子棋游戏(附代码)
<python-大作业之五子棋游戏(附代码)>由会员分享,可在线阅读,更多相关<python-大作业之五子棋游戏(附代码)(6页珍藏版)>请在金锄头文库上搜索. 1.Pytho ...
- 合肥工业大学机器人技术期末_合肥工业大学 机器人技术 作业和实验
简介 你好! 在这篇文章中,我将免费共享合肥工业大学<机器人技术>作业和实验环节的代码和个人报告,以供交流学习.为了方便更多的同学搜索到这篇博客,我会在下面贴出一部分实验题目. 共享资源包 ...
- 合工大php期末试卷_完美起航-合肥工业大学机器人技术作业和实验
简介 你好! 在这篇文章中,我将免费共享合肥工业大学<机器人技术>作业和实验环节的代码和个人报告,以供交流学习.为了方便更多的同学搜索到这篇博客,我会在下面贴出一部分实验题目. 共享资源包 ...
- 合肥工业大学机器人技术期末_机器人技术第三次作业(HFUT)
第三次作业 本人代码水平十分有限,仅供参考,有错误请指出 java源码: package robathomework3; import java.lang.Math; //点类 class point ...
最新文章
- mysql启动错误1067进程意外终止的解决方法
- ESP8266 问题
- Spring Boot——读取.properties配置文件解决方案
- excel 如何用vba将某一条记录移动到另一张工作表中_EXCEL常用快捷键
- 分享memcache和memcached安装过程(转)
- c++ 宏 win linux_服务器端开发经验总结 Linux C语言
- AlexNet原理和实现
- 静态 动态 强类型 弱类型语言的区别
- 图片相似度——hash算法简介
- python3 ftplib_python3从零学习-5.10.9、ftplib—FTP 协议客户端
- 使用IDEA创建Maven项目教程
- VS2008整合sp1
- Landsat8—ANG.txt文件
- 如果更快的访问ESS系统?
- git push 报错 pre-receive hook declined
- 相对路径目录返回问题
- 我用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
- AutoCAD哪个版本好
- 如何学会自主学习?(精品)
- linux 文件转换ascii,关于linux:如何将文件从ASCII转换为UTF-8?