Pygame是如何实现扎气球游戏
发表于:2025-02-13 作者:千家信息网编辑
千家信息网最后更新 2025年02月13日,这期内容当中小编将会给大家带来有关Pygame是如何实现扎气球游戏,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。正文下面的扎气球小游戏原型就是路边的扎气球的游戏撒,
千家信息网最后更新 2025年02月13日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安全错误
数据库的锁怎样保障安全
电脑mc如何开服务器不要钱
鄂软件开发公司
持续推进网络安全
网络技术安全5000字
网络安全校园日手抄报四年级
数据库中的书籍
复制是数据库的对象那
谷歌服务器不好怎么办
饭店互联网科技
滴滴打车软件开发模型是什么
肇庆自主可控软件开发优化价格
中智软件开发不发工资
二手服务器改家用电脑接口
山东北斗授时服务器云主机
数据库报表能显示数据吗
方舟服务器怎么玩着就关了
数据库中实体可以不含属性吗
网络安全实名登记系统
我的世界神奇宝贝服务器送神兽送幸运方块
当前主流软件开发工具
360网络安全学院济南分校
南邮数据库试卷
合肥新华互联网科技
白银零度空间网络技术中心
网联车网络安全
广和网络安全
电脑网络安全密钥在哪打开
金山区电子网络技术质量服务
电脑显示此服务器的证书无效
数据库概念设计四种方法