一年的五分之四 2023-05-28 22:01 采纳率: 90%
浏览 80
已结题

python 6x6游戏加登录、记录系统

import random
import time
def initialize_6x6():#创建一个6行的矩阵,其中第一行有6x5x4x3x2x1=720中结果,其余行数为第一行的结果
    row0=[1,2,3,4,5,6]
    random.shuffle(row0) #随机打乱选择其中一种
    row1=row0[3:6]+row0[0:3]
    row2=[row0[2],row0[0],row0[1],row0[5],row0[3],row0[4]]
    row3=row2[3:6]+row2[0:3]
    row4=row3[5],row3[3],row3[4],row3[2],row3[0],row3[1]
    row5=row4[3:6]+row4[0:3]
    return [row0,row1,row2,row3,row4,row5]

def hanghuanhang(board):
    top=board[:2] #第12mid=board[2:4]#第34bottom=board[4:]#第56random.shuffle(top)#其中第一行与第二行换 见p399图
    random.shuffle(mid)#其中第3行与第4行换 见p399图
    random.shuffle(bottom)#其中第5行与第6行换 见p399图
    return top+mid+bottom
def hengshuhuan(board):#由于行和列不好换 需要创建一个行和列的置换函数 见p388
    size=len(board)
    k=[]
    for _ in range(size):
        k.append([])
    for row in board:
         for g in range(size):
            k[g].append(row[g])
    return k
def shushuhuan(borad):#由于列无法直接置换所以需要把列换到行进行列与列的置换
    shu1_3=borad[0:3]
    shu4_6=borad[3:6]
    random.shuffle(shu1_3)
    random.shuffle(shu4_6)
    return shu1_3+shu4_6
#下面进行与行、列与列的置换,由于第一行出现的情况我们已经知道有720种结果
#但每行与行之间需要换和每列与列之间要换 还存在2**9即2的9次方的结果为512(见图p399)
#所以总可能数为 720x512=368640种
def creation_6x6():
    board=initialize_6x6()
    board=hanghuanhang(board)#行换行 包含 上 中 下三个区域 p399
    board=hengshuhuan(board)#行换列
    board=shushuhuan(board)#由于列无法直接置换所以需要把列换到行进行列与列的置换
    board=hengshuhuan(board)#列在行的方向上换完后回到列
    return board

def copy_board(board):#创建一个复制函数,后面方便对照玩家输入后的答案
    j=[]
    for row in board:
        j.append(row[:])
    return j
def get_messege(messege,a,b):#获取信息函数在总函数里用到
    messeges=input(messege)
    while not(messeges.isdigit() and a<=int(messeges)<=b):
        messeges=input(messege)
    return int(messeges)

def get_level():
    print("游戏规则:等级一为填6个空,等级二为填8个空,等级三为填10个空,等级一在1分钟内完成给一个金币,超过一分钟减一个,等级二在两分钟内完成给一个金币,超过两分钟减一个,等级三在三分钟内完成给一个金币,超过三分钟减一个,等级一在30s内完成多给一个金币,等级二60s内完成多给一个金币,等级二90s内完成多给一个金币")
    level=input("一共1~3个等级 请输入你想进行的等级:")
    while level not in("1","2","3"):
        level=input("一共1~3个等级 请输入你想进行的等级")
    if level=="1":
        return 6
    elif level=="2":
        return 8
    else:
        return 10
def make_holes(copy_board,get_level):#制作"空"函数但空的部分暂且按0来记号
    while get_level >0:
        i=random.randint(0,3)
        j=random.randint(0,3)
        if copy_board[i][j]!=0:
            copy_board[i][j]=0
            get_level-=1
    return copy_board
def show_board(copy_board):#将"0"记号的部分 转化为" . "并且打印出来
    for row in copy_board:
        for entry in row:
            if entry==0:
                print(".",end=" ")
            else:
                print(entry,end=" ")
        print()
def load_members():
    file=open("/Users/wangzhehan/Desktop/aa.csv","r")
    members={}
    for line in file:
        name,passwd,tries,chips=line.strip("\n").split(",")
        members[name]=(passwd,int(tries),int(chips))
    file.close()
    return members

def login(members):
    user_member=input("输入你的名字:")
    user_passwd=input("输入你的密码:")
    if user_member in members.keys():
        if user_passwd in members[user_member][0]:
            tries=members[user_member][1]
            chips=members[user_member][2]
            print("你已经玩了",tries,"游戏了。")
            if chips >=0:
                print("你现在还有",chips,"chips")
            else:
                print("你欠",chips,"chips")
            return user_member,tries,chips,members
        else:
            return login(members)
    else:
        members[user_member]=(user_passwd,0,0)
        return user_member,0,0,members
def store_members(members):
        file=open("/Users/wangzhehan/Desktop/aa.csv","w")
        names=members.keys()
        for name in  names:
            passwd,tries,chips=members[name]
            line=name+','+passwd+','+str(tries)+','+\
                str(chips)+"\n"
            file.write(line)
        file.close()


def soduk_6x6():#执行总函数
    members= load_members()
    user_name,passwd,tries,chips= login(members)
    more = "y"
    while more == "y":
        solution=creation_6x6()
        puzzle_board=copy_board(solution)
        not_holes=get_level()
        puzzle_board=make_holes(puzzle_board,not_holes)
        start = time.perf_counter()
        show_board(puzzle_board)
        while not_holes>0:
            i = get_messege("行数#", 1, 6) - 1
            j = get_messege("列数#", 1, 6) - 1
            if puzzle_board[i][j]!=0:
                print("这里已经有数了重新输入")
                continue
            n=get_messege("数字#:",1,6)
            if n ==solution[i][j]:
                puzzle_board[i][j]=solution[i][j]
                show_board(puzzle_board)
                not_holes-=1
            else:
                print(n,"数字有误重新输入")

        end=time.perf_counter()
        times= round(end - start, 0)
        print("共用"+str(times)+"秒")
        tries+=1
        if not_holes==6:
            if times <=30:
                chips+=2
            elif 30 < times < 60:
                chips+=1
            elif times >60:
                chips-=1
        elif not_holes==8:
            if times <=60:
                chips+=2
            elif 60< times <120:
                chips+=1
            else:chips-=1
        else:
            if times <= 90:
                chips+=2
            elif 90 < times <180:
                chips+=1
            else:chips-=1
        return chips

        more = input("再来一次的话请输入y,停止输入任意键")
    members[user_name]=(str(passwd),int(tries),int(chips))
    store_members(members)



soduk_6x6()

python 6x6的数独游戏 , 如要求写的一样 print("游戏规则:等级一为填6个空,等级二为填8个空,等级三为填10个空,等级一在1分钟内完成给一个金币,超过一分钟减一个,等级二在两分钟内完成给一个金币,超过两分钟减一个,等级三在三分钟内完成给一个金币,超过三分钟减一个,等级一在30s内完成多给一个金币,等级二60s内完成多给一个金币,等级二90s内完成多给一个金币"),由于本人太笨 改了这那不行改了那这不行,希望高人来指导一下。要求是不改变我整体框架下 稍稍改动就能使代码跑起来满足我的要求 谢谢!!

  • 写回答

5条回答 默认 最新

  • Dick_不周 2023-05-29 13:49
    关注

    。。目前解决了本地文件的问题,

    然后发现~

    img

    通过修改login()函数的返回值和接受变量如下:

    img

    接受变量更改如下:

    img

    继续运行结果如下

    img

    更改后又遇见问题:

    img

    继续更改后:

    存储文件变更

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 6月6日
  • 已采纳回答 5月29日
  • 创建了问题 5月28日

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?