《硬件趣學(xué)Python編程》 猜拳游戲_第1頁
《硬件趣學(xué)Python編程》 猜拳游戲_第2頁
《硬件趣學(xué)Python編程》 猜拳游戲_第3頁
《硬件趣學(xué)Python編程》 猜拳游戲_第4頁
《硬件趣學(xué)Python編程》 猜拳游戲_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

+硬件趣學(xué)Python編程

有了糾紛不要怕我們一起玩猜拳牛艾科技目錄ContentsSuccessWords2第一部分邏輯運(yùn)算第二部分程序的選擇結(jié)構(gòu)與條件判斷第三部分猜拳游戲的基本原理第四部分猜拳游戲的代碼講解目錄ContentsSuccessWords3第一部分邏輯運(yùn)算4邏輯運(yùn)算邏輯運(yùn)算符常用來表示日常交流中的“并且”“或者”“除非”等思想。邏輯運(yùn)算符可以把多個(gè)條件按照邏輯進(jìn)行連接,從而變成更加復(fù)雜的條件。Python中的邏輯運(yùn)算符主要有與(and)、或(or)、非(not)3種優(yōu)先級(jí)別(從低到高):or------>and------>not運(yùn)算符舉例說明andaandb二元運(yùn)算,僅當(dāng)a、b兩者都為True時(shí)結(jié)果才為True,不然為Falseoraorb二元運(yùn)算,只要a、b兩者之一為True,結(jié)果就為True,不然為Falsenotnota一元運(yùn)算,當(dāng)a為True時(shí),結(jié)果為False;當(dāng)a為False時(shí),結(jié)果為True5邏輯表達(dá)式邏輯運(yùn)算常常與關(guān)系運(yùn)算相結(jié)合,形成邏輯運(yùn)算表達(dá)式。邏輯表達(dá)式的值是一個(gè)邏輯值,即“True”或“False”。==符號(hào)是判斷兩個(gè)值、變量之間是否相等的操作符,相等則返回布爾值True在Python編譯系統(tǒng)中,判斷一個(gè)量是否為“真”時(shí),以0表示“假”,以非0表示“真”。判斷一個(gè)整數(shù)n是否為偶數(shù):分析:n是否為偶數(shù),只需要看它除以2的余數(shù)是否為0若n%2==0,則n是偶數(shù);若n%2!=0,則n不是偶數(shù),是奇數(shù)。6邏輯表達(dá)式判斷年份y是否為閏年。分析:根據(jù)年歷知識(shí),年份y是否為閏年的條件是下列條件之一成立:1)年份可被4整除,同時(shí)不能被100整除。2)年份可被400整除。因此,年份y是否是閏年的條件,可以通過以下邏輯表達(dá)式來進(jìn)行判定:(y%4==0)and(y%100!=0)or(y%400==0)目錄ContentsSuccessWords7第二部分程序的選擇結(jié)構(gòu)和條件判斷8程序的選擇結(jié)構(gòu)選擇結(jié)構(gòu)程序的定義:根據(jù)條件表達(dá)式的值是True/非零還是False/零做出決策,控制代碼塊的執(zhí)行;也就是當(dāng)條件成立的時(shí)候執(zhí)行某個(gè)代碼段,條件不成立則執(zhí)行另外的代碼段9Python語言的條件判斷選擇結(jié)構(gòu)的核心就是用于條件判斷的條件表達(dá)式Python語句提供了if語言,用于進(jìn)行條件判斷來控制程序的執(zhí)行,基本形式為:其中,else為可選語句,當(dāng)需要在條件不成立時(shí)執(zhí)行內(nèi)容則可以執(zhí)行相關(guān)語句if語句的判斷條件可以用>(大于)、<(小于)、==(等于)、>=(大于等于)、<=(小于等于)來表示其關(guān)系。10選擇結(jié)構(gòu)的示例代碼#!/usr/bin/python#-*-coding:UTF-8-*-#if基本用法flag=Falsename='luren'ifname=='python':#判斷變量否為'python'flag=True#條件成立時(shí)設(shè)置標(biāo)志為真print'welcomeboss'#并輸出歡迎信息else:printname#條件不成立時(shí)輸出變量名稱

