From fd2063095cc8adc4af978be34101c5a732199a06 Mon Sep 17 00:00:00 2001 From: sairate Date: Sun, 6 Jul 2025 12:05:09 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E6=B7=BB=E5=8A=A0=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E5=9F=BA=E7=A1=80=E7=BB=93=E6=9E=84=E5=92=8C=E7=A4=BA=E4=BE=8B?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 创建 .idea 目录和相关配置文件,设置项目结构 - 添加多个课堂成果示例代码,涵盖不同主题和功能 - 创建和配置 .gitignore 文件,忽略特定文件和目录 --- .idea/material_theme_project_new.xml | 4 +- .idea/misc.xml | 3 + test.py | 29 ++++++ 第42讲抽奖系统/课堂成果/基础抽奖.py | 29 ++++++ 第42讲抽奖系统/课堂成果/抽奖系统.py | 141 +++++++++++++++++++++++++++ 5 files changed, 205 insertions(+), 1 deletion(-) create mode 100644 test.py create mode 100644 第42讲抽奖系统/课堂成果/基础抽奖.py create mode 100644 第42讲抽奖系统/课堂成果/抽奖系统.py diff --git a/.idea/material_theme_project_new.xml b/.idea/material_theme_project_new.xml index 312455a..ef4c87e 100644 --- a/.idea/material_theme_project_new.xml +++ b/.idea/material_theme_project_new.xml @@ -3,7 +3,9 @@ diff --git a/.idea/misc.xml b/.idea/misc.xml index 23231ce..1d3ce46 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,7 @@ + + \ No newline at end of file diff --git a/test.py b/test.py new file mode 100644 index 0000000..ca9f769 --- /dev/null +++ b/test.py @@ -0,0 +1,29 @@ +import random +import os +import time +jiang=["特等奖","一等奖","二等奖","三等奖","安慰奖"] +dictionary = {"1 2":"特等奖","3 10":"一等奖","11 20":"二等奖","21 40":"三等奖","41 100":"安慰奖"} +print("欢迎来到抽奖系统") +while 1: + if input("是否抽奖(y/n)")=='y': + num=random.randint(1,100) + + sleep_time=0.1 + index = 0 + for i in range(10): + os.system('cls') + print(f"正在抽奖{jiang[index]}") + index = (index+1) % len(jiang) + time.sleep(sleep_time) + sleep_time += 0.05 + os.system('cls') + + for key,value in dictionary.items(): + fan=key.split(" ") + if num in [i for i in range(int(fan[0]),int(fan[1])+1)]: + print(f"恭喜您中奖了{value}") + else: + print("欢迎下次再来") + break + +os.system('pause') \ No newline at end of file diff --git a/第42讲抽奖系统/课堂成果/基础抽奖.py b/第42讲抽奖系统/课堂成果/基础抽奖.py new file mode 100644 index 0000000..ca9f769 --- /dev/null +++ b/第42讲抽奖系统/课堂成果/基础抽奖.py @@ -0,0 +1,29 @@ +import random +import os +import time +jiang=["特等奖","一等奖","二等奖","三等奖","安慰奖"] +dictionary = {"1 2":"特等奖","3 10":"一等奖","11 20":"二等奖","21 40":"三等奖","41 100":"安慰奖"} +print("欢迎来到抽奖系统") +while 1: + if input("是否抽奖(y/n)")=='y': + num=random.randint(1,100) + + sleep_time=0.1 + index = 0 + for i in range(10): + os.system('cls') + print(f"正在抽奖{jiang[index]}") + index = (index+1) % len(jiang) + time.sleep(sleep_time) + sleep_time += 0.05 + os.system('cls') + + for key,value in dictionary.items(): + fan=key.split(" ") + if num in [i for i in range(int(fan[0]),int(fan[1])+1)]: + print(f"恭喜您中奖了{value}") + else: + print("欢迎下次再来") + break + +os.system('pause') \ No newline at end of file diff --git a/第42讲抽奖系统/课堂成果/抽奖系统.py b/第42讲抽奖系统/课堂成果/抽奖系统.py new file mode 100644 index 0000000..5e59400 --- /dev/null +++ b/第42讲抽奖系统/课堂成果/抽奖系统.py @@ -0,0 +1,141 @@ +import tkinter as tk +import random + +# 奖项 +prize_list = [ + ("好好听奖", 2), + ("特等奖", 8), + ("一等奖", 10), + ("二等奖", 15), + ("三等奖", 25), + ("安慰奖", 40) +] +prizes = [p[0] for p in prize_list] +weights = [p[1] for p in prize_list] + +ITEM_HEIGHT = 40 +VISIBLE_ROWS = 5 + +class SlotColumn: + def __init__(self, master, width=120, font=("微软雅黑", 16)): + self.canvas = tk.Canvas(master, width=width, height=ITEM_HEIGHT * VISIBLE_ROWS, bg="#fff", highlightthickness=1, highlightbackground="#ccc") + self.canvas.pack(side=tk.LEFT, padx=10) + self.font = font + self.width = width + self.center_y = (ITEM_HEIGHT * VISIBLE_ROWS) // 2 + self.items = [random.choice(prizes) for _ in range(50)] + self.draw_items() + + # 添加中奖框 + self.canvas.create_rectangle( + 2, self.center_y - ITEM_HEIGHT // 2, self.width - 2, self.center_y + ITEM_HEIGHT // 2, + outline="#ff6600", width=3, dash=(5, 3) + ) + + def draw_items(self): + self.canvas.delete("item") + for i, text in enumerate(self.items): + y = i * ITEM_HEIGHT + self.canvas.create_text(self.width // 2, y, text=text, font=self.font, fill="#d43f3a", tags="item") + + def shift(self): + self.items.pop(0) + self.items.append(random.choice(prizes)) + self.draw_items() + + def stop_on_result(self, result_text): + """强制将中奖项显示在中间,并停止滚动""" + center_index = VISIBLE_ROWS // 2 + 1 + self.items = [random.choice(prizes) for _ in range(center_index)] + [result_text] + [random.choice(prizes) for _ in range(20)] + self.draw_items() + + def get_result(self): + return self.items[VISIBLE_ROWS // 2 + 1] + + +class SlotMachineApp: + def __init__(self, root): + self.root = root + self.root.title("🎰 老虎机真实滚动") + self.root.geometry("500x580") + self.root.configure(bg="#ffffff") + + self.title = tk.Label(root, text="🎰 老虎机幸运抽奖 🎰", font=("微软雅黑", 20), bg="#ffffff", fg="#222") + self.title.pack(pady=10) + + self.slot_frame = tk.Frame(root, bg="#ffffff") + self.slot_frame.pack(pady=10) + + self.columns = [SlotColumn(self.slot_frame) for _ in range(3)] + + self.spin_button = tk.Button(root, text="🎯 开始抽奖", font=("微软雅黑", 16), bg="#28a745", fg="white", command=self.start_spin) + self.spin_button.pack(pady=20) + + self.result_label = tk.Label(root, text="", font=("微软雅黑", 16), fg="#d9534f", bg="#ffffff") + self.result_label.pack(pady=10) + + self.history = tk.Text(root, height=6, width=55, font=("微软雅黑", 10), state="disabled", bg="#f8f8f8") + self.history.pack(padx=20, pady=10) + + self.running = False + + def start_spin(self): + if self.running: + return + + self.running = True + self.result_label.config(text="") + self.spin_button.config(state="disabled") + + self.final_result = random.choices(prizes, weights=weights, k=1)[0] + + self.delay_curves = [ + self.generate_delay_curve(100), + self.generate_delay_curve(130), + self.generate_delay_curve(160) + ] + + self.start_column(0) + self.root.after(300, lambda: self.start_column(1)) + self.root.after(600, lambda: self.start_column(2)) + + def generate_delay_curve(self, steps): + delays = [] + delay = 5 + for i in range(steps): + delays.append(delay) + if delay < 30: + delay += 1 + elif delay < 80: + delay += 2 + else: + delay += 5 + return delays + + def start_column(self, index): + def spin(): + if self.delay_curves[index]: + self.columns[index].shift() + delay = self.delay_curves[index].pop(0) + self.root.after(delay, spin) + else: + # 停止后对齐中奖项(只中间列) + if index == 1: + self.columns[1].stop_on_result(self.final_result) + self.show_result() + spin() + + def show_result(self): + self.result_label.config(text=f"🎉 恭喜你抽中:{self.final_result} 🎉") + self.history.config(state="normal") + self.history.insert("end", f"🎯 抽中:{self.final_result}\n") + self.history.see("end") + self.history.config(state="disabled") + self.spin_button.config(state="normal") + self.running = False + + +if __name__ == "__main__": + root = tk.Tk() + app = SlotMachineApp(root) + root.mainloop()