python實(shí)現(xiàn)人機(jī)猜拳小游戲
今天的這篇文章呢是對(duì)人機(jī)猜拳小游戲——石頭剪刀布的一個(gè)描述以及代碼展現(xiàn)
石頭剪刀布游戲代碼的簡(jiǎn)介:關(guān)于石頭剪刀布這個(gè)小游戲,大致得到思路就是,玩家出一個(gè)手勢(shì),然后電腦再隨機(jī)出一個(gè)手勢(shì),最后再判斷是玩家獲勝還是電腦獲勝。最簡(jiǎn)單的思路就是將這三個(gè)手勢(shì)是三個(gè)代號(hào)來(lái)表示,然后再去判斷代號(hào)之間的關(guān)系,最后輸出勝方。
最一般情況下,最先想到的就是使用1、2、3數(shù)字來(lái)對(duì)三個(gè)手勢(shì)進(jìn)行代號(hào)化,然后再通過(guò)代號(hào)的大小去判斷,如下是對(duì)這個(gè)方式的簡(jiǎn)述:
石頭 代號(hào) 用1來(lái)表示
剪刀 代號(hào) 用2來(lái)表示
布 代號(hào) 用3來(lái)表示
石頭 > 剪刀
剪刀 > 布
布 > 石頭
站在玩家的角度考慮玩家勝利的情況(分析電腦勝利也是一樣的):如果玩家出的是石頭,只有電腦出剪刀時(shí)玩家才可以勝利,石頭代號(hào)為1 ,剪刀代號(hào)為2,石頭代號(hào)<剪刀代號(hào),同時(shí)石頭代號(hào)也<布的代號(hào);如果玩家出的是剪刀,只有電腦出布時(shí)玩家才可以勝利,剪刀代號(hào)為2 ,布代號(hào)為3,剪刀代號(hào)<布代號(hào);如果玩家出的是布,只有電腦出石頭是玩家才可以勝利,布的代號(hào)為3,石頭代號(hào)為1,布的代號(hào)>石頭的代號(hào)。由這三條分析可以看出,單純用這三個(gè)數(shù)字來(lái)比較大小的方式(即玩家手勢(shì)代號(hào)大于或者小于電腦手勢(shì)代號(hào)的方式)比較復(fù)雜。
1. 本代碼思路,使用三種分類方式:玩家贏,平局,玩家輸 來(lái)進(jìn)行三種判斷,當(dāng)玩家出石頭(1)并且電腦出剪刀(2)或者玩家出剪刀(2)并且電腦出布(3)或者玩家出布(3)并且電腦出石頭(1)這三種情況時(shí),玩家贏;當(dāng)玩家和電腦的手勢(shì)代號(hào)一致時(shí),平局;其他情況玩家輸。
代碼如下:
import random #導(dǎo)包 print("********歡迎來(lái)到猜拳小游戲********") while True: key = int(input("請(qǐng)輸入您的出拳選項(xiàng):1,剪刀。2,石頭。3,布:")) #從鍵盤上得到手勢(shì)代號(hào) while (key not in [1, 2, 3]): #判斷當(dāng)輸入的手勢(shì)代號(hào)是否符合要求,不符合要求時(shí),重新輸入 print("您的輸入有誤,請(qǐng)重新輸入") key = int(input("請(qǐng)輸入您的出拳選項(xiàng):1,剪刀。2,石頭。3,布:")) com_key=random.randint(1,3) #利用隨機(jī)函數(shù)隨機(jī)生成1到3之間的整數(shù) if (key==1 and com_key==2) or (key==2 and com_key==3) or (key==3 and com_key==1): print("恭喜你啦,你贏了呦,加油?。。?) elif key==com_key: print("此局是平局") else: print("真是遺憾呢,你輸了。。。。") n=input("請(qǐng)輸入n結(jié)束游戲或者輸入其他字符繼續(xù)游戲:") if n=="n": break print("游戲結(jié)束")
運(yùn)行結(jié)果如下:
********歡迎來(lái)到猜拳小游戲******** 請(qǐng)輸入您的出拳選項(xiàng):1,剪刀。2,石頭。3,布:1 此局是平局 請(qǐng)輸入n結(jié)束游戲或者輸入其他字符繼續(xù)游戲:2 請(qǐng)輸入您的出拳選項(xiàng):1,剪刀。2,石頭。3,布:2 恭喜你啦,你贏了呦,加油?。。? 請(qǐng)輸入n結(jié)束游戲或者輸入其他字符繼續(xù)游戲:2 請(qǐng)輸入您的出拳選項(xiàng):1,剪刀。2,石頭。3,布:3 恭喜你啦,你贏了呦,加油!??! 請(qǐng)輸入n結(jié)束游戲或者輸入其他字符繼續(xù)游戲:n 游戲結(jié)束
2. 人機(jī)猜拳小游戲升級(jí)版:
此版本多出來(lái)的功能為,可以為自己起用戶名,并選擇電腦玩家,計(jì)算玩家贏和電腦贏以及游戲總次數(shù)。
import random print("* "*10+"人機(jī)猜拳"+"* "*10) name=input("請(qǐng)輸入昵稱:") hero_key=input("請(qǐng)選擇英雄:1,劉備。2,李白。3,安琪拉") if hero_key=="1": hero_name="劉備" print("劉備是個(gè)戰(zhàn)士") elif hero_key=="2": hero_name="李白" print("李白適合打野") else: hero_name="安琪拉" print("安琪拉是個(gè)法師") sum=0 # 統(tǒng)計(jì)人贏的和電腦贏的次數(shù) per_win=0 com_win=0 while True: sum=sum+1 key=int(input("請(qǐng)輸入出拳選項(xiàng):1,剪刀。2,石頭。3,布:")) while (key not in [1,2,3]): print("輸入有誤請(qǐng)重新輸入") key = int(input("請(qǐng)輸入出拳選項(xiàng):1,剪刀。2,石頭。3,布:")) if key==1: print("%s出了剪刀"%name) elif key ==2: print("%s出了石頭"%name) else: print("%s出了布"%name) com_key=random.randint(1,3) if com_key==1: print("%s出了剪刀"%hero_name) elif com_key ==2: print("%s出了石頭"%hero_name) else: print("%s出了布"%hero_name) # 判斷結(jié)果 if key==1 and com_key==3 or key ==2 and com_key==1 or key ==3 and com_key==2 : print("本局結(jié)果:你贏了") per_win=per_win+1 elif key==com_key: print("本局結(jié)果:打平了") else: print("本局結(jié)果:你輸了,呵呵") com_win+=1 n=input("輸入n結(jié)束游戲輸入其他鍵繼續(xù)") if n=="n": break print("游戲結(jié)束") print("* "*10+"最終結(jié)果"+"* "*10) print("本次游戲一共進(jìn)行%d局其中%s贏%d局%s贏%d局最終結(jié)果:"%(sum,name,per_win,hero_name,com_win)) if per_win>com_win: print("大吉大利今晚吃雞") elif per_win==com_win: print("平局:擇日再戰(zhàn)") else: print("你還是輸了,真菜,呵呵。。。")
運(yùn)行結(jié)果如下:
* * * * * * * * * * 人機(jī)猜拳* * * * * * * * * * 請(qǐng)輸入昵稱:魚丸 請(qǐng)選擇英雄:1,劉備。2,李白。3,安琪拉1 劉備是個(gè)戰(zhàn)士 請(qǐng)輸入出拳選項(xiàng):1,剪刀。2,石頭。3,布:2 魚丸出了石頭 劉備出了石頭 本局結(jié)果:打平了 輸入n結(jié)束游戲輸入其他鍵繼續(xù)c 請(qǐng)輸入出拳選項(xiàng):1,剪刀。2,石頭。3,布:2 魚丸出了石頭 劉備出了石頭 本局結(jié)果:打平了 輸入n結(jié)束游戲輸入其他鍵繼續(xù)w 請(qǐng)輸入出拳選項(xiàng):1,剪刀。2,石頭。3,布:3 魚丸出了布 劉備出了石頭 本局結(jié)果:你贏了 輸入n結(jié)束游戲輸入其他鍵繼續(xù)n 游戲結(jié)束 * * * * * * * * * * 最終結(jié)果* * * * * * * * * * 本次游戲一共進(jìn)行3局其中魚丸贏1局劉備贏0局最終結(jié)果: 大吉大利今晚吃雞
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python轉(zhuǎn)化excel數(shù)字日期為標(biāo)準(zhǔn)日期操作
這篇文章主要介紹了python轉(zhuǎn)化excel數(shù)字日期為標(biāo)準(zhǔn)日期操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07Python使用get_text()方法從大段html中提取文本的實(shí)例
今天小編就為大家分享一篇Python使用get_text()方法從大段html中提取文本的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08Python的Django REST框架中的序列化及請(qǐng)求和返回
這篇文章主要介紹了Python的Django REST框架中的序列化及請(qǐng)求和返回,使用Django REST來(lái)實(shí)現(xiàn)RESTful web service非常方便和強(qiáng)大,需要的朋友可以參考下2016-04-04pytorch搭建模型的五大層次級(jí)別解讀(由淺入深)
這篇文章主要介紹了pytorch搭建模型的五大層次級(jí)別(由淺入深),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06使用Python批量連接華為網(wǎng)絡(luò)設(shè)備的操作步驟
隨著網(wǎng)絡(luò)規(guī)模的擴(kuò)大和設(shè)備數(shù)量的增加,手動(dòng)配置和管理每臺(tái)網(wǎng)絡(luò)設(shè)備變得越來(lái)越不現(xiàn)實(shí),因此,自動(dòng)化工具和腳本變得尤為重要,本篇文章將詳細(xì)介紹如何使用Python批量連接華為網(wǎng)絡(luò)設(shè)備,實(shí)現(xiàn)自動(dòng)化配置和管理,需要的朋友可以參考下2024-06-06Python對(duì)接六大主流數(shù)據(jù)庫(kù)(只需三步)
這篇文章主要介紹了Python對(duì)接六大主流數(shù)據(jù)庫(kù)(只需三步),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07python進(jìn)程池Pool中apply方法與apply_async方法的區(qū)別
這篇文章主要介紹了python進(jìn)程池Pool中apply方法與apply_async方法的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02Python 判斷時(shí)間是否在時(shí)間區(qū)間內(nèi)的實(shí)例
這篇文章主要介紹了Python 判斷時(shí)間是否在時(shí)間區(qū)間內(nèi)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05