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()