Last active
July 14, 2017 13:08
Controller MVC Android
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class TicTacToeActivity extends AppCompatActivity { | |
private Board model; | |
/* View Components referenced by the controller */ | |
private ViewGroup buttonGrid; | |
private View winnerPlayerViewGroup; | |
private TextView winnerPlayerLabel; | |
/** | |
* In onCreate of the Activity we lookup & retain references to view components | |
* and instantiate the model. | |
*/ | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.tictactoe); | |
winnerPlayerLabel = (TextView) findViewById(R.id.winnerPlayerLabel); | |
winnerPlayerViewGroup = findViewById(R.id.winnerPlayerViewGroup); | |
buttonGrid = (ViewGroup) findViewById(R.id.buttonGrid); | |
model = new Board(); | |
} | |
/** | |
* Here we inflate and attach our reset button in the menu. | |
*/ | |
@Override | |
public boolean onCreateOptionsMenu(Menu menu) { | |
MenuInflater inflater = getMenuInflater(); | |
inflater.inflate(R.menu.menu_tictactoe, menu); | |
return true; | |
} | |
/** | |
* We tie the reset() action to the reset tap event. | |
*/ | |
@Override | |
public boolean onOptionsItemSelected(MenuItem item) { | |
switch (item.getItemId()) { | |
case R.id.action_reset: | |
reset(); | |
return true; | |
default: | |
return super.onOptionsItemSelected(item); | |
} | |
} | |
/** | |
* When the view tells us a cell is clicked in the tic tac toe board, | |
* this method will fire. We update the model and then interrogate it's state | |
* to decide how to proceed. If X or O won with this move, update the view | |
* to display this and otherwise mark the cell that was clicked. | |
*/ | |
public void onCellClicked(View v) { | |
Button button = (Button) v; | |
int row = Integer.valueOf(tag.substring(0,1)); | |
int col = Integer.valueOf(tag.substring(1,2)); | |
Player playerThatMoved = model.mark(row, col); | |
if(playerThatMoved != null) { | |
button.setText(playerThatMoved.toString()); | |
if (model.getWinner() != null) { | |
winnerPlayerLabel.setText(playerThatMoved.toString()); | |
winnerPlayerViewGroup.setVisibility(View.VISIBLE); | |
} | |
} | |
} | |
/** | |
* On reset, we clear the winner label and hide it, then clear out each button. | |
* We also tell the model to reset (restart) it's state. | |
*/ | |
private void reset() { | |
winnerPlayerViewGroup.setVisibility(View.GONE); | |
winnerPlayerLabel.setText(""); | |
model.restart(); | |
for( int i = 0; i < buttonGrid.getChildCount(); i++ ) { | |
((Button) buttonGrid.getChildAt(i)).setText(""); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment