一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

行空板Python入門教程第七課:舒爾特方格小游戲

創(chuàng)客生活 ? 來源:創(chuàng)客生活 ? 作者:創(chuàng)客生活 ? 2022-06-02 15:45 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

注意力是一切學(xué)習(xí)的根本,是大腦進行感知、學(xué)習(xí)、思維等認知活動的基本條件。然而,無論是孩子還是成年人,我們常常會因開小差、注意力無法集中而困擾。此時,找到一個合適的方法來訓(xùn)練我們的注意力勢在必行。

舒爾特方格訓(xùn)練法,是全世界范圍內(nèi)最簡單,最有效也是最科學(xué)的注意力訓(xùn)練方法之一。

舒爾特方格 (Schulte Grid) 是在一張方形卡片上畫上 1cm*1cm 的 25 個方格,格子內(nèi)任意填寫上阿拉伯?dāng)?shù)字1 ~ 25 等共 25 個數(shù)字。訓(xùn)練時,要求被測者用手指按 1 ~ 25 的順序依次指出其位置,同時誦讀出聲,施測者一旁記錄所用時間。數(shù)完 25 個數(shù)字所用時間越短,注意力水平越高。

讓我們一起用DFRobot行空板設(shè)計一個舒爾特方格小游戲來訓(xùn)練一下自己的注意力吧!

舒爾特方格小游戲

任務(wù)目標

在屏幕上進行舒爾特方格小游戲。

pYYBAGKYaoGASNxjAABLFuUG-3Y771.pngpoYBAGKYaoKAaLyFAABp-KdRNEs589.pngpYYBAGKYaoKAO0AkAAB8tz9rSPY425.png

知識點

1、學(xué)習(xí)使用pygame庫加載圖片的方法

2、學(xué)習(xí)使用pygame庫播放音效的方法

3、學(xué)習(xí)使用pygame庫實現(xiàn)鼠標交互的方法

材料清單

硬件清單:

poYBAGKYaoKASo7QAABRDB7yxE0629.png

開源硬件行空板x1

pYYBAGKYaoKAXjpcAABrSUwd47w504.png

Type-C&Micro二合一USB線x1

poYBAGKYaoKARImNAAB0gDOFa8k316.png

USB小喇叭x1

軟件使用:Mind+編程軟件x1

知識儲備

1、pygame庫image模塊中的常用方法

pygame庫image模塊主要用于對于圖像的處理。在編程時,可通過“模塊名.方法名()”的形式來實現(xiàn)功能。

(1)load()方法加載圖像文件

load()方法可以實現(xiàn)從指定位置加載圖像

screen.blit(pygame.image.load("pic/start-5.png"), (30, 190)) # 在(30,190)坐標位顯示圖片start-5.png

其中,"pic/start-5.png",表示的是具體的圖像的路徑和文件名,這里指來自pic文件夾下名稱為start-5.png的圖像文件,在加載好圖像后,我們可通過blit方法將其顯示在指定的位置。

2、pygame庫music模塊中的常用方法

pygame庫music模塊在使用時與mixer模塊緊密相連,可實現(xiàn)對于音頻和聲音的控制。

(1)load()方法加載音頻文件

load()方法可以實現(xiàn)對于音頻文件的加載。

wavFileName = 'sounds/fire.wav' # 設(shè)置音效文件路徑

sndTrack = pygame.mixer.music.load(wavFileName) # 加載音效文件

其中,wavFileName指的是具體路徑下的音頻文件。sndTrack是個變量,用于存儲加載的音頻對象。

(2)play()方法播放音頻

play()方法可以實現(xiàn)對于加載后的音頻文件的播放。

pygame.mixer.music.play() # 播放音樂

3、pygame庫mouse模塊中的常用方法

pygame庫mouse模塊可以用來獲取鼠標設(shè)備的當(dāng)前狀態(tài),這個游戲中我們通過觸摸屏幕來模擬鼠標的控制。在編程時,可通過“模塊名.方法名()”的形式來實現(xiàn)功能。

(1)get_pos()方法獲取鼠標的位置

get_pos()方法可以實現(xiàn)對于鼠標所在位置的x、y坐標的獲取。

t_x, t_y = pygame.mouse.get_pos() # 獲取鼠標的x和y坐標位,存儲到變量t_x, t_y中

其中,t_x,和t_y是兩個變量,用來存儲獲取到的鼠標所在的橫縱坐標。

4、pygame庫中的鼠標事件以及事件檢測

鼠標是計算機最重要外接設(shè)備之一,同時它也是游戲玩家必不可少的工具之一,比如游戲中對于圖片的按下,松開等操作,這些都需要鼠標來配合實現(xiàn)。
Pygame 提供了三個鼠標事件,分別是鼠標移動(MOUSEMOTION)、鼠標按下(MOUSEBUTTONDOWN)、鼠標釋放(MOUSEBUTTONUP),不同事件類型對應(yīng)著不同的成員屬性。
而對于三個鼠標事件,pygame都提供了一個pos 屬性,即相對于窗口左上角,鼠標的當(dāng)前坐標值(x,y)。

因此,要想實現(xiàn)鼠標控制游戲的進行,那么我們就需要先檢測事件,再對事件進行判別。

if event.type == pygame.MOUSEBUTTONUP and 30 <= t_x <= 200 and 190 <= t_y <= 250: # 如果鼠標被釋放且橫縱坐標在“開始游戲”圖片的范圍內(nèi)

