千家信息网

Pygame是如何实现扎气球游戏

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这期内容当中小编将会给大家带来有关Pygame是如何实现扎气球游戏,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。正文下面的扎气球小游戏原型就是路边的扎气球的游戏撒,
千家信息网最后更新 2026年11月02日Pygame是如何实现扎气球游戏

这期内容当中小编将会给大家带来有关Pygame是如何实现扎气球游戏,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

正文

下面的扎气球小游戏原型就是路边的扎气球的游戏撒,基于Pygame做的!

就准备好射的箭、不同颜色的气球、一张背景图片、然后爆炸的特效就可。哦~对了音乐还是要准备,游戏的话有音乐背景才更有趣哦~

一、准备中

1)素材资料

首先是准备好需要的素材、图片、背景音乐:

2)运行环境

环境安装 本文用到的运行环境:Python3.7、Pycharm社区版2020、Pygame游戏模块部分自带

模块直 接导入不需要安装。

模块安装:

pip install -i https://pypi.douban.com/simple/ +模块名

二、代码演示

这款小游戏总的有6个.py文件组成的,代码比较都啦,这里就只放一点点哈!

主程序运行:

from game import * def main() :    intro = True    game = Game()    game.loadMusic()    game.readHighScore()    pygame.mixer.music.play(loops=-1)    while intro:        for event in pygame.event.get():            if event.type == pygame.QUIT:                intro = False        game.screen.fill(SKY_BLUE)        game.screen.blit(game.background, game.background_rect)        game.draw.Button(200, 2*game.HEIGHT/3, "PLAY", BRIGHT_GREEN, GREEN, game.gameloop, 150, 100)        game.draw.Button(game.WIDTH/2 - 75, 2*game.HEIGHT/3, "PLAY TIMED", BRIGHT_RED, RED, game.time_restricted, 150, 100)        game.draw.Button(game.WIDTH-350, 2*game.HEIGHT/3, "QUIT", BRIGHT_GREEN, GREEN, quit, 150, 100)        game.draw.draw_text("__ArcuS__", game.WIDTH/2, game.HEIGHT/3, 200, BLUE)        game.draw.draw_text("HIGH SCORE:%d" % (game.highscore), game.WIDTH-400, 50, 30, BLACK)        pygame.display.flip()        game.clock.tick(FPS) main()定义的一些常量:桌面背景、音乐等等。 FPS = 60GRAVITY = 0.15PI = 3.142 WHITE = (255, 255, 255)BLACK = (0, 0, 0)RED = (200, 0, 0)BRIGHT_RED = (255, 0, 0)GREEN = (0, 200, 0)BRIGHT_GREEN = (0, 255, 0)SKY_BLUE = (0, 255, 255)BLUE = (0, 0, 255)GREEN_YELLOW=(181,255,98)BROWN=(204,102,0)DARK_BROWN=(204,76,0) HIGHSCORE_FILE="highscore.txt"ARROW_IMAGE = "assets/arrow_1.png"BACKGROUND_IMAGE = "assets/background.png" EXPLOSION_SOUND = "assets/boom.wav"CLICK_SOUND = "assets/select.wav"MUSIC_FILE = "assets/tgfcoder-FrozenJam-SeamlessLoop.ogg"VOLUME = 0.2 ARROW_SIZE = (16, 150)BALOON_SIZE = (100, 100)HIT_RADIUS = 15MISSES = 15GAME_TIME = 60定义游戏精灵类等: import pygameimport mathimport randomfrom os import pathfrom constants import * #游戏精灵类class Arrow(pygame.sprite.Sprite):    def __init__(self,game):        pygame.sprite.Sprite.__init__(self)        self.WIDTH = game.WIDTH        self.HEIGHT = game.HEIGHT        self.image_orig = pygame.transform.scale(game.arrow_img, ARROW_SIZE)        self.image_orig.set_colorkey(BLACK)        self.image = self.image_orig        self.rect = self.image.get_rect()        self.rect.centerx = self.WIDTH/2        self.rect.bottom = self.HEIGHT-100        self.rot = 0        self.speedx = 0        self.speedy = 0        self.range = 0        self.max_height = 0        self.release_angle = 0        self.set_vel = False        self.Released = False        self.releasex = self.rect.centerx        self.releasey = self.rect.bottom        self.cy = self.rect.centery        self.game = game     def update(self):        if self.Released:            self.speedy -= GRAVITY            self.rect.bottom -= self.speedy            self.rect.centerx += self.speedx            self.rot = (-math.atan2(self.speedx, self.speedy)*180/3.14) % 360            new_image = pygame.transform.rotate(self.image_orig, self.rot)             old_center = self.rect.center            self.image = new_image            self.rect = self.image.get_rect()            self.rect.center = old_center            # print "moving"            if self.rect.bottom < 0 or self.rect.left > self.WIDTH + 10 or self.rect.right < -10:                self.kill()                    else:            mouse = pygame.mouse.get_pos()            click = pygame.mouse.get_pressed()            if mouse[1] > self.rect.centery and click[0] == 1:                self.set_vel = True                dist = math.sqrt(                    math.pow(self.rect.centerx-mouse[0], 2)+math.pow(self.rect.bottom-mouse[1], 2))                # print dist                 self.rect.centerx = mouse[0]                self.rect.centery = mouse[1]                # print(2*GRAVITY*(self.rect.centery-mouse[1]))                self.speedy = math.sqrt(2*GRAVITY*(-self.cy+mouse[1]))*4                self.speedx = self.speedy * \                    (mouse[0]-self.releasex)/(self.cy-mouse[1])                self.rot = (-math.atan2(self.speedx, self.speedy)                            * 180/3.14*0.5) % 360                new_image = pygame.transform.rotate(self.image_orig, self.rot)                old_center = self.rect.center                self.image = new_image                self.rect = self.image.get_rect()                self.rect.center = old_center                 # print "setting velocity"             else:                if self.set_vel:                    self.Released = True                    self.game.last_arrow_time = pygame.time.get_ticks()                    self.max_height = (self.rect.bottom-mouse[1])                    self.range = (mouse[0]-self.rect.centerx)*2                    # print "releasing"                # math.sqrt(math.pow(mouse[0]-self.rect.centerx,2)+math.pow(mouse[1]-self.rect.centery,2)) < 200:                else:                    if (mouse[0]-self.rect.centerx) != 0:                        theta = math.atan(                            (mouse[1]-self.rect.bottom)/(self.rect.centerx-mouse[0]))                    else:                        theta = PI                    move = theta-self.rot                    self.rot = math.degrees(theta)                    new_image = pygame.transform.rotate(                        self.image_orig, self.rot)                    old_center = self.rect.center                    self.image = new_image                    self.rect = self.image.get_rect()                    self.rect.center = old_center                    # print "rotating"                    # print self.rot                    # print theta  class Baloon(pygame.sprite.Sprite):    def __init__(self,game):        pygame.sprite.Sprite.__init__(self)        self.WIDTH = game.WIDTH        self.HEIGHT = game.HEIGHT        bcolor = random.choice(game.baloon_color)        temp = "assets/balloon_{}.png".format(bcolor)        self.image_orig = pygame.image.load(            path.join(path.dirname(__file__), temp))        if bcolor == "blue":            self.image_orig.set_colorkey(BLUE)        elif bcolor == "black":            self.image_orig.set_colorkey(BLACK)        elif bcolor == "green":            self.image_orig.set_colorkey(BRIGHT_GREEN)        elif bcolor == "red":            self.image_orig.set_colorkey(BRIGHT_RED)         self.image_orig = pygame.transform.scale(self.image_orig, BALOON_SIZE)        self.image = self.image_orig.copy()        self.rect = self.image.get_rect()        self.radius = HIT_RADIUS         temp = random.randrange(self.WIDTH - self.rect.width)        while (-150 < temp-self.WIDTH/2 < 150):            temp = random.randrange(self.WIDTH - self.rect.width)        self.rect.x = temp        self.rect.y = random.randrange(self.HEIGHT+100, self.HEIGHT+150)        self.speedy = random.randrange(-4, -1)        self.speedx = random.randrange(-3, 3)        self.game = game        self.last_update = pygame.time.get_ticks()        # print "baloon"     def update(self):        self.rect.y += self.speedy        if self.rect.top < -20 or self.rect.left < -25 or self.rect.right > self.WIDTH + 20:            self.kill()            self.game.misses += 1

