예제 #1
0
  public Model(GameActivity gameActivity, Surface view) {
    m_view = view;
    m_gameActivity = gameActivity;
    m_view.addModel(this);
    m_barriers = Collections.synchronizedList(new ArrayList<Barrier>());
    m_balls = Collections.synchronizedList(new ArrayList<Ball>());
    m_bonusBalls = Collections.synchronizedList(new ArrayList<BonusBall>());
    m_newScorePoints = Collections.synchronizedList(new ArrayList<ScorePoint>());
    m_run = true;
    m_speed = m_defaultSpeed = 1;
    m_spaceBetweenRectangles = 0;
    m_score = 0;
    m_sleep = m_defaultSleep = 10;
    m_points = 2;
    m_nameToMediaPlayer = Collections.synchronizedMap(new HashMap<String, MediaPlayer>());
    mStartScore = 0;

    SharedPreferences prefs =
        PreferenceManager.getDefaultSharedPreferences(m_gameActivity.getApplicationContext());
    m_playSounds = !prefs.getBoolean("MuteSound", true);

    if (m_playSounds) {
      m_nameToMediaPlayer.put(
          "bomb", MediaPlayer.create(m_gameActivity.getBaseContext(), R.raw.bomb_bonus));
      m_nameToMediaPlayer.put(
          "color", MediaPlayer.create(m_gameActivity.getBaseContext(), R.raw.color_bonus));
      m_nameToMediaPlayer.put(
          "gameover", MediaPlayer.create(m_gameActivity.getBaseContext(), R.raw.gameover));
      m_nameToMediaPlayer.put(
          "points", MediaPlayer.create(m_gameActivity.getBaseContext(), R.raw.new_point));
      m_nameToMediaPlayer.put(
          "time", MediaPlayer.create(m_gameActivity.getBaseContext(), R.raw.time_bonus));
      m_nameToMediaPlayer.put(
          "win", MediaPlayer.create(m_gameActivity.getBaseContext(), R.raw.win));
    }

    prefs = PreferenceManager.getDefaultSharedPreferences(gameActivity.getApplicationContext());
    m_dificulty = prefs.getString("Dificulty", "Easy");

    if (m_dificulty.equalsIgnoreCase("Normal")) {
      m_points = 2;
      mStartScore = 701;
    } else if (m_dificulty.equalsIgnoreCase("Hard")) {
      m_points = 3;
      mStartScore = 1401;
    }

    m_defBallSpeed = m_ballSpeed = prefs.getInt("BallSpeed", 3);
  }
예제 #2
0
  public void run() {

    // game loop
    while (m_run) {
      try {
        Thread.sleep(m_sleep);
      } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }

      // if view isn't loaded yet, go to beginning
      if (m_spaceBetweenRectangles == 0) continue;

      if (mPaused) waitOnPause();

      synchronized (m_balls) {
        updateBalls();
      }

      synchronized (m_bonusBalls) {
        updateBonusBalls();
      }

      moveScenario();
      fixCollisions();
      updateScorePoints();

      m_view.postInvalidate();
    }

    Score.onSave(m_gameActivity.getBaseContext(), (int) m_score);

    if (Score.score.get(0) == m_score) playSound("win");
    else playSound("gameover");

    synchronized (m_barriers) {
      m_barriers.clear();
    }
    synchronized (m_balls) {
      m_balls.clear();
    }
    synchronized (m_bonusBalls) {
      BonusBall.runAll = false;

      for (BonusBall ball : m_bonusBalls) {
        if (ball.getThread() != null && ball.getThread().isAlive()) {
          ball.terminateAndReset();
          try {
            ball.getThread().join();
          } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
        }
      }

      m_bonusBalls.clear();
    }

    synchronized (m_newScorePoints) {
      m_bonusBalls.clear();
    }

    synchronized (m_nameToMediaPlayer) {
      Iterator<Entry<String, MediaPlayer>> it = m_nameToMediaPlayer.entrySet().iterator();

      while (it.hasNext()) {
        Map.Entry<String, MediaPlayer> entry = (Entry<String, MediaPlayer>) it.next();
        if (!entry.getValue().isPlaying()) {
          entry.getValue().release();
          it.remove();
        }
      }
    }

    System.gc();

    m_view.showGameOverDialog();
  }