其中,event.type表示事件的類型,pygame.MOUSEBUTTONUP表示鼠標釋放事件, 30 <= t_x <= 200 and 190 <= t_y <= 250表示鼠標的橫坐標在30-300之間,縱坐標在190-250之間。

5、什么是numpy庫及常見函數(shù)

Numpy是Python中的一個科學(xué)計算庫,一般用于數(shù)組的處理。編程時,通過“import numpy”導(dǎo)入庫后可采用“numpy.函數(shù)名()”的形式來實現(xiàn)功能。

(1)array()函數(shù)創(chuàng)建一個數(shù)組

通過array()函數(shù)我們創(chuàng)建一個數(shù)組。

Xpts = [0, 48, 96, 144, 192] # x坐標

Ypts = [0, 48, 96, 144, 192] # y坐標

ha = itertools.product(Xpts, Ypts) # 將x、y的坐標進行全排列,得到25組數(shù)據(jù)

haha = list(ha) # 通過list函數(shù)將全排列后的數(shù)據(jù)轉(zhuǎn)換為列表形式

'''得到:[(0, 0), (0, 48), (0, 96), (0, 144), (0, 192), (48, 0), (48, 48), (48, 96), (48, 144),

(48, 192), (96, 0), (96, 48), (96, 96), (96, 144), (96, 192), (144, 0), (144, 48), (144, 96),

(144, 144), (144, 192), (192, 0), (192, 48), (192, 96), (192, 144), (192, 192)]'''

map = np.array(haha) # 把列表中數(shù)據(jù)轉(zhuǎn)換為數(shù)組形式

這里,我們先創(chuàng)建了兩組列表Xpts和Ypts,分別存儲數(shù)據(jù)來表示x、y坐標值,之后我們通過Python內(nèi)置的itertools庫中的product()函數(shù),將兩組列表中的數(shù)值進行了全排列并將結(jié)果轉(zhuǎn)換為列表形式,最后我們通過numpy庫中的array()函數(shù)將其再轉(zhuǎn)換成數(shù)組形式,并存儲到變量map中。

6、time庫time()函數(shù)檢測當(dāng)前時間

time庫中的time()函數(shù)可以用來檢測時間并返回當(dāng)前時間的時間戳。

time_start = time.time() # 開始計時

time_end = time.time() # 結(jié)束計時

time_c = round(time_end - time_start, 1) # 計算運行所花時間,保留1位小數(shù)

這里,我們先后通過time.time()記錄下的當(dāng)前的時間,之后將兩者進行做差運算,得到時間差。

動手實踐

任務(wù)描述1:創(chuàng)建游戲窗口與開始界面

通過pygame庫創(chuàng)建一個游戲窗口并在其上顯示游戲開始界面。

1、硬件搭建

通過USB連接線將行空板連接到計算機

2、程序編寫

STEP1:創(chuàng)建與保存項目文件

啟動Mind+,另存項目并命名為“007、舒爾特方格小游戲”。

STEP2:創(chuàng)建與保存Python文件

創(chuàng)建一個Python程序文件“main1.py”,雙擊打開。

STEP3:導(dǎo)入素材

在項目文件夾中導(dǎo)入兩個素材文件夾,包括圖片及音效。具體操作如下。

(1)將素材依次拖入項目文件夾中

Tips:素材下載鏈接可見附錄1。

pYYBAGKYaoKAIr0hAABFVcNp3Ig936.jpg

(2)拖入后可見

poYBAGKYaoOAf0aTAAA3li1x8kU453.jpg

STEP4:程序編寫

(1) 導(dǎo)入所需功能庫

在這個任務(wù)中,我們需要使用pygame庫來繪制游戲窗口,因此,我們須先導(dǎo)入它。

import pygame # 導(dǎo)入pygame庫

(2) 初始化游戲并創(chuàng)建指定尺寸的游戲窗口

在使用pygame進行游戲時,我們需先對其進行初始化操作,之后,為了能和行空板的屏幕一致,我們創(chuàng)建一個大小為(240,320)的游戲窗口。

pygame.init() # 初始化pygamewidth =240 # 定義寬height=320 # 定義高size=(240,320) # 定義尺寸screen = pygame.display.set_mode(size) # 創(chuàng)建游戲窗口,尺寸為(240,320)

(3) 定義游戲開始頁面

創(chuàng)建好游戲窗口后,我們再定義一個游戲開始的頁面。在這開始頁面上,我們需要遍歷所有的事件,設(shè)定點擊關(guān)閉窗口后退出游戲的功能,同時,在其上顯示一張“開始游戲”的背景圖。

# 定義開始頁面def start(start_page): while start_page: # 當(dāng)進入開始頁面 for event in pygame.event.get(): # 遍歷所有事件 if event.type == pygame.QUIT: # 如果單擊關(guān)閉窗口,則退出 pygame.quit() # 退出pygame screen.blit(pygame.image.load("pic/start-5.png"), (30, 190)) # 在(30,190)坐標位顯示圖片start-5.png pygame.display.flip() # 更新全部顯示

(4) 顯示游戲開始頁面

之后,為了能使得開始頁面始終保持顯示,我們通過一個變量來記錄開始頁面的狀態(tài),并將其初始時的狀態(tài)設(shè)定為True,之后結(jié)合循環(huán)來永久顯示它。

start_page = True # 定義初始時開始頁面狀態(tài)為Truewhile True: # 循環(huán) start(start_page) # 啟用start函數(shù)

