# python实现CRAPS赌博游戏(摇骰子)

Posted 码农邓翔宇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了# python实现CRAPS赌博游戏(摇骰子)相关的知识,希望对你有一定的参考价值。

python实现CRAPS赌博游戏(摇骰子)

如果你是大佬,请跳过这篇文章,这篇文章是写给入门级童鞋看的。下面,我将站在小白的角度去剖析这样一个游戏的代码实现。

首先,每一个初学特困者肯定都会在编程初期产生一个误区:代码是一次性写出来的,但是确不知,实际上就算是大佬,一个程序就算他写过很多遍,他再次写这个程序时,也不可能是按照“顺序结构”编写代码,因为从来没有一个人可以在短时间内将一件事所有可能发生的情况考虑的非常周到,而任何程序实际上都是在编写时都是先搭好一个简单的框架,而再差缺补漏,慢慢完善,最终得到一份优质的代码。一个大佬级的程序员,写代码都是先“搭框架”,所谓的搭框架就像是你在写考试试卷时写的草稿,先绘制一份解决问题的草图,这份草图可能并不能作为最终的设计图,但是它却产生了重要的作用,而往往这样一份草图是不可或缺的。所以,如果你觉得编程难,可能只是你编程的方式不对,而并非是思维上的限制。看完这篇文章,相信你会有收获的。

CRAPS赌博游戏(摇骰子)规则:

玩家摇两颗色子,如果第一次摇出了7点或11点,玩家胜;如果摇出了2点、3点、12点,庄家胜;
如果摇出了其他的点数,游戏继续,玩家重新摇色子;如果玩家摇出了第一次摇的点数,玩家胜;
如果玩家摇出了7点,庄家胜;如果玩家摇出其他点数,游戏继续,玩家重新摇色子,直到分出胜负。

游戏开始之前,玩家有1000元的初始资金,玩家可以下注,赢了获得下注的金额,输了就扣除下注的金额,游戏结束的条件是玩家把钱输光。

一开始,看着这样长长的规则,相信很多小伙伴就已经觉得繁琐了,然后就抛出一句“好难”,或放弃,或直接不加思索的看别人写好的代码。例如这样

import random    # 导入随机模块,不知道没关系,这里知道它能用来产生随机数就行
money = 1000
while money > 0:
    print(f"你的余额为{money}元")
    xiazhu = int(input("请输入下注金额:"))
    flag = False           # 记录玩家输赢状态
    ran = random.randrange(1, 7) + random.randrange(1, 7)# 生成玩家产生的骰子摇出随机点数
    print(f"你摇出了{ran}点")
    if ran == 7 and ran == 11:
        print("玩家胜利")
        flag = True
    elif ran in (2,3,12):    # ran 在这个元组里面说明摇到了这几个点数之一
        print("庄家胜利")
    else:
        while True:
            # 再摇一次
            ran1 = random.randrange(1, 7) + random.randrange(1, 7)
            print(f"你摇出了{ran1}点")
            # 比较ran1和第一次摇的ran
            if ran1 == ran:
                print("玩家胜利")
                flag = True    # 玩家胜利
                break   # 跳出当前循环
            elif ran1 == 7:
                print("庄家胜利")   # 庄家胜利
                break
             # 都不符合条件说明没有判断出胜负,继续循环
    if flag:
        money += xiazhu
        print(f"你赢的了{xiazhu}元")
    else:
        money -= xiazhu
        print(f"你输掉了{xiazhu}元")
print("游戏结束!")

接下来,看一眼这样的代码,很多人觉得太长了,肯定很复杂,于是,很可能你的编程之路就停在这里。

但是,其实,这样的代码,并没有什么难度,可以这样说,不需要很高深的数学知识,也不需要你有很强的逻辑推断能力,只要你敢开始敲,你就已经成功一半了。

摇骰子大家都会吧?我们首先来看一下第一个要求:**玩家摇两颗色子,如果第一次摇出了7点或11点,玩家胜;如果摇出了2点、3点、12点,庄家胜;**注意这里说的是摇两颗骰子,既然是两颗骰子,那是不是拿这两颗骰子出现的点数相加,然后判断它等于几点,这里的如果是不是就是程序中的if ,很明显,产生点数后,需要用到分支结构去判断往哪里执行,于是,根据这些,可以初略写出下面的代码:

产生骰子随机点数ran
if ran == 7 and ran == 11pass         #(先用pass占上一个位置,后面来补全,实际上这里应该是写玩家胜利相关代码)
elif ran == 2 or ran == 3 or ran == 12pass          # 庄家胜利

也可以先写成这样

import random    # 导入随机模块,不知道没关系,这里知道它能用来产生随机数就行
ran1 = random.randrange(1, 7)   # 产生一个1到6的随机数
ran2 = random.randrange(1, 7)   # 产生第二个1到6的随机数
ran = ran1 + ran2               # 生成玩家产生的骰子摇出的随机点数,以上三行代码可以写成一行,看下面一个代码块
if ran == 7 and ran == 11print("玩家胜利")
elif ran == 2 or ran == 3 or ran == 12print("庄家胜利")

调整一下

import random    # 导入随机模块,不知道没关系,这里知道它能用来产生随机数就行
ran = random.randrange(1, 7) + random.randrange(1, 7)# 生成玩家产生的骰子摇出随机点数
if ran == 7 and ran == 11print("玩家胜利")
elif ran in2312):    # ran 在这个元组里面说明摇到了这几个点数之一
	print("庄家胜利")

