Python+Pygame实现简单的射击小游戏
本文介绍如何使用Python和Pygame库开发一款简单的射击小游戏《无敌狙击手》。文章涵盖了从环境配置、素材准备到核心代码实现及运行效果展示的全过程,适合零基础开发者学习游戏编程基础。
前言
大家好!这里是栗子,我们又见面了。
什么样的游戏最能吸引玩家?
毫无疑问,射击游戏始终占据着重要地位。无论是曾经火爆的手游《刺激战场》,还是现在的《和平精英》,都证明了这一品类的持久魅力。作为一名早期玩家,我深知射击游戏结合丰富地图和多样体验所带来的乐趣。
在射击游戏中,玩家通过瞄准并击杀敌人,能够获得即时且强烈的成就感反馈。这种游戏类型自诞生以来,便在游戏界占据了一席之地。
今天的游戏代码灵感正源于此。为了保持简约风格,即便作为程序员的我感到些许压力,也要尽力呈现一个精简版的制作。
本期推荐一款基于Python代码实现的“射击游戏”——《无敌狙击手》。这是一个简约版的射击游戏,来看看你是否喜欢这款代码实现的效果?
这是一个非常适合零基础开发者入门的游戏案例,非常简单易懂。
游戏玩法:点击鼠标左键对准移动的靶子,射中后根据距离计算得分。射中最中间的位置可获得+3分。
一、运行环境
1)环境安装
需要Python3、Pycharm,部分Pygame自带模块无需额外展示。
第三方库安装命令:pip install pygame
或使用镜像源安装:pip install -i https://pypi.douban.com/simple/ +模块名
2)素材(图片、音乐等)

二、代码展示
主程序
import pygame,os,random
from 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 image
def 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 sound
WIDTH=700
HEIGHT=600
class 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实现简单射击小游戏的介绍到此结束。如需了解更多Python和Pygame射击游戏相关内容,请搜索本站往期文章或继续浏览后续文章。希望大家多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









