예제 #1
0
void testBallMoves() {
    int startStateIndex, numStartStates;
    GravPngScoreChange scoreChange;

    #define NUM_START_STATES 10
    StartState startStates[NUM_START_STATES] = { straightLeftPaddleNonTopCollision, noStartState, straightRightNonTopCollision, straightLeftPaddleRearCollision, straightRightPaddleRearCollision, straightRightPaddleBottomCollision, straightRightPaddleTopCollision, straightLeftPaddleTopCollision, straightLeftPaddleBottomCollision}; 
    numStartStates = NUM_START_STATES;   
    startStateIndex = 0;
    setupSpriteMemPtrs();
    fillSpriteMem();
    
    initGameObjects(startStates[startStateIndex]);
    drawBall(&ball);
    drawPaddleSprites(&paddleOne, &paddleTwo);
    printPaddle(&paddleTwo);
    printBall(&ball); 
    printCourt(&court);

    while(1) {
	scoreChange = updatePongGame(&gPngGame);
	if(scoreChange == PLAYER_ONE_GOAL || scoreChange == PLAYER_TWO_GOAL) {
	    flashScreen();
	    startStateIndex++;
	    if(startStateIndex < numStartStates) {
		if(startStates[startStateIndex] == noStartState) {
		    resetPongGame(&gPngGame);
		    gPngGame.isPlayerOneHuman = true;
		} else {
		    initGameObjects(startStates[startStateIndex]);
		}
	    } else {
		return;
	    }
	    
	}
	
	if(startStates[startStateIndex] == noStartState) {
	    handlePlayerInput(&gPngGame, true);
	    //playerOneInput(&gPngGame);
	    playerTwoInput(&gPngGame);
	}
	
	drawBall(&ball);
	drawPaddleSprites(&paddleOne, &paddleTwo);
   } 
}
예제 #2
0
/*!

 */
bool
TextPrinter::handleShowInfo( const rcsc::rcg::showinfo_t & show )
{
    if ( ! M_init_written )
    {
        M_init_written = true;
        M_os << "(Init)" << "\n";
    }

    handlePlayMode( show.pmode );
    handleTeamInfo( show.team[0], show.team[1] );

    M_os << "(Info";
    M_os << ' ';
    printState( M_os, static_cast< long >( static_cast< short >( ntohs( show.time ) ) ) );
    M_os << ' ';
    printBall( M_os, show.pos[0] );

    for ( int i = 1; i < rcsc::MAX_PLAYER * 2 + 1; ++i )
    {
        if ( ntohs( show.pos[i].enable ) == 0 )
        {
            // player is not connected
            continue;
        }

        int unum = ( i <= rcsc::MAX_PLAYER
                     ? i
                     : i - rcsc::MAX_PLAYER );
        //const std::string & teamname = ( i <= rcsc::MAX_PLAYER
        //? M_left_team_name
        //: M_right_team_name );
        M_os << ' ';
        printPlayer( M_os,
                     //teamname,
                     ( i <= rcsc::MAX_PLAYER
                       ? rcsc::LEFT
                       : rcsc::RIGHT ),
                     unum, show.pos[i] );
    }

    M_os << ")" << std::endl;
    return true;
}
예제 #3
0
/*!

 */
