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] #第1、2行
mid=board[2:4]#第3、4行
bottom=board[4:]#第5、6行
random.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内完成多给一个金币"),由于本人太笨 改了这那不行改了那这不行,希望高人来指导一下。要求是不改变我整体框架下 稍稍改动就能使代码跑起来满足我的要求 谢谢!!