2D游戏作业:Tkinter图形绘制——图形版发牌程序

原创
2020/03/21 17:28
阅读数 226

1.游戏介绍

机随机将52张牌(不含大王和小王)发给四位牌手,在屏幕上显示每位牌手的牌。

2.程序设计思路

将要发的52张牌,按梅花0~12,方块13- 25,红桃26- 38,黑桃39- 51的顺序编号并存储在pocker列表c未洗牌之前l,列表元素存储的是某张牌c实际上是牌的编号)。同时,按此编号将扑克牌图片顺序存储在imgs列表中。也就是说,imgs[0]存储梅花A的图片,imgs[1]存储梅花2的图片,imgs[14]存储方块2的图片,依次类推。

发牌后,根据每位牌手(pl,p2,p3,p4)各自牌的编号列表,从imgs获取对应牌的图片,并使用create- image《x坐标,y坐标),image=图像文件)将牌显示在指定位置。

3.Canvas图形绘制技术

Canvas为Tkinter提供了绘图功能,其提供的图形绘制函数可绘制线形、圆形、椭圆、多边形、图片等。 Canvas(画布)是一个长方形的区域,用于图形绘制或复杂的图形界面布局。用户以在画布上绘制图形、文字,放置各种组件和框架。 在Canvas画布上可以绘制各种图形对象,常用绘制函数如下。

create_arc():绘制圆弧。

create_line():绘制直线。

create_bitmap():绘制位图。

create_image():绘制位图图像。

create_oval():绘制椭圆。

create_polyon():绘制多边形

create_window():绘制子窗口。

create_text():创建一个文字对象。 修改图形对象的坐标

使用coords()方法可以修改图形对象的坐标,具体方法如下:

Canvas对象.coords(图形对象, (图形左上角的x坐标,图形左上角的y坐标,图形右下角的x坐标,图形右下角的y坐标))

因为可以同时修改图形对象的左上角的坐标和右下角的坐标,所以可以缩放图形对象。

注意:如果图形对象是图像文件,则只能指定图像中心点坐标,而不能指定图像对象左上角的坐标和右下角的坐标,故不能缩放图像。

移动指定图形对象

使用move()方法可以修改图形对象的坐标,具体方法如下:Canvas对象.move (图形对象, x坐标偏移量, y坐标偏移量)

删除图形对象

使用delete()方法可以删除图形对象,具体方法如下:

Canvas对象.delete (图形对象)

缩放图形对象

使用scale()方法可以缩放图形对象,具体方法如下:

Canvas对象.scale(图形对象, x轴偏移量,y轴偏移量,x轴缩放比例,y轴缩放比例)

4.代码参考

import random
n=52
def gen_pocker(n):
    x=100
    while(x>0):
        x=x-1
        p1=random.randint(0,n-1)
        p2=random.randint(0,n-1)
        t=pocker[p1]
        pocker[p1]=pocker[p2]
        pocker[p2]=t
    return pocker
pocker=[i for i in range(n)]
pocker=gen_pocker(n)
print(pocker)

(player1,player2,player3,player4)=([],[],[],[])
(p1,p2,p3,p4)=([],[],[],[])
root=Tk()

cv=Canvas(root,bg='White',width=700,height=600)
imgs=[]
for i in range(1,5):
    for j in range(1,14):
        imgs.insert((i-1)*13+(j-1),PhotoImage(file='images\\'+str(i)+'-'+str(j)+'.gif'))
for x in range(13):
    m=x*4
    p1.append(pocker[m])
    p2.append(pocker[m+1])
    p3.append(pocker[m+2])
    p4.append(pocker[m+3])
p1.sort()
p2.sort()
p3.sort()
p4.sort()

for x in range(0,13):
    img=imgs[p1[x]]
    player1.append(cv.create_image((200+20*x,80),image=img))
    img=imgs[p2[x]]
    player2.append(cv.create_image((100 ,150+20 * x), image=img))
    img = imgs[p3[x]]
    player3.append(cv.create_image((200 + 20 *x, 500), image=img))
    img = imgs[p4[x]]
    player4.append(cv.create_image((560,150+20 * x), image=img))

print("player1:",player1)
print("player2:",player2)
print("player3:",player3)
print("player4:",player4)
cv.pack()
root.mainloop()

5.游戏结果展示

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部