




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第教你使用python做一個“罰點球”小游戲在學習了一點Python基礎之后,我們可以做一個罰點球的小游戲,大概流程是這樣:
每一輪,你先輸入一個方向射門,然后電腦隨機判斷一個方向撲救。方向不同則算進球得分,方向相同算撲救成功,不得分。之后攻守輪換,你選擇一個方向撲救,電腦隨機方向射門。第5輪結束之后,如果得分不同,比賽結束。5輪之內,如果一方即使踢進剩下所有球,也無法達到另一方當前得分,比賽結束。5論之后平分,比賽繼續進行,直到某一輪分出勝負。
實現方法有很多種,我這里提供的只是一種參考。你可以按照自己喜歡的方式去做,那樣才是屬于你的游戲。
先說一下方向的設定。我的想法比較簡單,就是左、中、右三個方向,用字符串來表示。射門或者撲救的時候,直接輸入方向。所以這里我用input來實現。有同學是用1-9的數字來表示八個方向和原地不動,每次輸入一個數字,這也是可以的。不過這樣守門員要撲住的概率可就小多了。
至于電腦隨機挑選方向,如果你是用數字表示,就用我們之前講過的randint來隨機就行。不過我這里打算用random的一個方法:choice。它的作用是從一個list中隨機挑選一個元素。
于是,罰球的過程可以這樣寫:
fromrandomimportchoice
you=input('選擇你要踢的方向:(左、中、右)')
print('你踢向了'+you)
direction=['左','中','右']
com=chice(direction)
print('電腦撲向了'+com)
ifyou!=com:
print('進球得分!')
else:
print('被撲出去了...')
反之亦然,這里不贅述。
接下來,我們讓它循環5次,并且記錄下得分。暫時先不判斷勝負。
用score_you表示你的得分,score_com表示電腦得分。開始都為0,每進一球就加1。
fromrandomimportchoice
score_you=0
score_com=0
direction=['左','中','右']
foriinrange(5):
print('====第%d回合-玩家罰球===='%(i+1))
you=input('選擇你要踢的方向:(左、中、右)')
print('你踢向了'+you)
com=choice(direction)
print('電腦撲向了'+com)
ifyou!=com:
print('進球得分!')
score_you+=1
else:
print('被撲出去了...')
print('比分:%d(you)-%d(com)\n'%(score_you,score_com))
print('====第%d回合-玩家撲救===='%(i+1))
you=input('選擇你要撲的方向:(左、中、右)')
print('你撲向了'+you)
com=choice(direction)
print('電腦踢向了'+com)
ifyou==com:
print('撲出去了!')
else:
print('丟球了...')
score_com+=1
print('比分:%d(you)-%d(com)\n'%(score_you,score_com))
這段代碼里有兩段相似度很高,你可以想想是不是有辦法可以用個函數把它簡化。
在此基礎之上,我們再加上勝負判斷,如果5輪結束之后是平分,就繼續踢。
所以我們把一輪的過程單獨拿出來作為一個函數kick,在5次循環之后再加上一個while循環。
另外,這里把之前的score_you和score_com合并成了一個score數組。這里的原因是,要讓kick函數里用到外部定義的變量,需要使用全局變量的概念。暫時想避免說這個,而用list不存在這個問題。
fromrandomimportchoice
score=[0,0]
direction=['左','中','右']
defkick():
print('====玩家罰球====')
you=input('選擇你要踢的方向:(左、中、右)')
print('你踢向了'+you)
com=choice(direction)
print('電腦撲向了'+com)
ifyou!=com:
print('進球得分!')
score[0]+=1
else:
print('被撲出去了...')
print('比分:%d(you)-%d(com)\n'%(score[0],score[1]))
print('====玩家撲救!====')
you=input('選擇你要撲的方向:(左、中、右)')
print('你撲向了'+you)
com=choice(direction)
print('電腦踢向了'+com)
ifyou==com:
print('撲出去了!')
else:
print('丟球了...')
score[1]+=1
print('比分:%d(you)-%d(com)\n'%(score[0],score[1]))
foriinrange(5):
print('====第%d輪===='%(i+1))
kick()
whilescore[0]==score[1]:
i+=1
print('====第%d輪===='%(i+1))
kick()
ifscore[0]score[1]:
print('玩家獲勝!')
else:
print('玩家落敗.')
到這里我們的點球游戲已經快完成了,現在要做的就是增加比賽提前結束的機制,讓它更真實。
我的思路是這樣:比賽提前結束,就是落后一方的得分,加上他在5輪中剩下的輪數,仍然低于領先方現在的得分。雖然可以根據當前的輪數計算剩下的機會,但由于先踢和后踢的情況不同,這樣計算會有些復雜,容易搞錯。
所以我決定再增加一個list,里面記錄雙方剩余的輪數,初始均為5。
每踢一球,就把對應那一方的計數減1。
每踢一球,就判斷輸的那一方是否還有機會。
于是需要在最開始增加代碼:
rest=[5,5]
以玩家為例,每踢完一球的判斷:
ifrest[0]0:
rest[0]-=1
ifscore[0]score[1]andscore[0]+rest[0]score[1]:
returnTrue
ifscore[1]score[0]andscore[1]+rest[1]score[0]:
returnTrue
由于提前結束僅限于5輪內,所以要判斷rest[0]0。return可以讓kick函數提前結束。電腦的判斷與這個類似,只是要換成rest[1]。
因為需要有個方法提前結束循環,所以我讓kick函數返回一個bool值,正常情況返回False,一旦提前結束就返回True。
之前的for循環也改成while,以便于提前結束循環:
i=0
end=False
whilei5andnotend:
print'====第%d輪===='%(i+1)
end=kick()
i+=1
完整代碼如下:
fromrandomimportchoice
score=[0,0]
rest=[5,5]
direction=['左','中','右']
defkick():
print('====玩家罰球====')
you=input('選擇你要踢的方向:(左、中、右)')
print('你踢向了'+you)
com=choice(direction)
print('電腦撲向了'+com)
ifyou!=com:
print('進球得分!')
score[0]+=1
else:
print('被撲出去了...')
print('比分:%d(you)-%d(com)\n'%(score[0],score[1]))
ifrest[0]0:
rest[0]-=1
ifscore[0]score[1]andscore[0]+rest[0]score[1]:
returnTrue
ifscore[1]score[0]andscore[1]+rest[1]score[0]:
returnTrue
print('====玩家撲救!====')
you=input('選擇你要撲的方向:(左、中、右)')
print('你撲向了'+you)
com=choice(direction)
print('電腦踢向了'+com)
ifyou==com:
print('撲出去了!')
else:
print('丟球了...')
score[1]+=1
print('比分:%d(you)-%d(com)\n'%(score[0],score[1]))
ifrest[1]0:
rest[1]-=1
ifscore[0]score[1]andscore[0]+rest[0]score[1]:
returnTrue
ifscore[1]score[0]andscore[1]+rest[1]score[0]:
returnTrue
returnFalse
i=0
end=False
whilei5andnotend:
print('====
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國鍍鋅波形梁護欄市場分析及競爭策略研究報告
- 2025至2030年中國金剛石產品市場分析及競爭策略研究報告
- 2025至2030年中國西服外包裝袋市場分析及競爭策略研究報告
- 2025至2030年中國肝絡欣丸市場分析及競爭策略研究報告
- 2025至2030年中國竹編果盤市場分析及競爭策略研究報告
- 2025至2030年中國電腦繡花機齒輪市場分析及競爭策略研究報告
- 2025至2030年中國爽足軟膏市場分析及競爭策略研究報告
- 2025至2030年中國活動腳手市場分析及競爭策略研究報告
- 2025至2030年中國槽型支架市場分析及競爭策略研究報告
- 2025至2030年中國無線紅外現場報警探測器市場分析及競爭策略研究報告
- 拉薩市墨竹工卡縣思金拉措小學-2025年春季英語教研組工作總結-一路求索不停歇【課件】
- 山東省菏澤市2023?2024學年高一下學期7月期末考試 數學試題(含解析)
- (三級)人工智能訓練師職業技能鑒定理論考試題(附答案)
- 2025杭州市臨安區事業單位招聘80人考前自測高頻考點模擬試題附答案詳解(鞏固)
- 2025年北京二十中中考英語零模試卷
- 護理服務質量提升路徑與實踐
- 糞肥還田協議書范本
- 商務數據分析-形考作業4(第5章)-國開(ZJ)-參考資料
- 有機合成與推斷綜合大題(解析版)
- 智能客服語音識別技術在醫療行業的應用現狀與發展報告
- 工勤技師考試試題及答案
評論
0/150
提交評論