python合集|Pygame实战(BOOM 这有一款超刺激的扎气球游戏等你来玩~)

导语 ?
python合集|Pygame实战(BOOM 这有一款超刺激的扎气球游戏等你来玩~)
文章图片
?
python合集|Pygame实战(BOOM 这有一款超刺激的扎气球游戏等你来玩~)
文章图片
前几天,有人私信小编:
说陪女朋友在小广场上面逛街玩儿扎气球:结果一个都没扎破,扎心了老铁。
女朋友都要离家出走了~让我给想想办法:小编只想给你一个表情。
?
python合集|Pygame实战(BOOM 这有一款超刺激的扎气球游戏等你来玩~)
文章图片

哈哈哈,开玩笑的~于是,为了满足需求,小编做了一个重大决定:熬夜给他做了一款扎气球的小
游戏,可以拿去哄哄女朋友啦~
这游戏做完之后木子已经替大家玩儿过了,这个不信的话你自己试试?
python合集|Pygame实战(BOOM 这有一款超刺激的扎气球游戏等你来玩~)
文章图片

正文 python合集|Pygame实战(BOOM 这有一款超刺激的扎气球游戏等你来玩~)
文章图片

本文的《扎气球砰砰砰》小游戏原型就是路边的扎气球的游戏撒,基于Pygame做的!
就准备好射的箭、不同颜色的气球、一张背景图片、然后爆炸的特效就可。哦~对了音乐还是要准备
准备的,游戏的话有音乐背景才更有趣哦~
一、准备中 1)素材资料
首先是准备好需要的素材、图片、背景音乐:
python合集|Pygame实战(BOOM 这有一款超刺激的扎气球游戏等你来玩~)
文章图片

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 = 60 GRAVITY = 0.15 PI = 3.142WHITE = (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.2ARROW_SIZE = (16, 150) BALOON_SIZE = (100, 100) HIT_RADIUS = 15 MISSES = 15 GAME_TIME = 60 定义游戏精灵类等:import pygame import math import random from os import path from 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 = gamedef 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 distself.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 thetaclass 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_RADIUStemp = 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 ?

python合集|Pygame实战(BOOM 这有一款超刺激的扎气球游戏等你来玩~)
文章图片
三、效果展示 游戏规则的话:箭会出现在游戏界面底部中间位置,拉动它:即是鼠标左键拉动方向可自己调整,
直接向下拉动然后放箭射中气球即可。射中的越多积累的分数越高哦!
1)截图展示效果——
游戏开始界面如下:
python合集|Pygame实战(BOOM 这有一款超刺激的扎气球游戏等你来玩~)
文章图片

游戏开始界面如下:
python合集|Pygame实战(BOOM 这有一款超刺激的扎气球游戏等你来玩~)
文章图片

扎中气球效果如下:
python合集|Pygame实战(BOOM 这有一款超刺激的扎气球游戏等你来玩~)
文章图片

游戏结束总成绩13分:
python合集|Pygame实战(BOOM 这有一款超刺激的扎气球游戏等你来玩~)
文章图片

2)视频展示效果——
?
Pygame实战:BOOM!这有一款超刺激的扎气球游戏等你来

总结 ??好啦——文章就写到这结束了哦~看我主页左侧可以!
我们一起期待下一期的精彩内容叭,我是你们的木木子,记得三连关哦!嘻嘻
完整的免费源码领取处:找我吖!
滴滴我即可吖!
往期推荐阅读——
项目0.1雪景小程序
【Python码住雪景小程序】雪景人像最强攻略:让你一下美10倍、美醉了(中国人不骗中国人)
项目0.2跳舞的字符画
【永久免费】恕我直言,这款视频转字符画动漫小工具用起来最爽~
目1.0超级玛丽
程序员自制游戏:超级玛丽100%真实版,能把你玩哭了~【附源码】
项目1.1扫雷
Pygame实战:据说这是史上最难扫雷游戏,没有之一,你们感受下......
项目1.2魂斗罗
Pygame实战:多年后“魂斗罗”像素风归来 不止是经典与情怀@全体成员
项目1.3太空机甲游戏
Pygame实战:牛,几千行代码实现《机甲闯关冒险游戏》,太牛了(保存起来慢慢学)
文章汇总—— 项目1.0 Python—2021 |已有文章汇总 | 持续更新,直接看这篇就够了
【python合集|Pygame实战(BOOM 这有一款超刺激的扎气球游戏等你来玩~)】(更多内容+源码都在文章汇总哦!!欢迎阅读~)
python合集|Pygame实战(BOOM 这有一款超刺激的扎气球游戏等你来玩~)
文章图片
?
python合集|Pygame实战(BOOM 这有一款超刺激的扎气球游戏等你来玩~)
文章图片

?

    推荐阅读