Python实现小时候玩“24”的游戏
2026/7/11 4:28:09 网站建设 项目流程

@WangY_ZQ

Python实现小时候玩“24”的游戏

游戏界面规格:

  • 窗口尺寸:800 × 500
  • 游戏区域:800 × 450(显示扑克牌)
  • 按钮区域:800 × 50(位于最下方)

游戏功能:

  • 🎴 4种花色 :方片(♦)、黑桃(♠)、梅花(♣)、红桃(♥),数字1-10共40张牌
  • 🎲 随机发牌 :每次从40张牌中随机抽取4张
  • 🎨 图形化展示 :Canvas绘制精美的扑克牌,包含花色符号、数字和边框
  • 💡 答案按钮 :点击后显示一个正确解法,若无解则提示"当前牌面无解"
  • 🔄 新游戏 :重新发牌
  • 🚪 退出 :关闭游戏

界面优化:

  • 背景色:护眼绿色 #c8e6c9
  • 答案标签:深绿色文字,与背景形成良好对比度
  • 按钮布局:三个按钮均匀分布在底部区域
importtkinterastkfromtkinterimportttkimportrandom SUITS={'方片':'\u2666','黑桃':'\u2660','梅花':'\u2663','红桃':'\u2665'}SUIT_COLORS={'方片':'red','黑桃':'black','梅花':'black','红桃':'red'}RANKS=list(range(1,11))BG_COLOR='#81c784'classCard:def__init__(self,suit,rank):self.suit=suit self.rank=rankdef__repr__(self):returnf"{SUITS[self.suit]}{self.rank}"defgenerate_deck():deck=[]forsuitinSUITS:forrankinRANKS:deck.append(Card(suit,rank))returndeckdefsolve_24(numbers):iflen(numbers)==1:ifabs(numbers[0][0]-24)<1e-6:returnnumbers[0][1]returnNoneforiinrange(len(numbers)):forjinrange(len(numbers)):ifi==j:continuen1,expr1=numbers[i]n2,expr2=numbers[j]remaining=[numbers[k]forkinrange(len(numbers))ifk!=iandk!=j]result=solve_24([(n1+n2,f"({expr1}+{expr2})")]+remaining)ifresult:returnresult result=solve_24([(n1-n2,f"({expr1}-{expr2})")]+remaining)ifresult:returnresult result=solve_24([(n1*n2,f"({expr1}*{expr2})")]+remaining)ifresult:returnresultifn2!=0:result=solve_24([(n1/n2,f"({expr1}/{expr2})")]+remaining)ifresult:returnresultreturnNoneclassGame24App:def__init__(self,root):self.root=root self.root.title("乐算24")self.root.geometry("800x500")self.root.resizable(False,False)self.deck=generate_deck()self.current_cards=[]self.solution=Noneself.game_frame=ttk.Frame(root,width=800,height=450)self.game_frame.pack(fill='both',expand=True)self.game_frame.pack_propagate(False)self.canvas=tk.Canvas(self.game_frame,width=800,height=450,bg=BG_COLOR)self.canvas.pack(fill='both',expand=True)self.btn_frame=ttk.Frame(root,width=800,height=50)self.btn_frame.pack(fill='x')self.btn_frame.pack_propagate(False)self.answer_var=tk.StringVar()self.answer_label=ttk.Label(self.game_frame,textvariable=self.answer_var,font=('Arial',14),foreground='red',background=BG_COLOR)self.answer_label.place(x=400,y=420,anchor='center')self.btn_new=ttk.Button(self.btn_frame,text="新游戏",command=self.new_game,width=15)self.btn_new.pack(side='left',padx=85,pady=10)self.btn_answer=ttk.Button(self.btn_frame,text="答案",command=self.show_answer,width=15)self.btn_answer.pack(side='left',padx=85,pady=10)self.btn_exit=ttk.Button(self.btn_frame,text="退出",command=root.quit,width=15)self.btn_exit.pack(side='left',padx=85,pady=10)self.new_game()defdraw_card(self,x,y,card):card_width=120card_height=170self.canvas.create_rectangle(x,y,x+card_width,y+card_height,fill='white',outline='black',width=2)self.canvas.create_rectangle(x+5,y+5,x+card_width-5,y+card_height-5,fill='white',outline='gray',width=1)suit_symbol=SUITS[card.suit]color=SUIT_COLORS[card.suit]self.canvas.create_text(x+20,y+30,text=str(card.rank),font=('Arial',24,'bold'),fill=color)self.canvas.create_text(x+20,y+60,text=suit_symbol,font=('Arial',32),fill=color)self.canvas.create_text(x+card_width-20,y+card_height-30,text=str(card.rank),font=('Arial',24,'bold'),fill=color,angle=180)self.canvas.create_text(x+card_width-20,y+card_height-60,text=suit_symbol,font=('Arial',32),fill=color,angle=180)center_x=x+card_width//2center_y=y+card_height//2self.canvas.create_text(center_x,center_y-10,text=suit_symbol,font=('Arial',56),fill=color)defnew_game(self):self.canvas.delete('all')self.canvas.create_rectangle(0,0,800,450,fill=BG_COLOR)self.current_cards=random.sample(self.deck,4)card_numbers=[card.rankforcardinself.current_cards]self.solution=solve_24([(n,str(n))fornincard_numbers])card_positions=[(100,140),(290,140),(470,140),(650,140)]fori,cardinenumerate(self.current_cards):self.draw_card(card_positions[i][0],card_positions[i][1],card)self.answer_var.set("")defshow_answer(self):ifself.solution:self.answer_var.set(f"答案:{self.solution}= 24")else:self.answer_var.set("当前牌面无解!")if__name__=="__main__":root=tk.Tk()app=Game24App(root)root.mainloop()


需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询