シャッフルパズルゲームのシャッフルについて
pythonを使い、数字を順番通りにならべかえるゲームを作っています。terminalで表示して遊べるところまではできたのですが、ソースコードにも書いているrandom.shuffle(list1)
を使ってしまうと、本当に数字がランダムにシャッフルされてしまい、元どおりにならべかえることが難しくなってしまうゲームになっています。
現在、
123
456
78
と右下に1マス空け、上下左右ランダムに10回ほど動いてからゲームを開始するというプログラムを書きたいのですが、これをどうやればいいか悩んでいます。
教えていただけると幸いです。
import string
import random
import sys
moves = 0
game_start=True
list1 = [0,1,2,3,4,5,6,7,8]
random.shuffle(list1)
print('\n'*2)
matrix33=[]
while list1 !=[]:
matrix33.append(list1[:3])
list1 = list1[3:]
def zero(board):
global empty_space
for x in range (len(board)):
for y in range(len(board[x])):
if board[x][y]==0:
empty_space = (x,y)
return empty_space
def draw_board(board):
print('\n\t+-----+-----+-----|')
for x in range (len(board)):
for y in range(len(board[x])):
if board[x][y] == 0:
print('\t| XX' , end='')
else:
print('\t| ' + '{:02d}' .format(board[x][y]), end=' ')
print('\n\t+-------+-------+-------|')
def ask_number():
global num , piece
num = input('\nplease type the number of the piece to move : ( q ) to quit ')
if num in ['q','Q']:
print('\n\ngame over ')
sys.exit()
num = int(num)
piece=()
for i in range(len(matrix33)):
for j in range(len(matrix33[i])):
if num == matrix33[i][j]:
piece = (i,j)
return piece , num
zero(matrix33)
while game_start:
draw_board(matrix33)
ask_number()
if num > 8:
print('illegal move , try again ')
else:
if(empty_space==(piece[0]-1,piece[1]))\
or(empty_space==(piece[0]+1,piece[1]))\
or(empty_space==(piece[0],piece[1]-1))\
or(empty_space==(piece[0],piece[1]+1)):
matrix33[empty_space[0]][empty_space[1]]=num
matrix33[piece[0]][piece[1]]=0
empty_space=(piece[0],piece[1])
moves = moves +1
print()
print('you have made ',moves , 'moves so far ')
print(2*'\n')
else:
print('illegal move , try again ')