ROBOT & AI

首页 | 新闻 | 产品 | 竞赛 | 学苑 | 读书 | 硬件 | 软件 | 智能 | 制作 | 项目 | 资源 | 论坛
 您的位置:首页 >> 竞赛 >> FIRA >> 正文
站内搜索:   

仿真比赛平台例程解析

来源:http://s1000.org   字体:[ ]  2007-05-29

关键词:仿真

// 程序和平台之间交互的接口文件 // -------------------------------------------

#ifndef _INTERFACE_H_
#define _INTERFACE_H_

// 动态连接库中接口函数声明的宏定义
#ifdef STRATEGY_EXPORTS
#define STRATEGY_API __declspec(dllexport)
#else
#define STRATEGY_API __declspec(dllimport)
#endif

#include <string.h>
#include <stdio.h>

// -------------------------------全局参数----------------------------------------

const double PI = 3.1415923; //

const long PLAYERS_PER_SIDE = 5; // 每队球员个数

// 比赛状态
const long FREE_BALL = 1; // 当是自由球
const long PLACE_KICK = 2; // 点球
const long PENALTY_KICK = 3; // 罚球
const long FREE_KICK = 4; // 任意球
const long GOAL_KICK = 5; // 门球

// 发球方
const long ANYONES_BALL = 0; // 没有发球方
const long BLUE_BALL = 1; // 蓝队发球
const long YELLOW_BALL = 2; // 黄队发球

// 场地信息
const double FTOP = 77.2392; // 场地上边界
const double FBOT = 6.3730; // 场地下边界
const double FRIGHTX = 93.4259; // 场地右边界
const double FLEFTX = 6.8118; // 场地左边界

const double GTOPY = 49.6801; // 球门上边界
const double GBOTY = 33.9320; // 球门下边界
const double GRIGHT = 97.3632; // 球门右边界
const double GLEFT = 2.8748; // 球门左边界


//位置向量定义
typedef struct
{
double x, y, z;
} Vector3D;

//区域范围定义
typedef struct
{
long left, right, top, bottom;
} Bounds;

//机器人的信息定义
typedef struct
{
Vector3D pos; //机器人坐标
double rotation; //机器人方向角
double velocityLeft, velocityRight; //机器人左右轮速度
} Robot;

//对方机器人的信息的定义
typedef struct
{
Vector3D pos; //机器人的坐标位置
double rotation; //机器人当前的转角
} OpponentRobot;

//小球的位置定义
typedef struct
{
Vector3D pos; //小球的坐标位置
} Ball;

//主要的定义,包含所有运行时的的信息,由系统刷新
typedef struct
{
Robot home[PLAYERS_PER_SIDE]; //我方机器人数组
OpponentRobot opponent[PLAYERS_PER_SIDE]; //敌方机器人数组
Ball currentBall, //当前小球的位置
lastBall, //上一次小球的位置
predictedBall; //预计的小球的位置
Bounds fieldBounds, //场地范围
goalBounds; //球门的位置与范围
long gameState; //当前游戏的状态
long whosBall; //由谁控制球
void *userData; //用户自定义信息
} Environment;

//##ModelId=440D001A0271
typedef void (*MyStrategyProc)(Environment*);

extern "C" STRATEGY_API void Create ( Environment *env ); // Create 程序的初始化
extern "C" STRATEGY_API void Strategy ( Environment *env ); // Strategy 程序的主要执行逻辑
extern "C" STRATEGY_API void Destroy ( Environment *env ); // Destroy 程序的销毁

#endif // _INTERFACE_H_

#include <windows.h>
#include "InterFace.h"
#include "Strategy.h"

BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved )
{
return TRUE;
}

extern "C" STRATEGY_API void Create ( Environment *env )
{
}

extern "C" STRATEGY_API void Destroy ( Environment *env )
{
}

extern "C" STRATEGY_API void Strategy ( Environment *env )
{
int testInt = 100;
int nIndex = 0;

switch (env->gameState)
{
case 0:
{
// 缺省情况下的策略
// 三个机器人进行追逐对方的策略

MoonFollowOpponent ( &env->home [1], &env->opponent [2] );
MoonFollowOpponent ( &env->home [2], &env->opponent [3] );
MoonFollowOpponent ( &env->home [3], &env->opponent [4] );

// 第四个抢球
MoonAttack ( &env->home [4], env );
// 守门员守门
Goalie1 ( &env->home [0], env );

}
break;

case FREE_BALL:
{
// 跟随对方机器人
MoonFollowOpponent ( &env->home [1], &env->opponent [2] );
MoonFollowOpponent ( &env->home [2], &env->opponent [3] );
MoonFollowOpponent ( &env->home [3], &env->opponent [4] );

// 抢球
MoonAttack ( &env->home [4], env );

// 守门员守门
Goalie1 ( &env->home [0], env );
}
break;

case PLACE_KICK:
{
// 发生坠球时的策略
// 由二号小车发球
MoonAttack ( &env->home [2], env );
}
break;

case PENALTY_KICK:

// 发生罚球时的策略
switch (env->whosBall)
{
case ANYONES_BALL:
MoonAttack ( &env->home [1], env );
break;
case BLUE_BALL:
MoonAttack ( &env->home [4], env );
break;
case YELLOW_BALL:
MoonAttack ( &env->home [0], env );
break;
}
break;

case FREE_KICK:
{
// 保存对方机器人的相关坐标
FILE * pDebugFile = NULL;
pDebugFile = fopen("debugfile.txt", "a");

for( nIndex = 0; nIndex < PLAYERS_PER_SIDE; nIndex++ )
{
fprintf( pDebugFile, "robot: %d x: %f y: %f z: %f n",
nIndex, env->opponent[nIndex].pos.x,
env->opponent[nIndex].pos.y,
env->opponent[nIndex].pos.z );
}

fclose(pDebugFile);

// 发生任意球时的策略
MoonAttack ( &env->home [0], env );
}
break;

case GOAL_KICK:
{
// 发生点球时的策略
MoonAttack ( &env->home [0], env );
}
break;
}
}

录入:master 点击:

[发表评论] [打印文章] [关闭窗口]  

原创文章属本站所有,转载请注明来源:Robotain.com  
相关文章

 网友评论(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

发表评论 昵称:

  

  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
最新推荐
热门文章
论坛精华
网站简介设为首页 加入收藏在线留言友情链接联系我们 - 广告服务 - 版权申明

Copyright © Robotain.com  all rights reserved  浙ICP备07003355号

版权所有 机器与智能网