
發(fā)布
注冊
/
登錄小游戲的案例
Python自動玩"別再踩白塊了"小游戲
先睹為快
首先,在瀏覽器中打開下面這個游戲鏈接:
打開瀏覽器搜索4399小游戲
游戲加載完畢后,選擇該游戲的經(jīng)典模式,游戲界面類似下圖所示:
在cmd窗口運(yùn)行autoplay.py文件即可讓python自動玩這個小游戲了~
由于游戲主界面的位置隨電腦和瀏覽器的不同而不同,因此,若運(yùn)行失敗,請自行調(diào)整下圖所示的bbox參數(shù):
4個數(shù)字分別代表游戲界面左上頂點x坐標(biāo),y坐標(biāo)和右下頂點x坐標(biāo),y坐標(biāo)。
原理簡介
游戲規(guī)則:
原理介紹:
原理其實挺簡單的,主循環(huán)的代碼如下圖所示:
首先是截取游戲界面:
游戲規(guī)則:
原理介紹:
原理其實挺簡單的,主循環(huán)的代碼如下圖所示:
首先是截取游戲界面:
二值化游戲界面:
形態(tài)學(xué)處理:
實現(xiàn)輪廓檢測:
利用pyautogui模塊模擬點擊檢測到的黑塊就可以實現(xiàn)自動玩這個游戲了。
展開 自動玩Chrome瀏覽器的小恐龍游戲
關(guān)注公眾號:Python學(xué)習(xí)指南,回復(fù)“小恐龍游戲2”獲取源碼
環(huán)境搭建
安裝Python并添加到環(huán)境變量,pip安裝需要的相關(guān)模塊即可。
原理簡介
T-Rex Rush是谷歌瀏覽器里自帶的一個彩蛋小游戲,電腦斷網(wǎng)的時候按下空格鍵就可以觸發(fā)。或者直接訪問如下鏈接也可以:
https://chromedino.com/
大概長這個樣子:
玩法很簡單,玩家通過操縱空格鍵來控制小恐龍?zhí)S或者不跳躍,從而躲避路上的障礙物。當(dāng)小恐龍不小心撞到障礙物時,游戲結(jié)束。
python制作類似八音符小游戲
原理介紹
相信很多人對八音符這款游戲并不陌生吧,其核心玩法是利用聲音控制一個帶辮子的小黑球不斷前進(jìn),大概是長這樣子的吧:
今天我們就來做一個低配版本的T_T,其功能為利用聲音控制皮卡丘不斷前進(jìn)。
游戲主要使用了cocos2d模塊和pyaudio模塊,前者用于搭建游戲框架,后者用于獲得麥克風(fēng)的聲音。
Step1 定義皮卡丘類:
既然游戲的主角是皮卡丘,那我們總得單獨定義一個類來體現(xiàn)一下主角吧?
利用cocos2d模塊來定義主角類是一件非常輕松的事情。你只需要繼承sprites類,然后告訴sprites類需要執(zhí)行什么操作即可。
根據(jù)八音符的游戲規(guī)則,我們賦予皮卡丘跳躍、下降和靜止的能力,同時,我們規(guī)定皮卡丘在空中時無法進(jìn)行跳躍。具體代碼如下:
Step2 定義block類:
顯然,主角需要有站的地方吧T_T,到處都是萬丈深淵怕是一萬只皮卡丘也拯救不了地球人吧T_T。
對于地面,剛開始的時候先得有一段長點的平地緩沖一下,讓玩家先試試自己的嗓音,然后再隨機(jī)生成跳躍塊,讓玩家展示自己的歌喉。具體代碼如下:
Step3 實現(xiàn)游戲主循環(huán):
有了上面的鋪墊,就可以開始實現(xiàn)我們的小游戲了。
此時我們需要繼承ColorLayer類來實現(xiàn)游戲主循環(huán)。首先,我們定義聲控條類來“暗中觀察”我們的嗓音,代碼如下:
然后就是實例化皮卡丘類和block類,其中,block類將被放置進(jìn)容器以方便整體處理。代碼如下:
啊,千萬別忘了只有輸入了聲音才能控制我們的皮卡丘不停地運(yùn)動,代碼如下:
最后,我們需要告訴程序游戲規(guī)則,那就是根據(jù)麥克風(fēng)接收到的聲音的音量來控制聲控條的長短以及皮卡丘的動作。這里,我們通過block塊的整體后移來實現(xiàn)皮卡丘的前進(jìn)效果。
展開 一串JS代碼Hack簡單考眼力小游戲
最近在群里閑聊的時候發(fā)現(xiàn)大家在玩一款考眼力的網(wǎng)頁小游戲,這個游戲簡單來說就是從方塊中找出不同的。在規(guī)定的時間通過的關(guān)卡越多越好。最后游戲會根據(jù)你通過的關(guān)卡數(shù)量來給你評分。但是人類的眼力是有極限的,而裝逼的欲望沒有。So, 我就開始研究如何愉快的用JS作弊了。
網(wǎng)頁分析
Hack這種事情是講究化勁的,知己知彼才能成功。第一步當(dāng)然是先分析一下網(wǎng)頁了。打開Chrome自帶的開發(fā)者工具可以看到,這些方塊不過就是span標(biāo)簽搭配RGB顏色。而我們知道游戲規(guī)則是所有的方塊里面只有一個是不同的,所以我們只需要找到那個不同的,然后模擬點擊那個元素就可以了。
代碼實現(xiàn)
說干就干。由于游戲限制實現(xiàn)是60秒,所以我們?yōu)榱苏{(diào)試方便,可以用一段JS先把網(wǎng)頁內(nèi)所有的計時器停掉。
借著根據(jù)我們之前發(fā)現(xiàn)的原理,構(gòu)造原型代碼驗證思路。
A few moments later……
這段代碼的意圖很明顯,為每一種顏色建立一個字典,記錄出現(xiàn)了多少次,然后我們遍歷字典,只出現(xiàn)了一次的顏色自然就是我們要找的方塊了。接著我們拿著得到的顏色代碼,再去文檔中對著所有的方塊比對,最后找到元素并點擊。為這個函數(shù)設(shè)置一個計時器定時啟動,便大功告成了,把代碼輸入開發(fā)者工具,試試效果。
Impressive! 效果非常不錯,我當(dāng)時看到的最厲害的人,也不過只能打到lv40而已。但是我們的代碼還是有一些冗余,還有優(yōu)化提高的空間。
在交流中,其他人在我的代碼的基礎(chǔ)上,給出了性能更強(qiáng)更精簡的改進(jìn)版。
這段代碼妙就妙在用了requestAnimationFrame代替了計時器,真正達(dá)到了機(jī)器能跑多快跑多快,完全釋放了機(jī)器的全部性能,能限制速度的也只有瀏覽器渲染的速度了。
展開 
Python代碼制作24點小游戲
原
理
簡
介
游戲規(guī)則(改編自維基百科):
從1~10這十個數(shù)字中隨機(jī)抽取4個數(shù)字(可重復(fù)),對這四個數(shù)運(yùn)用加、減、乘、除和括號進(jìn)行運(yùn)算得出24。每個數(shù)字都必須使用一次,但不能重復(fù)使用。詳見:
https://zh.wikipedia.org/wiki/24%E7%82%B9
逐步實現(xiàn):
Step1:制作24點生成器
既然是24點小游戲,當(dāng)然要先定義一個24點游戲生成器啦。主要思路就是隨機(jī)生成4個有解的數(shù)字,且范圍在1~10之間,代碼實現(xiàn)如下:
在驗證4個數(shù)字是否有解并求出所有解部分,我直接暴力枚舉然后去重了,感興趣的同學(xué)可以自己再優(yōu)化一下求解算法(有數(shù)字重復(fù)的時候)。我的代碼如下圖所示,其實就是遞歸枚舉所有排序然后一一驗證是否有解:
Step2
:定義游戲精靈類
因為玩家需要通過鼠標(biāo)點擊來操作卡片,這時候就涉及到一些碰撞檢測。
所以先定義一些必要的游戲精靈類。
①卡片類
卡片類的定義也很簡單,在屏幕上根據(jù)被賦予的屬性值來顯示自身即可。當(dāng)然之后也需要根據(jù)用戶的操作來改變這些屬性值(內(nèi)容、顏色、字體等)并在屏幕上根據(jù)屬性的改變而改變顯示狀態(tài)即可。具體而言代碼實現(xiàn)如下:
②按鈕類
按鈕類和卡片類類似,唯一的不同點就是在用戶點擊按鈕時需要根據(jù)該按鈕的功能來響應(yīng)用戶的本次點擊操作(即實現(xiàn)一次該功能)。因此只需要繼承卡片類,然后再定義一個響應(yīng)用戶點擊按鈕事件的回調(diào)函數(shù)即可。
展開 今天給大家演示哈密頓環(huán)自動玩貪吃蛇小游戲呀~
原理簡介
這里我們主要講如何設(shè)計算法來自動玩貪吃蛇小游戲。先來簡單介紹一下哈密頓環(huán)的定義(引自維基百科):
哈密頓圖是一個無向圖,由哈密頓爵士提出,
由指定的起點前往指定的終點,途中經(jīng)過所有其他節(jié)點且只經(jīng)過一次。
在圖論中是指含有哈密頓回路的圖,
閉合的哈密頓路徑稱作哈密頓回路(Hamiltonian cycle),
含有圖中所有頂點的路徑稱作哈密頓路徑
(英語:Hamiltonian path,或Traceable path)。
哈密爾頓圖的定義:G=(V,E)是一個圖,
若G中一條通路通過且僅通過每一個頂點一次,
稱這條通路為哈密爾頓通路。
若G中一個圈通過且僅通過每一個頂點一次,稱這個圈為哈密爾頓圈。
若一個圖存在哈密爾頓圈,就稱為哈密爾頓圖。
舉個例子,有一個4*4的地圖:
那么哈密頓環(huán)就可以是(不唯一):
通過構(gòu)造哈密頓環(huán),我們就可以很輕松地保證蛇在運(yùn)動的過程中不會因為撞到自己而死掉。舉個例子,假設(shè)格子0,1,2是我們的貪吃蛇,其中2為蛇頭,0為蛇尾,其余為蛇身,則我們可以通過以下算法來構(gòu)造哈密頓環(huán)(圖源參考文獻(xiàn)[1]):
注意,該算法并不是用來找哈密頓環(huán)的通用算法,因此存在找不到哈密頓環(huán)的情況(為了提高算法找到哈密頓環(huán)的概率,我們把原版游戲地圖里的4025個方格改成了2020個方格)。
展開 python制作“小兔子和Bun"小游戲
效果:
Step10:免費的音樂和聲音效果
這個游戲現(xiàn)在相當(dāng)不錯了,但是沒有聲音。有點靜了。加上一點聲音效果,能讓你更好地感受這個游戲。
效果:
當(dāng)然是會各種音效啦~~~圖片大概是表達(dá)不了了emm。
如何給《羊了個羊》配置一套智能客服系統(tǒng)?
至此,將微信小游戲接入智能客服的演示就完成了,希望能夠?qū)Ω?em>小游戲、小程序開發(fā)團(tuán)隊有所幫助。
python制作拼圖小游戲
原理介紹
游戲簡介:
將圖像分為m×n個矩形塊,并將圖像右下角的矩形塊替換為空白塊后,將這些矩形塊隨機(jī)擺放成原圖像的形狀。游戲目標(biāo)為通過移動非空白塊將隨機(jī)擺放獲得的圖像恢復(fù)成原圖像的模樣,且規(guī)定移動操作僅存在于非空白塊移動到空白塊。
例如下圖所示:
逐步實現(xiàn):
Step1:游戲初始界面
既然是游戲,總得有個初始界面吧?
OK,我們先寫一個游戲初始界面:
效果是這樣子的:
根據(jù)玩家自身水平,可以選擇不同難度的拼圖游戲。
Step2:定義移動操作
定義移動操作的目的是為了移動拼圖(好像是廢話T_T),具體實現(xiàn)起來十分簡單:
Step3:游戲主界面
OK,有了前面的鋪墊,我們可以開始實現(xiàn)我們的游戲主界面了。
首先,我們需要打亂拼圖,但是隨機(jī)打亂很可能導(dǎo)致拼圖無解,因此我們通過隨機(jī)移動拼圖來實現(xiàn)打亂拼圖的效果,這也是我們先定義拼圖的移動操作的主要原因:
游戲主界面初始化:
最后實現(xiàn)主界面的顯示刷新以及事件響應(yīng)等功能:
Step4:游戲結(jié)束界面
當(dāng)玩家完成拼圖后,需要顯示游戲結(jié)束界面,和游戲初始界面類似,實現(xiàn)起來都比較簡單:
OK,大功告成!!!
展開 Python制作推箱子小游戲
同時也應(yīng)當(dāng)自帶一個方法來判斷此地圖上的箱子是否都已經(jīng)送到了指定位置(這樣子方便切換關(guān)卡):
Step3:定義游戲界面類
游戲界面類負(fù)責(zé)解析levels文件夾下的游戲各關(guān)卡的地圖文件,并利用游戲地圖類創(chuàng)建并顯示游戲地圖:
同時因為游戲地圖面積>游戲窗口界面, 所以該類需要增加根據(jù)人物位置滾動游戲地圖的功能:
Step4:定義某關(guān)的游戲主循環(huán)
主循環(huán)主要負(fù)責(zé)實例化游戲界面類,并根據(jù)按鍵檢測的結(jié)果對游戲界面類進(jìn)行一些操作:
其中人物移動的邏輯為:
人移動的目標(biāo)位置為空白格,則人移動;若撞到箱子,箱子可以和人方向一樣移動一格,則人和箱子均移動;其他情況人和箱子均無法移動。
Step5:定義游戲開始、切換和結(jié)束界面
做的比較簡陋,直接給源碼吧。
開始界面:
切換界面:
結(jié)束界面:
Step6:實現(xiàn)游戲主函數(shù)
把所有界面串起來就好啦:
All Done!完整源代碼詳見相關(guān)文件。
展開 Python制作塔防小游戲
主代碼如下:
Step3:實現(xiàn)游戲選擇界面
要點同步驟二,主代碼如下:
游戲難度定義在一個.json文件夾中,例如:
Step4:實現(xiàn)游戲界面
首先,將地圖設(shè)計在.map文件中,不同的數(shù)字代表不同的地圖元素,例如:
這樣就可以很方便地導(dǎo)入不同的地圖:
其次就是畫工具欄:
如此一來,游戲界面的雛形就出來了。接下來就是每隔一段時間產(chǎn)生一批敵人:
通過按鍵檢測和定義一些函數(shù)來實現(xiàn)用戶與游戲的交互,例如造塔等操作。其中按鍵檢測的代碼如下:
操作函數(shù)的定義如下:
當(dāng)然,當(dāng)檢測到暫停按鈕被按下時,你需要將游戲切入暫停界面:
其中按鍵閃爍的實現(xiàn)主要依靠每隔一小段時間顯示一次按鍵實現(xiàn),其它要點同步驟二。
最后,就是讓箭塔可以不停地射箭并且通過碰撞檢測來判斷箭是否射中了敵人(射中的話敵人生命值會下降,下降到0時敵人才會死掉),畫出游戲界面中還存在著的所有元素:
當(dāng)然,如果城堡死掉了,那么游戲也就結(jié)束了:
Step5:實現(xiàn)結(jié)束界面
要點同步驟二,主代碼如下:
All Done!完整源代碼詳見相關(guān)文件。
展開 
基于Python的《瑪麗冒險》小游戲 ¥50
注意:在使用第三方模塊時,首先需要使用pip install命令安裝該模塊,可以在Python命令窗口中執(zhí)行以下命令:
在PyCharm中運(yùn)行《瑪麗冒險》即可進(jìn)入如圖1所示的游戲主界面。
圖1 游戲主界面
具體的操作步驟如下:
(1)游戲主窗體界面顯示后,游戲的背景地圖將自動加載與移動,此時會隨機(jī)出現(xiàn)管道、導(dǎo)彈障礙物。當(dāng)遇到障礙物時按下鍵盤中的空格按鍵,瑪麗將實現(xiàn)跳躍,如圖2所示。
圖2 小瑪麗跳躍
(2)每當(dāng)越過一次障礙時,右上角的積分將自動增加1分。如圖3所示。
圖3 越過障礙增加積分
(3)如果瑪麗在移動的過程中不小心撞到了障礙物,此時游戲主界面的中間位置將顯示“Game Over”游戲結(jié)束的文字。如圖4所示。
圖4 游戲結(jié)束
游戲結(jié)束后,再次按下空格鍵將重新啟動游戲。(4)如果不需要播放游戲的背景音樂時,可以單擊左上角的音樂按鈕,背景音樂播放時,控制按鈕的運(yùn)行效果如圖5所示。背景音樂停止時,控制按鈕的運(yùn)行效果如圖6所示。
展開 微信小程序:拼圖游戲
= 6) { this.left(e); } }復(fù)制代碼
如果空白格的下標(biāo)比所點擊的塊的下表大3,則表示空白格在所點擊塊的下方,那么點擊后向下移動;
如果空白格的下標(biāo)比所點擊的塊的下表小3,則表示空白格在所點擊塊的上方,那么點擊后向上移動;
如果空白格的下標(biāo)比所點擊的塊的下表大1,則表示空白格在所點擊塊的右方,那么點擊后向右移動,需考慮點擊快是否在容器右邊緣;
如果空白格的下標(biāo)比所點擊的塊的下表小1,則表示空白格在所點擊塊的左方,那么點擊后向左移動,需考慮點擊快是否在容器左邊緣;
移動:
以向上移動舉例
up: function (e) { var index = e.currentTarget.dataset.index; //當(dāng)前數(shù)字下標(biāo) var temp = this.data.num[index]; this.data.num[index] = this.data.num[index - 3] this.data.num[index - 3] = temp; this.setData({ num: this.data.num }) if (this.data.num.toString() == [1, 2, 3, 4, 5, 6, 7, 8, 9].toString()) { this.success(); } }復(fù)制代碼
移動后,將所點擊塊與空白格互換在數(shù)組中的位置,并判斷目前的數(shù)組是否滿足游戲成功的條件,判斷數(shù)組相等,我這里把數(shù)組轉(zhuǎn)化成字符串做的比較
游戲成功:
success: function () { var that = this
展開 Python代碼實現(xiàn)“FlappyBird”小游戲
原理介紹
FlappyBird游戲簡介:
玩家通過空格鍵控制一只小鳥,使其跨越由各種不同長度水管所組成的障礙物,當(dāng)小鳥碰撞到障礙物或跌至屏幕最底端時,游戲結(jié)束。
逐步實現(xiàn):
Step1:定義精靈類
為了方便實現(xiàn)小鳥和水管之間碰撞的檢測,我們先定義一些精靈類,包括:
① 小鳥類
隨著游戲時間的推移,小鳥應(yīng)當(dāng)具有更新自身位置的能力,即當(dāng)玩家按下空格鍵時,小鳥向上跳躍,否則小鳥向下墜落。另外,為了使游戲場景更加真實,小鳥在向上跳躍或者向下墜落之前,應(yīng)當(dāng)先調(diào)整身體角度。具體代碼實現(xiàn)如下:
② 管道類
管道分為管道體和管道頭。管道頭:
管道體:
可先簡單定義如下:
顯然,一個管道頭和若干個管道體組成了一個管道障礙物,管道障礙物兩兩同列,兩者之間留有一定的空間供小鳥穿過,就像這樣:
因此,我們定義一個大的管道類,以便構(gòu)建一個完整的管道障礙物,代碼實現(xiàn)如下:
其中,更新管道的作用為通過管道的左移來實現(xiàn)小鳥不斷右移的效果。
Step2:實現(xiàn)游戲主循環(huán)
先初始化,載入圖片、音樂、字體等文件,并定義一些必要的常量:
現(xiàn)在就可以開始定義游戲主循環(huán)了!游戲主循環(huán)的邏輯十分簡單,先顯示游戲背景,然后根據(jù)玩家的操作更新小鳥位置,自動更新管道位置,并通過碰撞檢測以及小鳥的縱坐標(biāo)來判斷游戲是否結(jié)束,若游戲結(jié)束,則顯示游戲結(jié)束畫面。當(dāng)然你也需要根據(jù)玩家通過的管道數(shù)量來實時更新玩家當(dāng)前的分?jǐn)?shù),這一步需寫在最后,否則分?jǐn)?shù)會被管道所遮蓋,這顯然是不合理的,具體實現(xiàn)如下:
All Done!
展開 Python制作外星人入侵小游戲
具體的代碼實現(xiàn)如下:
最后就是把一些游戲相關(guān)的數(shù)據(jù)實時顯示在游戲界面上以供玩家參考:
Step3:定義游戲結(jié)束界面
我們只需要根據(jù)玩家是否取得了游戲勝利來展示游戲結(jié)束界面即可:
All Done!完整源代碼詳見相關(guān)文件。