示例#1
0
文件: game_engine.cpp 项目: Dzzirt/TP
void Step(SnakeParts* snake) {
	StoreXY(snake);
	if ((snake[0].dir == UP) && (snake[0].y_pos == 0)) {
		snake[0].y_pos = (MapHeight - 1) * SpriteSize;
		snake[0].sprite.setPosition(snake[0].x_pos, snake[0].y_pos);
	}
	else if (snake[0].dir == DOWN && snake[0].y_pos == (MapHeight - 1) * SpriteSize) {
		snake[0].y_pos = 0;
		snake[0].sprite.setPosition(snake[0].x_pos, snake[0].y_pos);
	}
	else if (snake[0].dir == RIGHT && snake[0].x_pos == 0) {
		snake[0].x_pos = (MapWidth - 1) * SpriteSize;
		snake[0].sprite.setPosition(snake[0].x_pos, snake[0].y_pos);
	}
	else if (snake[0].dir == LEFT && snake[0].x_pos == (MapWidth - 1) * SpriteSize) {
		snake[0].x_pos = 0;
		snake[0].sprite.setPosition(snake[0].x_pos, snake[0].y_pos);
	}
	else SnakeUpdate(snake);

	for (int i = 1; i < MaxLengthSnake; i++) {
		if (snake[i].draw == 1) {
			StoreXY(snake + i);
			snake[i].x_pos = snake[i - 1].x_store;
			snake[i].y_pos = snake[i - 1].y_store;
			snake[i].sprite.setPosition(snake[i].x_pos, snake[i].y_pos);
		}
	}
}
示例#2
0
/** Dihedral covariance. */
void Action_Matrix::CalcDihedralCovariance( int frameNum ) {
  double XY2[2];
  DataSet_MatrixDbl::iterator mat = Mat_->begin();
  v_iterator v1idx1 = Mat_->v1begin();
  v_iterator v2idx1 = vect2_.begin();
    // TODO: Pre-calculate thetas
    // FIXME: Only Half Matrix for Now
    // OUTER LOOP
    for (Array1D::const_iterator ds2 = DihedralSets_.begin(); 
                                 ds2 != DihedralSets_.end(); ++ds2)
    {
      double theta2 = (*ds2)->Dval( frameNum ) * Constants::DEGRAD;
      XY2[0] = cos( theta2 );
      XY2[1] = sin( theta2 );
      // Store X and X^2
      StoreXY( v1idx1, v2idx1, XY2 );
      // Loop over X and Y of XY2
      for (int iidx = 0; iidx < 2; ++iidx) {
        double Vi = XY2[iidx];
        // Diagonal
        for (int jidx = iidx; jidx < 2; jidx++)
          *(mat++) += Vi * XY2[jidx]; // Vi * j{0,1}, Vi * j{1}
        // INNER LOOP
        for (Array1D::const_iterator ds1 = ds2 + 1; 
                                     ds1 != DihedralSets_.end(); ++ds1)
        {
          double theta1 = (*ds1)->Dval( frameNum ) * Constants::DEGRAD;
          *(mat++) += Vi * cos( theta1 );
          *(mat++) += Vi * sin( theta1 );
        }
      }
    }
}