📄 simplestrange.cpp
字号:
// SimpleStrange.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include "function.h"
#include "action.h"
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
extern "C" SIMPLESTRANGE_API void Create ( Environment *env )
{
//初始化数据工作
env->userData=(void* ) new MyEnv;
MyEnv *g;
g=(MyEnv*)env->userData;
//初始坐标
g->robot[0].pos=Vector3D(10.6663,42.3077,90);
g->robot[1].pos=Vector3D(19.9199,60.3647,0);
g->robot[2].pos=Vector3D(19.7433,22.9943,0);
g->robot[3].pos=Vector3D(39.4618,60.3031,0);
g->robot[4].pos=Vector3D(39.8876,23.1065,0);
g->opp[0].pos=Vector3D(90.4616,42.2002,-90);
g->opp[1].pos=Vector3D(82.0921,22.9046,180);
g->opp[2].pos=Vector3D(81.2890,60.4876,180);
g->opp[3].pos=Vector3D(61.8525,23.1527,180);
g->opp[4].pos=Vector3D(61.4469,60.3599,180);
for(int i =0 ;i < 5;i++)
{
g->robot[i].oldpos=g->robot[i].pos;
g->robot[i].speed.x=g->robot[i].speed.y=g->robot[i].speed.z=g->robot[i].speed.v=0.01;
g->robot[i].oldvelocity.x=g->robot[i].oldvelocity.y=g->robot[i].oldvelocity.z=0;
g->opp[i].oldpos = g->opp[i].pos;
g->opp[0].speed.x = g->opp[0].speed.y = g->opp[0].speed.z = g->opp[0].speed.v=0.01;
}
g->judged=false; // 判断了吗?
g->is_yellow=true; // 是黄队吗?
g->penalty_count=0;
g->ball.oldpos=g->ball.pos=g->ball.prepos=Vector3D(50,41.7,0);
g->ball.speed.x = g->ball.speed.y = g->ball.speed.z = g->ball.speed.v=0.01;
}
extern "C" SIMPLESTRANGE_API void Destroy ( Environment *env )
{
MyEnv * g = (MyEnv *)env->userData;
if ( env->userData != NULL ) delete ( MyEnv * ) env->userData;
}
//策略接口函数
extern "C" SIMPLESTRANGE_API void Strategy ( Environment *env )
{
MyEnv * g = (MyEnv *)env->userData;
Pre(env); // 调用预处理函数进行数据的处理
//由于时间关系,我们在现在只用对点球和普通情况进行处理,其他的情况都由普通情况处理
switch(g->gameState)
{
case PENALTY_KICK: //3:点球
//处理点球
Play(g); //点球处理完成后,继续执行默认的Play
break;
default: //意外的情况
Play(g);
break;
}
End ( env ); //后期处理
}
//预处理
void Pre (Environment *env)
{
MyEnv * g = (MyEnv *)env->userData;
// 首先判断场地 如果已经判断 则跳过!
if(!g->judged)
{
if( env->home[0].pos.x < 50. )
g->is_yellow=true; /// 黄队
else
g->is_yellow=false;/// 蓝队
g->judged=true;
}
//设置游戏状态和球权
g->gameState = env->gameState ;
g->whosBall=env->whosBall;
int i = 0; //for循环计数器
//场地转换赋值,使代码适合与两方
//**********************************************
if(g->is_yellow) // 如果我方是黄队
{
for(i=0;i<5;i++)
{
g->robot[i].pos = env->home[i].pos ; //我方队员坐标
g->robot[i].rotation= env->home[i].rotation;
NormalAngle(g->robot[i].rotation);
g->opp[i].pos.x =env->opponent[i].pos.x; //对方坐标
g->opp[i].pos.y =env->opponent[i].pos.y;
g->opp[i].rotation =env->opponent[i].rotation;
NormalAngle(g->opp[i].rotation);
}
}
else
{// 否则 是蓝队 场地变换,球坐标变换
g->ball.pos.x =FLEFT+FRIGHT - env->currentBall.pos.x; //球坐标变化
g->ball.pos.y =FBOT+FTOP - env->currentBall.pos.y;
for(i=0;i<5;i++)
{
g->robot[i].pos.x =FLEFT+FRIGHT - env->home[i].pos.x ; //我方队员坐标变换
g->robot[i].pos.y =FBOT+FTOP - env->home[i].pos.y ;
g->robot[i].pos.z =g->robot[i].rotation= 180.0 + env->home[i].rotation;
NormalAngle(g->robot[i].rotation);
g->opp[i].pos.x = FLEFT+FRIGHT - env->opponent[i].pos.x; //对方坐标变换
g->opp[i].pos.y = FBOT+FTOP - env->opponent[i].pos.y;
g->opp[i].pos.z =g->opp[i].rotation = 180 + env->opponent[i].rotation;
NormalAngle(g->opp[i].rotation);
}
}
//**********************************************
}
//做一些转化记录工作
void End (Environment *env)
{
//eg 实际给小车赋速度
// 给old赋值
}
//核心运行部分
void Play(MyEnv* g)
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -