基于python|基于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()

    基于python|基于python pygame实现的兔子吃月饼小游戏
    文章图片


    游戏逻辑


    实现玩家类
    玩家应该包括以下属性:位置、角色大小、分数等,还应该有移动位置move的方法,由于在此玩家控制的是一只兔子,玩法是吃月饼,所以把分数换为重量。
    class Rabbit:"""玩家兔子类"""def __init__(self, top, left, height, width):# 初始位置及大小self.top = topself.left = leftself.height = heightself.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 = Falseself.move_right = Falseself.move_up = Falseself.move_down = False# 每次移动的大小self.MOVESPEED = 5# 重量self.weight = 5def move(self):"""控制移动:return:"""if self.move_down and self.rect.bottom < height:self.rect.top += self.MOVESPEEDself.rect.bottom += self.MOVESPEEDif self.move_up and self.rect.top > 0:self.rect.top -= self.MOVESPEEDself.rect.bottom -= self.MOVESPEEDif self.move_left and self.rect.left > 0:self.rect.left -= self.MOVESPEEDself.rect.right -= self.MOVESPEEDif self.move_right and self.rect.right < width:self.rect.left += self.MOVESPEEDself.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 widthglobal height# 是否结束end = False# 创建时钟对象 (可以控制游戏循环频率)clock = pygame.time.Clock()# 月饼计数器moon_cake_limit = 20player = Noneif 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 = Falseplayer.move_left = Trueif key_pressed[pygame.K_d] or key_pressed[pygame.K_RIGHT]:player.move_left = Falseplayer.move_right = Trueif key_pressed[pygame.K_w] or key_pressed[pygame.K_UP]:player.move_down = Falseplayer.move_up = Trueif key_pressed[pygame.K_s] or key_pressed[pygame.K_DOWN]:player.move_up = Falseplayer.move_down = Trueplayer.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 = Falseif event.key == K_RIGHT or event.key == K_d:player.move_right = Falseif event.key == K_UP or event.key == K_w:player.move_up = Falseif 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 += 2pygame.display.flip()pygame.display.update()# 通过时钟对象指定循环频率clock.tick(40)

    运行如下:
    基于python|基于python pygame实现的兔子吃月饼小游戏
    文章图片

    突然发现,这样的话这个游戏永远不会结束,可以一直玩下去,上面我们说了,兔子吃到月饼重量会增加,那我们增加一个机制:等兔子的重量大于100斤的时候,游戏结束,对!你没有看错!,就是这么草率!!!
    在碰撞检测循环里加入以下逻辑:
    if player.weight > 10:end = Truewhile 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|基于python pygame实现的兔子吃月饼小游戏
    文章图片

    完成!感谢阅读,提前祝大家中秋快乐!!!

    总结 【基于python|基于python pygame实现的兔子吃月饼小游戏】到此这篇关于基于python pygame实现的兔子吃月饼小游戏的文章就介绍到这了,更多相关pygame兔子吃月饼小游戏内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

      推荐阅读