千家信息网

python pygame实现的兔子吃月饼小游戏代码分享

发表于:2025-02-06 作者:千家信息网编辑
千家信息网最后更新 2025年02月06日,本篇内容介绍了"python pygame实现的兔子吃月饼小游戏代码分享"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅
千家信息网最后更新 2025年02月06日python pygame实现的兔子吃月饼小游戏代码分享

本篇内容介绍了"python pygame实现的兔子吃月饼小游戏代码分享"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

目录
  • 小游戏规则简介

  • 实现

    • 初始化游戏窗口

    • 游戏逻辑

      • 实现玩家类

      • 实现月饼类

      • 交互逻辑


中秋佳节就快来临,给各位大佬整个兔子吃月饼的小游戏助助兴,废话不多说,开整。

小游戏规则简介

玩家通过"wsad"或者"↑↓←→"键控制兔子移动,使得兔子可以吃到更多的月饼,月饼一旦生成之后位置不会变,也不会消失,就等着兔子去吃,就是这么简单。但是吃了月饼会变重,重到一定程度会有想不到的效果。

实现

使用Python的pygame模块开发,pygame是用来开发游戏软件的Python第三方库,基于SDL库的基础上开发。可以创建功能丰富的游戏和多媒体程序,用它来开发小游戏非常适合。

初始化游戏窗口

import sysimport pygamewidth = 800height = 800#  初始化所有pygame模块pygame.init()# 创建游戏主窗口 width * heightwindows = pygame.display.set_mode((width, height))pygame.display.set_caption('兔子吃月饼!!')# 游戏循环while True:    # 给屏幕填充颜色    windows.fill((204, 204, 255))    for event in pygame.event.get():        # 判断事件是否是退出事件,是则退出        if event.type == pygame.QUIT:            # 先退出pygame窗口,再退出程序            pygame.quit()            sys.exit()    pygame.display.flip()

游戏逻辑

实现玩家类

玩家应该包括以下属性:位置、角色大小、分数等,还应该有移动位置move的方法,由于在此玩家控制的是一只兔子,玩法是吃月饼,所以把分数换为重量。

class Rabbit:    """    玩家兔子类    """    def __init__(self, top, left, height, width):        # 初始位置及大小        self.top = top        self.left = left        self.height = height        self.width = width        # 游戏人物的初始位置        self.rect = pygame.Rect(self.left, self.top, self.width, self.height)        self.player_image = pygame.image.load('兔子.png')        self.player_stretched_image = pygame.transform.scale(self.player_image, (height, width))        # 控制移动变量        self.move_left = False        self.move_right = False        self.move_up = False        self.move_down = False        # 每次移动的大小        self.MOVESPEED = 5        # 重量        self.weight = 5    def move(self):        """        控制移动        :return:        """        if self.move_down and self.rect.bottom < height:            self.rect.top += self.MOVESPEED            self.rect.bottom += self.MOVESPEED        if self.move_up and self.rect.top > 0:            self.rect.top -= self.MOVESPEED            self.rect.bottom -= self.MOVESPEED        if self.move_left and self.rect.left > 0:            self.rect.left -= self.MOVESPEED            self.rect.right -= self.MOVESPEED        if self.move_right and self.rect.right < width:            self.rect.left += self.MOVESPEED            self.rect.right += self.MOVESPEED
实现月饼类

月饼包括月饼的位置大小,及月饼的图像,月饼的图像在已有的图像中随机选择。

class MoonCake:    """    月饼类    """    def __init__(self):        # 位置及大小        self.rect = pygame.Rect(random.randint(0, 750), random.randint(0, 750), 20, 20)        # 图像        self.moon_cake_image = pygame.image.load("./月饼/月饼{}.png".format(random.randint(1, 8)))
交互逻辑

主要在游戏窗口内生成并显示玩家兔子和月饼,然后监听键盘事件,监听"wsad"或者"↑↓←→"键,来控制兔子上下左右的进行移动,再实现碰撞检测来验证兔子是否吃到月饼,吃到月饼则重量增加。运行过程中也会不断判断月饼的数量,并不断增加。

