Python写捕鱼达人的游戏实现


Posted in Python onMarch 31, 2020

当今最火的莫过于用Python写出捕鱼达人的效果了。啥都不用说,亮代码~~~

# coding:utf-8
# 导入模块
import pygame,sys,time,random
from pygame.locals import *
# 初始化pygame环境
pygame.init()
# 创建一个长宽分别为800/480的窗口
canvas = pygame.display.set_mode((800,480))
canvas.fill((255,255,255))
# 设置窗口标题
pygame.display.set_caption('捕鱼达人')
# 加载图片
bg = pygame.image.load("./images/bg.jpg")
fish1 = pygame.image.load("./images/fish1_0.png")
fish2 = pygame.image.load("./images/fish2_0.png")
fish3 = pygame.image.load("./images/fish3_0.png")
fish4 = pygame.image.load("./images/fish4_0.png")
fish5 = pygame.image.load("./images/fish5_0.png")
fish6 = pygame.image.load("./images/fish6_0.png")
fish7 = pygame.image.load("./images/fish7_0.png")
fish8 = pygame.image.load("./images/fish8_0.png")
fish9 = pygame.image.load("./images/fish9_0.png")
fish10 = pygame.image.load("./images/fish10_0.png")
fish11 = pygame.image.load("./images/fish11_0.png")
net = pygame.image.load("./images/net.png")
gameover = pygame.image.load("./images/gameover.jpg")
# 定义事件监听函数
def handleEvent():
  for event in pygame.event.get():
    if event.type == QUIT:
      pygame.quit()
      sys.exit()
    # 添加鼠标移动事件,让鼠标控制网的移动
    if event.type == MOUSEMOTION:
      Game.net.x = event.pos[0] - Game.net.width/2
      Game.net.y = event.pos[1] - Game.net.height/2
# 定义时间间隔判断函数
def isActionTime(lastTime,interval):
  if lastTime == 0:
    return True
  currentTime = time.time()
  return currentTime - lastTime >= interval
# 定义鱼类
class Fish():
  def __init__(self,width,height,y,img):
    self.width = width
    self.height = height
    self.x = 800 - self.width
    self.y = y
    self.img = img
  def paint(self):
    canvas.blit(self.img,(self.x,self.y))
  def step(self):
    self.x -= 10
# 定义网类
class Net():
  def __init__(self,x,y):
    self.x = x
    self.y = y
    self.width = 160
    self.height = 160
    self.img = net
  def paint(self):
    canvas.blit(self.img,(self.x,self.y))
  # 定义越界函数
  def outOfBounds(self):
    if self.x <= 0:
      self.x = 0
    elif self.x >= 800 - self.width:
      self.x = 800 - self.width
    elif self.y <= 0:
      self.y = 0
    elif self.y >= 480 - self.height:
      self.y = 480 - self.height
  # 定义碰撞函数
  def hit(self,c):
    return c.x > self.x - c.width and c.x < self.x + self.width and c.y > self.y - c.height and c.y < self.y + self.height
# 定义存储游戏数据的类
class Game():
  # 游戏状态
  state = 'RUNNING'
  # 鱼的列表
  fish = []
  # 网的对象
  net = Net(100,100)
  # 分数
  score = 0
  # 时间
  t = 60
  n = 1
  # 上一次时间
  lastTime = 0
  # 时间间隔
  interval = 0.5
  # 所有鱼的宽高
  fish_pos = [[22,13],[50,48],[55,55],[73,73],[104,80],[60,60],[93,93],[94,81],[99,103],[180,140],[320,206],[100,96]]
# 定义产生鱼的函数
def conEnter():
  if not isActionTime(Game.lastTime,Game.interval):
    return
  Game.lastTime = time.time()
  r = random.randint(1,11)
  if Game.t <= 60:
    Game.fish.append(Fish(Game.fish_pos[r][0],Game.fish_pos[r][1],random.randint(0,480 - Game.fish_pos[r][1]),pygame.image.load("./images/fish"+str(r)+"_0.png")))
  elif Game.t <= 30:
    Game.fish.append(Fish(Game.fish_pos[r][0],Game.fish_pos[r][1],random.randint(0,480 - Game.fish_pos[r][1]),pygame.image.load("./images/fish"+str(r)+"_0.png")))
    Game.fish.append(Fish(Game.fish_pos[r][0],Game.fish_pos[r][1],random.randint(0,480 - Game.fish_pos[r][1]),pygame.image.load("./images/fish"+str(r)+"_0.png")))
  elif Game.t <= 10:
    Game.fish.append(Fish(Game.fish_pos[r][0],Game.fish_pos[r][1],random.randint(0,480 - Game.fish_pos[r][1]),pygame.image.load("./images/fish"+str(r)+"_0.png")))
    Game.fish.append(Fish(Game.fish_pos[r][0],Game.fish_pos[r][1],random.randint(0,480 - Game.fish_pos[r][1]),pygame.image.load("./images/fish"+str(r)+"_0.png")))
    Game.fish.append(Fish(Game.fish_pos[r][0],Game.fish_pos[r][1],random.randint(0,480 - Game.fish_pos[r][1]),pygame.image.load("./images/fish"+str(r)+"_0.png")))
# 定义画组件函数
def conPaint():
  canvas.blit(bg,(0,0))
  Game.net.paint()
  showScore()
  showTime()
  for fish in Game.fish:
    fish.paint()
# 定义组件移动函数
def conStep():
  Game.net.outOfBounds()
  for fish in Game.fish:
    fish.step()
# 定义碰撞检测函数
def checkHit():
  for fish in Game.fish:
    if Game.net.hit(fish) and len(Game.fish) != 0:
      Game.fish.remove(fish)
      Game.score += 1
