机器人足球仿真第一次作业

机器人足球仿真是一门与RoboCup有关的一门课程,讲到了有关球员的决策,球队的开发等知识。
这是老师布置的第一次作业,基本任务就是解析字符串,其功能相当于uva中Prase的功能。

作业内容及要求

要求:编写程序解析球员所看到和听到的信息。
示例:(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 距离我的 Direction 是 -20, Distance 是 20,DistChng 是 1,DirChng
是-2;player hfut 2 距离我的 Direction 是 45, Distance 是 23,DistChng 是 0.5,DirChng 是 1,它的 BodyDir 是 22 和 HeadDir 是 44;goal r 距离我的 Direction 是 12,Distance 是 20。
Line r 和我的角度是-30 度

不过这里我觉得示例输出有些问题,因为信息的格式为
(hear Time Sender Message)
(see Time ObjInfo ObjInfo …)
ObjInfo 表示了可视对象的信息。其格式为:
(ObjName Direction Distance DirChng DistChng BodyDir HeadDir)
所以示例中的(see 1022 ((ball) -20 20 1 -2) ((player hfut1 2) 45 23 0.5 1 22 40 ) 其中 1 -2 以及 0.5 1 应分别为方向改变量,距离改变量。

解决思路

球员接收到的信息可分为“听到的”“看到的”,听到的信息为:传来信息的人(即方向),和信息的内容;看到的信息又可以分为:球员信息,球的信息,球门信息,直线的信息。定义类将这些信息封装,用类的成员函数对信息解析并输出。

代码

头文件:

/*file: robocup2d1st.h
brief:各个类的定义(接收到的信息类)*/#include<string>
#include<algorithm>
#include<vector>
using namespace std;class Player{  //有关接收到的球员信息类public:Player(vector<char*> &vecChar);~Player();void showPlayer();    //打印接收到的球员的信息private:string playerName;  //判断是哪边的球员double dirPlayer;   //距离观察者的相对方向double distPlayer;  //距离观察者的距离double dirChngPlayer;  //方向的改变量double distChngPlayer;  //距离的改变量double bodyDir;       //该球员相对于观察者身体的角度double headDir;      //该球员相对于观察者头的角度
};class Ball{   //有关球的信息内容public:Ball(vector<char*> &vecChar);~Ball();void showBall();    //打印接收到的球的信息private:double dirBall;     //球距离观察者的相对方向double distBall;     //球距离观察者的距离double distChngBall;  //球方向的改变量double dirChngBall;   //球距离的改变量
};class Goal{   //有关球门的信息内容public:Goal(vector<char*> &vecChar);~Goal();void showGoal();private:string typeGoal; //判断是哪边的球门r or ldouble dirGoal;  //球门与观察者的相对方向double distGoal;  //球门距离观察者的距离
};class Line{  //有关线的信息内容public:Line(vector<char*> &vecChar);~Line();void showLine();private:string typeLine;  //r or ldouble angleLine;  //该线相对于观察者的角度
};

.cpp文件

/*file:robocup2d1st.cpp
compiler: VS Code
function: parsing information
*/
#include<iostream>
#include<stdlib.h>
#include"robocup2d1st.h"using namespace std;Player::Player(vector<char*> &vecChar){vector<char*>::iterator it;string s{"player"};it = find(vecChar.begin(), vecChar.end(), s);//若接收到的信息中没有player的信息if(it == vecChar.end()) {  cout<<"No information about player"<<endl;}else {it++;it++;playerName = *(it++);dirPlayer = atof(*(it++));distPlayer = atof(*(it++));dirChngPlayer = atof(*(it++));distChngPlayer = atof(*(it++));bodyDir = atof(*(it++));headDir = atof(*(it++));}}Player::~Player(){}void Player::showPlayer(){cout<<" player hfut "<<playerName<<"距离我的 Direction是 "<<dirPlayer<<",Distance 是"<<distPlayer<<",DirChng 是 "<<dirChngPlayer<<",DistChng 是 "<<distChngPlayer<<",它的 BodyDir 是 "<<bodyDir<<",HeadDir 是 "<<headDir<<";";
}Ball::Ball(vector<char*> &vecChar){vector<char*>::iterator it;string s{"ball"};it = find(vecChar.begin(), vecChar.end(), s);if(it == vecChar.end()){cout<<"No information about ball"<<endl;}else {it++;dirBall = atof(*(it++));distBall = atof(*(it++));dirChngBall = atof(*(it++));distChngBall = atof(*(it++));}
}Ball::~Ball(){}void Ball::showBall(){cout<<"Ball 距离我的 Direction是 "<<dirBall<<",Distance 是 "<<distBall<<",DirChng 是 "<<dirChngBall<<",DistChng 是 "<<distChngBall;
}Goal::Goal(vector<char*> &vecChar){vector<char*>::iterator it;string s{"goal"};it = find(vecChar.begin(), vecChar.end(), s);if(it == vecChar.end()) {cout<<"No information about goal"<<endl;}else {it++;typeGoal = *(it++);dirGoal = atof(*(it++));distGoal = atof(*(it++));}
}void Goal::showGoal(){cout<<" goal "<<typeGoal<<"距离我的 Direction是 "<<dirGoal<<",Distance 是 "<<distGoal<<";";
}Goal::~Goal(){}Line::Line(vector<char*> &vecChar){vector<char*>::iterator it;string s{"Line"};it = find(vecChar.begin(), vecChar.end(), s);if(it == vecChar.end()) {cout<<"No information about Line"<<endl;}else {it++;typeLine = *(it++);angleLine = atof(*(it++));}
}Line::~Line(){}void Line::showLine(){cout<<" Line "<<typeLine<<" 和我的角度是 "<<angleLine<<" 度";
}//用特定的分隔符分割字符串,并将分割后的字符串存储在vector中
void cutString(char *ch, vector<char*> &vecChar){const char *mark = "( )";char *p = strtok(ch, mark);while(p){vecChar.push_back(p);p = strtok(NULL, mark);}return ;
}//处理字符串
void dealWithStr(vector<char*> &vecChar){Player p(vecChar);     //声明各个信息类的对象Ball b(vecChar);Goal g(vecChar);Line l(vecChar);vector<char*>::iterator it = vecChar.begin();string s1{"hear"};it = find(vecChar.begin(), vecChar.end(), s1);//听到的信息if(it == vecChar.end()) {cout<<"Didn't hear anything"<<endl;  //若没有听到信息}else {it++;cout<<"在"<<*(it++)<<"周期 hear "<<"从"<<*(it++)<<"方向 听到了 "<<*(it++)<<"("<<*(it++)<<")"<<endl;}string s2{"see"};it = find(vecChar.begin(), vecChar.end(), s2);//看到的信息if(it == vecChar.end()) {cout<<"Didn't see anything"<<endl;  //若没有看到信息}else {it++;cout<<"在"<<*(it++)<<"周期 see ";b.showBall();p.showPlayer();g.showGoal();l.showLine();}return ;
}int main(){vector<char*> vecChar;char ch[2000] = "(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))";cutString(ch, vecChar);dealWithStr(vecChar);return 0;
}

输出:(使用VS Code 编译运行)

我的思路是把信息封装到类里,这样对于不同信息的处理方式就会比较相似,但是这种处理办法也比较麻烦繁琐,其实也可以直接处理字符串输出。该思路仅供参考,欢迎大家指正!

机器人足球仿真第一次作业相关推荐

  1. 合肥工业大学机器人足球仿真robcup作业二(python实现)附代码有注释

    用面向对象的思维设计相关类,从而实现直线与直线.直线与圆.直线与矩形的交点. 要求各给出每个案例的至少一个示例的程序. 这是第二次机器人足球的作业代码,写的比较潦草,但是用的方法还是通俗易懂的,基本都 ...

  2. 合肥工业大学机器人足球仿真robcup作业三(python实现)附代码有注释

    第三次作业 题目:已知2个点的信息,定位自己的绝对坐标. 设图中C(0,0),P1(-52.5,-32), P2(-52.5, 32), P3(52.5,32), P4(52.5,-32), P5(0 ...

  3. 机器人足球仿真中的三角进攻算法研究

    摘 要:机器人足球仿真系统提供了实时对抗环境下研究多智能体协作问题的一个良好平台.本文基于仿真环境下的理论基础及模型,通过逐场次逐帧地测试与分析研究,设计出用于控制机器人协作队形的三角进攻算法,并对基 ...

  4. HFUT《机器人技术》第一次作业

    C#语言!! 输入数据的不规范 题目: 在机器人足球比赛中,server 和球员 client 之间通过发送字符串来进行信息交互,其 中 server 要把某球员的听觉和视觉信息发送给该球员,信息的格 ...

  5. 机器人足球仿真第二次作业

    要求 用面向对象的思维设计相关类,从而实现直线与直线.直线与圆.直线与矩形的交点 思路 设计直线,圆,矩形的类,运用数学定义来判断是否有交点,并计算出交点的坐标. 代码示例:(使用 VS Code 运 ...

  6. 合工大机器人足球仿真robocup2D球队代码实验七实验验收

    //这是2020年某上海第一建筑施工队亚军球队代码,仅供参考 /* Copyright (c) 2000-2003, Jelle Kok, University of Amsterdam All ri ...

  7. 合工大机器人足球仿真考试题56题(底层uva)

    题目要求 //拿球后行为,利用已有 Worldmodel(21) (1)在 playOn 模式下,拿到球以后朝前方快速带球. (2)在 PlayOn 模式下,拿到球以后朝球门方向慢速带球. (3)在 ...

  8. 北石化奥美队参加2006年全国机器人足球大赛侧记

    一.大赛介绍 2006中国机器人大赛暨首届RoboCup中国公开赛是由中国自动化学会和科技部主办,苏州市人民政府.中国科学技术大学联合承办的国内最高水平的国际性机器人竞赛活动,于2006年10月5日至 ...

  9. 2021年人工神经网络第一次作业:参考答案-1

    简 介: 本文给出了 2021年人工神经网络第一次作业要求 中,由同学提交的作业示例. 关键词: 人工神经网络,感知机,BP,数据压缩 #mermaid-svg-mAbRor9AKp6fkRrk {f ...

最新文章

  1. SHAREPOINT爬网设置
  2. 机器学习经典算法之线性回归sklearn实现
  3. DebugDiagx检测内存泄露
  4. Linux系统平台上安装和配置Ruby on Rails
  5. php 安全基础 第七章 验证与授权 密码嗅探
  6. Swift和Objective-C混编 1
  7. ios framework 调用第三方 framework_Python基础:标准库和常用的第三方库
  8. 百度启用Baidu.co.jp域名,有利于其在日本推广
  9. mingw64 下 java_Win7 64 配置MinGW,以及使用Eclipse
  10. python 调用rpc服务_在Django项目中对Python函数进行RPC调用的优雅方式
  11. C++ 实现一个简单内存池
  12. linux查询redis版本_Docker安装Redis并介绍漂亮的可视化客户端进行操作
  13. URAL 1132 Square Root(二次剩余定理)题解
  14. [HTML5]块和内联元素的嵌套
  15. PyQt5-使用QDialog显示通用对话框
  16. 徐思201771010132《面向对象程序设计(java)》第二周学习总结
  17. 知名学者,全职加盟C9高校!
  18. 河北万豪环保紫外线消毒器普及知识
  19. MySQL中使用UUID()函数生成主键
  20. 〖全域运营实战白宝书 - 运营角色认知篇⑦〗- 运营人的能力模型

热门文章

  1. php $_SERVER的参数与说明
  2. springboot整合security实现权限控制
  3. [附源码]Node.js计算机毕业设计成都美食交流平台Express
  4. 黑体辐射出射度曲线绘制
  5. 笔记本 win7 不能待机 不能休眠
  6. 【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽
  7. 2020Java高级开发工程师面试题汇总
  8. Dockerfile构建mysql镜像,并初始化数据库数据
  9. java获取imei_Android10 获取IMEI,获取UUID,唯一ID
  10. 中国电信校招笔试java_中国电信校园招聘笔试考什么?