Tips:完整示例程序如下:

'''創(chuàng)建窗口和顯示開始界面'''import pygame # 導(dǎo)入pygame庫 pygame.init() # 初始化pygamewidth =240 # 定義寬height=320 # 定義高size=(240,320) # 定義尺寸screen = pygame.display.set_mode(size) # 創(chuàng)建游戲窗口,尺寸為(240,320) # 定義開始頁面def start(start_page): while start_page: # 當(dāng)進入開始頁面 for event in pygame.event.get(): # 遍歷所有事件 if event.type == pygame.QUIT: # 如果單擊關(guān)閉窗口,則退出 pygame.quit() # 退出pygame screen.blit(pygame.image.load("pic/start-5.png"), (30, 190)) # 在(30,190)坐標位顯示圖片start-5.png pygame.display.flip() # 更新全部顯示 start_page = True # 定義初始時開始頁面狀態(tài)為Truewhile True: # 循環(huán) start(start_page) # 啟用start函數(shù)

3、程序運行

STEP1:遠程連接行空板

STEP2:點擊右上方的運行按鈕

STEP3:觀察效果

觀察行空板,可以發(fā)現(xiàn)行空板的屏幕上出現(xiàn)了“開始游戲”四個字,這就是我們設(shè)定的進入游戲前的開始頁面。

pYYBAGKYaoOAWPGiAABFkPgxbyQ498.png

Tips:長按行空板Home鍵5秒,可退出程序。

任務(wù)描述2:進入游戲界面

上述的開始頁面始終是靜態(tài)的圖片,為了完善游戲,接下來,我們將在其上添加動態(tài)效果,使得將手指(鼠標)移動至文字區(qū)域后內(nèi)容變成綠色,并且在點擊后進入游戲界面。

1、程序編寫

STEP1:創(chuàng)建與保存項目文件

新建一個Python程序文件“main2.py”,雙擊打開。

Step2:程序編寫

(1)導(dǎo)入所需功能庫并創(chuàng)建游戲窗口

import pygame # 導(dǎo)入pygame庫import random # 導(dǎo)入random庫import numpy as np # 導(dǎo)入numpy庫import itertools # 導(dǎo)入itertools庫 pygame.init() # 初始化pygamewidth =240 # 定義寬height=320 # 定義高size=(240,320) # 定義尺寸screen = pygame.display.set_mode(size) # 創(chuàng)建游戲窗口,尺寸為(240,320)

(2)設(shè)定圖片坐標位

在這個游戲中,我們將按順序點擊25張帶有數(shù)字符號的圖片。因此,為了能將這25張數(shù)字圖片顯示在屏幕上,我們需要確定25個坐標位。

這里,我們設(shè)定每張數(shù)字圖片的尺寸大小48*48像素,因此,在屏幕橫向上,正好可以顯示5張圖片,縱向上亦是每列5張。并且,每一列數(shù)字圖片的橫坐標皆分別為48 的0-4倍,縱坐標亦是如此。

因此在編程時,我們可以通過將兩組[0,48,96,144,192]列表全排列,得到25組數(shù)據(jù),再將其最終以數(shù)組形式呈現(xiàn),來代表25張數(shù)字圖片的坐標位。

# 設(shè)定圖片坐標位Xpts = [0, 48, 96, 144, 192] # x坐標Ypts = [0, 48, 96, 144, 192] # y坐標#map = np.array(list(itertools.product(Xpts, Ypts))) # 25幅圖片坐標ha = itertools.product(Xpts, Ypts) # 將x、y的坐標進行全排列,得到25組數(shù)據(jù)haha = list(ha) # 通過list函數(shù)將全排列后的數(shù)據(jù)轉(zhuǎn)換為列表形式'''得到:[(0, 0), (0, 48), (0, 96), (0, 144), (0, 192), (48, 0), (48, 48), (48, 96), (48, 144), (48, 192), (96, 0), (96, 48), (96, 96), (96, 144), (96, 192), (144, 0), (144, 48), (144, 96), (144, 144), (144, 192), (192, 0), (192, 48), (192, 96), (192, 144), (192, 192)]'''map = np.array(haha) # 把列表中數(shù)據(jù)轉(zhuǎn)換為數(shù)組形式

(3)定義準備函數(shù),用于確定圖片

在確定好25張數(shù)字圖片的坐標位后,如何才能確定要隨機顯示的圖片呢?

這里,我們采用一個小技巧,將25張初始時要顯示的數(shù)字圖片按順序命名為pic0.png-pic24.png,再將被點擊后要顯示的圖片命名為qic0.png-qic24.png。

這樣命名之后,我們可以通過相同的前綴名pic/qic+0至24不同的序號+png格式,來分別表示兩組圖片,每張圖片獨一無二,而這0-24的序號在編程時,我們可以以列表的形式來表示。

poYBAGKYaoOAI2BTAAAdNQLbqG0187.jpg

因此,在這里,我們將創(chuàng)建一個列表,并將其中的元素隨機排序,以便在后續(xù)以此表示圖片名稱中的序號部分。

# 定義準備函數(shù),用于確定圖片def ready(): global list1 # 定義一個全局變量list1 list1 = [[i] for i in range(25)] # 列表解析,根據(jù)一個列表的解析快速生成另一個列表 '''得到:[[0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20], [21], [22], [23], [24]]''' random.shuffle(list1) # 將列表中的所有元素隨機排序

(4)檢測鼠標位置

