Python版石头剪刀布(等级,经验,mysql注册,存储)

Python版猜拳游戏

初学Python,自己编写一个简单的猜拳游戏(规则要求如下):
1、首先用户可以选择网络游戏(连接mysql数据库),还是本地游戏(本地txt文件)
2、在数据库或本地存储下均可以选择注册新用户、登录老用户、退出
3、游戏规则:①首次进入游戏已获得5条生命(平局/胜利不扣、失败减1)’)
②金币规则:胜利+10;失败-10;平局不变’+’\n’+“可选:每局结束时,如生命值≤2时,可选择5金币换1命”
③经验规则:胜利+5;失败-5;平局+2,+‘每局结束时,经验达到10自动升级,10经验=1级,经验相应减除’
④连胜规则:连胜≥5次,系统自动赠送1命+100经验值,如平局/失败,连胜记录清零’
4、自动存储用户数据

以下为自己编写的—可能存在不完善和啰嗦的地方,望大家指教,Thanks♪(・ω・)ノ

print('|',"欢迎来到Best剪刀石头游戏厅!".center(20,"*"),'|')
zhuce=0;ol=0;bendi=0;login=0                 #zhuce区分注册登录退出;ol区分网络/本地本地;log登录成功开始游戏
life=5;jingbi=0;jingyan=0;dengji=0;liansheng=0
while ol==0 and bendi==0:                       
    online=input('是否进行联网对战(Y/N)')              #选择本地游戏,还是联网登录数据库
    if online.upper()=='Y':
       print('进入联网对战模式')
       ol=1
    else:
        print('进入本地离线模式')
        bendi=1
while zhuce==0 and bendi==1 or zhuce==0 and  ol==1:                  #选择登陆/注册/退出
    xuanzhe = input('请选择登录账户(L)/注册(R)/退出(Q)')
    if xuanzhe.upper()=='L':
        zhuce=1
    elif xuanzhe.upper()=='R':
        zhuce=2
    elif xuanzhe.upper()=='Q':
        print('游戏结束')
        quit()
    else:
        print('输入错误,请选择登录账户(L)/注册(R)/退出(Q),谢谢')

while zhuce==2 and ol==1:                   #网络注册新用户模块
    import pymysql
    mysql = pymysql.connect(host='192.168.1.10', charset='utf8', user='root', db='gzs')      #连接mysql中的gzs库
    yb = mysql.cursor()
    print('************开始网络账号注册哦*************')
    user = input('请输入你要注册的网络对战名(长度3-6位)必填:')
    sec = 0
    while sec == 0:
        if len(user) <= 6 and len(user) >= 3 and user.isalnum() == True:  # 对用户名设定要求
            print('您输入的用户名为:' + user)
            sec = 1  # 用户名输入正确--继续向下进行
        else:
            user = input('您输入的格式有问题,请重新输入:')
    password = input('请填入您的注册密码(长度4-8位,不可为纯数字,字母大小均存在)必填:')
    while sec == 1:
        if len(password) >= 4 and len(
                password) <= 8 and password.isdigit() == False and password.islower() == False and password.isupper() == False and password.isalnum() == True:  # 对密码设定要求
            print('密码输入完毕')
            sec = 2  # 密码输入正确--继续向下进行
        else:
            password = input('密码输入格式错误,请重新输入:')
    birthday = input('请填入您的生日(例:02月12日 填为:0213)选填:')
    while sec == 2:
        if birthday.isalnum() == True:       # 对生日设定要求(当输入时)
            if birthday.isdigit() == True and len(birthday) == 4:
                b1 = birthday[0:2];b2 = birthday[2:4]
                if 1 <= int(b1) <= 12 and 0 <= int(b2) <= 31:
                    print('您输入的生日为:' + b1 + '月' + b2 + '日')
                    sec = 3
            else:
                birthday = input('您的生日格式输入错误,请重新输入:')
        else:  # 当用户未输入生日
            print('跳过生日信息')
            birthday = '0000'
            sec = 3
    tel = input('请填入您的联系方式(11位数字)选填:')
    while sec == 3:
        if tel.isalnum() == True:  # 当用户输入电话时
            if tel.isdigit() == True and len(tel) == 11:
                print('您输入的联系方式:' + tel)
                sec = 4
            elif tel.isdigit() == False or len(tel) != 11:
                tel = input('您输入的联系方式格式有误,请重新输入:')
        else:  # 当用户不输入电话时
            print('跳过联系方式')
            tel = 0000
            sec = 4
    sex = input('性别(男(m)/女(w)/不填=保密):')
    while sec == 4:
        if sex.isalnum() == True:  # 当用户输入性别时
            if sex.upper() == 'M':
                print('欢迎小哥哥')
                sec = 5
            elif sex.upper() == 'W':
                print('欢迎小姐姐')
                sec = 5
        else:
            print('性别保密成功');
            sex = 'x'
            sec = 5
    user_id = input('请输入您的身份证号(4位)必填:')
    while sec == 5:
        if user_id.isalnum() == True and len(user_id) == 4:  # 身份证ID
            if user_id.isdigit() == True:
                print('你输入的身份证ID号为:' + user_id)
                sec = 6
            if user_id[:-1].isdigit() == True and user_id[3].upper() == 'X':
                print('你输入的身份证ID号为:' + user_id.upper())
                user_id = user_id.upper()
                sec = 6
        else:
            user_id = input('身份证id格式有误,请正确填入:')
    address = input('请输入您的地址(选填):')
    while sec == 6:
        if address.isalnum() == True:  # 输入地址时
            input('您输入的地址为:' + address)
            break
        else:
            print('您选择未输入地址')
            address = 'null'
            break
    print('您的注册信息:用户名(%s);密码(***);性别(%s);身份证号(%s);电话(%s);生日(%s);地址(%s)' % (user, sex, user_id, tel, birthday, address))
    save = input('确认输入Y')
    if save.upper() == 'Y':
        sql = "insert into zhanghu (user,password,sex,user_id,tel,birthday,address) values('%s','%s','%s','%s','%s','%s','%s')" % (
        user, password, sex, user_id, tel, birthday, address)
        yb.execute(sql)  # 插入此用户的相关信息到用户注册信息表中
        mysql.commit()  # 提交此任务
        print('您的注册信息已确认,Thanks♪(・ω・)ノ  请再次登录')
    # 创建注册用户独立的游戏参数表,导入初始参数----关联信息注册表
    canshu = 'name varchar(6) not null unique primary key ,life int not null,jingyan int not null,jingbi int not null,dengji int not null,liansheng int not null,VIP int ,constraint  foreign key(name) references zhanghu(user)'
    yb.execute('create table %s(%s);' % (user, caynshu))
    mysql.commit()
    sql = "insert into %s(name,life,jingyan,jingbi,dengji,liansheng,VIP) values ('%s',5,0,0,0,0,0)" % (user, user)
    yb.execute(sql)
    mysql.commit()
    mysql.close()
    zhuce=1

