You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
2.1 KiB
64 lines
2.1 KiB
import random
|
|
import tkinter as tk
|
|
from anytree import Node, RenderTree
|
|
|
|
class Game:
|
|
def __init__(self):
|
|
self.root = tk.Tk()
|
|
self.root.title("24点游戏")
|
|
self.root.geometry("400x300")
|
|
self.root.resizable(False, False)
|
|
|
|
self.numbers = [random.randint(1, 9) for _ in range(4)]
|
|
self.expression = tk.StringVar()
|
|
self.expression.set("输入表达式")
|
|
|
|
self.number_labels = []
|
|
for i in range(4):
|
|
label = tk.Label(self.root, text=str(self.numbers[i]), font=("Arial", 24))
|
|
label.place(x=50 + i * 80, y=50)
|
|
self.number_labels.append(label)
|
|
|
|
input_entry = tk.Entry(self.root, textvariable=self.expression, font=("Arial", 24))
|
|
input_entry.place(x=50, y=150)
|
|
|
|
calculate_button = tk.Button(self.root, text="计算", font=("Arial", 24), command=self.calculate)
|
|
calculate_button.place(x=250, y=150)
|
|
|
|
self.result_label = tk.Label(self.root, text="", font=("Arial", 24))
|
|
self.result_label.place(x=50, y=200)
|
|
|
|
def calculate(self):
|
|
try:
|
|
root_node = Node("root")
|
|
expression = self.expression.get()
|
|
for char in expression:
|
|
if char.isdigit():
|
|
node = Node(char, parent=root_node)
|
|
elif char == "+":
|
|
node = Node(char, parent=root_node)
|
|
elif char == "-":
|
|
node = Node(char, parent=root_node)
|
|
elif char == "*":
|
|
node = Node(char, parent=root_node)
|
|
elif char == "/":
|
|
node = Node(char, parent=root_node)
|
|
else:
|
|
raise Exception("Invalid character")
|
|
|
|
result = eval(expression)
|
|
if result == 24:
|
|
self.result_label.config(text="正确")
|
|
else:
|
|
self.result_label.config(text="错误")
|
|
|
|
for pre, fill, node in RenderTree(root_node):
|
|
print("%s%s" % (pre, node.name))
|
|
|
|
except Exception as e:
|
|
print(e)
|
|
self.result_label.config(text="错误")
|
|
|
|
game = Game()
|
|
game.root.mainloop()
|