




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第教你使用python做一個“罰點球”小游戲在學(xué)習(xí)了一點Python基礎(chǔ)之后,我們可以做一個罰點球的小游戲,大概流程是這樣:
每一輪,你先輸入一個方向射門,然后電腦隨機判斷一個方向撲救。方向不同則算進(jìn)球得分,方向相同算撲救成功,不得分。之后攻守輪換,你選擇一個方向撲救,電腦隨機方向射門。第5輪結(jié)束之后,如果得分不同,比賽結(jié)束。5輪之內(nèi),如果一方即使踢進(jìn)剩下所有球,也無法達(dá)到另一方當(dāng)前得分,比賽結(jié)束。5論之后平分,比賽繼續(xù)進(jìn)行,直到某一輪分出勝負(fù)。
實現(xiàn)方法有很多種,我這里提供的只是一種參考。你可以按照自己喜歡的方式去做,那樣才是屬于你的游戲。
先說一下方向的設(shè)定。我的想法比較簡單,就是左、中、右三個方向,用字符串來表示。射門或者撲救的時候,直接輸入方向。所以這里我用input來實現(xiàn)。有同學(xué)是用1-9的數(shù)字來表示八個方向和原地不動,每次輸入一個數(shù)字,這也是可以的。不過這樣守門員要撲住的概率可就小多了。
至于電腦隨機挑選方向,如果你是用數(shù)字表示,就用我們之前講過的randint來隨機就行。不過我這里打算用random的一個方法:choice。它的作用是從一個list中隨機挑選一個元素。
于是,罰球的過程可以這樣寫:
fromrandomimportchoice
you=input('選擇你要踢的方向:(左、中、右)')
print('你踢向了'+you)
direction=['左','中','右']
com=chice(direction)
print('電腦撲向了'+com)
ifyou!=com:
print('進(jìn)球得分!')
else:
print('被撲出去了...')
反之亦然,這里不贅述。
接下來,我們讓它循環(huán)5次,并且記錄下得分。暫時先不判斷勝負(fù)。
用score_you表示你的得分,score_com表示電腦得分。開始都為0,每進(jìn)一球就加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('進(jìn)球得分!')
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))
這段代碼里有兩段相似度很高,你可以想想是不是有辦法可以用個函數(shù)把它簡化。
在此基礎(chǔ)之上,我們再加上勝負(fù)判斷,如果5輪結(jié)束之后是平分,就繼續(xù)踢。
所以我們把一輪的過程單獨拿出來作為一個函數(shù)kick,在5次循環(huán)之后再加上一個while循環(huán)。
另外,這里把之前的score_you和score_com合并成了一個score數(shù)組。這里的原因是,要讓kick函數(shù)里用到外部定義的變量,需要使用全局變量的概念。暫時想避免說這個,而用list不存在這個問題。
fromrandomimportchoice
score=[0,0]
direction=['左','中','右']
defkick():
print('====玩家罰球====')
you=input('選擇你要踢的方向:(左、中、右)')
print('你踢向了'+you)
com=choice(direction)
print('電腦撲向了'+com)
ifyou!=com:
print('進(jìn)球得分!')
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('玩家落敗.')
到這里我們的點球游戲已經(jīng)快完成了,現(xiàn)在要做的就是增加比賽提前結(jié)束的機制,讓它更真實。
我的思路是這樣:比賽提前結(jié)束,就是落后一方的得分,加上他在5輪中剩下的輪數(shù),仍然低于領(lǐng)先方現(xiàn)在的得分。雖然可以根據(jù)當(dāng)前的輪數(shù)計算剩下的機會,但由于先踢和后踢的情況不同,這樣計算會有些復(fù)雜,容易搞錯。
所以我決定再增加一個list,里面記錄雙方剩余的輪數(shù),初始均為5。
每踢一球,就把對應(yīng)那一方的計數(shù)減1。
每踢一球,就判斷輸?shù)哪且环绞欠襁€有機會。
于是需要在最開始增加代碼:
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
由于提前結(jié)束僅限于5輪內(nèi),所以要判斷rest[0]0。return可以讓kick函數(shù)提前結(jié)束。電腦的判斷與這個類似,只是要換成rest[1]。
因為需要有個方法提前結(jié)束循環(huán),所以我讓kick函數(shù)返回一個bool值,正常情況返回False,一旦提前結(jié)束就返回True。
之前的for循環(huán)也改成while,以便于提前結(jié)束循環(huán):
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('進(jìn)球得分!')
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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 初三數(shù)學(xué)二次函數(shù)測試試卷及答案
- 文化創(chuàng)意產(chǎn)品設(shè)計制作與推廣合作協(xié)議
- 初一地理濕地保護試卷及答案
- 三農(nóng)村社區(qū)文化活動推廣方案
- 美德少年的演講稿15篇
- 給同學(xué)道歉信(15篇)
- 2025年基本公共衛(wèi)生服務(wù)項目考試題庫及參考答案
- 2025-2030年中國列車運行監(jiān)控記錄裝置(LKJ系統(tǒng))市場分析及投資前景研究預(yù)測報告
- 2025年護師類之兒科護理主管護師真題練習(xí)試卷A卷附答案
- 2025年護師考試常態(tài)化測試方式試題及答案
- 母豬的分娩和護理技術(shù)
- 冷庫維保合同(2025版)
- 2025年北京市三力考試試題及答案
- 2025年智能家居軟裝搭配智能家居行業(yè)市場前景展望報告
- 2025年雙鴨山寶清縣融媒體中心招聘考試筆試試題(含答案)
- 2025年北京市人力資源市場薪酬數(shù)據(jù)報告(二季度)
- 廣告牌安裝后維護養(yǎng)護措施
- 山西煤礦建設(shè)管理辦法
- 《水上客運重大事故隱患判定指南(暫行)》解讀與培訓(xùn)
- 浙江省消防技術(shù)規(guī)范難點問題 操作技術(shù)指南(2020 版)
- (完整word版)勞動合同書(電子版)正規(guī)范本(通用版)
評論
0/150
提交評論