private void startGame(int start_score) {
    setState(STATE_RUNNING);
    // Set allowed time
    m_allowedTime = m_initial_allowedTime;
    m_allowedTime_millis = m_allowedTime * 1000;
    m_score = start_score;
    m_answers.clear();
    m_Handler.removeCallbacks(mUpdateTimeTask);
    m_Handler.removeCallbacks(mBlinkTimeTask);
    if (mGameMode.equals("demo")) {
      mDemoState = 0;
      m_demo_word_i = 0;
      mBoardGameLogic.startGame("SABONETE");
      m_playboard.setClickable(false);
      m_Handler.postDelayed(mDemoPlayTask, 1000);
    } else {
      mBoardGameLogic.startGame(getRandomWord());
      m_Handler.postDelayed(mUpdateTimeTask, 1000);
      m_playboard.setClickable(true);
      m_word.setClickable(true);
    }

    mScoreText.setText(new Integer(m_score).toString());

    m_text_status.setVisibility(View.INVISIBLE);
    m_start_button.setVisibility(View.INVISIBLE);
    m_word.setText("");
    m_word.setEnabled(false);
    mPlayTime.setVisibility(View.VISIBLE);

    m_playboard.setKeepScreenOn(true);

    mStartTime = System.currentTimeMillis();
  }
 public void run() {
   if (mPlayState == STATE_RUNNING) {
     m_text_status.setVisibility(View.INVISIBLE);
   }
   if (m_must_reset_word) {
     mBoardGameLogic.swapSelected();
     m_must_reset_word = false;
   }
   mBoardGameLogic.clearAll();
 }
 public void board_OnClick(View v) {
   // your code here
   String current_word = mBoardGameLogic.getWord();
   m_word.setText(current_word);
   int action_img = 0;
   boolean can_swap = mBoardGameLogic.countSelected() == 2;
   boolean can_check = current_word.length() > 3;
   if (can_swap) action_img = R.drawable.swap;
   else if (can_check) action_img = R.drawable.question;
   m_word.setCompoundDrawablesWithIntrinsicBounds(0, 0, action_img, 0);
   m_word.setEnabled(can_swap || can_check);
 }
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    /* DEV
    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
    .detectDiskReads()
    .detectDiskWrites()
    .detectNetwork()   // or .detectAll() for all detectable problems
    .penaltyLog()
    .build());
    */
    super.onCreate(savedInstanceState);

    setContentView(R.layout.playgame);

    mGameMode = getIntent().getStringExtra("mode");

    final DatabaseHelper mOpenHelper = new DatabaseHelper(this, "wordlist");
    m_db = mOpenHelper.getReadableDatabase();

    m_playboard = (PlayBoard) findViewById(R.id.playboard);
    m_playboard.setBoardSize(5, 5);
    mBoardGameLogic.setBoard(m_playboard);

    m_word = (TextView) findViewById(R.id.word);
    mPlayTime = (TextView) findViewById(R.id.play_time);
    mScoreText = (TextView) findViewById(R.id.score);

    // Temporary components
    m_text_status = (TextView) findViewById(R.id.status);
    m_start_button = (Button) findViewById(R.id.restart_game);

    startGame(0);
  }
 public void word_OnClick(View v) {
   if (mPlayState == STATE_RUNNING && m_text_status.getVisibility() == View.VISIBLE)
     m_text_status.setVisibility(View.INVISIBLE);
   String current_word = mBoardGameLogic.getWord();
   String lower_current_word = current_word.toLowerCase();
   if (mBoardGameLogic.countSelected() == 2) {
     mBoardGameLogic.swap2();
     m_word.setText("");
     m_word.setEnabled(false);
     m_word.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
     return;
   }
   /* if(m_answers.contains(lower_current_word)) {
   	showResult(current_word, "repetida", 0xAAFFFF00);
   } else */ {
     boolean is_correct = findWord(lower_current_word);
     int play_score = lower_current_word.length();
     int play_time = 20;
     if (lower_current_word.length() > 5) {
       play_score += 10;
       play_time += 30;
     }
     if (is_correct) {
       m_score += play_score;
       m_allowedTime += play_time;
       m_allowedTime_millis = m_allowedTime * 1000;
       m_answers.add(lower_current_word);
       m_must_reset_word = true;
       showResult(current_word, "certa", 0xAA00FF00);
       // if(m_answers.size() == 1)
       //	mPlayTime.setTextColor(0xFF00FF00);
     } else {
       m_score -= play_score;
       /*
       long millis = System.currentTimeMillis() - mStartTime;
       m_allowedTime -= play_time;
       m_allowedTime_millis = m_allowedTime * 1000;
       long remaining = m_allowedTime-millis;
       if(!mTimeIsBlinking && remaining < 10)
       	m_Handler.postDelayed(mUpdateTimeTask, 0); */
       showResult(current_word, "errada", 0xAAFF0000);
     }
   }
   mScoreText.setText(new Integer(m_score).toString());
   m_word.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.check_button_blank, 0);
   m_word.setEnabled(false);
 }
 private void setState(int state) {
   mPlayState = state;
   switch (mPlayState) {
     case STATE_GAMEOVER:
       m_Handler.removeCallbacks(mDismissResultTask);
       m_Handler.removeCallbacks(mUpdateTimeTask);
       m_Handler.removeCallbacks(mBlinkTimeTask);
       mTimeIsBlinking = false;
       showMessage("Fim de jogo", 40);
       m_word.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.check_button_blank, 0);
       m_word.setEnabled(false);
       m_start_button.setVisibility(View.VISIBLE);
       m_playboard.setKeepScreenOn(false);
       m_playboard.setClickable(false);
       mBoardGameLogic.clearAll();
       // if(m_answers.size() > 0)
       //	break;
       ArrayList<PlayBoard.Coordinate> word = mBoardGameLogic.getMasterWord();
       String current_word = "";
       int size = mBoardGameLogic.getMasterWord().size();
       for (int i = 0; i < size; ++i) {
         PlayBoard.Coordinate pos;
         pos = word.get(i);
         m_playboard.setTile(PlayBoard.SELECTED, pos.x, pos.y);
         current_word += m_playboard.getTextAtPos(pos.x, pos.y);
       }
       m_word.setText(current_word);
       mPlayTime.setVisibility(View.VISIBLE);
       m_playboard.invalidate();
       Intent myIntent = new Intent(PlayGameActivity.this, ScoreSaveActivity.class);
       myIntent.putExtra("score", m_score);
       myIntent.putExtra("playtime", m_allowedTime);
       String answer_list = "";
       for (String answer : m_answers) {
         answer_list += "," + answer;
       }
       myIntent.putExtra("words", answer_list);
       startActivity(myIntent);
       break;
   }
 }
        public void run() {
          switch (mDemoState) {
            case 0:
              showMessage(
                  "Toque em letras adjacentes\n"
                      + "procurando formar palavras\ncom pelo menos 4 letras.\n"
                      + "Quando terminar uma palavra toque no botão.",
                  20);
              m_Handler.postDelayed(this, 5000);
              ++mDemoState;
              break;
            case 1:
            case 4:
              m_text_status.setVisibility(View.INVISIBLE);
              ArrayList<PlayBoard.Coordinate> word = mBoardGameLogic.getMasterWord();
              PlayBoard.Coordinate pos;
              String current_word = "";
              for (int i = 0; i < m_demo_word_i; ++i) {
                pos = word.get(i);
                m_playboard.setTile(PlayBoard.SELECTED, pos.x, pos.y);
                current_word += m_playboard.getTextAtPos(pos.x, pos.y);
              }
              pos = word.get(m_demo_word_i);
              current_word += m_playboard.getTextAtPos(pos.x, pos.y);
              m_playboard.setTile(PlayBoard.LAST_SELECTED, pos.x, pos.y);

              m_word.setText(current_word);

              int button_img =
                  (current_word.length() > 3) ? R.drawable.question : R.drawable.check_button_blank;
              m_word.setCompoundDrawablesWithIntrinsicBounds(0, 0, button_img, 0);
              m_word.setEnabled(current_word.length() > 3);
              m_word.setClickable(false);

              m_playboard.invalidate();
              m_Handler.postDelayed(this, 1000);
              if (++m_demo_word_i == word.size()) mDemoState++;
              break;
            case 2:
              showResult("SABONETE", "certa", 0xAA00FF00);
              m_Handler.postDelayed(this, 3000);
              mDemoState++;
              break;
            case 3:
              m_demo_word_i = 0;
              m_text_status.setVisibility(View.INVISIBLE);
              mBoardGameLogic.startGame("PORTUGAL");
              m_playboard.invalidate();
              m_Handler.postDelayed(this, 1000);
              mDemoState++;
              break;
            case 5:
              showResult("PORTUGAL", "errada", 0xAAFF0000);
              m_Handler.postDelayed(this, 2200);
              mDemoState++;
              break;
            case 6:
              showMessage("Não são aceites nomes próprios.", 20);
              m_Handler.postDelayed(this, 5000);
              mDemoState++;
              break;
            case 7:
              finish();
          }
        }