基于python pygame实现的兔子吃月饼小游戏

目录
  • 小游戏规则简介
  • 实现
    • 初始化游戏窗口
    • 游戏逻辑
      • 实现玩家类
      • 实现月饼类
      • 交互逻辑
  • 总结

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

小游戏规则简介

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

实现

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

初始化游戏窗口

import sys
import pygame

width = 800
height = 800
#  初始化所有pygame模块
pygame.init()
# 创建游戏主窗口 width * height
windows = 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实现的兔子吃月饼小游戏的文章就介绍到这了,更多相关pygame兔子吃月饼小游戏内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python pygame实现五子棋小游戏

    今天学习了如何使用pygame来制作小游戏,下面是五子棋的代码,我的理解都写在注释里了 import pygame # 导入pygame模块 print(pygame.ver) # 检查pygame的版本,检查pygame有没有导入成功 EMPTY = 0 BLACK = 1 WHITE = 2 # 定义三个常量函数,用来表示白棋,黑棋,以及 空 black_color = [0, 0, 0] # 定义黑色(黑棋用,画棋盘) white_color = [255, 255, 255] # 定义白

  • 使用Python第三方库pygame写个贪吃蛇小游戏

    今天看到几个关于pygame模块的博客和视频,感觉非常有趣,这里照猫画虎写了一个贪吃蛇小游戏,目前还有待完善,但是基本游戏功能已经实现,下面是代码: # 导入模块 import pygame import random # 初始化 pygame.init() w = 720 #窗口宽度 h = 600 #窗口高度 ROW = 30 #行数 COL = 36 #列数 #将所有的坐标看作是一个个点,定义点类 class Point: row = 0 col = 0 def __init__(self

  • 使用pygame编写Flappy bird小游戏

    0. 最终效果: 1. 搭建一个最小框架 1.1 需要的函数 初始化所有导入的pygame模块. pygame.init() 生成一个窗口.返回的是一个surface对象.通过resolution设置窗口大小,flags代表扩展选项,depth代表设置颜色,但不建议设置. pygame.display.set_mode((resolution =(0,0),flags = 0,depth = 0)) 设置窗口标题. pygame.display.set_caption("Flappy bird_

  • pygame库实现俄罗斯方块小游戏

    本文实例为大家分享了pygame库实现俄罗斯方块小游戏的具体代码,供大家参考,具体内容如下 import random,time,pygame,sys from pygame.locals import *#导pygame内定义的一些常量 FPS=25#每秒传输帧数(刷新率),此处一秒内在屏幕上连续投射出24张静止画面 WINDOWWIDTH=640#窗口宽 WINDOWHEIGHT=480#窗口高 BOXSIZE=20#游戏框大小 BOARDWIDTH=10#游戏框宽度 BOARDHEIGHT

  • pygame库实现移动底座弹球小游戏

    本文实例为大家分享了pygame实现移动底座弹球的具体代码,供大家参考,具体内容如下 输出结果: 实现代码: # -*- coding: utf-8 -*- #Py之pygame:有趣好玩--利用pygame库实现一个移动底座弹球的小游戏 import pygame as pg from pygame.locals import * #将pygame所有常量导入,如后面的QUIT from time import sleep import sys #设置基本屏幕参数 pg.init() #初始化

  • python运用pygame库实现双人弹球小游戏

    使用python pygame库实现一个双人弹球小游戏,两人分别控制一个左右移动的挡板用来拦截小球,小球会在两板间不停弹跳,拦截失败的一方输掉游戏,规则类似于简化版的乒乓球. 因为是第一次用pygame写python小游戏并且只用了两三个小时,所以有些粗糙,部分方面有些bug,比如板子可以移动出屏幕外,游戏结束后的提示显示不全. 但是关键部分如小球的移动和基本功能等,还算比较完善. 代码如下: 运行环境为python 3.7,需要安装pygame库 import pygame,sys,time,

  • 基于python pygame实现的兔子吃月饼小游戏

    目录 小游戏规则简介 实现 初始化游戏窗口 游戏逻辑 实现玩家类 实现月饼类 交互逻辑 总结 中秋佳节就快来临,给各位大佬整个兔子吃月饼的小游戏助助兴,废话不多说,开整. 小游戏规则简介 玩家通过"wsad"或者"↑↓←→"键控制兔子移动,使得兔子可以吃到更多的月饼,月饼一旦生成之后位置不会变,也不会消失,就等着兔子去吃,就是这么简单.但是吃了月饼会变重,重到一定程度会有想不到的效果. 实现 使用Python的pygame模块开发,pygame是用来开发游戏软件的P

  • 基于Python编写一个宝石消消乐小游戏

    目录 开发工具 环境搭建 原理简介 开发工具 python版本:3.6.4 相关模块: pygame:以及一些python自带的模块. 环境搭建 安装python并添加到环境变量,pip安装需要的相关模块即可. 原理简介 游戏规则: 玩家通过鼠标交换相邻的拼图,若交换后水平/竖直方向存在连续三个相同的拼图,则这些拼图消失,玩家得分,同时生成新的拼图以补充消失的部分,否则,交换失败,玩家不得分.玩家需要在规定时间内获取尽可能高的得分. 实现过程: 首先加载一些必要的游戏素材: 加载背景音乐: py

  • 基于Python Pygame实现的画饼图游戏

    目录 导入包 配置基本参数 根据输入的数字改变扇形的个数 监听事件 这个游戏就是实现键盘上输入不同的数字,将圆分割成不同的几个部分,每部分用不同的颜色来实现. 导入包 导入随机包,pygame,系统包,time时间包用于时间暂停.math是用来确认弧度的. import random import pygame, sys, time import math from pygame.locals import * 配置基本参数 初始化pygame,设置窗口大小标题,设置圆心的x和y轴,圆的半径,线

  • 基于Python+Pygame实现经典赛车游戏

    目录 导语 一.环境安装 二.代码展示 1.主程序main.py 2.地图设置maps.py 三.效果展示 1.游戏界面 2.游戏运行中 3.15分到手 导语 哈喽!哈喽~我是木木子,很久没给大家更新游戏的类似啦—— 有粉丝投稿,说最近由于受疫情影响封闭在家不能离开小区,前不久刚刚报名的驾照考试只能无线延期,在家里还是挺无聊的,“憋在家里没事干的时候去打打游戏写写代码还挺好的. 于是,小编灵机一动,就有了今天这款简易版本的<赛车计划>也就是咳咳咳....... 通俗点儿就是一款代码写的一款关于

  • python实现吃苹果小游戏

    本文实例为大家分享了python实现吃苹果小游戏的具体代码,供大家参考,具体内容如下 1.公共类模块 import pygame from pygame.rect import Rect def print_text(font, x, y, text, color=(255, 255, 255)): imgText=font.render(text, True, color) screen=pygame.display.get_surface() screen.blit(imgText,(x,

  • 童年回忆录之python版4399吃豆豆小游戏

    目录 前文 正文 结尾 前文 昨天家里来人,老姐的小孩儿抢着跟我玩电脑,result........很久很久之后!! 那你想错了,我可不是欺负小孩子的那种人.老实人本人.三秒之后就给她了. 看见她在4399玩了一款小游戏,感觉很适合小孩子.emmmmmm...... ​ 灵感来了挡都挡不住,嗯哼~今天正入正题,开发一款4399类似的吃豆豆小游戏,等着!!!! 正文 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块. 模块自行安装.环境安装包等新手小白不

  • 基于Python的一个自动录入表格的小程序

    ## 帮阿雪写的一个小程序 --------------------------------------------------------------------------------------------------- 上大学的时候,总是会由很多表格需要同学们去搞,尤其是刚开学的那个时候,显然是很烦躁, 阿雪刚开学的时候,作为班干部,表示有时候刚录表不是很熟悉经常会弄到很晚,甚至还会弄错, 这就让我很是触动,所以想帮她搞一搞,顺便增强一下我们的友谊/hhhhhh ------------

  • Python+Pygame实现之走四棋儿游戏的实现

    目录 导语 一.游戏解说 二.游戏规则 三.环境安装 四.代码展示 五.效果展示 导语 大家以前应该都听说过一个游戏:叫做走四棋儿 这款游戏出来到现在时间挺长了,小时候的家乡农村条件有限,附近也没有正式的玩具店能买到玩具,因此小朋友们聚在一起玩耍时,其玩具大多都是就地取材的. 直接在家里的水泥地上用烧完的炭火灰画出几条线,摆上几颗石头子即可.当时的火爆程度可谓是达到了一个新的高度.包括我当时也比较喜欢这款游戏.因为时间推移,小时候很多游戏都已经在现在这个时代看不到啦! 今天小编就带大家追忆童年—

  • 基于Python实现西西成语接龙小助手

    目录 介绍 爬虫模块 前缀树搜索提示 成语接龙 介绍 代码地址:https://github.com/taishan1994/chinese_chengyujielong 读完该文,你可以收获: python爬虫的简单使用. 构建前缀树以进行搜索提示. 构建一个简单的成语接龙小程序. 爬虫模块 首先展示下我们最终获得的成语的数据: ,成语,拼音,成语解释,典故出处,近义词,反义词,常用程度,感情色彩,语法用法,成语结构,产生年代,英文翻译,成语谜面 0,阿匼取容,ē ǎn qǔ róng,阿匼:

  • 只需要100行Python代码就可以实现的贪吃蛇小游戏

    图示 基本准备 首先,我们需要安装pygame库,小编通过pip install pygame,很快就安装好了.在完成贪吃蛇小游戏的时候,我们需要知道整个游戏分为四部分: 1.游戏显示:游戏界面.结束界面 2.贪吃蛇:头部.身体.食物判断.死亡判断 3.树莓:随机生成 4.按键控制:上.下.左.右 游戏显示 首先,我们来初始化pygame,定义颜色.游戏界面的窗口大小.标题和图标等. 游戏结束界面,我们会显示"Game Over!"和该局游戏所得分数,相关代码如下: 贪吃蛇和树莓 我们

随机推荐