学习python编程,在新东方少儿编程官网的自由创作平台做的一些作品。
可以在线运行,效果如下(在新页面中打开链接):
代码如下(用到平台自定义的xdf库):
from xdf import *
import time
setFrameRate(10)
W = 768
H = 1024
CW = 64
m = 11
n = 16
ox = (W - m * CW) // 2
oy = (H - n * CW) // 2
def xy2ij(x, y):
return [(x-ox)//CW,(y-oy)//CW]
def ij2xy(i, j):
return [ox+i*CW+CW/2,oy+j*CW+CW/2]
names = [
#
"DLS-hro-b1@006I",
"DLS-hro-b2@006J",
"DLS-hro-w1@006K",
"DLS-hro-w2@006L",
#
"DLS-cub-b@006E",
"DLS-cub-w@006H",
"DLS-cub-g@006G",
"DLS-cub-u@006F",
"DLS-tar@006X",
"DLS-swt@006f",
#
"DLS-key-b@006M",
"DLS-key-w@006N",
"DLS-lok-b@006O",
"DLS-lok-w@006P"
]
maps = [
[45,146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[145,29,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,0,4,1,0,1,0,1,1,1,1,1,1,1,1,0,1,0,0,1,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1],
[68,123,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,4,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1],
[86,61,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,0,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,0,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,4,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[86,89,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,4,1,0,1,0,1,0,1,0,3,0,0,0,0,0,0,3,0,1,0,1,0,1,0,1,3,0,0,0,0,0,0,3,1,0,1,0,1,0,1,0,3,0,0,0,0,0,0,3,0,1,0,1,0,1,0,1,3,0,0,0,0,0,0,3,1,0,1,0,1,0,1,0,3,0,0,0,0,0,0,3,0,1,0,1,0,1,0,1,3,0,0,0,0,0,0,3,1,0,1,0,1,0,1,0,4,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[135,87,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[132,139,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,3,4,3,1,1,0,0,3,4,3,0,0,0,1,1,1,3,0,3,1,1,0,0,3,1,3,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2],
[53,158,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,4,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1],
[122,116,0,0,0,0,0,0,3,1,3,1,1,1,1,1,1,1,0,0,0,0,0,0,3,2,3,1,1,1,1,1,1,1,0,0,3,3,3,3,3,2,3,3,3,3,3,1,1,1,0,0,3,2,2,2,3,2,3,2,2,2,3,1,1,1,0,0,3,2,2,2,0,0,0,2,2,2,3,1,1,1,0,0,3,2,2,2,2,0,2,2,2,2,3,1,1,1,0,0,3,2,2,2,3,0,3,2,2,2,3,1,1,1,0,0,3,2,2,2,3,4,3,2,2,2,3,1,1,1,0,0,3,2,2,2,3,0,3,2,2,2,3,1,1,1,0,0,3,2,2,2,1,2,3,2,2,2,3,1,1,1,0,0,3,2,3,2,3,3,3,2,2,2,3,1,1,1],
[103,89,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,3,3,0,0,0,0,0,0,0,0,0,2,1,0,0,0,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[68,75,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,3,3,3,3,3,3,1,1,1,1,1,0,0,0,0,0,0,0,0,4,1,1,1,1,1,1,1,42,0,37,1,170,3,165,2,106,0,101,1],
[52,137,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,3,2,0,1,0,1,2,3,4,3,2,2,2,2,2,2,3,2,1,0,1,0,2,3,3,3,2,2,2,2,2,2,3,2,0,1,0,1,2,3,2,2,2,2,2,2,2,2,3,2,1,0,1,0,2,3,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,70,0,71,1,58,3,59,2,72,0,69,1,85,0,86,1,87,0,88,1,102,0,103,1,104,0,101,1,117,0,118,1,119,0,120,1],
[17,154,0,0,0,3,0,0,0,3,2,2,2,3,1,1,1,1,0,0,0,0,0,0,0,0,2,4,2,1,1,1,1,1,0,0,0,3,0,0,0,3,2,2,2,3,1,1,1,1,3,0,3,3,3,0,3,3,3,3,3,3,3,3,1,3,0,0,0,3,0,0,0,3,3,1,1,1,3,1,1,1,0,1,0,3,0,0,0,3,1,1,1,1,1,1,1,1,0,0,0,3,0,0,0,3,1,1,1,1,3,1,1,1,3,0,3,3,3,3,3,3,0,3,3,3,3,3,1,3,0,0,0,3,0,0,0,0,0,1,1,1,3,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,3,1,1,1,0,0,0,3,0,0,0,0,1,1,1,1,3,1,1,1,90,0,85,1,113,3,23,2,27,2],
[17,22,0,0,0,3,0,1,1,1,0,0,0,4,0,0,0,0,0,0,0,4,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,3,0,1,1,1,0,0,0,0,4,0,0,0,4,4,0,3,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,3,0,0,0,0,4,0,0,0,0,4,0,0,0,4,4,3,3,3,3,3,3,3,0,4,0,0,0,0,0,0,0,0,4,0,4,0,4,0,0,0,4,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,4,0,4,0,4,0,0,0,0,0,0,0],
[89,6,0,0,0,0,3,1,1,1,3,3,3,0,0,0,0,0,0,0,0,0,3,1,1,1,1,4,0,0,0,0,0,0,0,0,0,0,3,3,0,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,0,3,3,3,3,0,0,0,0,0,0,0,0,0,3,1,1,1,1,1,3,0,0,0,0,0,0,0,0,0,3,1,1,1,1,1,3,0,0,0,0,0,169,0,24,2],
[81,91,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,3,2,2,2,2,2,2,3,0,1,0,3,2,2,2,2,3,3,3,2,2,2,2,3,1,0,1,3,2,2,2,2,2,2,4,2,2,2,2,3,0,1,0,3,2,2,2,2,3,3,3,2,2,2,2,2,2,3,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,25,0,35,1,93,3,94,2,57,0,89,0,121,0,153,0,67,1,99,1,131,1],
[34,130,1,1,1,1,1,1,1,1,2,2,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,0,0,0,0,0,1,1,0,0,0,5,1,1,2,2,5,0,0,0,4,0,1,1,1,1,1,1,1,1,2,2,2,0,0,0,0,0,1,1,1,1,1,1,1,1,2,2,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,2,2,1,1,1,1,1,1,0,0,0,0,0,0,0,0,2,2,2,1,1,1,1,1,0,0,1,1,1,5,0,0,2,2,5,1,1,1,4,1,0,0,0,0,0,0,0,0,2,2,2,1,1,1,1,1,0,0,0,0,0,0,0,0,2,2,1,1,1,1,1,1],
[16,96,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,5,3,2,0,0,2,3,5,2,2,2,1,2,1,3,3,1,3,2,3,3,2,3,2,3,3,2,3,3,1,3,3,1,3,2,3,3,2,3,2,3,3,2,3,2,5,2,2,2,2,2,0,0,2,3,4,2,2,2,3,2,3,3,3,3,3,3,3,3,2,3,3,3,3,2,3,2,2,2,2,5,3,5,2,2,2,3,5,0,0,2,3,2,2,3,3,2,3,1,3,3,1,3,2,3,3,2,3,2,2,3,3,2,3,1,3,3,1,3,2,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,31,1,148,3],
[149,30,2,3,3,3,2,2,2,3,3,3,2,2,3,2,2,2,2,3,1,1,2,2,2,0,0,3,2,2,3,2,2,2,2,3,1,3,2,2,2,3,0,3,2,2,3,2,2,2,2,3,1,3,2,2,2,3,0,3,3,3,3,0,0,0,2,3,0,3,0,0,0,3,1,3,4,3,3,2,2,2,2,3,2,3,0,0,0,3,2,3,2,3,3,3,2,3,2,3,2,3,1,1,1,3,2,3,2,2,2,2,2,2,3,3,3,3,1,1,1,3,3,3,3,3,2,2,5,2,2,2,2,3,2,2,2,3,2,2,2,3,2,2,2,2,2,0,2,2,2,2,2,2,2,5,2,2,2,2,2,2,2,2,2,3,2,2,2,3,2,2,2,3,2,2,2,2,98,0,104,1,90,3,155,2],
[132,33,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,3,1,1,1,0,1,0,1,0,1,0,1,0,1,4,1,3,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,3,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,3,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,3,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,3,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,3,1,0,1,0,0,0,1,0,1,0,1,0,1,0,1,3,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],
[103,110,0,0,0,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,3,2,2,2,2,3,3,3,0,0,0,0,0,0,0,0,3,2,3,2,2,2,5,3,0,0,3,3,3,0,0,0,3,2,2,2,2,3,3,3,0,0,3,5,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,2,3,3,2,2,2,2,2,3,2,2,1,1,0,0,2,2,2,3,2,0,2,3,2,2,2,2,1,1,0,0,2,2,2,3,2,2,2,2,2,3,2,2,1,1,0,0,2,2,2,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,3,0,0,0,0,3,2,3,0,0,0,0,0,0,3,4,3,0,0,0,0,3,3,3,0,0,0,0,0,0,3,3,3,149,1,142,3],
[96,131,0,0,1,1,0,0,1,1,0,0,1,3,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,3,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,3,0,0,1,1,1,1,1,1,0,0,1,1,0,0,1,3,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,3,0,0,1,1,0,0,3,3,0,0,3,3,0,0,3,3,0,0,1,1,0,0,1,1,0,0,1,3,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,3,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,3,0,0,1,1,0,0,4,1,0,0,1,1,0,0,1,3,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,3,0,0,1,1,0,0,1,1],
[23,82,2,2,2,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,0,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,2,2,2,2,0,0,0,0,0,0,3,5,3,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,0,0,0,0,0,0,2,2,2,2,2,5,3,3,3,4,2,2,2,2,2,2,0,0,0,0,0,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,3,4,3,0,0,0,0,0,0,0,2,2,2,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,2,2,2,2],
[113,126,4,3,0,3,0,3,0,1,0,1,3,1,3,1,3,4,1,3,0,1,0,1,0,1,0,1,0,1,0,1,3,0,1,3,0,1,0,1,0,1,0,1,0,1,0,1,3,0,1,3,0,3,0,1,0,1,0,1,0,1,3,1,3,0,1,1,0,1,0,3,0,1,0,1,3,1,0,1,0,0,3,3,0,1,0,1,0,1,0,1,0,1,0,1,3,3,0,0,0,3,0,1,0,1,0,1,0,1,3,1,1,1,0,0,0,1,0,3,0,1,0,1,3,1,0,1,1,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,3,0,3,0,1,0,1,3,1,3,1,1,1]
]
level = 0
data = []
data2 = []
pool = []
arr = []
hero1 = None
hero2 = None
tf = text("过关了,点击进入下一关", 50, "red", "center")
levelTf = text("第1关", 0, 60, 50, "red")
restartTf = text("重新开始", W, 60, 50, "red", "right")
swapTf = text("切换", 0, H-10, 50, "red")
isSuccess = False
isSleep = False
class Cube:
def __init__(self, name, name2 = None):
self.name = name
self.sp = stamp(name)
self.sp2 = None
if name2 != None:
self.sp2 = stamp(name2)
self.i = 0
self.j = 0
self.x = 0
self.y = 0
self.complete = False
self.active = False
pass
def setPos(self, i, j):
self.i = i
self.j = j
xy = ij2xy(i, j)
self.x = xy[0]
self.y = xy[1]
self.sp.move(self.x, self.y)
if self.sp2:
self.sp2.move(self.x, self.y)
pass
pass
def removeCube(cube):
pool.append(cube)
arr.remove(cube)
cube.sp.hide()
pass
def addCube(name, i, j, name2 = None):
cb = getCube(name, name2)
arr.append(cb)
cb.sp.show()
cb.sp.front()
if cb.sp2:
cb.sp2.front()
cb.sp2.show()
cb.setPos(i, j)
return cb
def getCube(name, name2 = None):
for cb in pool:
if cb.name == name:
pool.remove(cb)
return cb
return Cube(name, name2)
def nextLevel():
global level
if level < len(maps) - 1:
level += 1
reStart()
pass
def reStart():
global data,data2,hero1,hero2,isSuccess
data.clear()
data2.clear()
mp = maps[level].copy()
for n in range(2, 178):
cb = addCube(names[mp[n]+4], (n-2)//16, (n-2)%16)
data.append(cb)
for n in range(178, len(mp), 2):
cb = addCube(names[mp[n+1]+10], mp[n]//16, mp[n]%16)
data2.append(cb)
hero1 = addCube(names[2], mp[0]//16, mp[0]%16, names[3])
hero2 = addCube(names[0], mp[1]//16, mp[1]%16, names[1])
hero1.complete = False
hero2.complete = False
hero1.active = True
hero2.active = False
updateHero(hero1)
updateHero(hero2)
tf.hide()
isSuccess = False
levelTf.change("第"+str(level+1)+"关")
levelTf.front()
restartTf.front()
swapTf.front()
pass
def updateHero(hero):
if hero.complete:
hero.sp.hide()
hero.sp2.hide()
else:
if hero.active:
hero.sp.hide()
hero.sp2.show()
else:
hero.sp.show()
hero.sp2.hide()
pass
def swapHero():
global hero1,hero2
if hero2.complete:
return
tmp = hero1
hero1 = hero2
hero2 = tmp
hero1.active = True
hero2.active = False
updateHero(hero1)
updateHero(hero2)
def checkSuccess():
global isSuccess, tf
if hero1.complete and hero2.complete:
isSuccess = True
tf.front()
tf.show()
def sleep(t):
global isSleep
isSleep = True
time.sleep(t)
isSleep = False
def getFromData2(i, j):
for cb in data2:
if cb.i == i and cb.j == j and not cb.sp.hidden:
return cb
return None
def move(di, dj):
i = hero1.i
j = hero1.j
n0 = i * n + j
i1 = i + di
j1 = j + dj
n1 = i1 * n + j1
#
cb4 = getFromData2(i1, j1)
if cb4 != None:
if cb4.name == names[12] or cb4.name == names[13]: #锁
return
#
i2 = i + di * 2
j2 = j + dj * 2
n2 = i2 * n + j2
i3 = hero2.i
j3 = hero2.j
n3 = i3 * n + j3
cb3 = data[n3]
if (not hero2.complete) and n1 == n3:
return
flag1 = i1 < 0 or i1 >= m or j1 < 0 or j1 >= n
flag2 = i2 < 0 or i2 >= m or j2 < 0 or j2 >= n
if flag1:
return
cb0 = data[n0]
cb1 = data[n1]
cb2 = None if flag2 else data[n2]
swapFlag = False
if cb1.name == names[7]: # Blue
return
elif cb1.name == names[8]: # target
hero1.setPos(i1, j1)
#sleep(0.5)
hero1.complete = True
updateHero(hero1)
swapHero()
checkSuccess()
elif cb1.name == names[9]: # Switch
hero1.setPos(i1, j1)
if not hero2.complete and cb3.name == cb1.name:
#sleep(0.5)
hero1.setPos(i3, j3)
hero2.setPos(i1, j1)
elif cb1.name == names[6]: # Gray
hero1.setPos(i1, j1)
elif cb1.name == names[5]: # White
if hero1.name == names[0]: # Black
hero1.setPos(i1, j1)
elif cb2 and (cb2.name == names[4] or cb2.name == names[6]) and (hero2.complete or n2 != n3):
swapFlag = True
pass
elif cb1.name == names[4]: # Black
if hero1.name == names[2]: # White
hero1.setPos(i1, j1)
elif cb2 and (cb2.name == names[5] or cb2.name == names[6]) and (hero2.complete or n2 != n3):
swapFlag = True
if swapFlag:
hero1.setPos(i1, j1)
tmp = data[n2]
data[n2] = data[n1]
data[n1] = tmp
data[n1].setPos(i1, j1)
data[n2].setPos(i2, j2)
cb5 = getFromData2(i2, j2)
if cb5 != None:
checkLocks()
pass
pass
def hideLock(name):
for cb in data2:
if cb.name == name and not cb.sp.hidden:
cb.sp.hide()
def checkLocks():
checkLock(names[10], names[4], names[12])
checkLock(names[11], names[5], names[13])
def checkLock(name1, name2, name3):
count = 0
for cb in data2:
if cb.name == name1:
count += 1
n0 = cb.i * n + cb.j
cb0 = data[n0]
if cb0.name != name2:
return
if count > 0:
hideLock(name3)
def tap():
global isSuccess, tf, isSleep
if isSleep:
return
if isSuccess:
nextLevel()
def keyup(code,key):
global isSuccess, isSleep
if isSuccess or isSleep:
return
if code == 88: # x
swapHero()
elif code == 82: # r
reStart()
elif code == 37: # ArrowLeft
move(-1, 0)
elif code == 38: # ArrowUp
move(0, -1)
elif code == 39: # ArrowRight
move(1, 0)
elif code == 40: # ArrowDown
move(0, 1)
elif code == 66: # b
pass
elif code == 78 and key == "N": # n/N
nextLevel()
pass
def loop():
pass
reStart()
restartTf.tap = reStart
swapTf.tap = swapHero
class MyKeyBoard:
def __init__(self, x, y, w):
hw = w / 2
hhw = w * 0.75
self.arr = [
box(x, y - w, w, w, "transparent", "red"),
text("↑", x + hw, y - w + hhw, w, "center", "red"),
box(x, y, w, w, "transparent", "red"),
text("↓", x + hw, y + hhw, w, "center", "red"),
box(x - w, y, w, w, "transparent", "red"),
text("←", x - hw, y + hhw, w, "center", "red"),
box(x + w, y, w, w, "transparent", "red"),
text("→", x + w + hw, y + hhw, w, "center", "red"),
]
self.arr[0].tap=self.clickUp
self.arr[2].tap=self.clickDown
self.arr[4].tap=self.clickLeft
self.arr[6].tap=self.clickRight
delay(self.loop, 100)
def loop(self):
for i in range(len(self.arr)):
self.arr[i].front()
delay(self.loop, 100)
def onKeydown(self, keyCode, key):
try:
keyup(keyCode, key)
except e:
pass
def clickUp(self):
self.onKeydown(38, "ArrowLeft")
def clickDown(self):
self.onKeydown(40, "ArrowDown")
def clickLeft(self):
self.onKeydown(37, "ArrowLeft")
def clickRight(self):
self.onKeydown(39, "ArrowRight")
MyKeyBoard(768-160, 1024-80, 80)
也可以下载代码,本地python环境运行(用pygame封装了xdf库)。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。