小猫抓鱼

  • 开发工具
  • 讲解部分
    • 一、游戏原理
    • 二、游戏逻辑
    • 三、重点代码实现

开发工具

python3.6.4

第三方库:

pygame,random

讲解部分

一、游戏原理

 游戏原理很简单,和接水果的逻辑差不多,以前我们做接水果游戏的时候,是在游戏界面下方设置一个挡板,然后水果不断从上方掉下来。在这个游戏中,小猫顶着一个盆子在界面下方移动,然后鱼从上方不断下落,当然,这个游戏和之前的还是有一点不同,那就是天上除了会掉下来鱼以外,还会掉下来炸弹,小猫不但要学会抓鱼,还要学会躲炸弹。小猫所在的位置是随着鼠标的移动的。

二、游戏逻辑

  要用pygame开发游戏,首先就需要对pygame进行初始化,初始化的代码如下:
pygame.init()
   然后设置游戏界面的尺寸以及游戏界面的标题
screen = pygame.display.set_mode((600,500))
pygame.display.set_caption("嗷大喵爱吃鱼!")
  还需要载入一些重要的图片元素,比如说“猫”的图片和“鱼”的图片。
cat=pygame.image.load("aodamiao_2.png")
width,height=cat.get_size()
pic=pygame.transform.scale(cat,(width,height))
fish=pygame.image.load("fish.png")
   用pygame.image.load函数就可以读取相应的图片,然后用get_size获取图片的尺寸。在游戏运行的时候,就可以直接将图片粘贴到界面上。接下来,就是对一些参数进行初始化,比如说分数,鱼的数量,炸弹的数量等等。在所有的游戏中最重要的是一个while true循环。必须要有一个无限循环,程序才能持续运行。然后就是需要获取鼠标的位置,这就需要我们用pygame里面的方法获鼠标的位置,用到的代码如下:
        elif event.type == MOUSEMOTION:mouse_x,mouse_y = event.posmove_x,move_y = event.rel
  其中当获取是事件的type是MOUSEMOTTON时,代表鼠标移动了,这时候就需要更新鼠标的位置。在最开始的时候,游戏就导入了random模块,这是一个产生随机数的第三方库,在游戏中,鱼或者是炸弹是从天上随机掉下来的,这就需要用random.randint产生一些随机整数,用来表示鱼或者炸弹从哪里掉下来。
bomb_x = random.randint(0, 500)
    这一句表示的是产生0--500之间的随机数。还有一个重要的概念就是碰撞检测,无论是猫接到鱼还是猫被炸弹炸了,都需要进行碰撞检测判断。显然,游戏界面里所有的元素都是有一个x,y坐标系的,可以通过x,y坐标系来表示元素的 位置,当然也就可以这样来判断元素之间是否发生了碰撞。用if进行条件判断。
            if bomb_x > pos_x-10 and bomb_x < pos_x + 70:score += 10bomb_x = random.randint(0, 500)bomb_y = -50
  最终游戏界面上还要显示一些文本,用于提示玩家游戏进行到哪一步了。为此,我们专门设置了一个函数。
def print_text(font, x, y, text, color=(255,255,255)):imgText = font.render(text, True, color)screen.blit(imgText, (x,y))

调用这个函数,就可以在特定的位置打印出特定的文字。

三、重点代码实现

while True:for event in pygame.event.get():if event.type == pygame.QUIT:#sys.exit()pygame.quit()exit()elif event.type == MOUSEMOTION:mouse_x,mouse_y = event.posmove_x,move_y = event.relelif event.type == MOUSEBUTTONUP:if game_over:game_over = Falselives = 10score = 0Round =1vel_y=0.4mine=0flag=0pic=catbomb_y = -50keys = pygame.key.get_pressed()if keys[K_ESCAPE]:sys.exit()screen.fill((0,0,100))if game_over:screen.blit(init,(60, 60))print_text(font3, 200, 400,"Clicked To Play!")print_text(font2, 310, 480,"Copyright@2015 developed by xiaoxiami")else:#Round settingif score >300 and score <600:Round=2elif score >600 and score <900:Round =3elif score >900 and score <1200:Round=4elif score >1200 and score <1500:Round =5elif score >=1500:Round =6#draw the Roundprint_text(font1, 280, 0, "Round: " + str(Round))#speed settingif Round ==1:vel_y=0.4elif Round ==2:vel_y=0.6elif Round ==3:vel_y=0.8elif Round ==4:vel_y=1.0elif Round ==5:vel_y=1.2#mine number setting#mine=random.randint(1,9)#move the fishbomb_y += vel_ymine_y+=vel_yy#has the player missed the fish?if bomb_y > 500:bomb_x = random.randint(0, 500)bomb_y = -50lives -= 1if lives == 0:game_over = True#see if player has caught the fishelif bomb_y > pos_y:if bomb_x > pos_x-10 and bomb_x < pos_x + 70:score += 10bomb_x = random.randint(0, 500)bomb_y = -50if Round >2:#has the player missed the mine?if mine_y > 500:mine_x = random.randint(0, 500)mine_y = -50#see if player has caught the mineelif mine_y > pos_y:if mine_x > pos_x and mine_x < pos_x + 40:mine_x = random.randint(0, 500)mine_y = -50lives-=1pic=cat2if lives == 0:game_over = True#draw the fishscreen.blit(fish,(bomb_x,int(bomb_y)))#draw the mineif Round >2:screen.blit(mine_png,(mine_x,int(mine_y)))#set cat positionpos_x = mouse_xif pos_x < 0:pos_x = 0elif pos_x > 510:pos_x = 500#draw catif lives<5:pic=cat2screen.blit(pic,(pos_x,pos_y))#print # of livesprint_text(font1, 0, 0, "LIVES: " + str(lives))#print scoreprint_text(font1, 500, 0, "SCORE: " + str(score))pygame.display.update()

