Python贪吃蛇双人大战-魔法豆登场

在Python贪吃蛇双人大战的基础上,增加了魔法豆功能,当蛇吃到魔法豆,长度一次性增加5格。魔法豆吃完后会自动重新生成,确保屏幕上最多存在2个。实现包括新增魔法豆类、防止重复位置、实现多格增长和绘制刷新等改动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python贪吃蛇双人大战-魔法豆登场

时隔两月之后,家里的小朋友再次对我之前改写的贪吃蛇游戏(过程可参考我之前写的 Python贪吃蛇双人大战Python贪吃蛇双人大战-升级版,代码可以到此处下载)提出了新的需求(用户永远会有新需求)。还好,这回需求不多,就一个:要求增加魔法豆,要是蛇吃到了魔法豆,蛇身可以一次增加5格;魔法豆被吃后自动重新生成,且在屏幕上只出现2个魔法豆。

为了满足小朋友的愿望,老父亲只好又拿起了两个月没看的代码(已经忘的差不多了)。分析了一下需求,并不复杂,很明显需要增加一个魔法豆的类,然后在交互的地方修改一下就行了。

新增全局量

新增了几个全局常量如下,方便以后的修改。凭着多年编程的直觉,在命名的时候用了MAGIC1,预测以后大概率还会有MAGIC2,MAGIC3等等。当然,用1,2,3其实很不好,无法从名字看出意义,不过暂时也没有想到合适的名字,以后要是多了再根据特征来区分命名吧。(关于命名,可以参考变量名的力量)

MAGIC1_BEAN_NUM = 2
MAGIC1_BEAN_ADD_LEN = 5
MAGIC1_BEAN_COLOR = BLUE

新增魔法豆类

魔法豆与普通的豆子差别不多,所以此类从NormalBeans修改而来,几乎没啥区别。关于一次增加多格的过程会在主循环里去实现,因为在实现的过程中这个多格不是一次增加的,那样方向未知,有可能引起碰撞什么的,不好处理。于是增加多格会分多步实现,每一步还是只增加一格。效果如下动图(看那条绿色的蛇):
魔法豆
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9MvsLGem-1592815344256)(./pic/snake_magic1_bean.gif)]

魔法豆类的代码如下:

class Magic1Beans: #魔法豆:吃了一次蛇身增加MAGIC1_BEAN_ADD_LEN格
    def __init__(self, color, totalNum):
        self.color = color
        self.totalNum = totalNum
        self.curNum = 0
        self.beans = []
    def generate(self, normalBeanss, snakeBeanss, snakes, magicBeanss):
        while self.curNum < self.totalNum:
            x = random.randrange(0,SCREEN_WIDTH/GRID_SIZE)
            y = random.randrange(1,SCREEN_HEIGHT/GRID_SIZE)
            newBeanPos = [int(x*GRID_SIZE),int(y*GRID_SIZE)]
            #检查豆子位置是否重复
            if isEmptyInArea([newBeanPos], normalBeanss, snakeBeanss, snakes, magicBeanss):
                #新生成的豆子在不重复的地方
                self.beans.append(Bean(self.color, newBeanPos))
                self.curNum = self.curNum + 1
    def beEaten(self, snakePos):
        for bean in self.beans:
            if bean.beEaten(snakePos):
                self.beans.remove(bean)
                self.curNum 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值