接下來,我們在開始頁面中添加獲取鼠標位置的功能,并設(shè)定當(dāng)手(鼠標)移動到“開始游戲”這張圖片上后,切換另一張相同文字,不同顏色的圖片,使得看上去文本變換了顏色。

global t_x, t_y # 定義兩個全局變量t_x, t_y t_x, t_y = pygame.mouse.get_pos() # 獲取鼠標的x和y坐標位,存儲到變量t_x, t_y中 if 30 <= t_x <= 200 and 190 <= t_y <= 250: # 18*50 # 如果鼠標移動到“開始游戲”的圖片所在范圍內(nèi) screen.blit(pygame.image.load("pic/start-6.png"),(30, 190)) # 在(30,190)切換圖片為start-6.png if event.type == pygame.MOUSEBUTTONUP and 30 <= t_x <= 200 and 190 <= t_y <= 250: # 如果鼠標被釋放掉且移動到“開始游戲”圖片的范圍內(nèi) start_page = False # 定義開始頁面狀態(tài)為False,退出開始頁面 game_page = True # 定義游戲頁面狀態(tài)為True,進入游戲頁面 pygame.display.flip() # 更新全部顯示

(5)檢測鼠標事件

接下來,我們再在開始頁面中添加鼠標檢測事件。并設(shè)定當(dāng)鼠標被釋放且移動到“開始游戲”圖片的范圍內(nèi)時,進入游戲頁面,同時退出開始頁面。

這里,我們通過兩個變量start_page和game_page來標記開始頁面和游戲頁面的進入與退出這兩個狀態(tài)。

if event.type == pygame.MOUSEBUTTONUP and 30 <= t_x <= 200 and 190 <= t_y <= 250: # 如果鼠標被釋放掉且移動到“開始游戲”圖片的范圍內(nèi) start_page = False # 定義開始頁面狀態(tài)為False,退出開始頁面 game_page = True # 定義游戲頁面狀態(tài)為True,進入游戲頁面 pygame.display.flip() # 更新全部顯示

(6)定義游戲界面

之后,我們再定義游戲界面,設(shè)定狀態(tài)為進入后,則顯示25張初始時的數(shù)字圖片。這里的圖片我們通過前綴名+列表中的序號+png格式后綴來表示,圖片的坐標則是以數(shù)組的形式表示。

同時,再通過一個變量 pic_zero來記錄數(shù)字顯示的狀態(tài),1為待顯示,0為無需顯示。

# 定義游戲界面def gamePage(game_page): pic_zero = 1 # 出題界面狀態(tài),保證只刷出一次題目 while game_page: # 當(dāng)進入游戲界面 while pic_zero: # 當(dāng)出題界面狀態(tài)為1 for i in range(25): # 循環(huán)25次 screen.blit(pygame.image.load("pic/pic" + str(*list1[i - 1]) + ".png"), map[i]) # 以map中數(shù)組為坐標,顯示指定的25個數(shù)字的初始圖片 pic_zero = 0 # 設(shè)定出題界面狀態(tài)為0(表示已顯示完所有25張數(shù)字的圖片) pygame.display.flip() # 更新全部顯示

(7)循環(huán)執(zhí)行

最后,我們設(shè)定初始時的start_page和game_page的狀態(tài)為True,并在循環(huán)中調(diào)用它們以便保存窗口一直顯示。

start_page = True # 定義初始開始頁面狀態(tài)為Truegame_page = True # 定義初始游戲頁面狀態(tài)為Truewhile True: # 循環(huán) ready() # 啟用ready函數(shù) start(start_page) # 啟用start函數(shù) gamePage(game_page) # 啟用gamePage函數(shù)

Tips:完整示例程序如下:

