?? 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 + -