basictricks.cc
来自「该文件是包含了机器人足球比赛中的整个系统的代码」· CC 代码 · 共 231 行
CC
231 行
// Bag of basic tricks
#include <math.h>
#include <iostream>
#include <stdarg.h>
#include "BasicTricks.h"
#include "KickSelecta.h"
#include "../Common/Common.h"
#include "../Globals.h"
using namespace std;
////////////////////////////////////////////////////////////////
// BEGIN KICK
BasicTricks::Kick::Kick(int t) {
type = t;
useHead = true;
doEndKick = false;
angle = 999;
}
BasicTricks::Kick::Kick(int t, bool uh) {
type = t;
useHead = uh;
doEndKick = false;
angle = 999;
}
BasicTricks::Kick::Kick(int t, bool uh, double ang) {
type = t;
useHead = uh;
angle = ang;
doEndKick = false;
}
int BasicTricks::Kick::Start() {
if (angle != 999) utils.Kick(type, useHead,angle);
else utils.Kick(type, useHead);
return 0;
}
int BasicTricks::Kick::Abort() {
return 0;
}
int BasicTricks::Kick::Continue() {
return 0;
}
bool BasicTricks::Kick::IsUsingHead() {
return useHead;
}
char* BasicTricks::Kick::GetErrorMsg(int msg) {
if (msg == 0) return "DONE_KICK";
else if (msg == 1) return "DOING_KICK";
return "KICK:NO_MESSAGE";
}
char* BasicTricks::Kick::GetName() {
return "Kick";
}
// END KICK
////////////////////////////////////////////////////////////////
// BEGIN STEP
BasicTricks::Step::Step(int a,double b,double c,double d,double e,double f) {
type=a;
frontStrideLength=b;
backStrideLength=c;
turn=d;
strafe=e;
stepFrequency=f;
}
int BasicTricks::Step::Start() {
utils.Step(type, frontStrideLength, backStrideLength, turn, strafe, stepFrequency);
//cout << "Step - Start" << endl << flush;
return 0;
}
int BasicTricks::Step::Abort() {
return 0;
}
int BasicTricks::Step::Continue() {
return 0;
}
bool BasicTricks::Step::IsUsingHead() {
return false;
}
char* BasicTricks::Step::GetErrorMsg(int msg) {
if (msg == 0) return "DOING_STEP";
return "STEP:NO_MESSAGE";
}
char* BasicTricks::Step::GetName() {
return "Step";
}
// END STEP
////////////////////////////////////////////////////////////////
// BEGIN MULTITRICK
BasicTricks::MultiTrick::MultiTrick(int c, ...) {
timer = false;
count = c;
tricks = (Trick**)malloc(sizeof(Trick*)*count);
current = 0;
previous = 0;
hasRunStart = false;
va_list args;
va_start(args,c);
for (int i = 0; i < count; i++) {
tricks[i] = va_arg(args,Trick*);
}
va_end(args);
}
BasicTricks::MultiTrick::MultiTrick(bool _timer, int c, ...) {
timer = _timer;
count = c;
tricks = (Trick**)malloc(sizeof(Trick*)*count);
current = 0;
previous = 0;
hasRunStart = false;
startFrame = frame_;
va_list args;
va_start(args,c);
for (int i = 0; i < count; i++) {
tricks[i] = va_arg(args,Trick*);
}
va_end(args);
}
BasicTricks::MultiTrick::~MultiTrick() {
for (int i = 0; i < count; i++) {
delete tricks[i];
}
free(tricks);
}
int BasicTricks::MultiTrick::Start() {
int ret = tricks[current]->Start();
previous = current;
hasRunStart = true;
if (ret < 1) {
current++;
hasRunStart = false;
if (current == count) {
if (timer) {
long totalFrames = frame_-startFrame;
cout << "Timed multiTrick took " << totalFrames << " frames." << endl << flush;
}
return ret;
}
}
return (int)(ret+100);
}
int BasicTricks::MultiTrick::Abort() {
return 0;
}
//FIXME i think we can run Start() earlier ?
int BasicTricks::MultiTrick::Continue() {
if (hasRunStart == false) return Start();
int ret = tricks[current]->Continue();
previous = current;
if (ret < -9999) { // Force an exit in multitrick !!!
return ret;
}
if (ret < 1) {
current++;
hasRunStart = true;
if (current == count) {
// multitrick completed.
if (timer) {
long totalFrames = frame_-startFrame;
cout << "Timed multiTrick took " << totalFrames << " frames." << endl << flush;
}
return ret;
}
Start();
}
return (int)(ret+100);
}
bool BasicTricks::MultiTrick::IsUsingHead() {
return tricks[current]->IsUsingHead();
}
char* BasicTricks::MultiTrick::GetErrorMsg(int msg) {
if (msg > 50) {
return tricks[previous]->GetErrorMsg(msg-100);
} else {
return tricks[previous]->GetErrorMsg(msg);
}
return "MULTITRICK:NO_MESSAGE";
}
char* BasicTricks::MultiTrick::GetName() {
return "MultiTrick";
}
Trick* BasicTricks::MultiTrick::GetCurrentTrick() {
if (current >= 0 && current < count) {
return tricks[current];
}
return NULL;
}
// END MULTITRICK
////////////////////////////////////////////////////////////////
// BEGIN SELECTATRICK
BasicTricks::SelectaTrick::SelectaTrick(int _type) {
type = _type;
currentTrick = NULL;
}
BasicTricks::SelectaTrick::~SelectaTrick() {
if (currentTrick != NULL) delete currentTrick;
}
int BasicTricks::SelectaTrick::Start() {
return 1;
}
int BasicTricks::SelectaTrick::Abort() {
currentTrick->Abort();
return 0;
}
int BasicTricks::SelectaTrick::Continue() {
if (currentTrick == NULL) {
KickSelecta ks;
currentTrick = ks.FastSelecta(wo_self_->x_, wo_self_->y_, wo_self_->heading_, type);
currentTrick->Start();
}
int cC = currentTrick->Continue();
return cC;
}
char* BasicTricks::SelectaTrick::GetErrorMsg(int msg) {
return "SELECTATRICK:NO_MESSAGE";
}
char* BasicTricks::SelectaTrick::GetName() {
return "SelectaTrick";
}
Trick* BasicTricks::SelectaTrick::GetCurrentTrick() {
return currentTrick;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?