# -*- coding: utf-8 -*- import random class Player: Guu = 1 Choki = 2 Paa = 3 Aiko = 0 namae = "" # 名前を初期化します def __init__(self, namaekouho): self.namae = namaekouho # グーチョキパーの文字を返します @staticmethod def guuchokipaa(te): if te == Player.Guu: return "グー" elif te == Player.Choki: return "チョキ" else: return "パー" def start(self): return Player.Guu def end(self, te, katite): pass class NPC(Player): """自動入力するプレイヤーのクラスです""" # 上から前の決まり手がグーチョキパーだったときのそれぞれの次の手の割合を求める配列です # 今は同じ手で決まる可能性はちょっと低いと思っています kanouseiListTe = [ [{'wariai': 40, 'te': Player.Choki} , {'wariai': 40, 'te': Player.Paa}, {'wariai': 20, 'te': Player.Guu}], [{'wariai': 20, 'te': Player.Choki} , {'wariai': 40, 'te': Player.Paa}, {'wariai': 40, 'te': Player.Guu}], [{'wariai': 40, 'te': Player.Choki} , {'wariai': 20, 'te': Player.Paa}, {'wariai': 40, 'te': Player.Guu}] ] iti = 0 kekka = Player.Aiko tekioku = {} # 可能性から手を選択する def sentaku(self): # 前回の決まり手から今回用の配分をきめます kanouseiList = self.kanouseiListTe[self.kekka] # 配分の割合の合計を計算します goukei = 0 for kanousei in kanouseiList: goukei += kanousei['wariai'] # 乱数を使って次の手の元ネタを作ります te = random.randrange(0, goukei) # 割合を足していって元ネタを越えそうだったら # その配分の手に決めます goukei = 0 for kanousei in kanouseiList: if goukei + kanousei['wariai'] >= te: te = kanousei['te'] break goukei += kanousei['wariai'] # 記憶している勝負結果を使って割合を操作したいですが # まだアイデアがありませんので、そのまま返します return te # 出す手を返します def start(self): te = self.sentaku() return te # みんなが出した手を覚えます def end(self, te, katite): for namae in te.keys(): if namae not in self.tekioku: self.tekioku[namae] = [] self.tekioku[namae].append(te[namae]) self.kekka = katite self.iti += 1 class PC(Player): """手入力するプレイヤーのクラスです""" def start(self): # PCのクラスはstartをオーバーライドして手入力にします while True: testr = input("グーなら%d チョキなら%d パーなら%d を入力してください→" % (Player.Guu, Player.Choki, Player.Paa)) te = int(testr) if te == Player.Guu or te == Player.Choki or te == Player.Paa: break return te def hantei(te): """ じゃんけんの判定メソッドです te=値に出した手が入ったリストです キーはなんでもいいです """ # 全部の手をまとめてグーチョキパー順にします tevalue = te.values() telist = list(set(tevalue)) tezenbu = sorted(telist) # グーチョキパー全部あったらあいこです if len(tezenbu) == 3: return Player.Aiko # どれか1つだけでもあいこです if len(tezenbu) == 1: return Player.Aiko # 2つの場合は勝敗は決しました if tezenbu[0] == Player.Guu: if tezenbu[1] == Player.Choki: return Player.Guu else: return Player.Paa if tezenbu[0] == Player.Choki: return Player.Choki # ここには来ないはずです raise Exception("おかしな手を出した人がいるかもしれません") """ ここからはじまります """ # 人数を入力してもらいます npcstr = input("コンピュータの人数→") pcstr = input("プレイヤーの人数→") # プレイヤーNPCのインスタンスを作ります players = [] for num in range(int(npcstr)): npc = NPC("コンピュータ" + str(num + 1)) players.append(npc) # プレイヤーPCのインスタンスを作ります for num in range(int(pcstr)): pc = PC("プレイヤー" + str(num + 1)) players.append(pc) # 勝ち残るまでループします while True: # 考えます te = {} for player in players: print(player.namae + "が手を考えます") te[player.namae] = player.start() # 結果を判定します print("判定します") katite = hantei(te) # 結果を表示して負けたプレイヤーを追い出します if katite == Player.Aiko: print("あいこでした") else: print("勝った手は" + Player.guuchokipaa(katite) + "でした") for namae in te.keys(): # あいこだったら if katite == Player.Aiko: print(namae + "さんは" + Player.guuchokipaa(te[namae]) + "でした") continue # あいこでなかったら勝者を判定します print(namae + "さんは" + Player.guuchokipaa(te[namae]) + "でした") # 負けた人はさようなら if (te[namae] == katite): print("勝ちました") else: print("負けましたさようなら") for player in players: if player.namae == namae: players.remove(player) # 最後の一人になったかを判定します if len(players) == 1: print("最後まで勝ち進んだのは" + players[0].namae + "さんでした") break # 今回のみんなの手を記憶します for player in players: print("勝負が終わらないので" + player.namae + "が手を記憶します") player.end(te, katite)
10 0
コンピュータの人数→プレイヤーの人数→コンピュータ1が手を考えます コンピュータ2が手を考えます コンピュータ3が手を考えます コンピュータ4が手を考えます コンピュータ5が手を考えます コンピュータ6が手を考えます コンピュータ7が手を考えます コンピュータ8が手を考えます コンピュータ9が手を考えます コンピュータ10が手を考えます 判定します あいこでした コンピュータ7さんはグーでした コンピュータ3さんはチョキでした コンピュータ10さんはパーでした コンピュータ1さんはパーでした コンピュータ8さんはチョキでした コンピュータ9さんはチョキでした コンピュータ2さんはパーでした コンピュータ5さんはパーでした コンピュータ6さんはパーでした コンピュータ4さんはグーでした 勝負が終わらないのでコンピュータ1が手を記憶します 勝負が終わらないのでコンピュータ2が手を記憶します 勝負が終わらないのでコンピュータ3が手を記憶します 勝負が終わらないのでコンピュータ4が手を記憶します 勝負が終わらないのでコンピュータ5が手を記憶します 勝負が終わらないのでコンピュータ6が手を記憶します 勝負が終わらないのでコンピュータ7が手を記憶します 勝負が終わらないのでコンピュータ8が手を記憶します 勝負が終わらないのでコンピュータ9が手を記憶します 勝負が終わらないのでコンピュータ10が手を記憶します コンピュータ1が手を考えます コンピュータ2が手を考えます コンピュータ3が手を考えます コンピュータ4が手を考えます コンピュータ5が手を考えます コンピュータ6が手を考えます コンピュータ7が手を考えます コンピュータ8が手を考えます コンピュータ9が手を考えます コンピュータ10が手を考えます 判定します 勝った手はチョキでした コンピュータ7さんはチョキでした 勝ちました コンピュータ3さんはパーでした 負けましたさようなら コンピュータ10さんはチョキでした 勝ちました コンピュータ1さんはチョキでした 勝ちました コンピュータ8さんはチョキでした 勝ちました コンピュータ9さんはチョキでした 勝ちました コンピュータ2さんはパーでした 負けましたさようなら コンピュータ5さんはチョキでした 勝ちました コンピュータ6さんはパーでした 負けましたさようなら コンピュータ4さんはチョキでした 勝ちました 勝負が終わらないのでコンピュータ1が手を記憶します 勝負が終わらないのでコンピュータ4が手を記憶します 勝負が終わらないのでコンピュータ5が手を記憶します 勝負が終わらないのでコンピュータ7が手を記憶します 勝負が終わらないのでコンピュータ8が手を記憶します 勝負が終わらないのでコンピュータ9が手を記憶します 勝負が終わらないのでコンピュータ10が手を記憶します コンピュータ1が手を考えます コンピュータ4が手を考えます コンピュータ5が手を考えます コンピュータ7が手を考えます コンピュータ8が手を考えます コンピュータ9が手を考えます コンピュータ10が手を考えます 判定します あいこでした コンピュータ7さんはパーでした コンピュータ1さんはチョキでした コンピュータ8さんはグーでした コンピュータ9さんはチョキでした コンピュータ10さんはグーでした コンピュータ5さんはグーでした コンピュータ4さんはグーでした 勝負が終わらないのでコンピュータ1が手を記憶します 勝負が終わらないのでコンピュータ4が手を記憶します 勝負が終わらないのでコンピュータ5が手を記憶します 勝負が終わらないのでコンピュータ7が手を記憶します 勝負が終わらないのでコンピュータ8が手を記憶します 勝負が終わらないのでコンピュータ9が手を記憶します 勝負が終わらないのでコンピュータ10が手を記憶します コンピュータ1が手を考えます コンピュータ4が手を考えます コンピュータ5が手を考えます コンピュータ7が手を考えます コンピュータ8が手を考えます コンピュータ9が手を考えます コンピュータ10が手を考えます 判定します あいこでした コンピュータ7さんはパーでした コンピュータ1さんはチョキでした コンピュータ8さんはチョキでした コンピュータ9さんはグーでした コンピュータ10さんはパーでした コンピュータ5さんはチョキでした コンピュータ4さんはグーでした 勝負が終わらないのでコンピュータ1が手を記憶します 勝負が終わらないのでコンピュータ4が手を記憶します 勝負が終わらないのでコンピュータ5が手を記憶します 勝負が終わらないのでコンピュータ7が手を記憶します 勝負が終わらないのでコンピュータ8が手を記憶します 勝負が終わらないのでコンピュータ9が手を記憶します 勝負が終わらないのでコンピュータ10が手を記憶します コンピュータ1が手を考えます コンピュータ4が手を考えます コンピュータ5が手を考えます コンピュータ7が手を考えます コンピュータ8が手を考えます コンピュータ9が手を考えます コンピュータ10が手を考えます 判定します あいこでした コンピュータ7さんはチョキでした コンピュータ1さんはグーでした コンピュータ8さんはパーでした コンピュータ9さんはパーでした コンピュータ10さんはパーでした コンピュータ5さんはパーでした コンピュータ4さんはチョキでした 勝負が終わらないのでコンピュータ1が手を記憶します 勝負が終わらないのでコンピュータ4が手を記憶します 勝負が終わらないのでコンピュータ5が手を記憶します 勝負が終わらないのでコンピュータ7が手を記憶します 勝負が終わらないのでコンピュータ8が手を記憶します 勝負が終わらないのでコンピュータ9が手を記憶します 勝負が終わらないのでコンピュータ10が手を記憶します コンピュータ1が手を考えます コンピュータ4が手を考えます コンピュータ5が手を考えます コンピュータ7が手を考えます コンピュータ8が手を考えます コンピュータ9が手を考えます コンピュータ10が手を考えます 判定します あいこでした コンピュータ7さんはグーでした コンピュータ1さんはチョキでした コンピュータ8さんはチョキでした コンピュータ9さんはパーでした コンピュータ10さんはグーでした コンピュータ5さんはチョキでした コンピュータ4さんはグーでした 勝負が終わらないのでコンピュータ1が手を記憶します 勝負が終わらないのでコンピュータ4が手を記憶します 勝負が終わらないのでコンピュータ5が手を記憶します 勝負が終わらないのでコンピュータ7が手を記憶します 勝負が終わらないのでコンピュータ8が手を記憶します 勝負が終わらないのでコンピュータ9が手を記憶します 勝負が終わらないのでコンピュータ10が手を記憶します コンピュータ1が手を考えます コンピュータ4が手を考えます コンピュータ5が手を考えます コンピュータ7が手を考えます コンピュータ8が手を考えます コンピュータ9が手を考えます コンピュータ10が手を考えます 判定します 勝った手はグーでした コンピュータ7さんはグーでした 勝ちました コンピュータ1さんはグーでした 勝ちました コンピュータ8さんはグーでした 勝ちました コンピュータ9さんはチョキでした 負けましたさようなら コンピュータ10さんはチョキでした 負けましたさようなら コンピュータ5さんはグーでした 勝ちました コンピュータ4さんはグーでした 勝ちました 勝負が終わらないのでコンピュータ1が手を記憶します 勝負が終わらないのでコンピュータ4が手を記憶します 勝負が終わらないのでコンピュータ5が手を記憶します 勝負が終わらないのでコンピュータ7が手を記憶します 勝負が終わらないのでコンピュータ8が手を記憶します コンピュータ1が手を考えます コンピュータ4が手を考えます コンピュータ5が手を考えます コンピュータ7が手を考えます コンピュータ8が手を考えます 判定します 勝った手はパーでした コンピュータ7さんはグーでした 負けましたさようなら コンピュータ8さんはグーでした 負けましたさようなら コンピュータ5さんはグーでした 負けましたさようなら コンピュータ1さんはパーでした 勝ちました コンピュータ4さんはグーでした 負けましたさようなら 最後まで勝ち進んだのはコンピュータ1さんでした