From 28aad1c29cbd6a1bfb6b2ec7955f50f2b9ccb471 Mon Sep 17 00:00:00 2001 From: Maksymilian Jopek Date: Wed, 14 Dec 2022 17:42:14 +0100 Subject: Fix bot and online layout --- app/src/main/java/com/jopek/pai_fillo_nai/Bot.java | 3 + .../jopek/pai_fillo_nai/OfflineGameActivity.java | 5 +- .../jopek/pai_fillo_nai/OnlineGameActivity.java | 23 +-- .../main/res/layout-land/activity_online_game.xml | 178 ++++++++++++++------- app/src/main/res/layout/activity_online_game.xml | 162 ++++++++++++------- 5 files changed, 251 insertions(+), 120 deletions(-) (limited to 'app/src/main') diff --git a/app/src/main/java/com/jopek/pai_fillo_nai/Bot.java b/app/src/main/java/com/jopek/pai_fillo_nai/Bot.java index 8f59d2b..d96367d 100644 --- a/app/src/main/java/com/jopek/pai_fillo_nai/Bot.java +++ b/app/src/main/java/com/jopek/pai_fillo_nai/Bot.java @@ -34,6 +34,8 @@ public class Bot { static int minimax(int depth, Boolean isMax) { int score = goodOrBad(); + if (score == 10 && depth < 2) + return score * 100_000; if (score == 10) return score; @@ -61,6 +63,7 @@ public class Bot { if (board[i] == -1) { board[i] = opponent; best = Math.min(best, minimax(depth + 1, !isMax)); + board[i] = -1; } } diff --git a/app/src/main/java/com/jopek/pai_fillo_nai/OfflineGameActivity.java b/app/src/main/java/com/jopek/pai_fillo_nai/OfflineGameActivity.java index e7a3210..cfc23f6 100644 --- a/app/src/main/java/com/jopek/pai_fillo_nai/OfflineGameActivity.java +++ b/app/src/main/java/com/jopek/pai_fillo_nai/OfflineGameActivity.java @@ -5,6 +5,7 @@ import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.os.Handler; +import android.util.Log; import android.view.WindowManager; import android.widget.ImageView; import android.widget.TextView; @@ -141,6 +142,7 @@ public class OfflineGameActivity extends AppCompatActivity { } protected void onSquareClick(TextView square, int id, boolean force) { + Log.d(TAG, "onSquareClick: " + botTurn + " " + force); if (botTurn && !force) return; if (gameBoard[id] != -1) return; gameBoard[id] = whoseTurn; @@ -170,7 +172,8 @@ public class OfflineGameActivity extends AppCompatActivity { int chosenSquare = -1; chosenSquare = Bot.getBestMove(gameBoard.clone(), playerIs == 0 ? 1 : 0, playerIs); onSquareClick(squares[chosenSquare], chosenSquare, true); - botTurn = false; + if (!checkWon()) + botTurn = false; } protected boolean checkWon() { diff --git a/app/src/main/java/com/jopek/pai_fillo_nai/OnlineGameActivity.java b/app/src/main/java/com/jopek/pai_fillo_nai/OnlineGameActivity.java index 461c1b1..7c76cec 100644 --- a/app/src/main/java/com/jopek/pai_fillo_nai/OnlineGameActivity.java +++ b/app/src/main/java/com/jopek/pai_fillo_nai/OnlineGameActivity.java @@ -38,7 +38,7 @@ public class OnlineGameActivity extends AppCompatActivity { List gameBoard = new ArrayList<>( Arrays.asList(-1L, -1L, -1L, -1L, -1L, -1L, -1L, -1L, -1L) ); - List squares = new ArrayList<>(); + List squares = new ArrayList<>(); DatabaseReference rooms; DatabaseReference room; // FinishGameAlert @@ -50,7 +50,7 @@ public class OnlineGameActivity extends AppCompatActivity { String TAG = "maks"; ImageView p0Img; //ImageView p1Img; - ImageView square0, square1, square2, square3, square4, square5, square6, square7, square8; + TextView square0, square1, square2, square3, square4, square5, square6, square7, square8; TextView tvName; @RequiresApi(api = Build.VERSION_CODES.N) @@ -77,9 +77,9 @@ public class OnlineGameActivity extends AppCompatActivity { square8 = findViewById(R.id.square8); squares.addAll(Arrays.asList(square0, square1, square2, square3, square4, square5, square6, square7, square8)); int i = 0; - for (ImageView square : squares) { + for (TextView square : squares) { int finalI = i; - square.setOnClickListener(view -> onSquareClick((ImageView) view, finalI)); + square.setOnClickListener(view -> onSquareClick((TextView) view, finalI)); i++; } rooms = FirebaseDatabase.getInstance("https://pai-fillo-nai-default-rtdb.europe-west1.firebasedatabase.app/").getReference("rooms"); @@ -254,13 +254,16 @@ public class OnlineGameActivity extends AppCompatActivity { protected void playTurn() { int i = 0; - for (ImageView square : squares) { + for (TextView square : squares) { if (gameBoard.get(i) == -1) { - square.setImageResource(R.mipmap.emptiness_foreground); +// square.setImageResource(R.mipmap.emptiness_foreground); + square.setText(""); } else if (gameBoard.get(i) == 0) { - square.setImageResource(R.mipmap.bg_o_foreground); +// square.setImageResource(R.mipmap.bg_o_foreground); + square.setText("O"); } else if (gameBoard.get(i) == 1) { - square.setImageResource(R.mipmap.bg_x_foreground); +// square.setImageResource(R.mipmap.bg_x_foreground); + square.setText("X"); } i++; } @@ -277,10 +280,10 @@ public class OnlineGameActivity extends AppCompatActivity { } @RequiresApi(api = Build.VERSION_CODES.N) - protected void onSquareClick(ImageView square, int id) { + protected void onSquareClick(TextView square, int id) { if (gameBoard.get(id) != -1 || !myTurn) return; gameBoard.set(id, whoseTurn); - square.setImageResource(whoseTurn == 0 ? R.mipmap.bg_o_foreground : R.mipmap.bg_x_foreground); + square.setText(whoseTurn == 0 ? "O" : "X"); if (checkWon()) { endGame(whoseTurn); return; diff --git a/app/src/main/res/layout-land/activity_online_game.xml b/app/src/main/res/layout-land/activity_online_game.xml index 19ff086..9a47c20 100644 --- a/app/src/main/res/layout-land/activity_online_game.xml +++ b/app/src/main/res/layout-land/activity_online_game.xml @@ -45,6 +45,7 @@ android:layout_height="match_parent" android:orientation="vertical" android:background="@drawable/bg_rounded_grey" + android:paddingStart="40dp" android:layout_margin="5dp" android:layout_weight="1"> - - + - + + android:layout_width="100dp" + android:layout_height="100dp" + android:layout_margin="5dp" + android:background="@drawable/bg_rounded_blue" + android:gravity="center" + android:text="" + android:textAlignment="center" + android:textSize="60sp" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + - + + android:layout_width="100dp" + android:layout_height="100dp" + android:layout_margin="5dp" + android:background="@drawable/bg_rounded_blue" + android:gravity="center" + android:text="" + android:textAlignment="center" + android:textSize="60sp" /> - - + - + + android:layout_width="100dp" + android:layout_height="100dp" + android:layout_margin="5dp" + android:background="@drawable/bg_rounded_blue" + android:gravity="center" + android:text="" + android:textAlignment="center" + android:textSize="60sp" /> - \ No newline at end of file + diff --git a/app/src/main/res/layout/activity_online_game.xml b/app/src/main/res/layout/activity_online_game.xml index d9ccef3..f361225 100644 --- a/app/src/main/res/layout/activity_online_game.xml +++ b/app/src/main/res/layout/activity_online_game.xml @@ -52,81 +52,135 @@ android:layout_height="match_parent" android:layout_weight="1" android:padding="10dp"> - - + - + + android:layout_width="120dp" + android:layout_height="120dp" + android:layout_marginTop="15dp" + android:layout_marginBottom="5dp" + android:layout_marginStart="5dp" + android:layout_marginEnd="5dp" + android:background="@drawable/bg_rounded_blue" + android:gravity="center" + android:text="" + android:textAlignment="center" + android:textSize="60sp" /> - - + - + + android:layout_width="120dp" + android:layout_height="120dp" + android:layout_marginTop="15dp" + android:layout_marginBottom="5dp" + android:layout_marginStart="5dp" + android:layout_marginEnd="5dp" + android:background="@drawable/bg_rounded_blue" + android:gravity="center" + android:text="" + android:textAlignment="center" + android:textSize="60sp" /> - - + - + + android:layout_width="120dp" + android:layout_height="120dp" + android:layout_marginTop="15dp" + android:layout_marginBottom="5dp" + android:layout_marginStart="5dp" + android:layout_marginEnd="5dp" + android:background="@drawable/bg_rounded_blue" + android:gravity="center" + android:text="" + android:textAlignment="center" + android:textSize="60sp" /> -- cgit v1.3.1