開發(fā)工具
Python版本:3.6.4
相關(guān)模塊:
pygame模塊;
以及一些Python自帶的模塊。
環(huán)境搭建
安裝Python并添加到環(huán)境變量腥例,pip安裝需要的相關(guān)模塊即可糟趾。
原理簡介
游戲規(guī)則(改編自維基百科):
從1~10這十個(gè)數(shù)字中隨機(jī)抽取4個(gè)數(shù)字(可重復(fù))原朝,對(duì)這四個(gè)數(shù)運(yùn)用加、減假瞬、乘省店、除和括號(hào)進(jìn)行運(yùn)算得出24。每個(gè)數(shù)字都必須使用一次笨触,但不能重復(fù)使用懦傍。詳見:
https://zh.wikipedia.org/wiki/24%E7%82%B9
逐步實(shí)現(xiàn):
Step1****:制作24點(diǎn)生成器
既然是24點(diǎn)小游戲,當(dāng)然要先定義一個(gè)24點(diǎn)游戲生成器啦芦劣。主要思路就是隨機(jī)生成4個(gè)有解的數(shù)字粗俱,且范圍在1~10之間,代碼實(shí)現(xiàn)如下:
在驗(yàn)證4個(gè)數(shù)字是否有解并求出所有解部分虚吟,我直接暴力枚舉然后去重了寸认,感興趣的同學(xué)可以自己再優(yōu)化一下求解算法(有數(shù)字重復(fù)的時(shí)候)。我的代碼如下圖所示串慰,其實(shí)就是遞歸枚舉所有排序然后一一驗(yàn)證是否有解:
Step2****:定義游戲精靈類因?yàn)橥婕倚枰ㄟ^鼠標(biāo)點(diǎn)擊來操作卡片偏塞,這時(shí)候就涉及到一些碰撞檢測(cè)。所以先定義一些必要的游戲精靈類邦鲫。①卡片類
卡片類的定義也很簡單灸叼,在屏幕上根據(jù)被賦予的屬性值來顯示自身即可神汹。當(dāng)然之后也需要根據(jù)用戶的操作來改變這些屬性值(內(nèi)容、顏色古今、字體等)并在屏幕上根據(jù)屬性的改變而改變顯示狀態(tài)即可屁魏。具體而言代碼實(shí)現(xiàn)如下:
②按鈕類
按鈕類和卡片類類似,唯一的不同點(diǎn)就是在用戶點(diǎn)擊按鈕時(shí)需要根據(jù)該按鈕的功能來響應(yīng)用戶的本次點(diǎn)擊操作(即實(shí)現(xiàn)一次該功能)捉腥。因此只需要繼承卡片類氓拼,然后再定義一個(gè)響應(yīng)用戶點(diǎn)擊按鈕事件的回調(diào)函數(shù)即可。代碼實(shí)現(xiàn)如下:
Step3****:實(shí)現(xiàn)游戲主循環(huán)先構(gòu)思一下怎么設(shè)計(jì)游戲主界面抵碟,個(gè)人的簡單設(shè)計(jì)草圖如下(不是特別走心的設(shè)計(jì)草圖T_T):
OK桃漾,開搞。先初始化拟逮、加載必要的素材和定義必要的變量呈队,代碼實(shí)現(xiàn)如下:
游戲主循環(huán)主要分三個(gè)部分,首先是按鍵檢測(cè):
根據(jù)檢測(cè)結(jié)果更新卡片狀態(tài)和一些變量:
當(dāng)有兩個(gè)數(shù)字和一個(gè)運(yùn)算符被點(diǎn)擊時(shí)唱歧,則執(zhí)行被點(diǎn)擊數(shù)字1{+/-/×/÷}被點(diǎn)擊數(shù)字2操作(數(shù)字1宪摧、2根據(jù)點(diǎn)擊順序確定),并進(jìn)一步更新卡片屬性和一些必要的變量:
最后根據(jù)各個(gè)卡片的屬性在屏幕上顯示各個(gè)卡片颅崩,若游戲勝利/游戲失敗几于,則同時(shí)顯示游戲勝利/游戲失敗提示框:
好的,我介紹完了
All Done沿后!完整源代碼歡迎與我交流沿彭。