RoboCup智能机器人足球教程(三)

实现守门员代码

守门员逻辑实现比较容易,但是最好开始的时候画好流程图,理顺逻辑,守门员一直盯着球,当球距离守门员够近的时候,守门员前去扑球,扑到球后朝对面射出,逻辑图为:

实现逻辑的办法就是定义状态变量,用if控制,在这里,我们定义如下几个重要的状态变量:
isCatchBall: 球是否在脚下

isMove: 是否进行了瞬移,守门员扑到球后是可以进行瞬移的,我们要利用好。

主要架构的伪代码为:

if isCatchBall == truesearch goalkick
elseif ball_distance < 1catch ballelse look at ball

下面是完全的代码:

if(id == 1){if (std::strncmp(msg, "(see ", 5)==0){if(isCatchBall == 0){double ball_distance = 0; // 球的方向double ball_direction = 0; // 球的角度char *p; p = strstr(msg, "(ball)"); if (p == 0) { // 表示看不见球sprintf(command, "(turn 50)"); // 转50度sendMessage(command);return;}std::sscanf(p, "(ball) %lf %lf", &ball_distance, &ball_direction);// 如果与球的角度相差太大,转向球的方向if (ball_direction >5 || ball_direction < -5) { sprintf(command, "(turn %lf)", ball_direction);sendMessage(command);return;}// 当球非常远的时候if(ball_distance > 13){isMove=0; isCatchBall = 0; // 这里是进行防错处理的}// 当球不近也不远的时候if(ball_distance>1 && ball_distance<13){sprintf(command, "(dash 200)"); // 冲向球的位置sendMessage(command);isMove=0; isCatchBall = 0; // 这里是进行防错处理的return;}// 当球很近的时候if (ball_distance<1) { // 如果与球的距离小于3sprintf(command, "(catch %lf)", ball_direction); //发送catch命令以捕获球sendMessage(command);isCatchBall = 1; // 抓住球的布尔变量return;}}// 抓住球的时候if(isCatchBall == 1){   // 如果没有瞬移,先进行瞬移,catch球之后允许瞬移if(isMove == 0) // 这个布尔变量是为了防止二次瞬移的{  sprintf(command, "(move -50 0)");sendMessage(command);isMove = 1;return;}// 现在开始看门double goal_distance = 0; // 门距离double goal_dirction = 0; // 门方向char *p;if(side == 1) p = strstr(msg, "(goal r)"); // 找到门的字符串地址else p = strstr(msg, "(goal l)");if (p != 0) // 获取门的位置信息{if(side == 1) std::sscanf(p, "(goal r) %lf %lf", &goal_distance, &goal_dirction);else std::sscanf(p, "(goal l) %lf %lf", &goal_distance, &goal_dirction);// 踢球!sprintf(command, "(kick 100 %lf)", goal_dirction+20); // 朝门的方向踢球sendMessage(command);isCatchBall = 0;isMove = 0;}else{   // 没看到门,转身看门sprintf(command, "(turn 50)");sendMessage(command);}return;}}
}

RoboCup智能机器人足球教程(二)

RoboCup智能机器人足球教程(四)

RoboCup智能机器人足球教程(三)相关推荐

  1. RoboCup智能机器人足球教程(二)

    RoboCup智能机器人足球教程(二) 运行方式 RoboCup2D仿真平台通过一个服务端,若干客户端联系而成,同时通过监视器进行画面播放.当启动服务端后,客户端通过改写程序内部的client.cpp ...

  2. RoboCup智能机器人足球教程(五)

    一个简易的足球战略实现       我之所以编写这套教程呢,是因为我在小学期学这个智能机器人足球的课程,一共才两三个星期,注定编写不了什么高级的AI,实际上,跑起来都费劲,但即便如此,我们老师在最终要 ...

  3. Quartz教程三:Job与JobDetail介绍

    Quartz教程三:Job与JobDetail介绍 原文链接 | 译文链接 | 翻译:nkcoder | 校对: 本系列教程由quartz-2.2.x官方文档翻译.整理而来,希望给同样对quartz感 ...

  4. jQuery 3教程(三):jQuery集合

    原文地址:jQuery 3教程(三):jQuery集合 Introduction jQuery选择器选择出来的结果很多时候是一个DOM元素集而非单个元素,jQuery可以灵活的访问和修改DOM元素集, ...

  5. Swift中文教程(三)--流程控制

    Swift中文教程(三)--流程控制 原文:Swift中文教程(三)--流程控制 Swift用if和switch编写条件控制语句,用for-in,for,while和do-while编写循环.条件控制 ...

  6. qpython3可视图形界面_PySide——Python图形化界面入门教程(三)

    PySide--Python图形化界面入门教程(三) --使用内建新号和槽 --Using Built-In Signals and Slots 上一个教程中,我们学习了如何创建和建立交互widget ...

  7. Java 结构体之 JavaStruct 使用教程三 JavaStruct 数组进阶

    经过前面两篇博客的介绍,相信对于 JavaStruct 的认识以及编程使用,读者已经有一定的基础了.只要理解和实践结合起来,掌握还是很容易的.下面进行一些数组使用方面的实例说明及演示. 在结构体类中使 ...

  8. MIP开发教程(三) 使用MIP-CLI工具调试组件

    一 . 在 mip-extensions 仓库中创建新的组件 二 . 预览调试组件 三 . 在 MIP 页中引用自己编写的 MIP 组件 四 . 组件提交到 GitHub 仓库时需要进行校验 站长开发 ...

  9. SpringCloud 入门教程(三): 配置自动刷新

    Spring Cloud 入门教程(三): 配置自动刷新 之前讲的配置管理, 只有在应用启动时会读取到GIT的内容, 之后只要应用不重启,GIT中文件的修改,应用无法感知, 即使重启Config Se ...

最新文章

  1. mysql myisam存储引擎_MySQL浅谈MyISAM存储引擎
  2. qemu 对虚机的地址空间管理
  3. 搞笑之----普通话
  4. 51nod-诺德街【数学期望】
  5. Yolo系列知识点梳理(Yolov1-v5)
  6. Tomcat关闭失败,SEVERE: Could not contact localhost:8005. Tomcat may not be running.
  7. 如何删除多余系统引导项
  8. python人脸识别程序如何嵌入到app_只用Python就能写安卓,简单几步实现人脸识别的App...
  9. JavaScript中的流程控制
  10. git pull出现错误的解决办法
  11. DALSA相机开发记录(01)
  12. java 负数异常_java基础之异常
  13. c语言编辑游戏时用哪个软件,我想用C语言编写一个小型游戏,使用什么软件
  14. C++ Primer 第5版习题答案
  15. 主析取范式主合取范式
  16. 移动、联通、电信三大运营商手机号段大全 附手机号正则表达式
  17. android4.4.3版本root,碉堡了!ROOT精灵支持Nexus 5等Android4.4.3机型ROOT
  18. 微信机器人_微信聊天消息记录拦截分析
  19. Lua Busted 单元测试实战
  20. [渝粤教育] 西安交通大学 环境工程设计与管理 参考 资料

热门文章

  1. 微信支付账单修改数字
  2. java实现手写签名,Android实现手写签名
  3. ECHO、IF、REM等命令介绍
  4. resultful风格使用方式
  5. 微信小程序毕业设计论文求职招聘|兼职管理系统+后台管理项目源代码
  6. springcloud实战:springboot的核心原理
  7. chip在计算机英语什么意思,chip是什么意思中文翻译
  8. 批量添加用户脚本--Linux bash
  9. php奖状生成器源码,PHP生成奖状
  10. MBProgressHUD等待框背景色与菊花等待框颜色修改