脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - Python+Pygame实现简单的射击小游戏

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

2022-12-08 10:41嗨!栗子同学 Python

要说什么游戏能够获得大家的喜爱,唯射击游戏莫属!本文将利用Python和Pygame库制作一个简单的射击小游戏,感兴趣的小伙伴可以了解一下

前言

哈喽!哈喽。栗子上线啦~

要说什么游戏能够获得大家的喜爱?

唯射击游戏莫属。此前大火手游的《刺激战场》当然现在是叫做《和平精英》啦,想当初我也是第一批下载的老玩家了!射击游戏加上丰富的地图不同的体验那是相当的有趣好玩儿。

玩家在射击游戏中,通过瞄准,击杀敌人,能够获得及时的爽感反馈。射击游戏很早就在游戏圈占据一席之地啦~

今天的游戏代码灵感就是来源于此哦,简约简约,大制作小编一个程序员头秃也搞不了啦。

本期来为大家推荐一款Python游戏代码版本的“射击游戏”——小编取名叫《无敌狙击手》,也就是简约的射击游戏,看一下这款代码你喜欢嘛?

一个适合零基础开发游戏的小白案例啦!超级简单呢

游戏玩法:点击鼠标左键对准移动的靶子,射中一次看距离加分。射中最中间位置一次+3分哦

 

一、运行环境

1)环境安装

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

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

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

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

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

 

二、代码展示

主程序

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)游戏界面

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

2)击中效果

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

3)+3分

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

到此这篇关于Python+Pygame实现简单的射击小游戏的文章就介绍到这了,更多相关Python Pygame射击游戏内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/xy258009/article/details/124438175

延伸 · 阅读

精彩推荐
  • Python代码分析Python地图坐标转换

    代码分析Python地图坐标转换

    这篇文章主要介绍了Python地图坐标转换的相关知识点以及分享了相关的代码实例,对此有兴趣的朋友学习下。...

    脚本之家11062021-01-13
  • PythonPython微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例

    Python微信企业号开发之回调模式接收微信端客户端发送消息及被

    这篇文章主要介绍了Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息的方法,涉及Python微信企业号回调模式消息响应机制相关操作...

    偅唻姒後6252020-12-03
  • Pythonpython添加列表元素append(),extend()及 insert()

    python添加列表元素append(),extend()及 insert()

    这篇文章主要介绍了python添加列表元素append(),extend()及 insert(),列表是储存元素的数据类型,既然能存储元素,那么就类似数据库一样,增删改查的一些功...

    python老鸟6742022-10-27
  • Python详解pandas中缺失数据处理的函数

    详解pandas中缺失数据处理的函数

    这篇文章主要为大家详细介绍一下pandas中处理缺失数据的一些函数,文中具体讲解了一下各个函数的使用,需要的可以参考一下...

    东哥起飞6462022-09-02
  • Python详解Python中的strftime()方法的使用

    详解Python中的strftime()方法的使用

    这篇文章主要介绍了详解Python中的strftime()方法的使用,是Python入门学习中的基础知识,需要的朋友可以参考下 ...

    脚本之家12152020-07-06
  • PythonDjango drf分页器的使用详解

    Django drf分页器的使用详解

    本篇文章给大家介绍Django drf分页器的使用,通过多种分页器实例代码相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的...

    Silent丿丶黑羽7702021-12-07
  • PythonPython是怎样处理json模块的

    Python是怎样处理json模块的

    这篇文章主要介绍了Python是怎样处理json模块的,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...

    吃着东西不想停7582020-07-16
  • Python使用Python构建Hopfield网络的教程

    使用Python构建Hopfield网络的教程

    这篇文章主要介绍了使用Python构建Hopfield网络的教程,本文来自于IBM官方网站的技术文档,需要的朋友可以参考下...

    脚本之家2762020-06-06