From 62835eb43c3f0020e2112a27133600682f331fe6 Mon Sep 17 00:00:00 2001 From: punix Date: Sat, 13 Jul 2024 11:56:04 +0200 Subject: [PATCH] First match in Python --- .idea/.gitignore | 3 + .../inspectionProfiles/profiles_settings.xml | 6 ++ .idea/misc.xml | 7 ++ .idea/modules.xml | 8 ++ .idea/tic-tac-toe.iml | 10 ++ .idea/vcs.xml | 6 ++ main.py | 97 +++++++++++++++++++ 7 files changed, 137 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/tic-tac-toe.iml create mode 100644 .idea/vcs.xml create mode 100755 main.py diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..f1c8cb6 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..fcdf5cc --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/tic-tac-toe.iml b/.idea/tic-tac-toe.iml new file mode 100644 index 0000000..2c80e12 --- /dev/null +++ b/.idea/tic-tac-toe.iml @@ -0,0 +1,10 @@ + + + + + + + + + + \ 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/main.py b/main.py new file mode 100755 index 0000000..6d38545 --- /dev/null +++ b/main.py @@ -0,0 +1,97 @@ +#!/usr/bin/python3 +from os import system + +# Das ist die Liste in der die Felder für die ausgabe auf der Konsole. Die einzelnen Felder werden durch X oder O +# beim Spiel ersetzt +field = ["", + "1", "2", "3", + "4", "5", "6", + "7", "8", "9"] + +player = '\x1b[1;34m' "X" '\x1b[1;0m' # Die Zeichen X und O werden so farbig ausgegeben. +# Achtung! O hat eine andere Farbe +run = True # Variable, die auf Wahr gesetzt ist, damit das Programm sauber beendet wird. + + +def p_field(): # p_ = print. Damit wird das Spielfeld aus der Liste field auf der Konsole ausgegeben + print("") + print(" " + field[1] + "|" + field[2] + "|" + field[3]) + print(" " + field[4] + "|" + field[5] + "|" + field[6]) + print(" " + field[7] + "|" + field[8] + "|" + field[9]) + print("") + + +def play_now(): + global run + while True: + try: # Try eingebaut damit auch alle anderen Zeichen und Buchstaben abgefangen werden. + sel_field = input("Bitte ein Feld auswählen:\nZum beenden des Spiels q drücken.\n") + if sel_field == "q": + run = False + return 1 + if sel_field == "": + print("Ohne eingabe kein gewinn!!!") + continue + sel_field = int(sel_field) + if sel_field >= 1 and sel_field <= 9: + if field[sel_field] == '\x1b[1;34m' "X" '\x1b[1;0m' or field[sel_field] == '\x1b[1;31m' "O" '\x1b[1;0m': + print("Spielfeld wurde schon ausgewählt!\n") + else: + return sel_field + else: + print("Bitte nur Ziffern von 1 - 9 wählen!\n") + except ValueError: + print("Bitte nur Ziffern von 1 - 9 wählen!\n") + + +def change_player(): # Prüfung welcher Spieler dran ist. (Funktion Spielerwechsel) + global player + if player == '\x1b[1;34m' "X" '\x1b[1;0m': + player = '\x1b[1;31m' "0" '\x1b[1;0m' + else: + player = '\x1b[1;34m' "X" '\x1b[1;0m' + + +def check_win(): # Prüfung ob 3 Felder mit X oder O hintereinander (Horizontal, Waagerecht, Diagonal) belegt sind. + if field[1] == field[2] == field[3]: + return field[1] + if field[4] == field[5] == field[6]: + return field[4] + if field[7] == field[8] == field[9]: + return field[7] + if field[1] == field[4] == field[7]: + return field[1] + if field[2] == field[5] == field[8]: + return field[2] + if field[3] == field[6] == field[9]: + return field[3] + if field[1] == field[5] == field[9]: + return field[1] + if field[3] == field[5] == field[7]: + return field[3] + + +def draw_game(): # Diese funktion prüft das Spielfeld auf X oder O also, ob keine Zahlen mehr vorhanden sind. + if field[1] != "1" and field[2] != "2" and field[3] != "3" and field[4] != "4" and field[5] != "5" \ + and field[6] != "6" and field[7] != "7" and field[8] != "8" and field[9] != "9": + return True + + +while run: # Das ist die Gameloop. Die Schleife wurde hier mit run auf True gesetzt, damit das Spiel sauber + # beendet wird. + p_field() + sel_field = play_now() + system('clear') # Hiermit wird das Spielfeld immer wieder an der gleichen Position angezeigt, ohne dies würde + # das Feld bei jedem Zug nach unten rutschen. + field[sel_field] = player + winner = check_win() + change_player() + if winner: + print("Spieler " + winner + " hat gewonnen!") + run = False + else: + if draw_game(): + print("Spiel ist unentschieden...") + run = False + +input("Enter zum beenden...")