Пример #1
0
void Menu::options()
{
  const char* names[] = {
    "CLR",
    "SDIR",
    "SPDS",
    "TRGT",
    "BACK"
  };

  switch (gUserInterface.getString(names, 5, 4)) {
    case 0:
      clear();
      break;
    case 1:
      startDirection();
      break;
    case 2:
      speeds();
      break;
    case 3:
      targetCell();
      break;
    case 4:
      // back
      break;
    default:
      break;
  }
}
Пример #2
0
void ScoreRoller::SetScore( int score )
{
    int dir = ( _score < score ? 1 : ( _score > score ? -1 : 0 ));
    if ( 0 == dir )
    {
        int numRollers = _rollers.size();
        for ( int i=0, base=1; i<numRollers; ++i, base *=10 )
        {
            int value = (score/base)%10;
            _rollers[i]->SetValue( value, 0);
        }
    }
    else
    {
        int numRollers = _rollers.size();
        std::vector< int > values( numRollers );
        std::vector< float > speeds( numRollers );
        int baseZero = 10;
        for ( int i=0; i<numRollers; ++i )
        {
            baseZero *= 10;
        }
        for ( int i=0, base=1; i<numRollers; ++i, base *=10 )
        {
            int oldValue = ((_score+baseZero)/base)%10;
            int value = ((score+baseZero)/base)%10;
            if ( oldValue != value )
            {
                int base1 = 10;
                for ( int j=0; j<i; ++j )
                {
                    values[i-j-1] += base1*dir;
                    base1 += 10;
                }
                values[i] = _rollers[i]->GetValue() + (value - oldValue);
            }
            else
            {
                values[i] = _rollers[i]->GetValue();
            }
            speeds[i] = _rollSpeed;
        }

        {
            int oldValue = ((_score+baseZero)/(baseZero/10))%10;
            int value = ((score+baseZero)/(baseZero/10))%10;
            if ( oldValue != value )
            {
                int base1 = 10;
                for ( int j=0; j<numRollers; ++j )
                {
                    values[numRollers-j-1] += base1*dir;
                    base1 += 10;
                }
            }
        }


        if ( dir > 0 )
        {
            for ( int i=1; i<numRollers; ++i )
            {
                float d1 = values[i-1] - _rollers[i-1]->GetValue();
                float d2 = values[i] - _rollers[i]->GetValue();
                if ( d1 > 0 && d2 > 0 )
                {
                    float k = d1 / d2;

                    for ( int j=0; j<i; ++j )
                    {
                        speeds[j] *= k;
                    }
                }
            }
        }
        else if ( dir < 0 )
        {
            for ( int i=1; i<numRollers; ++i )
            {
                float d1 = values[i-1] - _rollers[i-1]->GetValue();
                float d2 = values[i] - _rollers[i]->GetValue();
                if ( d1 < 0 && d2 < 0 )
                {
                    float k = d1 / d2;

                    for ( int j=0; j<i; ++j )
                    {
                        speeds[j] *= k;
                    }
                }
            }
        }

        for ( int i=0; i<numRollers; ++i )
        {
            _rollers[i]->SetValue( values[i], dir );
            _rollers[i]->SetRollSpeed( speeds[i] );
        }
    }

    _score = score;
}