Python实战案例:使用Pygame开发游戏翻牌子(上)

一、翻牌子游戏介绍

翻牌子的原意是古代皇帝在晚上就寝时从三千佳丽中选择的某个女子,这里将它改版成对对碰。如果翻开第一张牌子后面的女子,再翻开第二张牌子后面的女子,如果两张牌子后面的女子是同一个女子,两张牌子就消失,如果两张牌子后面不是同一个女子,前一张牌子翻过去,后一张牌子仍然保持着显示被选女子的状态。

游戏过程如下图所示最开始游戏的初始状态。

紧接着如下所示把图中的某一个牌子翻开。

接下来继续翻开如图所示中的第二张某一个牌子,两个不同的图像,就会保持第二张牌子的图像。

接下来继续翻开如图所示中的第二张某一个牌子,两个是相同的图像,就会两张牌子同时消失。

python需要的第三方模块安装

下面具体来说其开发过程。

这个游戏需要使用Python中的pygame模块,所以需要安装pygame模块,可以使用如下命令进行安装。

pip3 install pygame

安装完pygame模块后就可以使用pygame模块进行开发了。

三、游戏背景显示

游戏首先需要调用pygame模块显示游戏窗口,并在游戏窗口中显示出游戏的背景。

使用pygame开发的基本思路是先导入pygame模块,然后调用pygame中的init()方法对游戏进行初始化,这是使用pygame开发游戏必须的步骤,只有执行了pygame模块中的初始化方法后才能更好地使用pygame中的各种方法为我们服务。可以这样理解,电脑在使用pygame时有一个强迫症,需要检查一遍这个工具包是否完整,能否正常提供帮助。而这个检查的动作,就是pygame.init()。接着就可以使用pygame.set_mode()设置游戏窗口的大小,也就是执行这个游戏程序后windows桌面显示的窗口程序的大小。显示完窗口后,就需要把图像做为背景显示到这个窗口里面去,需要使用blit()方法在窗口中放置一个图像,blit方法有两个参数,第一个参数是放置的图像数据,第二个参数是图像的位置,这个参数使用横纵坐标值(x,y)形成的元组类型数据。需要放置的那个图像数据可以使用pygame.image.load()方法去加载这个图像即可完成。

其完成方法的具体流程如图所示。

其对应的代码如下。

import pygame
pygame.init()
screen=pygame.display.set_mode((1450,736))
bk=pygame.image.load("images/hougong.jpg")
screen.blit(bk,(0,0))

运行这段代码,会出现如下内容。

从图像中看,没有看到任何图像内容,而且这个窗口还会一闪而过,这是由于pygame的窗口显示后就程序结束了,这么短的时间是看不到图像的,需要使用while True死循环一直保持这种窗口的更新,也就是在while True方法中调用pygame.display.update()方法使窗口一直更新,而这个图像会一直在窗口中显示出来。也就是将代码进行如下改写。

import pygame
pygame.init()
screen=pygame.display.set_mode((1450,736))
bk=pygame.image.load("images/hougong.jpg")
screen.blit(bk,(0,0))
while True:pygame.display.update()

上述代码运行成功后,显示如下结果。

从运行结果可以看出,背景图像已经被显示出来,但是要注意,这样的窗口在移动或关闭时,都会发生“窗口未响应”或“python程序错误”的内容。如果要调整这样的错误,就需要在while True循环体中加入事件判断的函数,判断是否有用户点击了关闭按钮,如果监控到用户点击到关闭按钮,就正常执行pygame的退出功能。将代码程序再做修改。代码如下。

import pygame
pygame.init()
screen=pygame.display.set_mode((1450,736))
bk=pygame.image.load("images/hougong.jpg")
screen.blit(bk,(0,0))
while True:for event in pygame.event.get():if event.type==pygame.QUIT:pygame.exit()pygame.display.update()

这段代码中pygame.event.get()实现了pygame模块中各种事件的捕获,这里捕获的事件可能有鼠标事件,可能有键盘事件等等,因此使用for循环来遍历get到的所有事件,后面进行翻牌子的点击时候还是需要鼠标事件的参与的,这里捕捉了事件中的一种类型:退出事件,event.type就是能够体现捕捉到pygame事件的各种类型,pygame.QUIT就是退出事件的信号。event.type==pygame.QUIT就是把捕捉的pygame事件进行对比,如果是pygame.QUIT退出事件,就执行pygame.exit()事件,退出pygame的功能,关闭正在显示的pygame窗口。

这样运行的结果如图所示。

从图像中看,就是打开了一个pygame 窗口,并始终显示一个背景图像。

用pygame开发游戏的最开始需要的步骤就可以概括成下图所示。

四、游戏界面布局的搭建

游戏窗口显示成功后,就可以在这个背景窗口中添加要翻的牌子了。这个游戏的界面也就是一个古色古香的背景图片窗口中显示各种佳丽的牌子背面。牌子背面的图片文件back.png。也就是在固定的坐标位置上显示背景图片文件,形成2行5列的平铺效果。x轴的坐标可以以200为分隔区间,偏移100个像素去显示一张牌,这样图像显示的x轴坐标可以使用式子x=i%5*200+100来表示。纵向只有2排,y轴可以使用5和250两个坐标点,用式子y+=250来表示。当显示牌子的数目超过5个的时候,就用下一行来继续显示牌子。可以用y轴对5这个数字取余,如果取余的结果为0时就可以在下一行显示,但y不能为0,如果y为0时需要显示第一行。把这个特例排除掉,这样y轴坐标的计算是需要一个if表达式来限定,表达式是i%5==0 and y!=0,用and连接的目的是and左右两边的条件都满足才正确。这里一共需要显示10幅图像,可以for循环迭代10次,利用前面对x,y坐标的分析公式,最终在对应的坐标位置显示背景图像即可。

