pygame设计舒尔特方格游戏python舒尔特方格小程序

本文介绍如何使用pygame库开发一个舒尔特方格游戏。从初步设想、前期准备,到图片处理、游戏逻辑实现,包括点击图片变色效果、顺序点击判断、添加开始界面、计时器和重新开始功能,最后封装成exe文件的过程详细展开。通过这个项目,展示了pygame在游戏开发中的应用。
摘要由CSDN通过智能技术生成

之前用pygame完成了刮刮乐的游戏,也就是一个:4×4的方格,16只动物图片随机排序,点击后显示随机数字。如下图。
在这里插入图片描述
具体内容见:pygame设计一个刮刮乐加分小游戏小程序,教师加分奖,翻牌游戏

完成后想到可以利用这种方法,设计一个舒尔特方格的游戏,也可以设计一个记忆力训练翻牌游戏。先来尝试舒尔特方格游戏。

初步设想思路如下:

  • 3*3方格,9个数字。
  • 数字位置随机。
  • 点击正确的数字时,该数字变色。点击错误的数字时,发出错误的提示音,该数字不变色。
  • 开始按钮和重新开始按钮的设计~~
  • 显示计时时间,且玩家全部完成后要结束计时,并显示总用时。~
  • 封装成exe文件。

ok,边做边琢磨。

STEP1前期准备。

  1. 安装python。
  2. win+R,输入cmd,进入命令提示符。。
    安装pygame:pip install pygame
    安装python转exe的工具PyInstaller:pip install PyInstaller
    安装numpy:pip install numpy
  3. 准备图片,我是用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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值