python游戏设计案例实战_Python游戏设计案例实战第5章 Tkinter图形界面设计——图形版发牌程序(20页)-原创力文档...

第5章 Tkinter 图形绘制——图形版发牌程序 主讲 夏敏捷 计算机学院副教授 5.1 扑克牌发牌窗体程序功能介绍 4名牌手打牌,计算机随机将52张牌(不含大王和小王)发给4名牌手,在屏幕上显示每位牌手的牌,程序的运行效果如图所示。接下来,我们以Tkinter模块图形Canvas绘制为例学习建立一些简单的GUI(图形用户界面)游戏界面。 5.2 程序设计的思路 将要发的52张牌,按梅花0…12,方块13…25,红桃26…38,黑桃39…51顺序编号并存储在pocker列表(未洗牌之前),列表元素存储的是某张牌(实际上是牌的编号)。同时按此编号顺序存储扑克牌图片imgs列表中。也就是说imgs[0]存储梅花A的图片,imgs[1]存储梅花2的图片,则imgs[14]存储方块2的图片。 发牌后,根据每位牌手(p1,p2,p3,p4)各自牌的编号列表,从imgs获取对应牌的图片并使用create_image((x坐标,y坐标), image =图像文件)显示在指定位置。 5.3 Canvas图形绘制技术 5.3.1 Canvas画布组件 Canvas (画布)是一个长方形的区域,用于图形绘制或复杂的图形界面布局。可以在画布上绘制图形、文字,放置各种组件和框架。 5.3 图形绘制 5.3.2 Canvas上的图形对象 Canvas画布上可以绘制各种图形对象。通过调用如下绘制函数实现。 create_arc( )绘制圆弧。 create_line( ) 绘制直线。 create_bitmap( )绘制位图。 create_image( )绘制位图图像。 create_oval( ) 绘制椭圆。 create_polygon( ) 绘制多边形。 create_window( ) 绘制子窗口。 create_text( )创建一个文字对象 图形对象id、标记(tag) id1=cv. create_line(10,10,100,80,width=2, dash=7) #绘制直线 id1可以得到绘制对象直线id。 使用属性tags设置图形对象的标记(tag) rt = cv.create_rectangle(10,10,110,110, tags = 'r1') 上面的语句指定矩形对象rt具有一个标记r1。 rt = cv.create_rectangle(10,10,110,110, tags = ('r1','r2','r3')) 上面的语句指定矩形对象rt具有3个标记r1,r2,r3。 使用find_withtag('r1')方法可以获取到指定tag的图形对象。 【例5-1】使用属性tags设置图形对象标记的例子。 from tkinter import * root = Tk() # 创建一个Canvas,设置其背景色为白色 cv = Canvas(root, bg = 'white', width = 200, height = 200) # 使用tags指定给第一个矩形指定3个tag rt = cv.create_rectangle(10,10,110,110, tags = ('r1','r2','r3')) cv.pack() cv.create_rectangle(20,20,80,80, tags = 'r3') #使用tags指定给第2个矩形指定1个tag # 将所有与tag('r3')绑定的item边框颜色设置为蓝色 for item in cv.find_withtag('r3'): cv.itemconfig(item,outline = 'blue') root.mainloop() 2.绘制圆弧 Canvas对象. create_arc(弧外框矩形左上角的x坐标, 弧外框矩形左上角的y坐标, 弧外框矩形右下角的x坐标, 弧外框矩形右下角的y坐标, 选项, ...) 【例5-2】使用create_ arc ()方法创建圆弧的例子。 3.绘制线条 canvas.create_line(x0, y0, x1, y1, ..., xn, yn, 选项) 参数x0, y0, x1, y1, ..., xn, yn是线段的端点。 【例5-3】使用create_line()方法创建线条对象的例子。 from tkinter import * root = Tk() cv = Canvas(root, bg = 'white', width = 200, height = 100) cv.create_line(10, 10, 100, 10, arrow='none')#绘制没有箭头线段 cv.create_line(10, 20, 100, 20, arrow

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您的问题是如何用Python实现一个交互式界面的扑克牌发牌程序。下面是一个简单的实现示例,您可以参考一下: ```python import random import tkinter as tk # 创建扑克牌的列表 suits = ['♠', '♥', '♦', '♣'] ranks = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'] deck = [rank + suit for suit in suits for rank in ranks] # 创建交互式界面 root = tk.Tk() root.title('扑克牌发牌程序') canvas = tk.Canvas(root, width=800, height=600) canvas.pack() # 创建玩家和底牌的标签 player_label = tk.Label(root, text='玩家:') player_label.place(x=50, y=50) deck_label = tk.Label(root, text='底牌:') deck_label.place(x=50, y=100) # 创建发牌按钮,点击后随机发一张牌给玩家或底牌 def deal_card(): card = random.choice(deck) deck.remove(card) if len(player_cards) < 5: player_cards.append(card) player_card_label.config(text=' '.join(player_cards)) else: deck_cards.append(card) deck_card_label.config(text=' '.join(deck_cards)) deal_button = tk.Button(root, text='发一张牌', command=deal_card) deal_button.place(x=50, y=150) # 创建玩家和底牌的显示标签 player_card_label = tk.Label(root, text='', font=('Arial', 20)) player_card_label.place(x=150, y=50) deck_card_label = tk.Label(root, text='', font=('Arial', 20)) deck_card_label.place(x=150, y=100) # 初始化玩家和底牌的牌组 player_cards = [] deck_cards = [] root.mainloop() ``` 这个程序使用了Tkinter库创建了一个交互式界面,包括一个发牌按钮和两个标签用于显示玩家和底牌的牌组。点击发牌按钮后,程序会随机从扑克牌列表中选取一张牌,并将其从列表中删除。如果玩家的牌组还没有满5张,则将这张牌加入玩家的牌组中,并更新玩家牌组的显示标签;否则,将这张牌加入底牌的牌组中,并更新底牌牌组的显示标签。 您可以根据自己的需求进行修改和扩展,比如增加计分功能、添加更多的按钮和标签等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值