这样代码修改如下。

import pygame
pygame.init()
screen=pygame.display.set_mode((1450,736))
bk=pygame.image.load("images/hougong.jpg")
screen.blit(bk,(0,0))
y=5
for i in range(10):if i%5==0 and y!=0:y+=250img1=pygame.image.load("images/back.png")x=i%5*200+100screen.blit(img1,(x,y))
while True:for event in pygame.event.get():if event.type==pygame.QUIT:pygame.exit()pygame.display.update()

运行程序后,翻牌子的游戏界面就搭建完毕,结果如图所示。

代码的github地址:https://github.com/wawacode/turn_over_card

Python实战案例:使用Pygame开发游戏翻牌子(上)相关推荐

  1. Python实战案例:高血压项目详解(上)

    Python实战项目 高血压项目详解(上) 涉及内容:爬虫&开发&数学分析&数据挖掘 a.前端界面的技术--> Juqery Mobile (JQM),俗称"机 ...

  2. Python实战案例,pygame模块,Python实现套路表白神器VS无套路表白神器

    前言 利用Python实现套路表白神器VS无套路表白神器.废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: pygame模块: random模块 sys模块: ...

  3. VR实战案例 | HTC Vive射箭游戏-晴天-专题视频课程

    VR实战案例 | HTC Vive射箭游戏-1683人已学习 课程介绍         使用Unity 3D引擎和HTC Vive设备完成一个射箭小游戏-将Vive的手柄做成一把弓-通过Trigger ...

  4. 使用pygame开发游戏:合金弹头(3)

    导读 Python的强大超出你的认知,Python的功能不止于可以做网络爬虫,数据分析,Python完全可以进行后端开发,AI,Python也可进行游戏开发,本文将会详细介绍Python使用pygam ...

  5. 使用pygame开发游戏:合金弹头(4)

    导读 Python的强大超出你的认知,Python的功能不止于可以做网络爬虫,数据分析,Python完全可以进行后端开发,AI,Python也可进行游戏开发,本文将会详细介绍Python使用pygam ...

  6. 使用pygame开发游戏:合金弹头(5)

    导读 Python的强大超出你的认知,Python的功能不止于可以做网络爬虫,数据分析,Python完全可以进行后端开发,AI,Python也可进行游戏开发,本文将会详细介绍Python使用pygam ...

  7. Python实战案例:金庸的功夫流派、人物关系的分析案例(上)

    Python实战案例:金庸的功夫流派.人物关系的分析案例(上) 一.项目说明 在香港的探案剧中, 经常见到这样的场景,为了分析某一桩谋杀案或者是失踪案,会把案件的可疑人员和与被害者的关系人员全部找出来 ...

  8. Python实战案例:旅游方面博文的数据分析

    Python实战案例:旅游方面博文的数据分析 一.旅游方面博文数据展示 数据分析的出现便利了每个人,企业,竞争者.在以前的时候,如果想要了解市场的动向,就设计了调查问卷或者现场采访的方式,以至于被很多 ...

  9. 搭建开发环境——Python实战:Web App 开发 Day 01

    1. 背景介绍 Python 的功能十分强大,因其强大而丰富的开源包,让其可以实现高级爬虫,可以实现机器学习算法,可以应用到深度学习中,也可以开发Web App 项目. 本次的Python实战就是We ...

最新文章

  1. mysql的突然变成本地不能用密码,远程要用密码才能登录,这是神马情况???求解...
  2. 黄聪:Dsicuz x2.5、X3、X3.2如何去掉域名后面的/forum.php
  3. python json模块有什么用_Python中json模块与jsonpath模块的区别是什么
  4. java filter 返回错误消息_利用java filter 实现业务异常拦截 跳转到错误信息提示页面...
  5. html语言中div怎么起名,css如何命名?
  6. C语言使用递归算法实现Sudoku Solver算法(附完整源码)
  7. Leetcode--455. 分发饼干
  8. dij算法堆优化_BZOJ 3040 最短路(road) 堆优化Dijkstra | 学步园
  9. SBUS协议及编解码
  10. 简单的全排列问题(给初学者)
  11. Lucas定理(求组合数,例题FZU2020,HDU3944)
  12. Bike Sharing Demand
  13. 如何使用 Reflector Keygen
  14. 一键生成sprite(雪碧图)以及 动态加载1X 2X3X 图片
  15. 用R画出染色体修饰图谱--超详细版本
  16. (教程)教你如何自己办理商标注册事宜
  17. 前向纠错FEC纠错编码原理
  18. 自制F1C200S demo板(六、裸机寄存器点灯)
  19. 设计师如何提高个人的色彩搭配能力?
  20. 淘宝seo关键词优化推广技巧

热门文章

  1. 数字旋转方阵 c++数据结构
  2. 联想凌拓教育行业解决方案
  3. [转组第5天] | 天枢分享Reverse入门
  4. .Net,C#程序的HOOK
  5. linux系统中如何删除文件中一整列数据
  6. 查看Windows事件日志
  7. python 控制鼠标和键盘输入_python:控制鼠标和键盘
  8. android qq内测,QQ众测
  9. 【Python基础】Python数据容器(字符串)
  10. Python理论模拟题