是不是第一个要求就写好了呢?编程似乎也没有这么难对不对?

下面接着看,如果摇出了其他的点数,游戏继续,玩家重新摇色子;如果玩家摇出了第一次摇的点数,玩家胜;如果玩家摇出了7点,庄家胜;如果玩家摇出其他点数,游戏继续,玩家重新摇色子,直到分出胜负。

继续看,若摇出了其他点数是不是紧接着刚才的分支结构,是前面的分支结构中的一种情况,然后接着是不是就是在这种情况下重新再摇骰子,再判断,值得注意的是,这里说若摇出的骰子仍然没有分出胜负,还要继续摇,那是否这里就要用一个循环的?没有分出胜负就要再重复之前的动作,而且我们并不知道摇具体摇多少次才能分出胜负,因此不能用for循环,要用while循环,知道循环需要执行多少次用for循环,不知道用while循环

因此,下面的代码也可以初略写成这样:

while True# 再摇一次
    ran1 = random.randrange(1, 7) + random.randrange(1, 7)
    # 比较ran和第一次摇的 
    if ran1 == ran:  
    	pass    # 玩家胜利
    	break   # 跳出当前循环
    elif ran1 == 7pass   # 庄家胜利
    	break
     # 都不符合条件说明没有判断出胜负,继续循环

这样是不是就实现了一大半了?

实际上到这儿,整个程序的核心代码就已经写好了。剩下的就是看看还差点什么小要求,

接着看

**游戏开始之前,玩家有1000元的初始资金,玩家可以下注,赢了获得下注的金额,输了就扣除下注的金额,游戏结束的条件是玩家把钱输光。**现在我们的代码已经如下:

import random    # 导入随机模块,不知道没关系,这里知道它能用来产生随机数就行
ran = random.randrange(1, 7) + random.randrange(1, 7)# 生成玩家产生的骰子摇出随机点数
if ran == 7 and ran == 11:
    print("玩家胜利")
elif ran in (2,3,12):    # ran 在这个元组里面说明摇到了这几个点数之一
    print("庄家胜利")
while True:
    # 再摇一次
    ran1 = random.randrange(1, 7) + random.randrange(1, 7)
    # 比较ran1和第一次摇的ran
    if ran1 == ran:
        pass    # 玩家胜利
        break   # 跳出当前循环
    elif ran1 == 7:
        pass   # 庄家胜利
        break
     # 都不符合条件说明没有判断出胜负,继续循环

游戏开始之前,玩家有1000元的初始资金这个不用想吧,直接在前面定义就行了,接着,玩家可以下注,赢了获得下注的金额,输了就扣除下注的金额,那么是不是要给出一个input让用户下注,接着要判断玩家的输赢,那么,我们可以用一个布尔值(bool)来记录玩家的胜败状态,先定义一个布尔变量flag,令它等于False代表当前没有胜利,如果在代码中有它胜利了的地方,就将这个值改变True,那么,在游戏的最后再看看flag是不是就可以知道是庄家还是玩家赢了,同时,我们只要判断除了胜负,就可以决定对玩家下注的钱扣除还是赔付了,最后,游戏结束的条件是玩家把钱输光,那我们就再做一个死循环,将这代码放进去,设置停下的条件是金额<=0就行了,现在代码就可以写成这样了(完整代码)

import random    # 导入随机模块,不知道没关系,这里知道它能用来产生随机数就行
money = 1000
while money > 0:
    print(f"你的余额为{money}元")
    xiazhu = int(input("请输入下注金额:"))
    flag = False           # 记录玩家输赢状态
    ran = random.randrange(1, 7) + random.randrange(1, 7)# 生成玩家产生的骰子摇出随机点数
    print(f"你摇出了{ran}点")
    if ran == 7 and ran == 11:
        print("玩家胜利")
        flag = True
    elif ran in (2,3,12):    # ran 在这个元组里面说明摇到了这几个点数之一
        print("庄家胜利")
    else:
        while True:
            # 再摇一次
            ran1 = random.randrange(1, 7) + random.randrange(1, 7)
            print(f"你摇出了{ran1}点")
            # 比较ran1和第一次摇的ran
            if ran1 == ran:
                print("玩家胜利")
                flag = True    # 玩家胜利
                break   # 跳出当前循环
            elif ran1 == 7:
                print("庄家胜利")   # 庄家胜利
                break
             # 都不符合条件说明没有判断出胜负,继续循环
    if flag:
        money += xiazhu
        print(f"你赢的了{xiazhu}元")
    else:
        money -= xiazhu
        print(f"你输掉了{xiazhu}元")
print("游戏结束!")

这样,这个游戏就完全实现好了,学废了吗,赶紧让代码跑起来吧

如果对你有帮助,不要忘记点赞、关注、评论加收藏哦!

以上是关于# python实现CRAPS赌博游戏(摇骰子)的主要内容,如果未能解决你的问题,请参考以下文章

Python-使用tkinter实现的摇骰子小游戏

python摇骰子猜大小的小游戏

python实现摇骰子猜大小函数升级没把加注及三大运行商短信验证过滤

python掷骰子游戏

使用python制作一个抽奖小游戏——骰子游戏

python实现简单投资复利函数以及实现摇骰子猜大小函数