学习python编程,在新东方少儿编程官网的自由创作平台做的一些作品。
可以在线运行,效果如下(在新页面中打开链接):
代码如下(用到平台自定义的xdf库):
from xdf import *
arr = [1,2,3,4,5,6,7,8,9,10,11,12]
w = 256
isPlaying = True
cubeArr = []
index12 = 11
for i in range(12):
cube = box(1, 1, w-10, w-10, "#ccc")
tf = text(str(i+1), w / 2, w, w/2, "red", "center")
cubeArr.append((cube, tf))
txt = text("恭喜,拼图完成", 768/2, 1024/2, 100, "red", "center")
txt2 = text("按空格键开始", 768/2, 1024/2 + 120, 100, "red", "center")
def updateCube():
for i in range(12):
ind = arr[i] - 1
m = i // 3
n = i % 3
cubeArr[ind][0].move(w * (n+0.5), w * (m+0.5))
cubeArr[ind][1].move(w * (n+0.5), w * (m+0.75))
def swap(i,j):
t=arr[i]
arr[i]=arr[j]
arr[j]=t
def upsetArr():
for i in range(10): #交换偶数次,能保证逆序数是偶数
ii = random(0, 10)
while ii==i:
ii = random(0,10)
swap(i,ii);
#print(getInverseNum()) #逆序数,逆序数是偶数,拼图才有解
def reset():
upsetArr()
index12 = 11
txt.hide()
txt2.hide()
updateCube()
isPlaying = True
cubeArr[11][0].hide()
cubeArr[11][1].hide()
def getInverseNum():
inverseNum=0;
for i in range(11):
c=arr[i]
for j in range(11-1-i):
if c>arr[j+i+1]:
inverseNum+=1
return inverseNum
def isWin():
for i in range(11):
if arr[i] > arr[i+1]:
return False
return True
def keydown(keyCode, key):
global isPlaying
if isPlaying:
if keyCode == 37:
moveLeft()
checkWin()
elif keyCode == 38:
moveUp()
checkWin()
elif keyCode == 39:
moveRight()
checkWin()
elif keyCode == 40:
moveDown()
checkWin()
else:
if keyCode == 32:
isPlaying = True
reset()
def loop():
pass
def checkWin():
global isPlaying
if isWin():
isPlaying = False
txt.show()
txt2.show()
def moveLeft():
global index12
n = index12 % 3
targetN = n + 1
if targetN < 3:
swap(index12, index12 + 1)
index12 = index12 + 1
updateCube()
def moveRight():
global index12
n = index12 % 3
targetN = n - 1
if targetN >= 0:
swap(index12, index12 - 1)
index12 = index12 - 1
updateCube()
def moveUp():
global index12
m = index12 // 3
targetM = m + 1
if targetM < 4:
swap(index12, index12 + 3)
index12 = index12 + 3
updateCube()
def moveDown():
global index12
m = index12 // 3
targetM = m - 1
if targetM >= 0:
swap(index12, index12 - 3)
index12 = index12 - 3
updateCube()
reset()
也可以下载代码,本地python环境运行(用pygame封装了xdf库)。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。