预期成果:
一个4×4的表格,每个空有一只动物,点击动物,动物消失,下面出现随机的数字,学生加相应的分数。

最终达到:随机数字,随机图像,封装成exe方便在不同电脑使用。
--------------------我是分割线-------------------
前期工作:安装python,安装pygame。
windows命令提示符安装pygame

pip install pygame

安装python转exe的工具:PyInstaller

pip install PyInstaller

开工!
STEP1 实现一张图片的显示。

import pygame
import sys
pygame.init()  # 初始化pygamesize = width, height = 600, 600  # 设置窗口大小
screen = pygame.display.set_mode(size)  # 显示窗口jpgFileName = "pic/pic1 (1).png"while True:  # 死循环确保窗口一直显示for event in pygame.event.get():  # 遍历所有事件if event.type == pygame.QUIT:  # 如果单击关闭窗口,则退出sys.exit()imgRect = pygame.image.load(jpgFileName)screen.blit(imgRect,[0,0])pygame.display.flip()  # 更新全部显示pygame.quit()  # 退出pygame

输出为:

STEP2 实现点击后图片消失。
(失败,网上说图片不能消失,可以重新绘制,可以做一个列表,再列表中删除,再重新绘制,貌似我不会啊,先简单实现点击后出现另一张图片)

STEP2.1 实现点击图片后显示另一张图片。

import pygame
import sys
pygame.init()  # 初始化pygamesize = width, height = 600, 600  # 设置窗口大小
screen = pygame.display.set_mode(size)  # 显示窗口jpgFileName = "pic/pic1 (1).png"
imgRect = pygame.image.load(jpgFileName)
jpgFileName2 = "pic/pic1 (2).png"
imgRect2 = pygame.image.load(jpgFileName2)
screen.blit(imgRect, [0, 0])while True:  # 死循环确保窗口一直显示for event in pygame.event.get():  # 遍历所有事件if event.type == pygame.QUIT:  # 如果单击关闭窗口,则退出sys.exit()if event.type == pygame.MOUSEBUTTONDOWN and 0<=event.pos[0]<=200 and 0<=event.pos[1]<=200: #判断鼠标位置以及是否摁了下去。:里面的200是我随便写的数,到时候需要根据图片尺寸修改。screen.blit(imgRect2, [0, 0])pygame.display.flip()  # 更新全部显示pygame.quit()  # 退出pygame

STEP3 规范图片尺寸和图片名称。
是不是需要设计一个统一的规则,比如图片点击后,不论点击哪张?我这水平的…什么类?什么函数?呃呃呃
还要考虑随机图片名称和函数,所以最好用上面说的,建一个列表,点击后将列表更新,比如正常是000000,显示,点击了第三个图片,列表更新为001000,1表示分数数字。
要做这么几件事:

  • 动物图片准备好,统一大小尺寸。命名按pic0、pic1、pic2这样排下来。
  • 数字(分数)图片准备好,统一大小尺寸,命名按num1、num2、num3
  • 思考列表和随机顺序的事。

今天竟然完成啦,哈啊
我把所有图片都修改为150×150像素的,然后重命名。如下图

STEP4 然后就一边百度一边写啊,改啊,能用循环的尽量用了循环。
代码如下:

import pygame
import sys
import random
import numpy as np
import itertoolspygame.init()  # 初始化pygame
size = width, height = 600, 600  # 设置窗口大小
screen = pygame.display.set_mode(size)  # 显示窗口Xpts=[0, 150, 300, 450]
Ypts=[0, 150, 300, 450]
map = np.array(list(itertools.product(Xpts, Ypts)))   #16幅图片坐标
status =  [0 for i in range(16)]    #是否被翻开的状态位list1 = [[i] for i in range(16)]
random.shuffle(list1)     #将动物图片打乱顺序,并载入图片
for i in range(16):    #这里必须 16,15的话少右下角一张。screen.blit(pygame.image.load("pic/pic" + str(*list1[i-1]) + ".jpg"), map[i])#  pygame.display.flip()  # 更新全部显示while True:  # 死循环确保窗口一直显示for event in pygame.event.get():  # 遍历所有事件if event.type == pygame.QUIT:  # 如果单击关闭窗口,则退出sys.exit()for i in range(16):if event.type == pygame.MOUSEBUTTONDOWN and map[i][0]<=event.pos[0]<=map[i][0] + 150 and map[i][1]<=event.pos[1]<=map[i][1] + 150 and status[i] != 1: #判断鼠标位置以及是否摁了下去。:screen.blit(pygame.image.load("pic/num" + str(random.randint(0,3))+ ".jpg"), map[i])status[i] = 1pygame.display.flip()  # 更新全部显示
pygame.quit()  # 退出pygame

