限定ジャンケンもどき
福本伸行『賭博黙示録カイジ』に出てくる、「限定ジャンケン」のパクリゲーム。
- 限定ジャンケンもどきルール
- ・プレイヤは初めに、星を3つ持つ
・相手はレベル数だけ星を持つ
・プレイヤと相手は初めに、グー、チョキ、パーの3種4枚(計12枚)づつのカードを持つ
・カードを1枚1回の使用として、相手とジャンケン勝負をし、勝つと相手の星が貰える(負けた場合は星を没収される、あいこは星の移動無し)
・勝利条件:自分の持ちカードと星が零になる前に、相手の星を全て奪う
・敗北条件:相手の星を全て奪う前に、自分の持ちカードか星が零になる
・勝利後、カード・星の状態を保持したままで次のゲームに挑戦する事が出来る(新しい相手はカードをフルセット持っているので不利)
ソースコード(GenteiJanken.py):
import sys import random class Player: def __init__(self): self.card_deck = [4 , 4, 4] # rock, scissors, paper self.star = 3 self.card = () def selectRandomCard(self): num = random.randint(0, 2) while (self.card_deck[num] < 1): num = random.randint(0, 2) return self.informCard(num) def selectCard(self): c = raw_input("Select card" +\ "(0:random, 1:rock, 2:scissors, 3:paper, e:escape): ") if c == 'e': print "You have escaped!" sys.exit() else: num = int(c) - 1 if num == -1: return self.selectRandomCard() elif self.card_deck[num] < 1: print "\n rock_card:" + str(self.card_deck[0]) +\ " scissors_card:" + str(self.card_deck[1]) +\ " paper_card:" + str(self.card_deck[2]) self.selectCard() else: return self.informCard(num) def informCard(self, num): if self.card_deck[num] > 0: self.card_deck[num] = self.card_deck[num] - 1 if num == 0: card = "rock_card" elif num == 1: card = "scissors_card" elif num == 2: card = "paper_card" return (num, card) class GameManager: def __init__(self, my_player, rival_player): self.my_player = my_player self.rival_player = rival_player def playGame(self): print "\n Your Star: " + str(self.my_player.star) +\ "\tRival's Star: " + str(self.rival_player.star) print " rock_card:" + str(self.my_player.card_deck[0]) +\ " scissors_card:" + str(self.my_player.card_deck[1]) +\ " paper_card:" + str(self.my_player.card_deck[2]) self.my_player.card = self.my_player.selectCard() self.rival_player.card = self.rival_player.selectRandomCard() self.judgeGame() def judgeGame(self): print "You: " + self.my_player.card[1] +\ "\tRival: " + self.rival_player.card[1], if self.my_player.card[0] == self.rival_player.card[0]: self.setTie() elif self.my_player.card[0] == 0 and self.rival_player.card[0] == 1: self.setWin() elif self.my_player.card[0] == 0 and self.rival_player.card[0] == 2: self.setLose() elif self.my_player.card[0] == 1 and self.rival_player.card[0] == 0: self.setLose() elif self.my_player.card[0] == 1 and self.rival_player.card[0] == 2: self.setWin() elif self.my_player.card[0] == 2 and self.rival_player.card[0] == 0: self.setWin() elif self.my_player.card[0] == 2 and self.rival_player.card[0] == 1: self.setLose() if (self.my_player.card_deck[0] < 1 and\ self.my_player.card_deck[1] < 1 and\ self.my_player.card_deck[2] < 1) or\ (my_player.star == 0): self.setGameLose() elif (self.rival_player.card_deck[0] < 1 and\ self.rival_player.card_deck[1] < 1 and\ self.rival_player.card_deck[2] < 1) or\ (rival_player.star == 0): self.setGamewin() else: self.playGame() def setWin(self): self.my_player.star = self.my_player.star + 1 self.rival_player.star = self.rival_player.star - 1 print "\t\tWin!" def setLose(self): self.my_player.star = self.my_player.star - 1 self.rival_player.star = self.rival_player.star + 1 print "\t\tLose!" def setTie(self): print "\t\tTie!" def setGamewin(self): print "You Win! :-D" print " Your Star: " + str(self.my_player.star) +\ "\tRival Star: " + str(self.rival_player.star) def setGameLose(self): print "You Lose! :-p" print " Your Star: " + str(self.my_player.star) +\ "\tRival Star: " + str(self.rival_player.star) sys.exit() if __name__=='__main__' : random.seed() my_player = Player() while True: level = raw_input("Select Level(1~9 or q:quit): ") if level == 'q': sys.exit() else: try: rival_player = Player() rival_player.star = int(level) gm = GameManager(my_player, rival_player) gm.playGame() except : #print "Unexpected error:", sys.exc_info()[0] pass
実行例:
> python GenteiJanken.py Select Level(1~9 or q:quit): 3 Your Star: 3 Rival's Star: 3 rock_card:4 scissors_card:4 paper_card:4 Select card(0:random, 1:rock, 2:scissors, 3:paper, e:escape): 1 You: rock_card Rival: scissors_card Win! Your Star: 4 Rival's Star: 2 rock_card:3 scissors_card:4 paper_card:4 Select card(0:random, 1:rock, 2:scissors, 3:paper, e:escape): 0 You: scissors_card Rival: rock_card Lose! Your Star: 3 Rival's Star: 3 rock_card:3 scissors_card:3 paper_card:4 Select card(0:random, 1:rock, 2:scissors, 3:paper, e:escape): 1 You: rock_card Rival: rock_card Tie! (中略) Select card(0:random, 1:rock, 2:scissors, 3:paper, e:escape): 1 You: rock_card Rival: scissors_card Win! You Win! :-D Your Star: 6 Rival Star: 0 Select Level(1~9 or q:quit): q >
『アカギ』アニメ化記念?(笑)