'''顯示游戲界面點擊開始游戲可進入游戲界面'''import pygame # 導(dǎo)入pygame庫import random # 導(dǎo)入random庫import numpy as np # 導(dǎo)入numpy庫import itertools # 導(dǎo)入itertools庫 pygame.init() # 初始化pygamewidth =240 # 定義寬height=320 # 定義高size=(240,320) # 定義尺寸screen = pygame.display.set_mode(size) # 創(chuàng)建游戲窗口,尺寸為(240,320) # 設(shè)定圖片坐標位Xpts = [0, 48, 96, 144, 192] # x坐標Ypts = [0, 48, 96, 144, 192] # y坐標#map = np.array(list(itertools.product(Xpts, Ypts))) # 25幅圖片坐標ha = itertools.product(Xpts, Ypts) # 將x、y的坐標進行全排列,得到25組數(shù)據(jù)haha = list(ha) # 通過list函數(shù)將全排列后的數(shù)據(jù)轉(zhuǎn)換為列表形式'''得到:[(0, 0), (0, 48), (0, 96), (0, 144), (0, 192), (48, 0), (48, 48), (48, 96), (48, 144), (48, 192), (96, 0), (96, 48), (96, 96), (96, 144), (96, 192), (144, 0), (144, 48), (144, 96), (144, 144), (144, 192), (192, 0), (192, 48), (192, 96), (192, 144), (192, 192)]'''map = np.array(haha) # 把列表中數(shù)據(jù)轉(zhuǎn)換為數(shù)組形式 # 定義準備函數(shù),用于確定圖片def ready(): global list1 # 定義一個全局變量list1 list1 = [[i] for i in range(25)] # 列表解析,根據(jù)一個列表的解析快速生成另一個列表 '''得到:[[0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20], [21], [22], [23], [24]]''' random.shuffle(list1) # 將列表中的所有元素隨機排序 # 定義開始頁面def start(start_page): while start_page: # 當(dāng)進入開始頁面 for event in pygame.event.get(): # 遍歷所有事件 if event.type == pygame.QUIT: # 如果單擊關(guān)閉窗口,則退出 pygame.quit() # 退出pygame screen.blit(pygame.image.load("pic/start-5.png"), (30, 190)) # 在(30,190)顯示圖片start-5.png global t_x, t_y # 定義兩個全局變量t_x, t_y t_x, t_y = pygame.mouse.get_pos() # 獲取鼠標的x和y坐標位,存儲到變量t_x, t_y中 if 30 <= t_x <= 200 and 190 <= t_y <= 250: # 18*50 # 如果鼠標移動到“開始游戲”的圖片所在范圍內(nèi) screen.blit(pygame.image.load("pic/start-6.png"),(30, 190)) # 在(30,190)切換圖片為start-6.png if event.type == pygame.MOUSEBUTTONUP and 30 <= t_x <= 200 and 190 <= t_y <= 250: # 如果鼠標被釋放且移動到“開始游戲”圖片的范圍內(nèi) start_page = False # 定義開始頁面狀態(tài)為False,退出開始頁面 game_page = True # 定義游戲頁面狀態(tài)為True,進入游戲頁面 pygame.display.flip() # 更新全部顯示 # 定義游戲界面def gamePage(game_page): pic_zero = 1 # 出題界面狀態(tài),保證只刷出一次題目 while game_page: # 當(dāng)進入游戲界面 while pic_zero: # 當(dāng)出題界面狀態(tài)為1 for i in range(25): # 循環(huán)25次 screen.blit(pygame.image.load("pic/pic" + str(*list1[i - 1]) + ".png"), map[i]) # 以map中數(shù)組為坐標,顯示指定的25個數(shù)字的初始圖片 pic_zero = 0 # 設(shè)定出題界面狀態(tài)為0(表示已顯示完所有25張數(shù)字的圖片) pygame.display.flip() # 更新全部顯示 start_page = True # 定義初始開始頁面狀態(tài)為Truegame_page = True # 定義初始游戲頁面狀態(tài)為Truewhile True: # 循環(huán) ready() # 啟用ready函數(shù) start(start_page) # 啟用start函數(shù) gamePage(game_page) # 啟用gamePage函數(shù)

2、程序運行

STEP1:遠程連接行空板

STEP2:運行程序并觀察效果

點擊運行后,觀察行空板,可以看到當(dāng)手指帶動光標移動到“開始游戲”的圖標上時,文字由藍色變?yōu)榫G色,移開后又恢復(fù)藍色。而當(dāng)手指點擊綠色的“開始游戲”圖標后,則進入了游戲的界面,顯示出一組灰色隨機排序的1-25的數(shù)字圖片。

pYYBAGKYaoOAfkIfAABKL3IBxFg952.pngpYYBAGKYaoGASNxjAABLFuUG-3Y771.pngpoYBAGKYaoKAaLyFAABp-KdRNEs589.png

Tips:長按行空板Home鍵5秒,可退出程序。

任務(wù)描述3:設(shè)定游戲機制

接下來,我們將設(shè)定完整的游戲機制,實現(xiàn)當(dāng)按順序點擊數(shù)字圖片后,圖片切換顏色,同時記錄點擊完所需的時間,時間越短,注意力越集中。

1、程序編寫

STEP1:創(chuàng)建與保存項目文件

新建一個Python程序文件“main3.py”,雙擊打開。

STEP2:程序編寫

(1)添加音效和文字對象

這里,為了能進一步優(yōu)化游戲效果,我們在上面程序的基礎(chǔ)上添加背景音效,當(dāng)未按順序點擊數(shù)字圖片時,觸發(fā)背景音。同時,我們創(chuàng)建一個字體對象,以便在后續(xù)顯示所消耗的時間。

# 載入音效wavFileName = 'sounds/fire.wav' # 設(shè)置音效文件路徑sndTrack = pygame.mixer.music.load(wavFileName) # 加載音效文件# 計時器文本準備font = pygame.font.SysFont('Arial', 60) # 創(chuàng)建一個Font字體對象

(2)開始計時

為了能及時記錄時間,我們在開始頁面的程序中,補充設(shè)定當(dāng)進入游戲界面后,就開始記錄時間。同時為了確保只在游戲結(jié)束后顯示時間,這里我們給屏幕填充黑色。

global time_start # 定義開始計時的全局變量 screen.fill((0,0,0)) # 填充黑色 time_start = time.time() # 計時,返回當(dāng)前時間的時間戳

(3)設(shè)定機制

接下里,我們在游戲界面添加機制,實現(xiàn)當(dāng)數(shù)字圖片被點擊后,在同一位置切換另一張相同數(shù)字不同顏色的圖片。

for event in pygame.event.get(): # 遍歷所有事件 if event.type == pygame.QUIT: # 如果單擊關(guān)閉窗口,則退出 pygame.quit() # 退出pygame for i in range(25): # 循環(huán)25次 # 如果鼠標被釋放且在某一張數(shù)字圖片范圍內(nèi) if event.type == pygame.MOUSEBUTTONUP and map[i][0] <= event.pos[0] <= map[i][0] + 48 and map[i][1] <= event.pos[1] <= map[i][1] + 48: if int(*list1[i-1]) == zero: # 如果被點擊的是圖片列表中的第0張 screen.blit(pygame.image.load("pic/qic" + str(*list1[i-1]) + ".png"), map[i]) # 以map中數(shù)組為坐標,顯示指定的25個數(shù)字被點擊后的圖片 zero = zero + 1 # 數(shù)字+1 print(zero) # 打印數(shù)字

