Python贪吃蛇双人大战-升级版

本文介绍了Python贪吃蛇双人大战的升级版,新增功能包括:豆子不再重复生成,显示得分,蛇碰撞变豆子且不重生,以及燃烧身体加速。详细讲解了实现这些功能的代码逻辑,为读者提供了实现类似游戏的思路。
摘要由CSDN通过智能技术生成

Python贪吃蛇双人大战-升级版

在玩了几天贪吃蛇游戏之后,(代码可参考我之前写的 Python贪吃蛇双人大战),家里小朋友提出了新的需求(用户反馈)如下:

  1. 豆子不能出现在豆子上。
  2. 豆子不能出现在蛇身上。
  3. 要显示得分,方便看出来谁的蛇比较长。
  4. 如果蛇头撞到另一条蛇,自己挂掉,变成豆子
  5. 蛇变成的豆子被吃了之后不重新生成
  6. 燃烧自己身体可以加速,每次燃烧身体减少一格,速度提升至两倍

趁着是周末,赶紧实现一下新需求,以满足小朋友的期望。

豆子不出现在重复的位置

为了实现豆子出现位置不与已有的豆子重复,也不与蛇所在位置重复,修改了豆类的generate函数如下:

    def generate(self, snake1, snake2):
        while self.curNum < self.totalNum:
            x = random.randrange(0,SCREEN_WIDTH/GRID_SIZE)
            y = random.randrange(0,SCREEN_HEIGHT/GRID_SIZE)
            newBeanPos = [int(x*GRID_SIZE),int(y*GRID_SIZE)]
            #检查豆子位置是否重复
            isBeanRepeated = False
            for bean in self.beans: #豆子不能与豆子位置重复
                if bean.pos == newBeanPos:
                    isBeanRepeated = True
                    break
            for pos in snake1.segments: #豆子不能与蛇位置重复
                if pos == newBeanPos:
                    isBeanRepeated = True
                    break
            for pos in snake2.segments: #豆子不能与蛇位置重复
                if pos == newBeanPos:
                    isBeanRepeated = True
                    break      
            #新生成的豆子在不重复的地方
            if not isBeanRepeated:
                self.beans.append(Bean(self.color, newBeanPos))
                self.curNum = self.curNum + 1   

因为要判断蛇位置,所以把蛇作为参数传进去了,增加了两个参数。函数中每次生成豆子的位置之后进行判断,不重复再增加。
当然,因为改了函数接口,所以主循环中调用的地方也要增加相对应的参数,相关代码如下:

    # 初始化豆子
    yellowBeans = Beans(YELLOW, BEAN_NUM)
    yellowBeans.generate(snake1, snake2)
        # 如果豆子被吃掉,则重新生成豆子,否则蛇长度减少一格
        if yellowBeans.beEaten(snake1.headPos):
            yellowBeans.generate(snake1, snake2)
        else:
            snake1.pop()
        if yellowBeans.beEaten(snake2.headPos):
            yellowBeans.generate(snake1, snake2)
        else:
            snake2.pop()

显示得分

显示得分这个功能比较简单,就用蛇增加的长度表示得分即可,而蛇的长度就是蛇类中segments的长度。于是创建一个函数getLen直接返回segments的长度。

    def getLen(self):
        return len(self.segments)

在主循

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值