pygame实现井字棋——3.逻辑优化

该博客主要讲述了在pygame中优化井字棋游戏的逻辑和界面,包括使用pygame.Rect函数改进格子渲染,实现弹窗显示输赢、平局信息,并优化update方法以处理弹窗和延时。此外,还解决了先手问题,通过随机数决定先手。博客提供了详细的代码实现和逻辑解释。
摘要由CSDN通过智能技术生成

前言

先说一下本期的目标。
首先我们在判断出输赢、平局的时候,只有一个控制台输出,很明显不符合我们游戏的排面(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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值