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); }
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(); }