(xxx有话说可不写)

是不是挺简单呢~更多Python练习小知识和源码可以添加名片领取哦

python入门小项目 | 开发一个《小猫抓鱼》小游戏相关推荐

  1. 微信小程序开发一个简单的摇骰子游戏

    页面代码 <view class='top'>{{txt}}</view> <view class='point1'><image src='{{one_im ...

  2. python小游戏之《小猫抓鱼》

    欢迎加入我们卧虎藏龙的python讨论qq群:729683466 ●导 语 ● 这次带大家做一个新的游戏 小猫抓鱼 其实,很久之前公众号发过一个游戏 接水果 当然,这个游戏颜值更高. 也更好玩 代码及 ...

  3. 小程序快速入门到项目开发 2(小程序appID获取和目录结构)

    你好,[程序职场]专注于:Spring Boot ,微服务 和 前端APP开发,闲暇之余一起聊聊职场规划,个人成长,还能带你一起探索 副业赚钱渠道,在提升技术的同时我们一起交流 敏捷流程 提高工作效率 ...

  4. python3 django开发_python3开发进阶-Django框架学习前的小项目(一个简单的学员管理系统)...

    ''' 自己独立写一个学员管理系统 表结构: 班级表: -id -grade_name 学生表: -id -student_name -grade 关联外键班级表 老师表: -id -teacher_ ...

  5. Python之 - 使用Scrapy建立一个网站抓取器,网站爬取Scrapy爬虫教程

    Scrapy是一个用于爬行网站以及在数据挖掘.信息处理和历史档案等大量应用范围内抽取结构化数据的应用程序框架,广泛用于工业. 在本文中我们将建立一个从Hacker News爬取数据的爬虫,并将数据按我 ...

  6. python入门新手项目-Python入门实战项目有哪些适合新手?

    Python入门实战项目有哪些适合新手?目前市面上有很多适合新手的Python入门练手项目,Python入门需要理论与实践相结合,前面夯实基础知识,后面通过实战项目帮助你更好的运用这些Python知识 ...

  7. 使用 Arduino 和 Python在 Bluemix 上开发一个 IoT 应用程序之控制LED灯开关

    上篇"[物联网(IoT)开发]Arduino 入门 Hello World(LED闪烁)"只是通过将一段程序烧录到Arduino开发板上控制LEC闪烁,没有任何连网动作,也就是说断 ...

  8. 【物联网(IoT)开发】使用 Arduino 和 Python在 Bluemix 上开发一个 IoT 应用程序之控制LED灯开关

    上篇"[物联网(IoT)开发]Arduino 入门 Hello World(LED闪烁)"只是通过将一段程序烧录到Arduino开发板上控制LEC闪烁,没有任何连网动作,也就是说断 ...

  9. python 250行代码开发一个贪吃蛇

    python 250行代码开发一个贪吃蛇 1. 前提工作准备 2. 全局变量的定义与包的导入 3. 游戏开始界面初始化 4. 游戏界面的设置 4.1 游戏界面,使用一个Point类进行划分 4.2 预 ...

最新文章

  1. Linux0.11内核引导启动过程概述
  2. pt-table-checksum与pt-table-sync使用实践
  3. Python【01】【基础部分】- A
  4. 本地环境用eclipse搭建spring源码环境
  5. [异步、tensorflow] - 子线程操作tensor,主线程处理tensor
  6. linux中的守护进程
  7. php操作剪贴板内容代码,JavaScript操作剪贴板的实现方法介绍
  8. SQL Server 2016中的本机JSON支持
  9. –is-dba_查询存储–每个DBA的下一代工具
  10. 数据库系统原理教程-作业
  11. linux中crontab的用法
  12. 天敏盒子系统停止服务器,天敏网络机顶盒今天怎么停服了?
  13. SketchUp Pro 2019 for Mac(草图大师)
  14. 华为初级证书-HCIA(HCNA)-RS(Routing Switching)
  15. 解决PowerDesigner提示This data item is already used in a primary identifier
  16. 可能有用的篡改检测常识
  17. 双活数据中心构建方法及实现技术
  18. php如何除去图片水印,如何去掉图片水印,一键去除文字logo图片水印更简单
  19. 【UML统一建模思想】2万字超详细学习笔记(2)
  20. MRT批处理 MODIS影像

热门文章

  1. JDBC链接中的问题
  2. Spring源码学习(三)-- 底层架构核心概念解析
  3. 深度学习笔记之稀疏自编码器
  4. 精彩回顾 | 客户体验官俱乐部(CEOC)首届主题论坛在深圳圆满落幕
  5. 开运算和闭运算的异同
  6. flask+gunicorn部署
  7. Python期末考试总复习资料
  8. 转】用Mahout构建职位推荐引擎
  9. df.pivot函数用法
  10. MySQL基础教程---创建、查询、备份数据库