From e235ee579dbff698eb4ec21f21c13f09fb4fcffb Mon Sep 17 00:00:00 2001
From: 3009857 <3009857@stud.hs-mannheim.de>
Date: Thu, 10 Oct 2024 12:15:03 +0200
Subject: [PATCH] =?UTF-8?q?L=C3=B6sung=20zu=20Uebung=5F02?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 38 ++++++
.idea/.gitignore | 8 ++
.idea/encodings.xml | 7 +
.idea/inspectionProfiles/Project_Default.xml | 12 ++
.idea/misc.xml | 25 ++++
.idea/vcs.xml | 6 +
pom.xml | 17 +++
src/main/java/org/example/Main.java | 127 +++++++++++++++++++
8 files changed, 240 insertions(+)
create mode 100644 .gitignore
create mode 100644 .idea/.gitignore
create mode 100644 .idea/encodings.xml
create mode 100644 .idea/inspectionProfiles/Project_Default.xml
create mode 100644 .idea/misc.xml
create mode 100644 .idea/vcs.xml
create mode 100644 pom.xml
create mode 100644 src/main/java/org/example/Main.java
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..5ff6309
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,38 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..aa00ffa
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..5535e8f
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..585308c
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+ Proofreading
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..306b89a
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,17 @@
+
+
+ 4.0.0
+
+ org.example
+ Uebung_02
+ 1.0-SNAPSHOT
+
+
+ 22
+ 22
+ UTF-8
+
+
+
\ No newline at end of file
diff --git a/src/main/java/org/example/Main.java b/src/main/java/org/example/Main.java
new file mode 100644
index 0000000..df023f5
--- /dev/null
+++ b/src/main/java/org/example/Main.java
@@ -0,0 +1,127 @@
+package org.example;
+/**
+ * Tic Tac Toe Game
+ * @author: Hanin Aljalab
+ */
+
+
+import java.util.Random;
+import java.util.Scanner;
+
+public class Main {
+ public static void main(String[] args) {
+
+ // Decleration of the variables
+ char[][] board = {{' ', ' ', ' '},
+ {' ', ' ', ' '},
+ {' ', ' ', ' '}
+ };
+ int player;
+ boolean win;
+
+ // Initialize the variables
+ player = 1;
+ win = false;
+
+ // creating the "Scanner"
+ Scanner sc = new Scanner(System.in);
+
+ // Start the game
+ while (!win && !isBoardFull(board)) {
+ spielfeldAusgeben(board);
+
+ if (player == 1) {
+ // Player's turn
+ spielerZug(board, sc);
+ } else {
+ // Computer's turn
+ computerZug(board);
+ }
+
+ // Check for a win or draw
+ win = isWin(board);
+ if (!win) {
+ player = (player == 1) ? 2 : 1; // change the player
+ }
+ }
+
+ spielfeldAusgeben(board);
+
+ if (win) {
+ System.out.println("Spieler " + player + " gewinnt!");
+ } else {
+ System.out.println("Unentschieden!");
+ }
+ }
+
+ // print the game board
+ public static void spielfeldAusgeben(char[][] board) {
+ for (int i = 0; i < board.length; i++) {
+ for (int j = 0; j < board[i].length; j++) {
+ System.out.print(" [" + board[i][j] + "] ");
+ }
+ System.out.println();
+ }
+ }
+
+ //
+ public static void spielerZug(char[][] board, Scanner sc) {
+ System.out.println("Spieler, geben Sie Ihre Position ein (1-9): ");
+ int input = sc.nextInt();
+
+ // Convert input in row and column
+ int row = (input - 1) / 3;
+ int col = (input - 1) % 3;
+
+ // Check whether the position is valid and the field is not occupied
+ if (input >= 1 && input <= 9 && board[row][col] == ' ') {
+ board[row][col] = 'O';
+ } else {
+ System.out.println("Ungültige Position. Bitte erneut versuchen.");
+ spielerZug(board, sc); // Recursive call for new input
+ }
+ }
+
+ public static void computerZug(char[][] board) {
+ Random ra = new Random();
+ int row, col;
+
+ do {
+ row = ra.nextInt(board.length);
+ col = ra.nextInt(board.length);
+ } while (board[row][col] != ' ');
+
+ board[row][col] = 'X';
+ }
+
+ public static boolean isWin(char[][] board) {
+ // Check for profit in rows, columns and diagonals
+ for (int i = 0; i < 3; i++) {
+ // Profit in rows
+ if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ') {
+ return true;
+ }
+ // Profit in columns
+ if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ') {
+ return true;
+ }
+ }
+ // Profit in diagonals
+ if ((board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' ') || (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != ' ')) {
+ return true;
+ }
+ return false;
+ }
+
+ public static boolean isBoardFull(char[][] board) {
+ // Check whether the pitch is full (draw)
+ for (int i = 0; i < board.length; i++) {
+ for (int j = 0; j < board[i].length; j++) {
+ if (board[i][j] == ' ') {
+ return false; // There are still empty positions
+ }
+ }
+ }
+ return true; // All positions have been filled
+ }
+}