做了这么几个工作:

  • 将16幅动物图片显示在屏幕上。
  • 准备了16幅图片的左上角坐标,用的是
Xpts=[0, 150, 300, 450]
Ypts=[0, 150, 300, 450]
map = np.array(list(itertools.product(Xpts, Ypts)))

上面排列组合了。我本想着用循环,发现太麻烦了。

  • 惊喜的是几个用法都可以运行。一是为了将16幅动物图片显示在屏幕上,我没有一幅图一幅图地赋值,而是尽可能的用了拼接变量名的形式,发现了很多小技巧,比如数组里数字带【】,前面加上星号*就可以了。还有惊喜的是
map[i][0]<=event.pos[0]<=map[i][0] + 150

上面这个竟然可以用。

  • 同时,为了避免分数出现后,再次点击会导致分数刷新,我添加了状态位,当 分数出现后,该位置赋值1,不再刷新分数。

输出效果如图。


最后,一个不明白的地方,那个显示的时候

list1 = [[i] for i in range(16)]
random.shuffle(list1)     #将动物图片打乱顺序,并载入图片
for i in range(16):    #这里必须 16,15的话少右下角一张。screen.blit(pygame.image.load("pic/pic" + str(*list1[i-1]) + ".jpg"), map[i])

哪个是哪个分不清了,反正是都显示出来了,晕晕乎乎的。

STEP5 下面更新了一个音效:当分数图片是3或4时,播放音效。

wavFileName = 'sound/sound1.wav'     #载入音效
sndTrack = pygame.mixer.music.load(wavFileName)
pygame.mixer.music.play()

完整代码更新如下:

import pygame
import sys
import random
import numpy as np
import itertoolspygame.init()  # 初始化pygame
size = width, height = 600, 600  # 设置窗口大小
screen = pygame.display.set_mode(size)  # 显示窗口Xpts=[0, 150, 300, 450]
Ypts=[0, 150, 300, 450]
map = np.array(list(itertools.product(Xpts, Ypts)))   #16幅图片坐标
status =  [0 for i in range(16)]    #是否被翻开的状态位
list1 = [[i] for i in range(16)]
random.shuffle(list1)     #将动物图片打乱顺序,并载入图片
for i in range(16):    #这里必须 16,15的话少右下角一张。screen.blit(pygame.image.load("pic/pic" + str(*list1[i-1]) + ".jpg"), map[i])
wavFileName = 'sound/sound1.wav'     #载入音效
sndTrack = pygame.mixer.music.load(wavFileName)while True:  # 死循环确保窗口一直显示for event in pygame.event.get():  # 遍历所有事件if event.type == pygame.QUIT:  # 如果单击关闭窗口,则退出sys.exit()for i in range(16):if event.type == pygame.MOUSEBUTTONDOWN and map[i][0]<=event.pos[0]<=map[i][0] + 150 and map[i][1]<=event.pos[1]<=map[i][1] + 150 and status[i] != 1: #判断鼠标位置以及是否摁了下去。:tem_num = random.randint(0,3)screen.blit(pygame.image.load("pic/num" + str(tem_num)+ ".jpg"), map[i])status[i] = 1if tem_num >= 2:    #3分及以上播放音效pygame.mixer.music.play()pygame.display.flip()  # 更新全部显示
pygame.quit()  # 退出pygame

STEP6 封装成exe文件
win+R打开cmd

  1. 使用pip命令安装:pip install PyInstaller
  2. 把路径切换到文件所在路径: cd D:\pylearn\choujiang
  3. pyinstaller -F myfile.py
  4. 将pygame需要的图片音效等文件与exe放在同一目录下
  5. 打开exe文件。

    完结撒花。

一些思考:舒尔特方格、一些翻牌游戏应该都能这样做出来。