# 定义绘制分数函数
def showScore():
  TextFont = pygame.font.SysFont('SimHei',40)
  TextScore = TextFont.render('得分:'+str(Game.score),True,(255,255,255))
  canvas.blit(TextScore,(20,20))
# 定义绘制时间函数
def showTime():
  TextFont = pygame.font.SysFont('SimHei',40)
  TextScore = TextFont.render('剩余时间:'+str(Game.t),True,(255,255,255))
  canvas.blit(TextScore,(550,20))
  if Game.n % 50 == 1:
    Game.t -= 1
  Game.n += 1
  if Game.t == 0:
    Game.state = 'END'
# 定义主控制函数
def control():
  if Game.state == 'RUNNING':
    conEnter()
    conPaint()
    conStep()
    checkHit()
  elif Game.state == 'END':
    canvas.blit(gameover,(0,0))
    TextFont = pygame.font.SysFont('SimHei',40)
    TextScore = TextFont.render('最终得分:'+str(Game.score),True,(0,0,0))
    canvas.blit(TextScore,(50,50))
while True:
  # 调用主控制函数
  control()
  # 更新屏幕内容
  pygame.display.update()
  # 延迟10毫秒
  pygame.time.delay(10)
  # 监听事件
  handleEvent()

这段代码用了一些Python的基础知识,包括事件,定义函数,取余,循环,判断,定义类,创建对象等。这些没什么好说的。导入的几个库也是很常用的库,基本算是程序员必备。把代码摆这里主要是为了让大家借鉴。要是写不出来真是没脸继续写Python了…

大家可以利用我的代码,在做事件监听等函数时应该会方便一些。

图片我发在下面了哈,需要的自取。

到此这篇关于Python写捕鱼达人的游戏实现的文章就介绍到这了,更多相关Python 捕鱼达人内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python专用方法与迭代机制实例分析
Sep 15 Python
python实现无证书加密解密实例
Oct 27 Python
django 创建过滤器的实例详解
Aug 14 Python
Python lambda函数基本用法实例分析
Mar 16 Python
Python理解递归的方法总结
Jan 28 Python
python3的print()函数的用法图文讲解
Jul 16 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
Mar 13 Python
jupyter实现重新加载模块
Apr 16 Python
Python字典取键、值对的方法步骤
Sep 30 Python
Python下使用Trackbar实现绘图板
Oct 27 Python
Python实现哲学家就餐问题实例代码
Nov 09 Python
matplotlib交互式数据光标实现(mplcursors)
Jan 13 Python
Django 多对多字段的更新和插入数据实例
Mar 31 #Python
基于python爬取有道翻译过程图解
Mar 31 #Python
django实现将修改好的新模型写入数据库
Mar 31 #Python
Python urlencode和unquote函数使用实例解析
Mar 31 #Python
Python响应对象text属性乱码解决方案
Mar 31 #Python
django执行数据库查询之后实现返回的结果集转json
Mar 31 #Python
Python super()方法原理详解
Mar 31 #Python
You might like
php htmlentities和htmlspecialchars 的区别
2008/08/18 PHP
解析php二分法查找数组是否包含某一元素
2013/05/23 PHP
PHP获取数组最大值下标的方法
2015/05/12 PHP
带你了解PHP7 性能翻倍的关键
2015/11/19 PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
2016/01/28 PHP
浅谈PHP中类和对象的相关函数
2017/04/26 PHP
Yii2实现自定义独立验证器的方法
2017/05/05 PHP
javascript HTMLEncode HTMLDecode的完整实例(兼容ie和火狐)
2009/06/02 Javascript
javascript窗口宽高,鼠标位置,滚动高度(详细解析)
2013/11/18 Javascript
JS控制图片翻转示例代码(兼容firefox,ie,chrome)
2013/12/19 Javascript
PHP配置文件php.ini中打开错误报告的设置方法
2015/01/09 PHP
JavaScript数组各种常见用法实例分析
2015/08/04 Javascript
NodeJS实现阿里大鱼短信通知发送
2016/01/17 NodeJs
javascript 四十条常用技巧大全
2016/09/09 Javascript
bootstrap中使用google prettify让代码高亮的方法
2016/10/21 Javascript
基于canvas粒子系统的构建详解
2017/08/31 Javascript
JavaScript多态与封装实例分析
2018/07/27 Javascript
Vue源码解读之Component组件注册的实现
2018/08/24 Javascript
手动下载Chrome并解决puppeteer无法使用问题
2018/11/12 Javascript
vue实现的仿淘宝购物车功能详解
2019/01/27 Javascript
bootstrap table列和表头对不齐的解决方法
2019/07/19 Javascript
浅析js实现网页截图的两种方式
2019/11/01 Javascript
JavaScript简单编程实例学习
2020/02/14 Javascript
在vant中使用时间选择器和popup弹出层的操作
2020/11/04 Javascript
vue + el-form 实现的多层循环表单验证
2020/11/25 Vue.js
[01:10:24]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第一场 2月28日
2021/03/11 DOTA
Python生成随机密码
2015/03/10 Python
selenium+python自动化测试环境搭建步骤
2019/06/03 Python
kali中python版本的切换方法
2019/07/11 Python
Django框架下静态模板的继承操作示例
2019/11/08 Python
pytorch标签转onehot形式实例
2020/01/02 Python
数控专业大学毕业生职业规划范文
2014/02/06 职场文书
介绍信的写法
2015/01/31 职场文书
优秀的商业计划书,让融资一步到位
2019/05/07 职场文书
导游词之澳门玫瑰圣母堂
2019/12/03 职场文书
Windows10安装Apache2.4的方法步骤
2022/06/25 Servers