(4)顯示時間

之后,當(dāng)最后一張數(shù)字圖片25被點擊后,我們在屏幕上顯示記錄的時間,這里,為了使文字顯示能居中對齊,我們先創(chuàng)建一個以給定位置為中心的文字填充矩形,隨后再在其上顯示時間文本。

if zero == 25: # 如果數(shù)字達到了25 time_end = time.time() # 結(jié)束計時 time_c = round(time_end - time_start, 1) # 計算運行所花時間,保留1位小數(shù) print('time cost:', int(time_c), 's') # 打印顯示所花時間,單位為秒 text = font.render(str(time_c) + 's', True, (0, 255, 0),(0, 0, 128)) # 繪制關(guān)于計時的文本,文本顏色為綠,背景顏色為藍 text_rect = text.get_rect(center=(120, 290)) # 創(chuàng)建一個以給定位置(120,290)為中心的文字填充矩形 screen.blit(text,text_rect) # 在填充矩形上顯示時間文本

(5)重新開始游戲

當(dāng)一輪游戲結(jié)束后,我們設(shè)定再次顯示開始游戲的界面,以便重新開始。

if event.type == pygame.MOUSEBUTTONUP and 30 <= t_x <= 210 and 200 <= t_y <= 250: # 如果鼠標被釋放且移動到“開始游戲”圖片范圍內(nèi) start_page = True # 定義開始頁面狀態(tài)為True,進入開始頁面 game_page = False # 定義游戲頁面狀態(tài)為False,退出游戲頁面

(6)循環(huán)調(diào)用

最后,我們補充添加音效,使得在未按順序點擊數(shù)字后,播放背景音。

pygame.mixer.music.play() # 錯誤時播放音樂

Tips:完整示例程序如下:

