Python小游戏摇筛子, 面向对象的方式写

一款使用Python实现的简单摇筛子游戏,包含游戏设置、玩家交互、资金管理和游戏逻辑等功能。游戏提供多种投注选项,如大小、顺子、豹子等,玩家可以下注并猜测结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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()

闲来无事, 写个小游戏自娱自乐, 水平有限, 欢迎指导.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值