1. 程式人生 > 程式設計 >python實現人機猜拳小遊戲

python實現人機猜拳小遊戲

今天的這篇文章呢是對人機猜拳小遊戲——石頭剪刀布的一個描述以及程式碼展現

石頭剪刀布遊戲程式碼的簡介:關於石頭剪刀布這個小遊戲,大致得到思路就是,玩家出一個手勢,然後電腦再隨機出一個手勢,最後再判斷是玩家獲勝還是電腦獲勝。最簡單的思路就是將這三個手勢是三個代號來表示,然後再去判斷代號之間的關係,最後輸出勝方。

最一般情況下,最先想到的就是使用1、2、3數字來對三個手勢進行代號化,然後再通過代號的大小去判斷,如下是對這個方式的簡述:

石頭 代號 用1來表示

剪刀 代號 用2來表示

布 代號 用3來表示

石頭 > 剪刀

剪刀 > 布

布 > 石頭

站在玩家的角度考慮玩家勝利的情況(分析電腦勝利也是一樣的):如果玩家出的是石頭,只有電腦出剪刀時玩家才可以勝利,石頭代號為1 ,剪刀代號為2,石頭代號<剪刀代號,同時石頭代號也<布的代號;如果玩家出的是剪刀,只有電腦出布時玩家才可以勝利,剪刀代號為2 ,布代號為3,剪刀代號<布代號;如果玩家出的是布,只有電腦出石頭是玩家才可以勝利,布的代號為3,石頭代號為1,布的代號>石頭的代號。由這三條分析可以看出,單純用這三個數字來比較大小的方式(即玩家手勢代號大於或者小於電腦手勢代號的方式)比較複雜。

1. 本程式碼思路,使用三種分類方式:玩家贏,平局,玩家輸 來進行三種判斷,當玩家出石頭(1)並且電腦出剪刀(2)或者玩家出剪刀(2)並且電腦出布(3)或者玩家出布(3)並且電腦出石頭(1)這三種情況時,玩家贏;當玩家和電腦的手勢代號一致時,平局;其他情況玩家輸。

程式碼如下:

import random  #導包
print("********歡迎來到猜拳小遊戲********")
while True:
 key = int(input("請輸入您的出拳選項:1,剪刀。2,石頭。3,布:")) #從鍵盤上得到手勢代號
 while (key not in [1,2,3]): #判斷當輸入的手勢代號是否符合要求,不符合要求時,重新輸入
  print("您的輸入有誤,請重新輸入")
  key = int(input("請輸入您的出拳選項:1,剪刀。2,石頭。3,布:"))
 com_key=random.randint(1,3) #利用隨機函式隨機生成1到3之間的整數
 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("請輸入n結束遊戲或者輸入其他字元繼續遊戲:")
 if n=="n":
  break
print("遊戲結束")

執行結果如下:

********歡迎來到猜拳小遊戲********
請輸入您的出拳選項:1,剪刀。2,石頭。3,布:1
此局是平局
請輸入n結束遊戲或者輸入其他字元繼續遊戲:2
請輸入您的出拳選項:1,剪刀。2,石頭。3,布:2
恭喜你啦,你贏了呦,加油!!!
請輸入n結束遊戲或者輸入其他字元繼續遊戲:2
請輸入您的出拳選項:1,剪刀。2,石頭。3,布:3
恭喜你啦,你贏了呦,加油!!!
請輸入n結束遊戲或者輸入其他字元繼續遊戲:n
遊戲結束

2. 人機猜拳小遊戲升級版:

此版本多出來的功能為,可以為自己起使用者名稱,並選擇電腦玩家,計算玩家贏和電腦贏以及遊戲總次數。

import random
print("* "*10+"人機猜拳"+"* "*10)
name=input("請輸入暱稱:")
hero_key=input("請選擇英雄:1,劉備。2,李白。3,安琪拉")
if hero_key=="1":
 hero_name="劉備"
 print("劉備是個戰士")
elif hero_key=="2":
 hero_name="李白"
 print("李白適合打野")
else:
 hero_name="安琪拉"
 print("安琪拉是個法師")
sum=0
# 統計人贏的和電腦贏的次數
per_win=0
com_win=0
while True:
 sum=sum+1
 key=int(input("請輸入出拳選項:1,剪刀。2,石頭。3,布:"))
 while (key not in [1,3]):
  print("輸入有誤請重新輸入")
  key = int(input("請輸入出拳選項: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)
 # 判斷結果
 if key==1 and com_key==3 or key ==2 and com_key==1 or key ==3 and com_key==2 :
  print("本局結果:你贏了")
  per_win=per_win+1
 elif key==com_key:
  print("本局結果:打平了")
 else:
  print("本局結果:你輸了,呵呵")
  com_win+=1
 n=input("輸入n結束遊戲輸入其他鍵繼續")
 if n=="n":
  break
print("遊戲結束")
print("* "*10+"最終結果"+"* "*10)
print("本次遊戲一共進行%d局其中%s贏%d局%s贏%d局最終結果:"%(sum,name,per_win,hero_name,com_win))
if per_win>com_win:
 print("大吉大利今晚吃雞")
elif per_win==com_win:
 print("平局:擇日再戰")
else:
 print("你還是輸了,真菜,呵呵。。。")

執行結果如下:

* * * * * * * * * * 人機猜拳* * * * * * * * * * 
請輸入暱稱:魚丸
請選擇英雄:1,劉備。2,李白。3,安琪拉1
劉備是個戰士
請輸入出拳選項:1,剪刀。2,石頭。3,布:2
魚丸出了石頭
劉備出了石頭
本局結果:打平了
輸入n結束遊戲輸入其他鍵繼續c
請輸入出拳選項:1,剪刀。2,石頭。3,布:2
魚丸出了石頭
劉備出了石頭
本局結果:打平了
輸入n結束遊戲輸入其他鍵繼續w
請輸入出拳選項:1,剪刀。2,石頭。3,布:3
魚丸出了布
劉備出了石頭
本局結果:你贏了
輸入n結束遊戲輸入其他鍵繼續n
遊戲結束
* * * * * * * * * * 最終結果* * * * * * * * * * 
本次遊戲一共進行3局其中魚丸贏1局劉備贏0局最終結果:
大吉大利今晚吃雞

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。