'''設(shè)定游戲機制,完整舒爾特方格游戲按順序依次點擊1-25的圖片,計算時間'''import pygame # 導(dǎo)入pygame庫import random # 導(dǎo)入random庫import numpy as np # 導(dǎo)入numpy庫import itertools # 導(dǎo)入itertools庫import time # 導(dǎo)入time庫 pygame.init() # 初始化pygamewidth =240 # 定義寬height=320 # 定義高size=(240,320) # 定義尺寸screen = pygame.display.set_mode(size) # 創(chuàng)建游戲窗口,尺寸為(240,320) # 載入音效wavFileName = 'sounds/fire.wav' # 設(shè)置音效文件路徑sndTrack = pygame.mixer.music.load(wavFileName) # 加載音效文件# 計時器文本準備font = pygame.font.SysFont('Arial', 60) # 創(chuàng)建一個Font字體對象 # 設(shè)定圖片坐標位Xpts = [0, 48, 96, 144, 192] # x坐標Ypts = [0, 48, 96, 144, 192] # y坐標#map = np.array(list(itertools.product(Xpts, Ypts))) # 25幅圖片坐標ha = itertools.product(Xpts, Ypts) # 將x、y的坐標進行全排列,得到25組數(shù)據(jù)haha = list(ha) # 通過list函數(shù)將全排列后的數(shù)據(jù)轉(zhuǎn)換為列表形式'''得到:[(0, 0), (0, 48), (0, 96), (0, 144), (0, 192), (48, 0), (48, 48), (48, 96), (48, 144), (48, 192), (96, 0), (96, 48), (96, 96), (96, 144), (96, 192), (144, 0), (144, 48), (144, 96), (144, 144), (144, 192), (192, 0), (192, 48), (192, 96), (192, 144), (192, 192)]'''map = np.array(haha) # 把列表中數(shù)據(jù)轉(zhuǎn)換為數(shù)組形式 # 定義準備函數(shù),用于確定圖片序號def ready(): global list1 # 定義一個全局變量list1 list1 = [[i] for i in range(25)] # 列表解析,根據(jù)一個列表的解析快速生成另一個列表 '''得到:[[0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20], [21], [22], [23], [24]]''' random.shuffle(list1) # 將列表中的所有元素隨機排序 # 定義開始界面def start(start_page): while start_page: # 當(dāng)進入開始頁面 for event in pygame.event.get(): # 遍歷所有事件 if event.type == pygame.QUIT: # 如果單擊關(guān)閉窗口,則退出 pygame.quit() # 退出pygame screen.blit(pygame.image.load("pic/start-5.png"), (30, 190)) # 在(30,190)顯示圖片start-5.png global t_x, t_y # 定義兩個全局變量t_x, t_y t_x, t_y = pygame.mouse.get_pos() # 獲取鼠標的x和y坐標位,存儲到變量t_x, t_y中 if 30 <= t_x <= 200 and 190 <= t_y <= 250: # 18*50 # 如果鼠標移動到“開始游戲”的圖片范圍內(nèi) screen.blit(pygame.image.load("pic/start-6.png"),(30, 190)) # 在(30,190)切換圖片為start-6.png if event.type == pygame.MOUSEBUTTONUP and 30 <= t_x <= 200 and 190 <= t_y <= 250: # 如果鼠標被釋放且橫縱坐標在“開始游戲”圖片的范圍內(nèi) start_page = False # 定義開始頁面狀態(tài)為False,退出開始頁面 game_page = True # 定義游戲頁面狀態(tài)為True,進入游戲頁面 global time_start # 定義開始計時的全局變量 screen.fill((0,0,0)) # 填充黑色 time_start = time.time() # 計時,返回當(dāng)前時間的時間戳 pygame.display.flip() # 更新全部顯示 # 定義游戲界面def gamePage(game_page): zero = 0 # 此處添加了一個變量用來確保從最小的數(shù)字開始變 pic_zero = 1 # 出題界面狀態(tài),保證只刷出一次題目 while game_page: # 當(dāng)進入游戲界面 while pic_zero: # 當(dāng)出題界面狀態(tài)為1 for i in range(25): # 循環(huán)25次 screen.blit(pygame.image.load("pic/pic" + str(*list1[i - 1]) + ".png"), map[i]) # 以map中數(shù)組為坐標,顯示指定的25個數(shù)字的初始圖片 pic_zero = 0 # 設(shè)定出題界面狀態(tài)為0(表示已顯示完所有25張數(shù)字的圖片) for event in pygame.event.get(): # 遍歷所有事件 if event.type == pygame.QUIT: # 如果單擊關(guān)閉窗口,則退出 pygame.quit() # 退出pygame for i in range(25): # 循環(huán)25次 # 如果鼠標被釋放且在某一張數(shù)字圖片范圍內(nèi) if event.type == pygame.MOUSEBUTTONUP and map[i][0] <= event.pos[0] <= map[i][0] + 48 and map[i][1] <= event.pos[1] <= map[i][1] + 48: if int(*list1[i-1]) == zero: # 如果被點擊的是圖片列表中的第0張 screen.blit(pygame.image.load("pic/qic" + str(*list1[i-1]) + ".png"), map[i]) # 以map中數(shù)組為坐標,顯示指定的25個數(shù)字被點擊后的圖片 zero = zero + 1 # 數(shù)字+1 print(zero) # 打印數(shù)字 if zero == 25: # 如果數(shù)字達到了25 time_end = time.time() # 結(jié)束計時 time_c = round(time_end - time_start, 1) # 計算運行所花時間,保留1位小數(shù) print('time cost:', int(time_c), 's') # 打印顯示所花時間,單位為秒 text = font.render(str(time_c) + 's', True, (0, 255, 0),(0, 0, 128)) # 繪制關(guān)于計時的文本,文本顏色為綠,背景顏色為藍 text_rect = text.get_rect(center=(120, 290)) # 創(chuàng)建一個以給定位置(120,290)為中心的文字填充矩形 screen.blit(text,text_rect) # 在填充矩形上顯示時間文本 #screen.blit(text, (40, 250)) # 在窗口的(40,250)位置顯示時間文本 if event.type == pygame.MOUSEBUTTONUP and 30 <= t_x <= 210 and 200 <= t_y <= 250: # 如果鼠標被釋放且移動到“開始游戲”圖片范圍內(nèi) start_page = True # 定義開始頁面狀態(tài)為True,進入開始頁面 game_page = False # 定義游戲頁面狀態(tài)為False,退出游戲頁面 pygame.display.flip() # 更新全部顯示 else: pygame.mixer.music.play() # 錯誤時播放音樂 pygame.display.flip() # 更新全部顯示 start_page = True # 定義初始開始頁面狀態(tài)為Truegame_page = True # 定義初始游戲頁面狀態(tài)為Truewhile True: # 循環(huán) ready() # 啟用ready函數(shù) start(start_page) # 啟用start函數(shù) gamePage(game_page) # 啟用gamePage函數(shù)

2、程序運行

STEP1:遠程連接行空板

STEP2:連接USB小喇叭

將小喇叭連接在行空板的側(cè)邊USB口上。

STEP3:運行程序并觀察效果

點擊運行后,觀察行空板,當(dāng)手指點擊綠色的“開始游戲”圖標后,則進入了游戲的界面,之后按順序點擊數(shù)字圖片,被點擊的數(shù)字變成了粉紅色,而當(dāng)我們未能按順序點擊時,小喇叭播放出了背景音。

并且,當(dāng)我們結(jié)束一次游戲后,可在屏幕上再點擊一下,顯示出“開始游戲”的字樣后又可以繼續(xù)進行游戲啦。

pYYBAGKYaoGASNxjAABLFuUG-3Y771.png

行空板游戲運行效果

poYBAGKYaoKAaLyFAABp-KdRNEs589.png

行空板游戲運行效果

pYYBAGKYaoKAO0AkAAB8tz9rSPY425.png

行空板游戲運行效果

挑戰(zhàn)自我

1、和自己比一比,看看連續(xù)三次游戲,需要花費多少時間吧!

2、自己從網(wǎng)上下載一首音樂,作為背景音添加進來吧,想一想,程序該怎么調(diào)整呢?

更多行空板Python入門教程請關(guān)注“蘑菇云創(chuàng)客”公眾號。