pygame设计一个刮刮乐加分小游戏小程序,教师加分奖,翻牌游戏相关推荐

  1. 设计一个按照时间片轮转法实现处理机调度的程序

    要求:书写课程设计报告,报告中应该包含如下内容: (1)课程设计题目及内容 题目一:设计一个按照时间片轮转法实现处理机调度的程序 时间片轮转法实现处理机调度的程序设计提示如下: (1)假设系统有n个进 ...

  2. 计算机编程题目身高计算,VB1设计一个由输入身高计算标准体重的程序。计算公式为:男:标准体重(kg)=身高(cm)-100;- 一起装修网...

    VB1设计一个由输入身高计算标准体重的程序.计算公式为:男:标准体重kg=身高cm-100: 我来回答>> 百度用户(缘梦ym666) 浏览37次 2021-07-13 16:08 女:标 ...

  3. 排班系统c语言设计说明,帮我设计一个关于员工排班的C语言程序

    给你个c++版本做参考: #include #include #include #include int main(int argc,char *argv[]) { std::vector arr[7 ...

  4. 如何设计一个支持1亿用户使用的系统

    高可用架构设计最核心的就是两点:解耦和冗余.解耦包括业务状态分离(无状态架构设计).分库分表等.冗余包括缓存.CDN.主从备份.主主备份.GeoDNS 等.一个好的架构设计需要在产品迭代的不同阶段选择 ...

  5. java完成一个学生信息调查程序_利用Java设计一个简单的学生信息管理程序

    利用Java设计一个简单的控制台学生信息管理程序 此程序可作为课设的参考,其中信息存储于文件中. 创建了学生类Student,用于存储学号等的信息.创建StudentFunction类,用于实现诸如学 ...

  6. 菜鸟做HTML5小游戏 - 刮刮乐

    继上篇翻翻乐之后,又来刮刮乐.还是先上效果图: 开始demo的世界: 1.css去绘制界面效果.(源码提供) 2.原理:要实现刮刮卡内容的出现,我用div做了背景层去显示刮出的内容结果[重点].中间C ...

  7. 【你问我答】unity实现一个刮刮乐效果

    文章目录 一.前言 二.原理 三.实操 1.安装环境 2. 渲染纹理RenderTexture 3.写脚本:ScratchUI.cs 4.ShaderGraph 5. UI制作 6.材质球 7.挂脚本 ...

  8. 怎么做抽奖活动_没有公众号怎么做刮刮乐链接

    1,虽然我们分享的是公众号里怎么添加刮刮乐小程序,但是如果我们没有公众号也是可以制作刮刮乐小程序呢,因为刮刮乐小程序会有独立的链接和二维码,只要对于很多小伙伴不想使用微信公众号的来说,就大大的方便了, ...

  9. 分享微信抽奖怎么做步骤_没有公众号可以做刮刮乐抽奖链接吗

    1,虽然我们分享的是公众号里怎么添加刮刮乐小程序,但是如果我们没有公众号也是可以制作刮刮乐小程序呢,因为刮刮乐小程序会有独立的链接和二维码,只要对于很多小伙伴不想使用微信公众号的来说,就大大的方便了, ...

  10. 周末老板请吃东西,刮到多少算多少?Python带你制作一款刮刮卡小程序。

    导语 朋友~ 又到周末了咩, 你想我了咩?我想你们了咩~ 今天,乘着上班最后一小时的时间, 给你们写了一个"刮刮乐'',休闲时间等你们老板啥时候让你们刮刮奖就更好了~哈哈哈 今天带你们随机刮 ...

最新文章

  1. 2021-2027年中国透明熔融石英管行业市场全景调查及投资前景分析报告
  2. JS原生选项卡 – 幻灯片效果
  3. iOS 走近商城 APP(三 WKWebView 商品规格选择框架封装)
  4. [C#基础知识系列]专题十:全面解析可空类型
  5. supervisor linux下进程管理工具
  6. FreeRTOS的内存管理
  7. php log日志管理,PHP日志LOG类定义与用法示例
  8. 网页设计Dreamweaver【1】
  9. h264解码延迟优化_h264编解码末尾丢帧问题原因和解决
  10. MySQL索引原理总结
  11. Affinity Designer笔记:常用快捷键
  12. PDF文件添加水印怎么添加?分享两种加水印方法
  13. 语句摘抄——第13周
  14. PHP页面间参数传递
  15. T细胞培养方法进展及方法学对比
  16. 处理 __iob_func 无法链接的问题
  17. Java回炉之多线程(一)
  18. 经济寒冬影响存储专业人士
  19. 树形结构表3种设计优劣分析与分享
  20. java计算机毕业设计精品旅游项目管理系统MyBatis+系统+LW文档+源码+调试部署

热门文章

  1. java中 break语句_Java break语句
  2. server-sent events
  3. Android开发者必备工具-常见Android模拟器(MuMu、夜神、蓝叠、逍遥、雷电、Genymotion...)
  4. 台达服务器AB和B2系列区别,台达A2与B2伺服的区别
  5. 编程猫fiddler插件
  6. 多媒体计算机教室的使用与管理,焦作师范高等专科学校多媒体教室使用管理规定...
  7. 裴礼文《数学分析中的典型问题与方法》 P1~31
  8. 【数学建模】关联与因果问题
  9. 计算机自动设置开机,电脑定时开机怎么设置?电脑设置每天自动开机
  10. 技术向Technical Artist(TA)如何学习——分享个人经历