天天看點

Python程式設計:人機大戰之猜拳遊戲

Python程式設計:人機大戰之劃拳遊戲

題目:

  • 用面向對象的思想
  • 玩家猜拳:1 剪刀 2 石頭 3 布 玩家輸入一個1-3的數字

    電腦出拳:随機産生一個1-3的數字,提示電腦出拳結果

    本局對戰結束,輸出誰赢,是否繼續

  • 輸出結果:玩家赢幾局 電腦赢幾局 平局幾次 遊戲結束

代碼:

import random

#定義一個人類
class person():
    def play(self):
        while True:     #做一個死循環,直到選擇正确為止
            finger = input("請輸入要出拳的選項:\n1---石頭   2---剪刀   3---布\n")
            if finger.isdigit():    #isdigit() 方法檢測字元串是否隻由數字組成
                finger =  int(finger)   #将input預設輸入的為字元類型,将它轉化為數字類型
                if finger == 1:     #用if判斷玩家的出拳
                    print("[玩家]選擇出---石頭")   #輸出玩家的出拳
                    break           #選擇正确時,結束死循環
                elif finger == 2:
                    print("[玩家]選擇出---剪刀")
                    break
                elif finger == 3:
                    print("[玩家]選擇出--- 布 ")
                    break
                else:
                    print("輸入數字有誤!請重新輸入---")
            else:
                print("輸入選項有誤!請輸入數字---")
        return finger       #傳回玩家的出拳

#定義一個電腦類
class computer():
    def stochastic(self):
        random_number = random.randint(1,3)     #用random.randint(1,3)産生一個1到3的随機整數
        if random_number == 1:                  #用if判斷電腦的出拳
            print("[電腦]選擇出---石頭")        #輸出電腦的出拳
        elif random_number == 2:
            print("[電腦]選擇出---剪刀")
        else:
            print("[電腦]選擇出--- 布 ")
        return random_number    #傳回電腦的出拳
    
#定義一個過程類    
class process():
    print("---------------人機大戰---------------\n")
    case1 = 0       #case1表示玩家勝利的次數
    case2 = 0       #case2表示平局的次數
    case3 = 0       #case1表示電腦勝利的次數
    def _init_(self):
        person_object = person()    #person類 對象
        computer_object = computer()    #computer類 對象
        while True:         #做一個死循環,一直進行遊戲,直到玩家想要結束遊戲
            
            person_result = person_object.play()            #用person_result接受玩家的出拳
            computer_result = computer_object.stochastic()  #用computer_result接受電腦的出拳
            
            #1:石頭,2:剪刀,3:布,比較結果,判斷此次遊戲誰赢
            if person_result == 1 and computer_result == 2 or \
               person_result == 2 and computer_result == 3 or \
               person_result == 3 and computer_result == 1:
                print("------------------------玩家赢!")
                self.case1 += 1         #此時玩家勝利的次數case1+1
            elif person_result == computer_result:
                print("------------------------ 平局! ")
                self.case2 += 1         #此時平局的次數case2+1
            else:
                print("------------------------電腦赢!")
                self.case3 += 1         #此時電腦勝利的次數case3+1

            if input("是否繼續遊戲:yes or no ?\n按任意鍵繼續,輸入n或者N結束遊戲\n").lower()=="n":   #接收輸入,玩家是否想要繼續遊戲,将接收的輸入轉化為小寫,和'n'進行比較,如果等于結束遊戲,反之繼續
                break
            
        if self.case1 > self.case3:     #玩家選擇結束遊戲之後,對之前所有的戰局進行統計對比,判斷誰赢
            result = "玩家勝利!"
        elif self.case1 == self.case3:
            result = "平局"
        else:
            result = "電腦勝利"
        print("---------------人機大戰---------------\n遊戲結束:\n"
              "玩家共赢{0}次---電腦共赢{1}次---平局次數{2}次\n---總結果為:{3}"\
              .format(self.case1,self.case3,self.case2,result))     #輸出整個遊戲的結束,其中\在Python語言中表示一行未結束,下一行緊跟上一行,相當于一行

#主函數,開始遊戲
game_object = process()._init_()