審核編輯:符乾江

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 開源硬件
    +關(guān)注

    關(guān)注

    8

    文章

    217

    瀏覽量

    30560
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4825

    瀏覽量

    86453
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    小馬智亮相2025香港車博會

    6月12日-15日,2025國際汽車及供應(yīng)鏈博覽會(下稱“香港車博會”)在香港亞洲國際博覽館舉辦。小馬智第七代無人駕駛Robotaxi 豐田鉑智4X 強勢亮相,展示了最新的自動駕駛軟硬件系統(tǒng)和技術(shù)亮點。這也是小馬智
    的頭像 發(fā)表于 06-13 16:41 ?357次閱讀

    小馬智第七代自動駕駛車輛廣深開跑

    近日,搭載小馬智第七代自動駕駛系統(tǒng)的廣汽埃安霸王龍自動駕駛車輛,正式獲得智能網(wǎng)聯(lián)汽車道路測試牌照,在廣州和深圳開啟公開道路測試。這意味著小馬智第七代自動駕駛車輛在完成實驗室與封閉場
    的頭像 發(fā)表于 06-11 10:54 ?1079次閱讀

    跟老齊學(xué)Python:從入門到精通

    本帖最后由 yuu_cool 于 2025-6-3 16:52 編輯 本資料是面向編程零基礎(chǔ)讀者的Python 入門教程,內(nèi)容涵蓋了Python 的基礎(chǔ)知識和初步應(yīng)用。以比較輕快的風(fēng)格,向零基
    發(fā)表于 06-03 16:10

    小馬智第七代Robotaxi車型搭載禾賽AT128激光雷達

    近日,全球 L4 級自動駕駛領(lǐng)軍企業(yè)小馬智于 2025 上海車展舉辦“向新而行”新聞發(fā)布會。全球首發(fā)第七代車規(guī)級自動駕駛軟硬件系統(tǒng)方案,三款第七代 Robotaxi 家族量產(chǎn)車型,均搭載 4 顆禾
    的頭像 發(fā)表于 04-27 16:18 ?367次閱讀

    OpenHarmony應(yīng)用開發(fā)精品課程第七期來啦

    OpenHarmony應(yīng)用開發(fā)精品課程第七期來啦
    的頭像 發(fā)表于 04-15 14:15 ?185次閱讀
    OpenHarmony應(yīng)用開發(fā)精品課程<b class='flag-5'>第七</b>期來啦

    python入門圣經(jīng)-高清電子書(建議下載)

    此資料內(nèi)容是一本針對所有層次的Python 讀者而作的Python 入門電子書。 全書分兩部分:第一部分介紹用Python 編程所必須了解的基本概念,包括matplotlib、NumP
    發(fā)表于 04-10 16:53

    如何安裝模擬器玩nes小游戲-基于米爾瑞芯微RK3576開發(fā)

    本篇源自:優(yōu)秀創(chuàng)作者 小手涼涼本文將介紹基于米爾電子MYD-LR3576開發(fā)(米爾基于瑞芯微 RK3576開發(fā))的安裝模擬器玩nes小游戲方案測試。 核心系統(tǒng) 操作系統(tǒng)鏡像文件說
    發(fā)表于 02-08 12:10

    洲明科技榮獲第七屆天鴿獎“年度影響力企業(yè)獎”

    近日,第七屆“天鴿獎”頒獎典禮在洲明福永總部XR虛擬棚圓滿落幕。
    的頭像 發(fā)表于 12-17 11:05 ?596次閱讀

    FPGA打磚塊小游戲設(shè)計思路

    ? 交流問題 ? Q :FPGA打磚塊小游戲,如何基于FPGA用verilog語言在Vivado平臺上寫打磚塊小游戲,最好能用到PS2與VGA。 A :以下是一個基于 FPGA? Verilog
    的頭像 發(fā)表于 12-09 16:57 ?893次閱讀

    羅克韋自動化亮相第七屆進博會

    第七屆中國國際進口博覽會(簡稱“進博會”)于11月5日至10日在上海國家會展中心盛大舉行。作為工業(yè)自動化、信息化和數(shù)字化轉(zhuǎn)型領(lǐng)域的全球領(lǐng)先企業(yè)之一,羅克韋自動化以“鏈動未來,賦能人類社會可持續(xù)發(fā)展”為長期目標,受邀出席多場 ESG 主題活動,攜手生態(tài)伙伴共塑綠色未來。
    的頭像 發(fā)表于 12-09 09:29 ?587次閱讀

    博世第七季“數(shù)據(jù)時代”活動圓滿結(jié)束

    博世汽車電子事業(yè)部中國區(qū)第七季“數(shù)據(jù)時代”活動于2024年10月30日成功舉辦!
    的頭像 發(fā)表于 10-31 14:07 ?575次閱讀

    SHUREPGX2無線話筒手持發(fā)射器原理圖

    SHURE ?PGX2無線話筒手持發(fā)射器原理圖附印制
    發(fā)表于 10-14 11:40 ?6次下載

    SHURPGX4無線話筒接收機原理圖

    SHURE ?PGX4無線話筒接收機原理圖附印制
    發(fā)表于 10-12 14:57 ?6次下載

    SLX4無線話筒接收機原理圖:二次變頻超外差部分

    SLX4無線話筒接收機110MHz變10.7MHz二次變頻超外差部分實測原理圖
    發(fā)表于 09-29 11:18 ?29次下載

    音質(zhì)與信號的穩(wěn)定性對比:、森海塞爾與AMSaudio的終極測評

    在無線話筒領(lǐng)域,和森海塞爾一直是頂尖音質(zhì)與穩(wěn)定性的代表。然而,AMSaudio作為一個不斷崛起的品牌,憑借其高性價比和創(chuàng)新技術(shù),逐漸成為市場中的有力競爭者。本文將從音質(zhì)、信號穩(wěn)定性和抗干擾能力
    的頭像 發(fā)表于 09-29 10:51 ?2077次閱讀