From 498cff0d8f99f641fe32c5412a468597c4316c73 Mon Sep 17 00:00:00 2001 From: EterIll Date: Mon, 8 Jun 2026 01:42:30 +0000 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E8=87=B3?= =?UTF-8?q?=E3=80=8C/=E3=80=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 main.py diff --git a/main.py b/main.py new file mode 100644 index 0000000..65aa188 --- /dev/null +++ b/main.py @@ -0,0 +1,116 @@ +import os + +def _draw_game(dd): + os.system('cls' if os.name == 'nt' else 'clear') + + d = ['X' if dd[i]==0 else 'O' if dd[i]==9 else i+1 for i in range(9)] + print( +f""" + Tic Tac Toe + + +Player 1 (X) - Player 2 (O) + + | | + {d[0]} | {d[1]} | {d[2]} +_____|_____|_____ + | | + {d[3]} | {d[4]} | {d[5]} +_____|_____|_____ + | | + {d[6]} | {d[7]} | {d[8]} +""") + +def _gen_win_pats(): + wi = [ + [0,1,2],[3,4,5],[6,7,8], + [0,3,6],[1,4,7],[2,5,8], + [0,4,8],[2,4,6] + ] + pats = [] + for cb in wi: + m = 0 + for pos in cb: + m |= (1 << pos) + pats.append(m) + return pats + +_win_pats = _gen_win_pats() + +def _is_winning(data, player_val): + state = 0 + for i in range(9): + if data[i] == player_val: + state |= (1 << i) + + for pat in _win_pats: + if (state & pat) == pat: + return True + return False + +def handleKBI(lmbd): + def runlambda(*args,**kwargs): + try: + return lmbd(*args,**kwargs) + except KeyboardInterrupt: + print("\n\nThanks for playing! Goodbye.") + return runlambda + +@handleKBI +def main(): + while True: + data = [-1] * 9 + cpl = True + + while True: + _draw_game(data) + + if _is_winning(data, 0): + print("RESULT\nPlayer 1 Wins!") + break + + if _is_winning(data, 9): + print("RESULT\nPlayer 2 Wins!") + break + + if sum(1 for x in data if x == -1) <= 1: + for i in range(9): + if data[i] == -1: data[i] = 0 if cpl else 9 + if _is_winning(data, 0): + print("RESULT\nPlayer 1 Wins!") + break + if _is_winning(data, 9): + print("RESULT\nPlayer 2 Wins!") + break + + print("RESULT\nGame Draw!") + break + + op = input(f"Player {1 if cpl else 2}\nEnter a number: ") + + try: + op = int(op) + idx = op - 1 + + if idx < 0 or idx > 8: + print("Invalid input. Please enter 1-9.") + continue + + if data[idx] != -1: + print("Position already taken. Try again.") + continue + + data[idx] = 0 if cpl else 9 + cpl = not cpl + + except ValueError: + print("Invalid input. Please enter a number.") + continue + + play_again = input("\nPlay again? (y/n): ").lower() + if play_again != 'y': + print("\n\nThanks for playing! Goodbye.") + break + +if __name__ == '__main__': + main()