三、效果展示

游戏规则的话:箭会出现在游戏界面底部中间位置,拉动它:即是鼠标左键拉动方向可自己调整,

直接向下拉动然后放箭射中气球即可。射中的越多积累的分数越高哦!

1)截图展示效果--

游戏开始界面如下:

游戏开始界面如下:

扎中气球效果如下:

游戏结束总成绩13分:

2)视频展示效果--

上述就是小编为大家分享的Pygame是如何实现扎气球游戏了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

气球 效果 模块 背景 准备 环境 界面 音乐 运行 代码 内容 图片 小游戏 就是 精灵 素材 分析 不同 有趣 对了 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 高科技互联网 国智互联网科技 互联网科技未来 互联网科技与金融科技 汇久创客互联网科技 时间互联网络科技 一五八零互联网科技 金融科技和互联网金融 新华互联网科技校企合作 衡水科技产业互联网平台 深圳国际航运科技和互联网 成都铂石互联网科技做什么的 苏州五指互联网络科技有限 佛山市翊博互联网络科技有限公司 皮皮虾互联网科技有限公司 杭州披云加互联网科技有限公司 宁波跨境商互联网科技有限公司 科技互联网专业工作会议发言稿 科技互联网专业务虚会材料 武汉亿视互联网科技有限公司 科技互联网产品 齐家互联网科技 米客互联网科技 恒生互联网科技指数跳水 哈尔滨屹滨互联网科技有限公司 互联网科技数字货币 北京军民互联网科技公司 山东蛋芒互联网科技有限公司 河南商务圈互联网科技有限公司 瑞安市蟠桃会互联网科技有限公司
0