diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6ae66cc..0c44595 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -8,10 +8,9 @@ android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> - + - diff --git a/app/src/main/java/com/acme/tictactoe/controller/TicTacToeActivity.java b/app/src/main/java/com/acme/tictactoe/controller/TicTacToeActivity.java index 84ba558..a6c843b 100644 --- a/app/src/main/java/com/acme/tictactoe/controller/TicTacToeActivity.java +++ b/app/src/main/java/com/acme/tictactoe/controller/TicTacToeActivity.java @@ -2,14 +2,87 @@ import android.support.v7.app.AppCompatActivity; import android.os.Bundle; +import android.util.Log; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TextView; import com.acme.tictactoe.R; +import com.acme.tictactoe.model.Board; +import com.acme.tictactoe.model.Player; public class TicTacToeActivity extends AppCompatActivity { + private static String TAG = TicTacToeActivity.class.getName(); + + private Board model; + + private ViewGroup buttonGrid; + private View winnerPlayerViewGroup; + private TextView winnerPlayerLabel; + @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(); } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.menu_tictactoe, menu); + return true; + } + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.action_reset: + reset(); + return true; + default: + return super.onOptionsItemSelected(item); + } + } + + public void onCellClicked(View v) { + + Button button = (Button) v; + + String tag = button.getTag().toString(); + int row = Integer.valueOf(tag.substring(0,1)); + int col = Integer.valueOf(tag.substring(1,2)); + Log.i(TAG, "Click Row: [" + row + "," + col + "]"); + + 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); + } + } + + } + + private void reset() { + winnerPlayerViewGroup.setVisibility(View.GONE); + winnerPlayerLabel.setText(""); + + model.restart(); + + for( int i = 0; i < buttonGrid.getChildCount(); i++ ) { + ((Button) buttonGrid.getChildAt(i)).setText(""); + } + } + } diff --git a/app/src/main/java/com/acme/tictactoe/model/Board.java b/app/src/main/java/com/acme/tictactoe/model/Board.java index e65bab0..c87a16e 100644 --- a/app/src/main/java/com/acme/tictactoe/model/Board.java +++ b/app/src/main/java/com/acme/tictactoe/model/Board.java @@ -22,6 +22,7 @@ public Board() { */ public void restart() { clearCells(); + winner = null; currentTurn = Player.X; state = GameState.IN_PROGRESS; } @@ -33,11 +34,17 @@ public void restart() { * * @param row 0..2 * @param col 0..2 + * @return the player that moved or null if we did not move anything. * */ - public void mark( int row, int col ) { + public Player mark( int row, int col ) { + + Player playerThatMoved = null; + if(isValid(row, col)) { + cells[row][col].setValue(currentTurn); + playerThatMoved = currentTurn; if(isWinningMoveByPlayer(currentTurn, row, col)) { state = GameState.FINISHED; @@ -48,6 +55,8 @@ public void mark( int row, int col ) { flipCurrentTurn(); } } + + return playerThatMoved; } public Player getWinner() { diff --git a/app/src/main/java/com/acme/tictactoe/model/Player.java b/app/src/main/java/com/acme/tictactoe/model/Player.java index 73130f8..3be3b79 100644 --- a/app/src/main/java/com/acme/tictactoe/model/Player.java +++ b/app/src/main/java/com/acme/tictactoe/model/Player.java @@ -1,3 +1,3 @@ package com.acme.tictactoe.model; -enum Player { X , O } +public enum Player { X , O } diff --git a/app/src/main/res/layout/tictactoe.xml b/app/src/main/res/layout/tictactoe.xml index d97f0f8..e90ef83 100644 --- a/app/src/main/res/layout/tictactoe.xml +++ b/app/src/main/res/layout/tictactoe.xml @@ -1,17 +1,104 @@ - - - + android:columnCount="3" + android:rowCount="3"> + +