python编写石头剪刀布小游戏


#下面定义一个列表,用于用户注册账户,填写密码进行比对
d=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9']
ply=input('请选择注册/登录:')#让用户选择注册/登录
if ply=='注册':#当用户选择注册时
    user = input('请输入账户:');pw = input('请输入密码:')#输入注册的账户和密码
    if len(user)<4 or len(user)>6:#限制用户账号在4-6个字符
        print('账户注册无效,请输入4-6位的账户!')
    elif user.isdigit():#用户名不能只是数字
        print('账户注册无效,用户名应包含大小写字母和数字!')
    elif user.isalnum()==False:#不让用户用有空格或标点
        print('账户注册无效,用户名不能有空格和特殊字符!')
    elif user.isupper()==True:#用户名不能只是大写字母
        print('账户注册无效,用户名应包含大小写字母和数字!')
    elif user.islower()==True:#用户名不能只是小写字母
        print('账户注册无效,用户名应包含大小写字母和数字!')
    elif not(user[0].isalpha()):#用户名开头不能是数字
        print('账户注册无效,用户名开头请使用字母!')
    elif len(pw)<8 or len(pw)>16:#密码长度为8-16位字符
        print('账户注册无效,请输入8-16位的密码!')
    elif pw.isalnum()==False:#密码不能有标点和空格
        print('账户注册无效,密码不能有空格和特殊字符!')
    elif pw.isupper()==True:#密码不能全是大写字母
        print('账户注册无效,密码应包含大小写字母和数字!')
    elif pw.islower()==True:#密码不能全是小写字母
        print('账户注册无效,用户名应包含大小写字母和数字!')
    elif pw.isdigit():#密码不能只是数字
        print('账户注册无效,密码应包含大小写字母和数字!')
    for i in pw:#for循环,定义变量i遍历密码的内容
         if i not in d:#如果遍历的密码不在d列表内,则打印输出下面这句话
                 print('账户注册无效,密码',i,'是违规字符')
    else:
        uw=user+':'+pw#定义一个变量,账户:变量
        zcfile=open('zhuce.txt',mode='a')#a模式打开文件,添加账户到注册文件内
        zcfile.write(uw)#添加账户:密码到文档内
        zcfile.close()#添加完,关闭文件
elif ply=='登录':#当用户选择登录时
    user = input('请输入账户:');pw = input('请输入密码:')#输入账号,密码
    ppfile=open('zhuce.txt',mode='r')#r模式打开注册用户存档文档
    nr=ppfile.read()#定义变量保存文档的读取信息
    ppfile.close()
    cdwdfile=open('cundang.txt',mode='r')#打开存档信息文档
    cdread=cdwdfile.read()#读取存档信息
    cdlist=cdread.split(':')#将存档信息转化为列表形式,方便对变量进行赋值
    cdwdfile.close()#操作完毕,关闭文件
    if user+':'+pw in nr:#对比账户,密码是否存在
        if user+':'+pw in cdread:#验证用户,密码是否在存档文件内,如果有存档,则读取存档内容,赋值给变量
            js=cdlist[2]#角色是存档列表下标为2的字符
            l=int(cdlist[3])# l=等级,y=经验值,jb=金币数,lsc=连胜次数,n=游戏次数
            y=int(cdlist[4])
            jb=int(cdlist[5])
            lsc=int(cdlist[6])
            n=int(cdlist[7])
            print('您剩余的游戏次数为:', n, end='\t')
            print('您的金币数为:', jb, end='\t')
            print('您当前的经验值为:', y, end='\t')
            print('您当前的等级为:', l, end='\t')
            print('您当前连胜次数为:', lsc)
        else:
            js = input('请设定角色:')
            l = 0;
            y = 0;
            jb = 0;
            lsc = 0;
            n = 5  # l=等级,y=经验值,jb=金币数,lsc=连胜次数,n=游戏次数
        print('登录成功开始游戏!')
        import random#导入随机库
        comlist=['石头','剪刀','布']#设定计算机随机的值
        computer=random.choice(comlist)#电脑产生随机值
        print(computer)#打印出电脑的随机值
        while n>0:#当游戏次数>0时,进入循环,开始游戏
            usr=input('请出拳,输入石头,剪刀,布:')#让玩家出拳
            if usr=='石头' or usr=='剪刀' or usr=='布':#如果玩家出的是石头,剪刀,或布,则进行下面的判断
                if usr=='石头' and computer=='剪刀' or usr=='剪刀' and computer=='布' or usr=='布' and computer=='石头':
                    print('恭喜,您赢了!')
                    jb+=10;y+=10;lsc+=1#赢得对局金币+10,经验+10,连胜+1
                    if lsc==5:#当连胜5次后
                        n+=1;lsc-=lsc#游戏次数+1,连胜次数清零
                    if y==(l+1)*36:#当游戏经验=等级+1 *36时
                        l+=1;y-=y#等级提升1,所得经验清零
                elif usr==computer:#当玩家出拳和电脑一样则为平局
                    print('这局游戏打平了!')
                    n-=1;lsc-=lsc#当游戏平局,游戏次数-1,连胜次数清零
                else:
                    print('不好意思,您输了!')
                    n-=1;lsc-=lsc#游戏对局输了,游戏次数-1,连胜次数清零
                if n<2:#当游戏次数少于两次时提示是否购买次数
                    gm=input('您的游戏次数少于2次,是否购买游戏次数,50金币1次:')
                    if gm=='是':#如果玩家输入是
                        if jb>=50:#判断玩家金币是否>=50枚
                            jb-=50;n+=1#如果玩家有50枚金币,就-50金币,游戏次数+1
                        else:#如果没有50金币,提示金币不足
                            print('您的金币不足!')
                    else:#如果不购买次数,提示次数不足
                        print('您的游戏次数已经不足2次,请注意!')
            else:#如玩家输入的不是石头,剪刀,布,就提示下面这局话
                print('输入错误,请重新出拳!')
                n-=1;lsc-=lsc
            print('您剩余的游戏次数为:',n,end='\t')
            print('您的金币数为:',jb,end='\t')
            print('您当前的经验值为:',y,end='\t')
            print('您当前的等级为:',l,end='\t')
            print('您当前连胜次数为:',lsc)
            xw=input('对局结束,是否继续游戏:')
            if xw=='是':
                continue
            else:
                play = input('请选择是/否进行存档:')#游戏结束,是否选择存档
                if play == '是':#选择存档
                    cd = open('cundang.txt', mode='w')
                    #定义变量,内容为账户:密码:等级:经验:金币:连胜次数
                    cnr = user + ':' + pw + ':' +js+':'+ str(l) + ':' + str(y) + ':' + str(jb) + ':' + str(lsc)+':'+str(n)
                    cd.write(cnr)#将信息保存到文档内
                    cd.close()
                    print('退出游戏!')
                    break
                else:
                    print('退出游戏!')#如不存档,直接退出游戏
                    break
    else:
        print('当前用户不存在,请重新登录或注册')#如果输入的账号,密码不在文档中,则提示这段话
else:
    print('输入错误!请输入注册或者登录')#如果用户输入的内容不是注册/登录,提示这句话


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值