之前用pygame完成了刮刮乐的游戏,也就是一个:4×4的方格,16只动物图片随机排序,点击后显示随机数字。如下图。

具体内容见:pygame设计一个刮刮乐加分小游戏小程序,教师加分奖,翻牌游戏
完成后想到可以利用这种方法,设计一个舒尔特方格的游戏,也可以设计一个记忆力训练翻牌游戏。先来尝试舒尔特方格游戏。
初步设想思路如下:
- 3*3方格,9个数字。
- 数字位置随机。
- 点击正确的数字时,该数字变色。点击错误的数字时,发出错误的提示音,该数字不变色。
- 开始按钮和重新开始按钮的设计~~
- 显示计时时间,且玩家全部完成后要结束计时,并显示总用时。~
- 封装成exe文件。
ok,边做边琢磨。
STEP1前期准备。
- 安装python。
- win+R,输入cmd,进入命令提示符。。
安装pygame:pip install pygame
安装python转exe的工具PyInstaller:pip install PyInstaller
安装numpy:pip install numpy - 准备图片,我是用ppt设计了图片,并另存为图片。

然后利用画图软件修改图片像素为200×200。完成后如下图:

其中,白色数字为未点击状态,蓝色数字为点击后数字。文件吗分别为pic什么和qic什么。
STEP2. 9幅数字图片显示
import pygame
import sys
import random
import numpy as np
import itertools
pygame.init() # 初始化pygame
size = width, height = 600, 600 # 设置窗口大小
screen = pygame.display.set_mode(size) # 显示窗口
Xpts=[0, 200, 400]
Ypts=[0, 200, 400]
map = np.array(list(itertools.product(Xpts, Ypts))) #9幅图片坐标
status = [0 for i in range(9)] #是否被翻开的状态位
list1 = [[i] for i in range(9)]
random.shuffle(list1) #将图片打乱顺序,并载入图片
print(list1) #注意该句,下面要用到它输出的数组。
for i in range(9): #这里必须 9
screen.blit(pygame.image.load("pic/pic" + str(*list1[i-1]) + ".jpg"), map[i])
while True: # 死循环确保窗口一直显示
for event in pygame.event.get(): # 遍历所有事件
if event.type == pygame.QUIT:
sys.exit()
pygame.display.flip() # 更新全部显示
pygame.quit() # 退出pygame
上面的代码和之前刮刮乐游戏的代码是一样的,只不过图片数量变为9幅,去掉了点击后图片变化效果(之前刮刮乐程序是点击图片呕随机出现一张分数图片,这里不能随机出现了,只能出现和点击的一样的蓝色图片)。

STEP3 设计点击后图片变色效果

要注意程序中这句代码:
print(list1) #注意该句,下面要用到它输出的数组。
为了确定点开的到底是哪幅图片以便显示点击后的图片,要去研究pygame的界面和输出的数组对应的关系。

对上图的说明:数组中的数字是显示图片时打乱的顺序,也就是将0-8这9个数字随机排序,然后系统依次显示这9个数字对应的图片,第1个数字“7”对应的图片为8号图片(第1幅图),但它显示在了第一列第2个;第2个数字“1”对应图片为2号图片,显示在了第一列第3(第2幅图),所以图片的显示顺序为:

而上面图片中的坐标则为每一幅图片的左上角的坐标。(不用管)
添加点击效果,进行测试:

代码如下:
for i in range(9):
if event.type == pygame.MOUSEBUTTONDOWN and map[i][0]<=event.pos[0]<=map[i][0] + 200 and map[i][1]<=event.pos[1]<=map[i][1] + 200 and status[i] != 1: #判断鼠标位置以及是否摁了下去。:
print(i)
发现变量i的分布如图:

for i in range(9):
if event.type == pygame.MOUSEBUTTONDOWN and map[i][0]<=event.pos[0]<=map[i][0] + 200 and map[i][1]<=event.pos[1]<=map[i][1] + 200 and status[i] != 1: #判断鼠标位置以及是否摁了下去。:
print(i)
screen.blit(pygame.image.load("pic/qic" + str(*list1[i-1])+ ".jpg"), map[i])
上面的代码:当点击一个图片后,获取变量i值,如果i=2,说明点击了第1列第3幅图,对应随机图片list1数组里的图片顺序为第2张图片。注意代码list1[]前面的星号。
screen.blit(pygame.image.load("pic/qic" + str(*list1[i-1])+ ".jpg"), map[i])
运行后效果如下:

STEP4 设计顺序点击才变色的效果。
增加了zero的变量,初始值为0,根据确定的i值,找到list1列表中的翻开的数字图片,判断是否是最小的图片。添加了音效,如果按的数字不是小的播放音效。音效提前放到了sound文件夹下。
import pygame
import sys
import random
import numpy as np
import itertools
pygame.init() # 初始化pygame
size = width, height = 600, 600 # 设置窗口大小
screen = pygame
本文介绍如何使用pygame库开发一个舒尔特方格游戏。从初步设想、前期准备,到图片处理、游戏逻辑实现,包括点击图片变色效果、顺序点击判断、添加开始界面、计时器和重新开始功能,最后封装成exe文件的过程详细展开。通过这个项目,展示了pygame在游戏开发中的应用。
最低0.47元/天 解锁文章
333

被折叠的 条评论
为什么被折叠?



