前言
先说一下本期的目标。
首先我们在判断出输赢、平局的时候,只有一个控制台输出,很明显不符合我们游戏的排面(doge
另外,之前的逻辑有一个漏洞,就是玩家一定是先手(就是第一个下棋的人,这个也需要修改)。
还有,有一个短暂的弹窗显示到谁了,游戏的可玩性就会有提高。
最后一个就是,如果点击位置有问题,我们需要显示。
渲染问题
翻车了,之前的逻辑是将九宫格和背景颜色写死,而且之前都是直接在之前的基础上渲染,但是我们的弹窗需要在结束后及时撤下来,所以需要我们不断的重新渲染界面。
得,改吧。
首先,我们就不需要使用draw.rect方法创建矩形了,而是使用另外一个pygame.Rect函数。
同时,为了省去九行基本相同的代码,我创建了一个元组来存储。
格子创建最新版:
# 表示九个格子
rect = [0]*9
rect_wh = [
(1,1), (single+3,1), (single*2+5,1),
(1,single+3), (single+3,single+3), (single*2+5,single+3),
(1,single*2+5), (single+3,single*2+5), (single*2+5,single*2+5)
]
for i in range(len(rect)):
rect[i] = pygame.Rect(*rect_wh[i],single,single)
rect[i] = Lattice(rect[i],screen)
Rect函数:
传入x、y坐标以及高度宽度,就能创建一个rect对象。
这里需要解释的是*rect_wh[i],后面的部分就是在元组列表中找到一个指定的元素,而星号的作用是将元组进行解封装。
封装和解封装
a, b = 1, 2
首先,我们将后面的两个变量封装成一个元组,从而赋值给等号前面的部分;
而前面为两个变量,所以我们还需要进行解封装,也就是将一个元组拆分成一个个的变量。
当时记录的笔记:
回到之前的格子问题,还有一个细节就是我们应该怎么显示格子周围的分割线,之前采用的是绘制矩形时自带的,现在因为刷新的问题,不能再使用了(不然每刷新一次创建9个矩形并绘制,这谁顶得住)。
我的办法是:减小了single的大小:
single = width/3 - 1
应该会注意到的,元组列表中我修改了(x,y)的值,这样我们就能绘制出这样的一个图形:
(原创不易,整这个眼睛都快要瞎了,还是没有很完美 -_-||)
bg