代碼的輸出結(jié)果為:luren11多分支選擇結(jié)構(gòu)當(dāng)程序存在多個(gè)分支,也就是說判斷條件為多個(gè)值時(shí),可以使用if…elif…或if…elif…else

…進(jìn)行判斷12多分支選擇結(jié)構(gòu)的示例代碼#多分支選擇結(jié)構(gòu)num=2

ifnum==3:#判斷num的值print'boss'elifnum==2:print'user'elifnum==1:print'worker'elifnum<0:#值小于零時(shí)輸出print'error'else:print'roadman'#條件均不成立時(shí)輸出

代碼的輸出結(jié)果為:user目錄ContentsSuccessWords13第三部分猜拳游戲的基本原理14游戲規(guī)則猜拳游戲,即“石頭、剪子、布”,是一種廣泛流傳的手技游戲,通過不同的手勢(shì)分別表示石頭、剪刀或布游戲規(guī)則:石頭勝剪刀,剪刀勝布,布勝石頭15游戲原理猜拳游戲跟“擲硬幣”、“擲骰子”的原理類似,就是用產(chǎn)生的隨機(jī)結(jié)果來作決策在游戲中,用戶通過按下不同的按鍵來表示不同的手勢(shì),分別代表石頭、剪刀或布;電腦從“石頭、剪刀、布”三者中隨機(jī)選擇一個(gè)手勢(shì),和用戶的手勢(shì)進(jìn)行對(duì)比目錄ContentsSuccessWords16第四部分猜拳游戲的代碼講解17游戲界面游戲界面分為三個(gè)區(qū)域最頂部的區(qū)域顯示游戲規(guī)則和操作說明中間區(qū)域顯示每次猜拳的情況,包括玩家手勢(shì)、電腦手勢(shì)和勝負(fù)結(jié)果玩家手勢(shì)通過不同的按鍵來表示最下面的區(qū)域顯示游戲勝負(fù)情況的匯總結(jié)果18Skids按鍵排列Skids的4個(gè)按鍵的排列順序如下圖所示:19程序的流程圖程序啟動(dòng)后,首先進(jìn)行硬件初始化,主要是對(duì)顯示屏和按鍵進(jìn)行設(shè)置完成硬件初始化后,進(jìn)行一個(gè)無限循環(huán)中,等待用戶按鍵當(dāng)用戶按下按鍵后,判斷是否為結(jié)束按鍵;如果是,則結(jié)束游戲;如果不是,則獲取用戶輸入的手勢(shì)信息,同時(shí)為計(jì)算機(jī)隨時(shí)生成一個(gè)手勢(shì),和用戶輸入進(jìn)行對(duì)比,確定勝負(fù)關(guān)系更新界面顯示等待用戶的下一次按鍵20程序的類設(shè)計(jì)創(chuàng)建了一個(gè)名為Game的類,封裝了游戲的主體功能類的構(gòu)造函數(shù),負(fù)責(zé)對(duì)硬件(屏幕顯示和按鍵設(shè)置)進(jìn)行初始化,同時(shí)將游戲的一些統(tǒng)計(jì)數(shù)據(jù)進(jìn)行清零classGame():def__init__(self,playerName,computerName):

……

#設(shè)置按鍵數(shù)組forpinpins:keys.append(Pin(p,Pin.IN))

