教你使用python做一個“罰點球”小游戲_第1頁
教你使用python做一個“罰點球”小游戲_第2頁
教你使用python做一個“罰點球”小游戲_第3頁
教你使用python做一個“罰點球”小游戲_第4頁
教你使用python做一個“罰點球”小游戲_第5頁
已閱讀5頁,還剩3頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第教你使用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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論