千家信息网

Python+Pygame如何实现简单的射击小游戏

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,本文小编为大家详细介绍"Python+Pygame如何实现简单的射击小游戏",内容详细,步骤清晰,细节处理妥当,希望这篇"Python+Pygame如何实现简单的射击小游戏"文章能帮助大家解决疑惑,下
千家信息网最后更新 2025年01月19日Python+Pygame如何实现简单的射击小游戏

本文小编为大家详细介绍"Python+Pygame如何实现简单的射击小游戏",内容详细,步骤清晰,细节处理妥当,希望这篇"Python+Pygame如何实现简单的射击小游戏"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

一、运行环境

1)环境安装

Python3、 Pycharm 、Pygame模块部分自带模块就不展示啦。

第三方库的安装:pip install pygame 或者

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

2)素材(图片、音乐等)

二、代码展示

主程序

import pygame,os,randomfrom pygame.locals import *from pygame.sprite import *def load_image(name):    fullname=os.path.join(os.path.join(os.path.split(os.path.abspath(__file__))[0],"filedata"),name)    image=pygame.image.load(fullname)    return imagedef load_sound(name):    fullname=os.path.join(os.path.join(os.path.split(os.path.abspath(__file__))[0],"filedata"),name)    sound=pygame.mixer.Sound(fullname)    return soundWIDTH=700HEIGHT=600class Explosion(Sprite):    def __init__(self,screen,posrect):        super(Explosion,self).__init__()        self.screen=screen        self.posrect=posrect        self.image=load_image("explosion.png")        self.rect=self.image.get_rect()        self.rect=self.posrect        self.rates=0    def update(self):        self.rates+=1        if self.rates>=40:            self.kill()class Enemy(Sprite):    def __init__(self,screen):        super(Enemy,self).__init__()        self.screen=screen        self.screenrect=self.screen.get_rect()        self.image=load_image("eatingfood.png")        self.rect=self.image.get_rect()        self.rect.center=(random.uniform(50,WIDTH-50),                          random.uniform(50,HEIGHT-50))        self.xspeed=random.uniform(1,2)        self.yspeed=random.uniform(1,2)        if random.choice([True,False]):            self.xspeed=-self.xspeed        if random.choice([True,False]):            self.yspeed=-self.yspeed    def update(self):        self.rect.centerx+=self.xspeed        self.rect.centery+=self.yspeed        if self.rect.top>self.screenrect.height or self.rect.bottom<0:            self.kill()        elif self.rect.left>self.screenrect.width or self.rect.right<0:            self.kill()def initmain():    pygame.init()    screen=pygame.display.set_mode((WIDTH,HEIGHT))    pygame.display.set_caption("")    gameFont=pygame.font.SysFont("宋体",26,True)    rates=0    score=0    fpstime=pygame.time.Clock()    cursor=load_image("aimcursor.png")    cursorrect=cursor.get_rect()    pygame.mouse.set_visible(False)    enemys=Group()    explosions=Group()    sou=load_sound("sou.mp3")    duang=load_sound("duang.mp3")    while True:        fpstime.tick(70)        screen.fill((128,128,128))        screen.blit(gameFont.render("Score: "+str(score),True,(0,0,0)),(2,2))        rates+=1        enemys.draw(screen)        enemys.update()        explosions.draw(screen)        explosions.update()        if rates%25==0:            enemys.add(Enemy(screen))        cursorrect.center=pygame.mouse.get_pos()        screen.blit(cursor,cursorrect)        for event in pygame.event.get():            if event.type==QUIT:                pygame.quit()                __import__("sys").exit()            elif event.type==MOUSEBUTTONDOWN and event.button==1:                cld=[]                for sf in enemys:                    if sf.rect.collidepoint(event.pos):                        sf.kill()                        score+=int(abs(sf.xspeed)+abs(sf.yspeed))                        explosions.add(Explosion(screen,sf.rect.center))                        cld.append(True)                    else:                        cld.append(False)                if not any(cld):                    sou.play()                else:                    duang.play()        pygame.display.flip()if __name__=="__main__":    initmain()

三、效果展示

都是静态的截图展示,科能效果不是很好!动态的展示我就没录制视频了哈,大家拿代码自己玩儿哦~

1)游戏界面

2)击中效果

3)+3分

读到这里,这篇"Python+Pygame如何实现简单的射击小游戏"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

0