import random
import sys
class GameShaiZi(object):
def __init__(self, funding, num):
self.initial_funding = funding #初始资金
self.sieve_number = num # 筛子数量
self.funding = None # 剩余资金数量
self.user_name = None # 玩家名字
self.bet = None # 下注金额
self.choose = None # 玩家的选择
self.guessPoint = None # 玩家押的点数
self.isGuess = None # 是否猜中
self.pointsList = [] # 点数列表
self.No = 1 # 局数
self.unit = "¥" # 单位
self.tips = {
"formatError": "输入的值格式不正确! 只能输入数字!",
"rangeError": "超出范围, 不存在的选项!",
"betError": "下注金额不合规则!",
"initFundingError": "初始金额不得少于100",
"fundingError": "下注金额不能大于所持有总金额!"
} # 提示语
self.role = {
"大": 2,
"小": 2,
"葫芦": 3,
"顺子": 5,
"豹子": 7,
'猜点': 10,
} # 倍数规则
self.points = {
1: "大",
2: "小",
3: "葫芦",
4: "顺子",
5: "豹子",
6: '猜点',
} # 玩家押注
def formatData(self, data):
while not data.isdecimal():
print(self.tips['formatError'])
data = input('请再次输入:')
return int(data)
def shwoPortal(self):
print('* ' * 25 + "*")
print('*' + " " * 49 + "*")
print('*' + " " * 20 + "欢乐摇筛子" + " " * 19 + "*")
print('*' + " " * 49 + "*")
print('*' + " " * 19 + "1. 开始游戏" + " " * 19 + "*")
print('*' + " " * 19 + "2. 设置游戏" + " " * 19 + "*")
print('*' + " " * 19 + "3. 结束游戏" + " " * 19 + "*")
print('*' + " " * 49 + "*")
print('* ' * 25 + "*")
return self.formatData(input("请选择:"))
def getPointsList(self):
# 获得所有点数 返回点数列表
for i in range(self.sieve_number):
self.pointsList.append(random.randint(1, 6))
def fundingCompute(self):
# 计算资金并判断资金是否小于零
if self.isGuess == 1:
print("$$$-->$资产变化$: ¥%d + ¥%d" % (self.funding, self.bet * self.role[self.points[self.choose]]), end='')
self.funding += self.bet * self.role[self.points[self.choose]]
else:
print("$$$-->$资产变化$: ¥%d - ¥%d" % (self.funding, self.bet), end='')
self.funding -= self.bet
print(" = ¥" + str(self.funding))
print("当前总资产: %s%d" % (self.unit, self.funding))
if self.funding <= 0:
print("您已成穷光蛋! 游戏结束!")
ageen = input("再来一局?(0:结束游戏 其他任意键:再次游戏)")
if ageen == '0':
self.startGame()
else:
self.paly()
def getRole(self):
# 获取规则
self.pointsList.sort()
if self.sieve_number >= 3:
if len(set(self.pointsList)) == 1:
return '豹子'
if self.sieve_number >= 4:
if len(set(self.pointsList)) == self.sieve_number:
return '顺子'
if self.sieve_number >= 5:
if len(set(self.pointsList)) == 2:
return '葫芦'
if sum(self.pointsList) <= 3 * self.sieve_number + self.sieve_number / 3:
return "小"
if sum(self.pointsList) > 3 * self.sieve_number + self.sieve_number / 3:
return "大"
def decision(self):
if self.points[self.choose] == self.getRole():
self.isGuess = 1
if self.choose == 6:
if self.guessPoint == sum(self.getPointsList()):
self.isGuess = 1
else:
self.isGuess = 0
print("-$-$-$-开!-$-$-$-")
print("%s -> %d点 -> %s" % (self.pointsList, sum(self.pointsList), self.getRole()))
print("恭喜! 您押中了!")
else:
self.isGuess = 0
print("-$-$-$-开!-$-$-$-")
print("%s -> %d点 -> %s" % (self.pointsList, sum(self.pointsList), self.getRole()))
print("真可惜! 您没有押中!")
def getUserInput(self):
# 获取用户的输入
bet = self.formatData(input('请输入下注金额(10的倍数):'))
while True:
if bet < 10 or bet%10 != 0 or bet > self.funding:
print(self.tips["betError"])
bet = self.formatData(input('请再次输入:'))
else:
break
self.bet = bet
print(self.points)
choose = self.formatData(input('请输入您的选择:'))
while True:
if choose not in self.points.keys():
print(self.tips['rangeError'])
choose = self.formatData(input('请再次输入:'))
else:
break
if choose == 6:
guessPoint = self.formatData(input('请输入您想押的点数:'))
while True:
if 0 < guessPoint <= 6 * self.sieve_number:
break
else:
print(self.tips['rangeError'])
guessPoint = self.formatData(input('请再次输入:'))
self.guessPoint = guessPoint
self.choose = choose
def initUser(self):
# 初始化玩家
if self.user_name == None:
self.user_name = input("请输入您的名字:")
self.funding = self.initial_funding
print('初始化中......')
print("-" * 50)
print("欢迎您! 尊敬的%s!" % self.user_name)
print("您现在共拥有资金:%s%s" % (self.funding, self.unit))
print("-" * 50)
print(">" * 22 + "开始游戏!" + "<" *22)
def gameSettings(self):
# 设置游戏
funding = self.formatData(input("请输入初始金额:"))
while True:
if (funding < 100) or (funding % 10 != 0):
print(self.tips["initFundingError"])
funding = self.formatData(input('请再次输入:'))
else:
break
self.initial_funding = funding
num = self.formatData(input("请输入筛子个数(不大于6个):"))
while True:
if 0 < num < 6 :
break
else:
print(self.tips['rangeError'])
num = self.formatData(input('请再次输入:'))
self.sieve_number = num
print("已保存设置!")
def endGame(self):
# 结束游戏
sys.exit('Game Over.')
def paly(self):
# 运行程序
self.initUser()
while True:
print("^" * 20)
print("-*-*-*-第 " + str(self.No) + "局-*-*-*-")
print("^" * 20)
self.getUserInput()
self.getPointsList()
self.decision()
self.fundingCompute()
self.pointsList = []
self.No += 1
def startGame(self):
# 开始游戏
while True:
choose = self.shwoPortal()
if choose == 1:
self.paly()
# self.startGame()
elif choose == 2:
self.gameSettings()
# self.startGame()
elif choose == 3:
self.endGame()
else:
print(self.tips["rangeError"])
self.startGame()
if __name__ == '__main__':
initial_funding = 1000
num = 3
game = GameShaiZi(initial_funding, num)
game.startGame()
闲来无事, 写个小游戏自娱自乐, 水平有限, 欢迎指导.