package net.mitloehner.noughts; import android.view.View; import android.widget.Toast; import android.app.Activity; import android.os.Bundle; import android.widget.ImageView; import android.widget.TableLayout; import android.widget.TableRow; public class MyActivity extends Activity { int moves[][]; int EMPTY = 1, NOUGHT = 2, CROSS = 3; ImageView views[][]; public TableLayout table; public boolean haveWinner; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); moves = new int[3][3]; views = new ImageView[3][3]; table = new TableLayout(this); setContentView(table); initMoves(); buildTable(); } private void initMoves() { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { moves[i][j] = EMPTY; } } } void buildTable() { table.removeAllViews(); for (int i = 0; i < 3; i++) { TableRow tr = new TableRow(this); tr.setLayoutParams(new TableRow.LayoutParams( TableRow.LayoutParams.FILL_PARENT, TableRow.LayoutParams.WRAP_CONTENT)); for (int j = 0; j < 3; j++) { views[i][j] = new ImageView(this); viewImg(i, j); views[i][j].setOnClickListener(new View.OnClickListener() { public void onClick(View v) { touched(v); } }); tr.addView(views[i][j]); } table.addView(tr, new TableLayout.LayoutParams( TableRow.LayoutParams.FILL_PARENT, TableRow.LayoutParams.WRAP_CONTENT)); } } private void viewImg(int i, int j) { if (moves[i][j] == CROSS) views[i][j].setImageResource(R.drawable.cross); else if (moves[i][j] == NOUGHT) views[i][j].setImageResource(R.drawable.nought); else views[i][j].setImageResource(R.drawable.empty); } void touched(View v) { if (haveWinner) finish(); else { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (v == views[i][j]) { moves[i][j] = CROSS; viewImg(i, j); check(); if (!haveWinner) { computer(); check(); } } } } } } void computer() { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (moves[i][j] == EMPTY) { moves[i][j] = NOUGHT; viewImg(i, j); return; } } } } void check() { int i, j; // rows for (i = 0; i < 3; i++) { int m = moves[i][0]; if (m == EMPTY) break; if (moves[i][1] == m && moves[i][2] == m) winner(m); } // columns for (j = 0; j < 3; j++) { int m = moves[0][j]; if (m == EMPTY) break; if (moves[1][j] == m && moves[2][j] == m) winner(m); } // diagonales int m = moves[1][1]; if (m == EMPTY) return; if (moves[0][0] == m && moves[2][2] == m) winner(m); if (moves[0][2] == m && moves[2][0] == m) winner(m); // no winner } void winner(int who) { Toast.makeText(this, "We have a winner!", 2).show(); haveWinner = true; } }