def game_run():    global width    global height    # 是否结束    end = False    # 创建时钟对象 (可以控制游戏循环频率)    clock = pygame.time.Clock()    # 月饼计数器    moon_cake_limit = 20    player = None    if not player:        player = Rabbit(300, 100, 64, 64)    moon_cakes = []    for i in range(20):        moon_cake = MoonCake()        moon_cakes.append(moon_cake)    # 游戏循环    while True and not end:        # 给屏幕填充颜色        windows.fill((204, 204, 255))        # 监听键盘事件        key_pressed = pygame.key.get_pressed()        if key_pressed[pygame.K_a] or key_pressed[pygame.K_LEFT]:            player.move_right = False            player.move_left = True        if key_pressed[pygame.K_d] or key_pressed[pygame.K_RIGHT]:            player.move_left = False            player.move_right = True        if key_pressed[pygame.K_w] or key_pressed[pygame.K_UP]:            player.move_down = False            player.move_up = True        if key_pressed[pygame.K_s] or key_pressed[pygame.K_DOWN]:            player.move_up = False            player.move_down = True        player.move()        for event in pygame.event.get():            if event.type == QUIT:                pygame.quit()                sys.exit()            if event.type == KEYUP:                if event.key == K_ESCAPE:                    pygame.quit()                    sys.exit()                if event.key == K_LEFT or event.key == K_a:                    player.move_left = False                if event.key == K_RIGHT or event.key == K_d:                    player.move_right = False                if event.key == K_UP or event.key == K_w:                    player.move_up = False                if event.key == K_DOWN or event.key == K_s:                    player.move_down = False        # 月饼不足20时生成新的月饼        if len(moon_cakes) < moon_cake_limit:            # 生成新的月饼            moon_cakes.append(MoonCake())        # 画兔子        windows.blit(player.player_stretched_image, player.rect)        # 显示兔子的重量        text = pygame.font.SysFont("microsoftyaheimicrosoftyaheiui", 30)        text_fmt = text.render("重量:{}斤!".format(player.weight), True, (255, 255, 255))        windows.blit(text_fmt, (0, 0))        # 画月饼        for moon_cake in moon_cakes:            windows.blit(moon_cake.moon_cake_image, moon_cake.rect)        # 碰撞检测        for moon_cake in moon_cakes:            if player.rect.colliderect(moon_cake.rect):                moon_cakes.remove(moon_cake)                # 吃到月饼兔子会变重                player.weight += 2        pygame.display.flip()        pygame.display.update()        # 通过时钟对象指定循环频率        clock.tick(40)

运行如下:

突然发现,这样的话这个游戏永远不会结束,可以一直玩下去,上面我们说了,兔子吃到月饼重量会增加,那我们增加一个机制:等兔子的重量大于100斤的时候,游戏结束,对!你没有看错!,就是这么草率!!!

在碰撞检测循环里加入以下逻辑:

if player.weight > 10:    end = True    while end:        # 游戏结束        windows.fill((204, 204, 255))        text = pygame.font.SysFont("microsoftyaheimicrosoftyaheiui", 50)        text_fmt1 = text.render("你的兔子撑死了!!".format(player.weight), True, (255, 255, 255))        text_fmt2 = text.render("game over!".format(player.weight), True, (255, 255, 255))        windows.blit(text_fmt1, (200, 200))        windows.blit(text_fmt2, (260, 300))        clock.tick(40)        for event in pygame.event.get():            if event.type == pygame.QUIT:                pygame.quit()                sys.exit()                # 按任意键继续            if event.type == pygame.KEYDOWN:                end = False                # 重新生成玩家兔子及月饼                player = Rabbit(random.randint(0, 750), random.randint(0, 750), 64, 64)                moon_cakes.clear()                for i in range(20):                    moon_cake = MoonCake()                    moon_cakes.append(moon_cake)        pygame.display.flip()        pygame.display.update()

为了方便调试,改成了兔子重量大于10斤,即结束。

运行如下:

"python pygame实现的兔子吃月饼小游戏代码分享"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

0