while zhuce==2 and  bendi==1:                                           #本地采用txt文档-----注册新用户
    name = input('请注册您的本地新游戏名(3-6位):')
    if 3 <=len(name)<=6:
        print('你的用户名为:'+name)
        password = input('输入您的新密码(长度4位,不可为纯数字,字母大小均存在):')
        while True:
            if len(password) == 4 and password.isdigit() == False and password.islower() == False and password.isupper() == False and password.isalnum() == True:
               try:
                   wenben = open(name + '.txt', mode='x')          #创建存储的同名文档
                   wenben.close()
                   wenben = open(name + '.txt', mode='w')          #以写入模式打开
                   wenben.write(name + ',' + password+','+str(life)+','+str(jingyan)+','+str(jingbi)+','+str(dengji)+','+str(liansheng))
                   wenben.close()
                   print('注册成功,信息已保存,请再次登录')
                   zhuce=1
               except FileExistsError:
                   print('此用户已存在,请重新选择一个吧')
               break
            else:
                password=input('密码格式输入错误请重新输入(长度4位,不可为纯数字,字母大小均存在):')
                zhuce=3                                     #防止再次循环
    else:
        print('用户名格式错误,请重新输入')
while zhuce==1 and bendi==1:                   #本地账户登录模块
    try:
        name = input('输入本地登录账号')
        password = input('输入密码')
        wenben=open(name+'.txt',mode='r')
        wenben=wenben.read()
        # print('当前读取到记录是',wenben)        #测试使用
        wenben=wenben.split(',',6)
        if name==wenben[0] and password==wenben[1]:         #当账号和密码均匹配成功的时候
           print('登录成功,当前用户名为:%s  生命值:%s  经验:%s  金币:%s  等级:%s  连胜:%s' %(wenben[0],wenben[2],wenben[3],wenben[4],wenben[5],wenben[6]))
           login=1                                 #登录匹配成功将login=1结束此模块
           name=wenben[0];password=wenben[1];life=int(wenben[2]);jinyan=int(wenben[3]);jingbi=int(wenben[4]);dengji=int(wenben[5]);liansheng=int(wenben[6])
           break                 #重新定义存档中所有的参数信息值
        else:
            print('登录信息匹配失败,需重新确认')
    except FileNotFoundError:                       #无此文件(=无此用户注册信息)login=2结束循环开始注册
           print('不存在此用户,请重新输入用户信息登录')

while zhuce==1 and ol==1:                              #网络账户核验mysql登录模式
    import pymysql   #导入pymysql
    mysql=pymysql.connect(host='192.168.1.10',charset='utf8',user='root',db='gzs')
    yb=mysql.cursor()
    try:
        name=input('登录网络对战账号')
        password=input('输入你的密码')
        sql="""select * from zhanghu where user='%s' and password='%s'"""%(name,password)
        yb.execute(sql)
        sql="""select * from %s"""%(name)
        yb.execute(sql)
        res=yb.fetchone()
        n=0
        name=res[0];life=res[1];jingyan=res[2];jingbi=res[3];dengji=res[4];liansheng=res[5]
        print('%s当前状态:生命值:%s 经验:%s 金币:%s 等级:%s 连胜次数:%s' %(name,life,jingyan,jingbi,dengji,liansheng))
        login=1
        mysql.close()
        break
    except:
        print('登录失败,请重新确认你的账号和密码')

