二维游戏作业:Tkinter 图形绘制 - 许可程序的图形版本
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.游戏结果展示
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()