Esempio n. 1
0
void dumb_agent(BZRC MyTeam)
{
	for(int i=1; i>0; i++)
	{
		MyTeam.speed(1,1.0);
		MyTeam.speed(2,1.0);
		MyTeam.shoot(1);
		MyTeam.shoot(2);
		sleep(5);
		MyTeam.speed(1,0);
		MyTeam.speed(2,0);
		MyTeam.angvel(1, 1);
		MyTeam.angvel(2, 1);
		sleep(3);
		MyTeam.angvel(1, 0);
		MyTeam.angvel(2, 0);
		MyTeam.shoot(1);
		MyTeam.shoot(1);
	}
}
Esempio n. 2
0
int main(int argc, char *argv[]) {
	const char *pcHost = "127.0.0.1";
	int portpurple = 0;
	int portgreen = 0;
	int portblue = 0;
	int portred = 0;
	int option;

	while ((option = getopt(argc,argv,"s:p:g:b:r:")) != -1) {
        switch (option) {
            case 'p':
                portpurple = atoi(optarg);
                break;
            case 'g':
            	portgreen = atoi(optarg);
            	break;
            case 'b':
            	portblue = atoi(optarg);
            	break;
            case 'r':
            	portred = atoi(optarg);
            	break;	
            case 's':
                pcHost = optarg;
                break;
            default:
                // // cout << "client [-s IP address] [-c port], where c is the first char of the color" << endl;
                exit(EXIT_FAILURE);
        }
    }
    BZRC* blue = NULL;
    BZRC* red = NULL;
    BZRC* purple = NULL;
    BZRC* green = NULL;
    if(portred)
    	red = new BZRC(pcHost, portred, false);
    if(portpurple)
    	purple = new BZRC(pcHost, portpurple, false);
    if(portblue)
    	blue = new BZRC(pcHost, portblue, false);
    if(portgreen)
    	green = new BZRC(pcHost, portgreen, false);

    green->speed(0,0.2);

    double sleepAmount = .5;    

    RandomAgent random(0, blue, 5);
    random.move();
    KalmanAgent kalmanGreen(0, purple, sleepAmount, 0, "green");
    KalmanAgent kalmanBlue(0, purple, sleepAmount, 0, "blue");
    KalmanAgent kalmanRed(0, purple, sleepAmount, 0, "red");

    ofstream greenFile;
    ofstream redFile;
    ofstream blueFile;
    ofstream trackedFile;
    greenFile.open ("values-green.dat");
    redFile.open ("values-red.dat");
    blueFile.open ("values-blue.dat");
    trackedFile.open("values.dat");

    bool shoot = true;
    time_t currentTime;
    time_t prevTime;
    time(&prevTime);


    KalmanAgent trackedAgent = kalmanGreen;

    for (int i = 0; i < 3; i++) {
    //while (true){
        bool stopped = false;
        purple->speed(0,0);



        random.move();
        // greenFile << kalmanGreen.update(sleepAmount);
        // blueFile << kalmanBlue.update(sleepAmount);
        // redFile << kalmanRed.update(sleepAmount);
        trackedAgent.update(sleepAmount);
        Node n = trackedAgent.getPos();
        // // cout << "enemy tank: " << n.x << " " << n.y << endl;
        // // cout << "angle to enemy: " << changeInAngle(purple,n) << endl;



        //while (abs(changeInAngle(purple,n)) > .005){
        for (int i = 0; i < 15; ++i) {
            if (shoot)
                usleep(10000);//sleepAmount);
            else 
                usleep(sleepAmount * 1000000);
            time(&currentTime);  /* get current time; same as: timer = time(NULL)  */

            double seconds = difftime(currentTime,prevTime);
            prevTime = currentTime;
            


            random.move();
            trackedAgent.update(seconds);
            // greenFile << kalmanGreen.update(seconds);
            // blueFile << kalmanBlue.update(seconds);
            // redFile << kalmanRed.update(seconds);

            if (shoot){
                Node n = trackedAgent.getPos();
                double a = changeInAngle(purple,n);
                purple->angvel(0, a*3);
            }
            n = trackedAgent.getPos();
        }
        purple->angvel(0,0);
        stopped = false;

        if (shoot) {
            double shootTime = 5;

            trackedAgent.predict(shootTime+8);

            Node futurePos = trackedAgent.getPos();
            // // cout << "predicted shot location: " << futurePos.x << ", " << futurePos.y << endl;
            time(&currentTime);  /* get current time; same as: timer = time(NULL)  */

            while (abs(changeInAngle(purple,futurePos)) > .005){
                usleep(10000);//sleepAmount);
                double a = changeInAngle(purple,futurePos);
                purple->angvel(0, a*3);           
            }
            purple->angvel(0,0);
            time(&prevTime);
            double seconds = difftime(currentTime,prevTime);
            
            double timeleft = shootTime - seconds - getBulletTime(purple, futurePos); 
            if (timeleft > 0)
                sleep(timeleft);
            
            // // cout << "timeleft: " << timeleft << endl;
            purple->shoot(0);
            sleep(getBulletTime(purple, futurePos));
            vector<tank_t> tanks;
            green->get_mytanks(tanks);
            // // cout << "actual position (noisy): " << tanks[0].pos[0] << ", " << tanks[0].pos[1] << endl; 

            trackedAgent.reset();
        }
        else {
            break;
        }        
    }

    for (int i = 0; i < 10; i++){
        usleep(sleepAmount * 1000000);
        // cout << trackedAgent.predict(i*sleepAmount);
        // greenFile << kalmanGreen.predict(i*(sleepAmount));  
        // blueFile << kalmanBlue.predict(i*(sleepAmount));
        // redFile << kalmanRed.predict(i*(sleepAmount));      
    }


    greenFile.close();
    redFile.close();
    blueFile.close();

    if(purple)
        delete purple;
    if(red)
        delete red;
    if(blue)
        delete blue;
    if(green)
        delete green;

	return 0;
}