bool
TextPrinter::handleShortShowInfo2( const rcsc::rcg::short_showinfo_t2 & show )
{
    if ( ! M_init_written )
    {
        M_init_written = true;
        M_os << "(Init)" << "\n";
    }

    M_os << "(Info ";
    printState( M_os, static_cast< long >( static_cast< short >( ntohs( show.time ) ) ) );
    M_os << " ";
    printBall( M_os, show.ball );

    for ( int i = 0; i < rcsc::MAX_PLAYER * 2; ++i )
    {
        if ( ntohs( show.pos[i].mode ) == 0 )
        {
            // player is not connected
            continue;
        }

        int unum = ( i < rcsc::MAX_PLAYER
                     ? i + 1
                     : i + 1 - rcsc::MAX_PLAYER );
        //const std::string & teamname = ( i < rcsc::MAX_PLAYER
        //? M_left_team_name
        //: M_right_team_name );
        M_os << " ";
        printPlayer( M_os,
                     //teamname,
                     ( i < rcsc::MAX_PLAYER
                       ? rcsc::LEFT
                       : rcsc::RIGHT ),
                     unum, M_command_count[i], show.pos[i] );
        M_command_count[i].update( show.pos[i] );
    }

    M_os << ")" << std::endl;
    return true;
}
예제 #4
0
void dWorldExportDIF (dWorldID w, FILE *file, const char *prefix)
{
    PrintingContext c;
    c.file = file;
#if defined(dSINGLE)
    c.precision = 7;
#else
    c.precision = 15;
#endif
    c.indent = 1;

    fprintf (file,"-- Dynamics Interchange Format v0.1\n\n%sworld = dynamics.world {\n",prefix);
    c.print ("gravity",w->gravity);
    c.print ("ODE = {");
    c.indent++;
    c.print ("ERP",w->global_erp);
    c.print ("CFM",w->global_cfm);
    c.print ("auto_disable = {");
    c.indent++;
    c.print ("linear_threshold",w->adis.linear_average_threshold);
    c.print ("angular_threshold",w->adis.angular_average_threshold);
    c.print ("average_samples",(int)w->adis.average_samples);
    c.print ("idle_time",w->adis.idle_time);
    c.print ("idle_steps",w->adis.idle_steps);
    fprintf (file,"\t\t},\n\t},\n}\n");
    c.indent -= 3;

    // bodies
    int num = 0;
    fprintf (file,"%sbody = {}\n",prefix);
    for (dxBody *b=w->firstbody; b; b=(dxBody*)b->next) {
        b->tag = num;
        fprintf (file,"%sbody[%d] = dynamics.body {\n\tworld = %sworld,\n",prefix,num,prefix);
        c.indent++;
        c.print ("pos",b->posr.pos);
        c.print ("q",b->q,4);
        c.print ("lvel",b->lvel);
        c.print ("avel",b->avel);
        c.print ("mass",b->mass.mass);
        fprintf (file,"\tI = {{");
        for (int i=0; i<3; i++) {
            for (int j=0; j<3; j++) {
                c.printReal (b->mass.I[i*4+j]);
                if (j < 2) fputc (',',file);
            }
            if (i < 2) fprintf (file,"},{");
        }
        fprintf (file,"}},\n");
        c.printNonzero ("com",b->mass.c);
        c.print ("ODE = {");
        c.indent++;
        if (b->flags & dxBodyFlagFiniteRotation) c.print ("finite_rotation",1);
        if (b->flags & dxBodyDisabled) c.print ("disabled",1);
        if (b->flags & dxBodyNoGravity) c.print ("no_gravity",1);
        if (b->flags & dxBodyAutoDisable) {
            c.print ("auto_disable = {");
            c.indent++;
            c.print ("linear_threshold",b->adis.linear_average_threshold);
            c.print ("angular_threshold",b->adis.angular_average_threshold);
            c.print ("average_samples",(int)b->adis.average_samples);
            c.print ("idle_time",b->adis.idle_time);
            c.print ("idle_steps",b->adis.idle_steps);
            c.print ("time_left",b->adis_timeleft);
            c.print ("steps_left",b->adis_stepsleft);
            c.indent--;
            c.print ("},");
        }
        c.printNonzero ("facc",b->facc);
        c.printNonzero ("tacc",b->tacc);
        if (b->flags & dxBodyFlagFiniteRotationAxis) {
            c.print ("finite_rotation_axis",b->finite_rot_axis);
        }
        c.indent--;
        c.print ("},");
        if (b->geom) {
            c.print ("geometry = {");
            c.indent++;
            for (dxGeom *g=b->geom; g; g=g->body_next) {
                c.print ("{");
                c.indent++;
                printGeom (c,g);
                c.indent--;
                c.print ("},");
            }
            c.indent--;
            c.print ("},");
        }
        c.indent--;
        c.print ("}");
        num++;
    }

    // joints
    num = 0;
    fprintf (file,"%sjoint = {}\n",prefix);
    for (dxJoint *j=w->firstjoint; j; j=(dxJoint*)j->next) {
        c.indent++;
        const char *name = getJointName (j);
        fprintf (file,
            "%sjoint[%d] = dynamics.%s_joint {\n"
            "\tworld = %sworld,\n"
            "\tbody = {"
            ,prefix,num,name,prefix);

        if ( j->node[0].body )
            fprintf (file,"%sbody[%d]",prefix,j->node[0].body->tag);
        if ( j->node[1].body )
            fprintf (file,",%sbody[%d]",prefix,j->node[1].body->tag);
        fprintf (file,"}\n");

        switch (j->type()) {
            case dJointTypeBall: printBall (c,j); break;
            case dJointTypeHinge: printHinge (c,j); break;
            case dJointTypeSlider: printSlider (c,j); break;
            case dJointTypeContact: printContact (c,j); break;
            case dJointTypeUniversal: printUniversal (c,j); break;
            case dJointTypeHinge2: printHinge2 (c,j); break;
            case dJointTypeFixed: printFixed (c,j); break;
            case dJointTypeAMotor: printAMotor (c,j); break;
            case dJointTypeLMotor: printLMotor (c,j); break;
            case dJointTypePR: printPR (c,j); break;
            case dJointTypePU: printPU (c,j); break;
            case dJointTypePiston: printPiston (c,j); break;
            default: c.print("unknown joint");
        }
        c.indent--;
        c.print ("}");
        num++;
    }
}