while login==1:                             #登陆成功进入游戏
    print('欢迎回来O(∩_∩)O,勇敢的人:%s'%(name))
    print('来开始快乐的游戏之旅吧!'+'\n'+'游戏方式:'+'输入(拳/布/刀)')
    print('******','请注意下面的游戏规则Thanks♪(・ω・)ノ'.center(20),'******')
    print('①首次进入游戏已获得5条生命(平局/胜利不扣、失败减1)')
    print('②金币规则:胜利+10;失败-10;平局不变'+'\n'+"可选:每局结束时,如生命值≤2时,可选择5金币换1命")
    print('③经验规则:胜利+5;失败-5;平局+2'+'\n'+'每局结束时,经验达到10自动升级,10经验=1级,经验相应减除')
    print('④连胜规则:连胜≥5次,系统自动赠送1命+100经验值,如平局/失败,连胜记录清零')
    while life > 0:
        import random
        guize = ['拳', '布', '刀']
        print('\n')                   # 游戏正式开始与游戏规则分开
        y = random.choice(guize)       # y为电脑随机出招---测试方便(电脑先出)
        print('电脑出:', y)
        x = input('请输入您的招式:', )
        if x not in guize:  # 招式输入的格式保证方案,错误要求重新输入
            print('请输入‘拳/布/刀’来参与游戏哦')
        else:
            if x == y:  # 平局方案
                print('此局为平局,生命值-1,经验+2,金币+0')
                life -= 1;jingyan += 2
            elif x == '布' and y == '拳' or x == '刀' and y == '布' or x == '拳' and y == '刀':  # 获胜方案
                print('您此局获胜,生命值+1,经验+5,金币+10')
                life += 1;jingbi += 10;jingyan += 5;liansheng += 1
            else:  # 失败方案
                print('您此局失败,生命值-1,经验-5,金币-10,连胜失败')
                life -= 1;jingbi -= 10;jingyan -= 5;liansheng = 0
            if jingbi<0:          #经验和金币保证>0
               jingbi=0
            if jingyan<0:
               jingyan=0
            print('您当前状态:生命值:%s 经验:%s  金币:%s  等级:%s  连胜次数:%s' %(life,jingyan,jingbi,dengji,liansheng))
            while 0 < life <= 2 and jingbi >= 5:                    # 5金币换1命系统
                print('您当前的生命值不足3哦,可选采用5金币来换1命')
                z = input('是否采用5金币换1命(确认输入Y,否则即为放弃)')
                if z.upper()== 'Y':
                    life += 1;jingbi -= 5
                    print('成功换置1命,当前生命:%s  金币:%s' %(life,jingbi))
                    continue  # 当用户选择1次换置生命后不再询问
                else:
                    break  # 当用户选择非Y,直接结束此询问
            if liansheng >= 5:  # 连胜方案
                 print('大佬NB!!!您当前连胜已达5次哦,系统自动赠送1命+100经验值')
                 life += 1;jingyan += 100;liansheng = 0
                 print('您当前的生命值:%s  您当前的经验值:%s' %(life,jingyan))
            if jingyan >= 10:  # 升级方案
                shengji=jingyan//10
                jingyan-=shengji*10
                dengji = dengji+shengji
                print('您成功升%s级'%shengji)
                print('您现在的级别为:%s  剩余经验:%s' %(dengji,jingyan))
            if dengji>4 or jingbi>30 or life>7:             #自动保存数据模块(当等级>4或金币>30或生命值>7)
               if bendi==1:                      #本地登录情况下保存数据
                   wenben = open(name + '.txt', mode='w')
                   wenben=wenben.write(name + ',' +password+','+str(life)+','+str(jingyan)+','+str(jingbi)+','+str(dengji)+','+str(liansheng))
                   print('系统已将你辉煌的战绩自动保存到本地')
               elif ol==1:                   #网络登录情况下保存数据
                   import pymysql
                   mysql = pymysql.connect(host='192.168.1.10', charset='utf8', user='root', db='gzs')
                   yb = mysql.cursor()
                   sql = """update %s set life=%s,jingyan=%s,jingbi=%s,dengji=%s,liansheng=%s""" % (name, life, jingyan, jingbi, dengji, liansheng)
                   yb.execute(sql)
                   mysql.commit()                       
                   mysql.close()
                   print('系统已将你辉煌的战绩自动保存到服务器')
    if life==0:                                         #生命值用完,结束循环,游戏结束
        print('生命值消耗殆尽')
        print('GAME OVER')
        break
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值