#初始化屏幕self.displayInit()21displayInit函數(shù)在構(gòu)造函數(shù)__init__()中,調(diào)用了displayInit()函數(shù)來進(jìn)行屏幕初始化defdisplayInit(self,x=10,y=10,w=222,h=303):#顯示游戲規(guī)則信息mentionStr1="游戲規(guī)則:"mentionStr2="按鍵1.剪刀按鍵2.石頭"mentionStr3="按鍵3.布按鍵4.結(jié)束"text.draw(mentionStr1,20,20,0x000000,0xffffff)text.draw(mentionStr2,20,36,0x000000,0xffffff)text.draw(mentionStr3,20,52,0x000000,0xffffff)text.draw("-------------",20,68,0x000000,0xffffff)self.updateTotolArea()#設(shè)置游戲運(yùn)行狀態(tài)self.gameStart=True22startGame函數(shù)類的成員函數(shù)startGame()負(fù)責(zé)啟動(dòng)游戲的主流程defstartGame(self):print("-------猜拳游戲開始-------")whileTrue:i=0j=-1forkinkeys:if(k.value()==0):ifi!=j:j=iself.pressKeyboardEvent(i)i=i+1;if(i>3):i=0time.sleep_ms(100)#按鍵防抖23pressKeyboardEvent函數(shù)當(dāng)用戶按下按鍵后,類的成員函數(shù)pressKeyboardEvent()負(fù)責(zé)進(jìn)行具體的處理該函數(shù)是整個(gè)程序中最重要的函數(shù),復(fù)雜完成具體的游戲過程處理和勝負(fù)邏輯判斷在函數(shù)中,首先判斷游戲是否已經(jīng)開始;如果游戲未開始,則不必處理鍵盤輸入,函數(shù)直接返回defpressKeyboardEvent(self,key):keymatch=["Key1","Key2","Key3","Key4"]#游戲還未開始,不必處理鍵盤輸入if(self.gameStart==False):return24pressKeyboardEvent函數(shù)--處理用戶輸入

對(duì)用戶按下的按鍵進(jìn)行判斷,按鍵1代表剪刀、按鍵2代表石頭、按鍵3代表布,按鍵4代表游戲結(jié)束;用數(shù)字1、2、3分別代表剪刀、石頭和布if(keymatch[key]=="Key1"):self.playerStatus=1self.playerMessage="%s出拳為:剪刀"%self.playerNamebmp_jiandao.draw(40,140)elif(keymatch[key]=="Key2"):self.playerStatus=2self.playerMessage="%s出拳為:石頭"%self.playerNamebmp_shitou.draw(40,140)elif(keymatch[key]=="Key3"):self.playerStatus=3self.playerMessage="%s出拳為:布"%self.playerNamebmp_bu.draw(40,140)else:text.draw("游戲結(jié)束",90,210,0x000000,0xffffff)#設(shè)置游戲運(yùn)行狀態(tài)self.gameStart=Falsereturn25pressKeyboardEvent函數(shù)--為計(jì)算機(jī)選擇隨機(jī)數(shù)確定用戶的出拳情況后,為計(jì)算機(jī)選擇一個(gè)隨機(jī)數(shù)(1~3),作為計(jì)算機(jī)的出拳#電腦的出拳為一個(gè)隨機(jī)值puterStatus=random.randint(1,3)print(puterStatus)if(puterStatus==1):puterMessage="%s出拳為:剪刀"%puterNamebmp_jiandao.draw(150,140)if(puterStatus==2):puterMessage="%s出拳為:石頭"%puterNamebmp_shitou.draw(150,140)if(puterStatus==3):puterMessage="%s出拳為:布"%puterNamebmp_bu.draw(150,140)26pressKeyboardEvent函數(shù)--判斷勝負(fù)情況確定了用戶和計(jì)算機(jī)的出拳后,對(duì)勝負(fù)結(jié)果進(jìn)行判斷,并記錄結(jié)果

#判斷勝負(fù)并顯示結(jié)果resultMessage="平局!"if(self.playerStatus==puterStatus):#出拳相同,為平局self.equalNum+=1#平局次數(shù)加1elif(self.playerStatus==1andputerStatus==3):

#用戶剪刀、計(jì)算機(jī)布,用戶勝resultMessage="%s勝!"%self.playerNameself.playerScore+=1#用戶獲取次數(shù)加1elif(self.playerStatus==2andputerStatus==1):#用戶石頭、計(jì)算機(jī)剪刀,用戶勝resultMessage="%s勝!"%self.playerNameself.playerScore+=1elif(self.playerStatus==3andputerStatus=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論