Python的pygame实现贪吃蛇

本文介绍了使用Python的pygame库制作贪吃蛇游戏的过程。作者参考了其他文章,采用面向对象的方式实现,特色在于实现了蛇可以穿墙的功能。虽然代码仍有优化空间,如将蛇和苹果的绘制封装到各自类中,但作为一个练习作品,欢迎提出改进建议。
摘要由CSDN通过智能技术生成

        刚结束期末考试,闲来无事,便尝试着做个贪吃蛇玩玩。

        起初尚是不明所以,但在看了另一个老哥的文章用python写一个简单的贪吃蛇游戏(附代码)之后,豁然开朗。

        我的代码大体采用了这位老哥的框架,但采取了与之不同的面向对象的实现方式。并且我的代码实现了贪吃蛇穿墙移动(从一头进,在另一头出)的操作。

        但是写完之后实际看看还是有比较大的上升空间的,例如可以把蛇和苹果的绘制放到”蛇“类和”苹果“类当中去。只是练习作,如果有更好的意见欢迎畅所欲言。

代码实现

“蛇”类:用于实现蛇对象(本质为队列)

class Snake:
    def __init__(self) -> None:
        self._sn = deque()
        self._sn.append([2, 2])
        self._sn.append([1, 2])
        self._sn.append([0, 2])
        self.directionX = 1
        self.directionY = 0
    def pushBack(self, nextStep : list) -> None:
        self._sn.appendleft(nextStep)
    def pop(self) -> None:
        self._sn.pop()
    def __len__(self) -> int:
        return len(self._sn)
    def getSn(self) -> deque:
        return self._sn

”苹果“类: 用于实现苹果对象

class Apple:
    def __init__(self, snake : Snake):
        self._x = random.randint(0, screenWidth // 20 - 1)
        self._y = random.randint(2, screenHeight // 20 - 1)
        while [self._x, self._y] in snake.getSn():
            self._x = random.randint(0, screenWidth // 20 - 1)
            self._y = random.randint(2, screenHeight // 20 - 1)
    def getX(self) -> int:
        return self._x
    def getY(self) -> int:
        return self._y

”计数“类:用于计量游戏数值(得分,速度)

class ScoreAndSpeed:
    def __init__(self):
        self._score = 0
        self._oriSpeed = 0.5
        self._speed = self._oriSpeed
    def getScore(self) -> int:
        return self._score
    def setScore(self, score : int):
        self._score = score
    def getOriSpeed(self) -> float:
        return self._oriSpeed
    def getSpeed(self) -> float:
        return self._speed
    def setSpeed(self, speed : float):
        self._speed = speed

”游戏“类:用于实现游戏画面和相关功能

class Game:
    def __init__(self):
        pygame.init()
        self.myWindow = pygame.display.set_mode((screenWidth, screenHeight), 0, 32)
        pygame.display.set_caption("Snake")
        self.myWindow.fill((0, 0, 0))
        pygame.display.update()
        self.font_score = pygame.font.SysFont('SimHei', 24)
        self.font_Length = pygame.font.SysFont('SimHei', 24)
        self.font_GameOver = pygame.font.SysFont(None, 72)
        self.font_Beginning = pygame.font.SysFont(None, 48)
        self.color_GameOver = (255, 255, 255)
        # self.directionX = 1
        # self.directionY = 0
        self.directionLimit = True
        self.isGameOver = True
        self.isStart = False
        # self.score = 0
        # self.oriSpeed = 0.5
        self.lastMove = time.time()
        self.isPause = False
        self.snake = Snake()
        self.apple = Apple(self.snake)
        self.scoreAndSpeed = ScoreAndSpeed()
        self.speed = self.scoreAndSpeed.getOriSpeed()
    def fontPrinter(self, font, x, y, text, fcolor = (255, 255, 255)):
        Textimg = font.render(text, True, fcolor)
        self.myWindow.blit(Textimg, (x, y))
    def runing(self):
        while True:
            for event in pygame.event.get():
                if event.type == QUIT:
                    pygame.quit()
        
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值