学习python编程,在新东方少儿编程官网的自由创作平台做的一些作品。
可以在线运行,效果如下(在新页面中打开链接):
代码如下(用到平台自定义的xdf库):
assets = {
"bitmap1000.png": "20240118/1705548024551_046780.png",
"bitmap1002.png": "20240118/1705548024603_798710.png",
"bitmap1004.png": "20240118/1705548024616_385345.png",
"bitmap1006.png": "20240118/1705548024581_177917.png",
"bitmap1008.png": "20240118/1705548024543_787011.png",
"bitmap101.png": "20240118/1705548024547_104964.png",
"bitmap1010.png": "20240118/1705548024582_748005.png",
"bitmap1012.png": "20240118/1705548024520_173663.png",
"bitmap1014.png": "20240118/1705548024690_611319.png",
"bitmap1016.png": "20240118/1705548024590_222471.png",
"bitmap103.png": "20240118/1705548024544_130247.png",
"bitmap105.png": "20240118/1705548024540_420189.png",
"bitmap107.png": "20240118/1705548024602_383214.png",
"bitmap109.png": "20240118/1705548024573_178420.png",
"bitmap111.png": "20240118/1705548024549_650350.png",
"bitmap266.png": "20240118/1705548024603_143559.png",
"bitmap270.png": "20240118/1705548024542_155573.png",
"bitmap272.png": "20240118/1705548024717_203151.png",
"bitmap274.png": "20240118/1705548024550_978919.png",
"bitmap276.png": "20240118/1705548024656_275751.png",
"bitmap278.png": "20240118/1705548024583_638035.png",
"bitmap280.png": "20240118/1705548024660_202719.png",
"bitmap282.png": "20240118/1705548024544_336964.png",
"bitmap285.png": "20240118/1705548024588_847221.png",
"bitmap287.png": "20240118/1705548024671_633939.png",
"bitmap289.png": "20240118/1705548024655_260561.png",
"bitmap292.png": "20240118/1705548024688_054441.png",
"bitmap294.png": "20240118/1705548024658_986699.png",
"bitmap297.png": "20240118/1705548024653_592182.png",
"bitmap299.png": "20240118/1705548024699_489534.png",
"bitmap301.png": "20240118/1705548024717_028014.png",
"bitmap303.png": "20240118/1705548024537_100422.png",
"bitmap305.png": "20240118/1705548024680_443555.png",
"bitmap307.png": "20240118/1705548024663_449255.png",
"bitmap309.png": "20240118/1705548024707_471976.png",
"bitmap311.png": "20240118/1705548024647_137567.png",
"bitmap313.png": "20240118/1705548024673_921804.png",
"bitmap315.png": "20240118/1705548024658_497176.png",
"bitmap317.png": "20240118/1705548024602_005710.png",
"bitmap59.png": "20240118/1705548024586_768527.png",
"bitmap61.png": "20240118/1705548024657_447434.png",
"bitmap63.png": "20240118/1705548024678_646847.png",
"bitmap65.png": "20240118/1705548024616_328594.png",
"bitmap67.png": "20240118/1705548024699_679360.png",
"bitmap69.png": "20240118/1705548024585_054506.png",
"bitmap71.png": "20240118/1705548024683_837600.png",
"bitmap73.png": "20240118/1705548024703_697897.png",
"bitmap75.png": "20240118/1705548024615_697507.png",
"bitmap77.png": "20240118/1705548024692_427541.png",
"bitmap79.png": "20240118/1705548024654_078470.png",
"bitmap81.png": "20240118/1705548024713_454436.png",
"bitmap83.png": "20240118/1705548024630_345711.png",
"bitmap830.png": "20240118/1705548024615_176500.png",
"bitmap832.png": "20240118/1705548024633_732782.png",
"bitmap834.png": "20240118/1705548024710_133956.png",
"bitmap836.png": "20240118/1705548024702_843913.png",
"bitmap838.png": "20240118/1705548024671_295787.png",
"bitmap840.png": "20240118/1705548024709_549125.png",
"bitmap842.png": "20240118/1705548024606_854707.png",
"bitmap844.png": "20240118/1705548024661_709621.png",
"bitmap846.png": "20240118/1705548024715_846112.png",
"bitmap848.png": "20240118/1705548024705_342680.png",
"bitmap85.png": "20240118/1705548024680_281755.png",
"bitmap850.png": "20240118/1705548024672_125466.png",
"bitmap852.png": "20240118/1705548024698_899888.png",
"bitmap854.png": "20240118/1705548024692_545270.png",
"bitmap856.png": "20240118/1705548024700_192518.png",
"bitmap858.png": "20240118/1705548024701_264224.png",
"bitmap860.png": "20240118/1705548024678_826529.png",
"bitmap862.png": "20240118/1705548024695_896558.png",
"bitmap864.png": "20240118/1705548024689_729665.png",
"bitmap866.png": "20240118/1705548024613_166304.png",
"bitmap868.png": "20240118/1705548024706_785625.png",
"bitmap87.png": "20240118/1705548024675_109253.png",
"bitmap870.png": "20240118/1705548024663_729376.png",
"bitmap872.png": "20240118/1705548024664_549352.png",
"bitmap874.png": "20240118/1705548024684_946284.png",
"bitmap876.png": "20240118/1705548024672_832619.png",
"bitmap878.png": "20240118/1705548024699_313286.png",
"bitmap880.png": "20240118/1705548024661_700508.png",
"bitmap882.png": "20240118/1705548024706_238478.png",
"bitmap884.png": "20240118/1705548024696_158299.png",
"bitmap886.png": "20240118/1705548024708_653798.png",
"bitmap888.png": "20240118/1705548024702_428842.png",
"bitmap89.png": "20240118/1705548024706_844530.png",
"bitmap890.png": "20240118/1705548024694_880494.png",
"bitmap892.png": "20240118/1705548024696_814249.png",
"bitmap894.png": "20240118/1705548024698_861418.png",
"bitmap896.png": "20240118/1705548024680_420455.png",
"bitmap898.png": "20240118/1705548024700_120750.png",
"bitmap900.png": "20240118/1705548024705_284710.png",
"bitmap902.png": "20240118/1705548024711_626578.png",
"bitmap904.png": "20240118/1705548024700_452434.png",
"bitmap906.png": "20240118/1705548024697_597171.png",
"bitmap908.png": "20240118/1705548024713_608258.png",
"bitmap91.png": "20240118/1705548024701_045882.png",
"bitmap910.png": "20240118/1705548024716_226154.png",
"bitmap912.png": "20240118/1705548024712_463565.png",
"bitmap914.png": "20240118/1705548024696_032463.png",
"bitmap916.png": "20240118/1705548024697_161114.png",
"bitmap918.png": "20240118/1705548024662_754431.png",
"bitmap920.png": "20240118/1705548024706_481774.png",
"bitmap922.png": "20240118/1705548024663_910014.png",
"bitmap924.png": "20240118/1705548024708_315974.png",
"bitmap926.png": "20240118/1705548024705_796534.png",
"bitmap928.png": "20240118/1705548024713_043760.png",
"bitmap93.png": "20240118/1705548024711_251399.png",
"bitmap930.png": "20240118/1705548024693_603806.png",
"bitmap932.png": "20240118/1705548024693_407651.png",
"bitmap934.png": "20240118/1705548024697_965108.png",
"bitmap936.png": "20240118/1705548024710_377395.png",
"bitmap938.png": "20240118/1705548024713_563634.png",
"bitmap940.png": "20240118/1705548024691_142758.png",
"bitmap942.png": "20240118/1705548024694_985709.png",
"bitmap944.png": "20240118/1705548024708_465387.png",
"bitmap946.png": "20240118/1705548024714_267290.png",
"bitmap948.png": "20240118/1705548024716_788279.png",
"bitmap95.png": "20240118/1705548024706_109658.png",
"bitmap950.png": "20240118/1705548024716_406653.png",
"bitmap952.png": "20240118/1705548024703_369717.png",
"bitmap954.png": "20240118/1705548024680_519458.png",
"bitmap956.png": "20240118/1705548024683_309363.png",
"bitmap958.png": "20240118/1705548024714_043463.png",
"bitmap960.png": "20240118/1705548024709_476872.png",
"bitmap962.png": "20240118/1705548024708_671903.png",
"bitmap964.png": "20240118/1705548024677_086832.png",
"bitmap966.png": "20240118/1705548024683_283880.png",
"bitmap968.png": "20240118/1705548024679_793296.png",
"bitmap97.png": "20240118/1705548024678_688161.png",
"bitmap970.png": "20240118/1705548024694_809585.png",
"bitmap972.png": "20240118/1705548024709_447826.png",
"bitmap974.png": "20240118/1705548024704_557483.png",
"bitmap976.png": "20240118/1705548024711_884799.png",
"bitmap978.png": "20240118/1705548024711_914677.png",
"bitmap980.png": "20240118/1705548024713_565587.png",
"bitmap982.png": "20240118/1705548024663_879930.png",
"bitmap984.png": "20240118/1705548024700_456740.png",
"bitmap986.png": "20240118/1705548024708_306359.png",
"bitmap988.png": "20240118/1705548024627_801112.png",
"bitmap99.png": "20240118/1705548024703_499620.png",
"bitmap990.png": "20240118/1705548024696_887183.png",
"bitmap992.png": "20240118/1705548024693_362502.png",
"bitmap994.png": "20240118/1705548024714_551058.png",
"bitmap996.png": "20240118/1705548024701_416342.png",
"bitmap998.png": "20240118/1705548024714_491721.png",
"bitmap1133.png": "20240119/1705631797979_346026.png",
"bitmap1136.png": "20240119/1705631797988_776617.png",
"bitmap1138.png": "20240119/1705631797989_904591.png",
"bitmap1140.png": "20240119/1705631797981_311571.png",
"bitmap1142.png": "20240119/1705631797988_342546.png",
"bitmap1144.png": "20240119/1705631797990_637533.png",
"bitmap1146.png": "20240119/1705631797987_093592.png",
"bitmap1148.png": "20240119/1705631797981_689536.png"
}
frames1 = [
"bitmap99.png",
"bitmap101.png",
"bitmap103.png",
"bitmap105.png",
"bitmap107.png",
"bitmap109.png",
"bitmap111.png",
"bitmap59.png",
"bitmap61.png",
"bitmap830.png",
"bitmap832.png",
"bitmap834.png",
"bitmap836.png",
"bitmap838.png",
"bitmap840.png",
"bitmap842.png",
"bitmap844.png",
"bitmap846.png",
"bitmap848.png",
"bitmap850.png",
"bitmap852.png",
"bitmap854.png",
"bitmap856.png",
"bitmap858.png",
"bitmap860.png",
"bitmap862.png",
"bitmap864.png",
"bitmap866.png",
"bitmap868.png",
"bitmap870.png",
"bitmap872.png",
"bitmap874.png",
"bitmap876.png",
"bitmap878.png",
"bitmap880.png",
"bitmap882.png",
"bitmap884.png",
"bitmap886.png",
"bitmap888.png",
"bitmap890.png",
"bitmap892.png",
"bitmap894.png",
"bitmap896.png",
"bitmap898.png",
"bitmap900.png",
"bitmap902.png",
"bitmap904.png",
"bitmap906.png",
"bitmap908.png",
"bitmap910.png",
"bitmap912.png",
"bitmap914.png",
"bitmap916.png",
"bitmap918.png",
"bitmap920.png",
"bitmap922.png",
"bitmap924.png",
"bitmap926.png",
"bitmap928.png",
"bitmap930.png",
"bitmap932.png",
"bitmap934.png",
"bitmap936.png",
"bitmap938.png",
"bitmap940.png",
"bitmap942.png",
"bitmap944.png",
"bitmap946.png",
"bitmap948.png",
"bitmap950.png",
"bitmap952.png",
"bitmap954.png",
"bitmap956.png",
"bitmap958.png",
"bitmap960.png",
"bitmap962.png",
"bitmap964.png",
"bitmap966.png",
"bitmap968.png",
"bitmap970.png",
"bitmap81.png",
"bitmap83.png",
"bitmap85.png",
"bitmap87.png",
"bitmap89.png",
"bitmap91.png",
"bitmap93.png",
"bitmap95.png",
"bitmap97.png",
"bitmap972.png",
"bitmap63.png",
"bitmap65.png",
"bitmap67.png",
"bitmap69.png",
"bitmap71.png",
"bitmap73.png",
"bitmap75.png",
"bitmap77.png",
"bitmap79.png",
"bitmap974.png",
"bitmap976.png",
"bitmap978.png",
"bitmap980.png",
"bitmap982.png",
"bitmap984.png",
"bitmap986.png",
"bitmap988.png",
"bitmap990.png",
"bitmap992.png",
"bitmap994.png",
"bitmap996.png",
"bitmap998.png",
"bitmap1000.png",
"bitmap1002.png",
"bitmap1004.png",
"bitmap1006.png",
"bitmap1008.png",
"bitmap1010.png",
"bitmap1012.png",
"bitmap1014.png",
"bitmap1016.png",
"bitmap1133.png",
"bitmap1136.png",
"bitmap1138.png",
"bitmap1140.png",
"bitmap1142.png",
"bitmap1144.png",
"bitmap1146.png",
"bitmap1148.png"
]
frames2 = [
"bitmap266.png",
"bitmap270.png",
"bitmap272.png",
"bitmap292.png",
"bitmap294.png",
"bitmap297.png",
"bitmap315.png",
"bitmap317.png",
"bitmap274.png",
"bitmap276.png",
"bitmap278.png",
"bitmap280.png",
"bitmap282.png",
"bitmap285.png",
"bitmap287.png",
"bitmap289.png",
"bitmap299.png",
"bitmap301.png",
"bitmap303.png",
"bitmap305.png",
"bitmap307.png",
"bitmap309.png",
"bitmap311.png",
"bitmap313.png"
]
levels = [
[
" ",
" ",
" bbb ",
" bbbbbb ",
" bbbbbbbbb ",
" bbbbbbbbb ",
" bbebb ",
" bbb ",
" ",
" ",
[3, 3]
],
[
" ",
" bbbb bbb",
"bbbb bbhb beb",
"bbsb bbbb bbb",
"bbbb bbbb bbb",
"bbbblrbbbblrbbb",
"bbbb bbbb ",
" ",
" ",
" ",
[1, 5],
{
"swatch23": [
[4, 5, "onoff"],
[5, 5,"onoff"]
],
"swatch82": [
[10, 5, "onoff"],
[11, 5, "onoff"]
]
}
],
[
" ",
" ",
" bbbbbbb ",
"bbbb bbb bb ",
"bbbbbbbbb bbbb",
"bbbb bbeb",
"bbbb bbb",
" ",
" ",
" ",
[1, 5],
{}
],
[
" ",
" fffffff ",
" fffffff ",
"bbbb bbb ",
"bbb bb ",
"bbb bb ",
"bbb bbbbfffff ",
"bbb bbbbfffff ",
" beb ffbf ",
" bbb ffff ",
[1, 6],
{}
],
[
" bbbb",
" bbbbkqbsbbbbbb",
" bbbb bbb",
" bbsb ",
" bbbb ",
" bbbsbkqbbb ",
" bbbbs",
"bbb bbbbb",
"bebbbkqbbbbbb ",
"bbbb ",
[13, 1],
{
"swatch81": [
[6, 1, "onoff"],
[5, 1, "onoff"]
],
"swatch65": [
[5, 8, "off"],
[6, 8, "off"]
],
"swatch33": [
[5, 8, "on"],
[6, 8, "on"]
],
"swatch146": [
[5, 8, "onoff"],
[6, 8, "onoff"]
]
}
],
[
" bbbbbb ",
" b bbb ",
" b bbbbb ",
"bbbbbb bbbb",
" bbb bbeb",
" bbb bbb",
" b bb ",
" bbbbb ",
" bbbbb ",
" bbb ",
[0, 3],
{}
],
[
" ",
" bbbb ",
" bbbb ",
"bbb b bbbb",
"bbbbbbbbb beb",
"bbb bbh bbb",
"bbb bbb bbb",
" bbl b ",
" bbbbbb ",
" ",
[1, 4],
{
"swatch95": [
[3, 7, "onoff"]
]
}
],
[
" bbb ",
" bbb ",
" bbb ",
"bbbbbb bbbbbb",
"bbbbvb bbbbeb",
"bbbbbb bbbbbb",
" bbb ",
" bbb ",
" bbb ",
" ",
[1, 4],
{},
{
"swatch44": [10, 1, 10, 7]
}
],
[
" ",
" ",
" ",
"bbbb b bbbb",
"bbbb b bbvb",
"bbbbbbbbbbbbbbb",
" beb ",
" bbb ",
" ",
" ",
[1, 4],
{},
{
"swatch134": [12, 4, 2, 4]
}
],
[
" bbb bbbbbb",
" beblrblrbbbbvb",
" bbb bbbbl ",
" bbbl ",
" bb ",
" b ",
" b ",
" bb ",
" bbbbb bb ",
" bs bbbhb ",
[10, 1],
{
"swatch129": [
[7, 1, "onoff"],
[8, 1, "onoff"],
[13, 2, "onoff"],
[13, 3, "onoff"]
],
"swatch69": [
[4, 1, "onoff"],
[5, 1, "onoff"]
]
},
{
"swatch131": [13,1,10,1]
}
],
[
" bbbk ",
" bebk ",
" bbb ",
" b bbbbbb ",
" b bb bb ",
" bbbbbbb bbb ",
" bs b ",
" bbbb b ",
" bbbbbbb ",
" bbb ",
[2, 5],
{
"swatch86": [
[6, 0, "off"],
[6, 1, "off"]
]
}
],
[
" h ",
" bbb bbb ",
" bhbbbbbl ",
" bbbbb bb ",
" bebl bb ",
" bbbbb bbbb ",
" bbbb bbbb ",
" bbbb bbbbb ",
" bbb ",
" bbb ",
[3, 6],
{
"swatch72": [
[13, 2, "onoff"]
],
"swatch130": [
[7, 4, "onoff"]
]
}
],
[
" bbbfbbbbfbbbb ",
" bb bbb ",
" bb bbb",
" bbb bbb bbb",
" bbbfffbeb bbb",
" bbb fbbb b ",
" b fffffbb ",
" bbbffbfff ",
" bbffffff ",
" bbb bb ",
[13, 3],
{}
],
[
" bbb ",
" bbb bbb ",
"blrbbbbbbbbbbb ",
"blrbbb hb ",
"b bb ",
"b bb ",
"b bbbbbb ",
"bbbbb bbb ",
" bbeb bbb ",
" bbb bbbbbh ",
[4, 2],
{
"swatch123": [
[1, 2, "onoff"],
[2, 2, "onoff"]
],
"swatch139": [
[1, 3, "onoff"],
[2, 3, "onoff"]
]
}
],
[
" bbb bbb",
" bkqbbblrhbb",
"bblrb bbb bbb",
"bbbbb s ",
"bb ",
" b v ",
" b b ",
"bbb bbb sbb ",
"bbbbbbbbbkqbeb ",
"bbb bbb sbb ",
[1, 8],
{
"swatch121": [
[2, 2, "onoff"],
[3, 2, "onoff"],
[5, 1, "onoff"],
[6, 1, "onoff"]
],
"swatch83": [
[5, 1, "onoff"],
[6, 1, "onoff"],
[10, 1, "onoff"],
[11, 1, "onoff"]
],
"swatch117": [
[9, 8, "off"],
[10, 8, "off"]
],
"swatch119": [
[9, 8, "off"],
[10, 8, "off"]
]
},
{
"swatch75": [13, 1, 1, 8
]
}
],
[
" ",
" ",
" v bbb ",
"vbvlrhhblrbeb ",
" v bbb ",
" ",
" ",
" bbb bbb ",
" bbbbbbbvb ",
" bbb bbb ",
[3, 8],
{
"swatch53": [
[3, 3, "on"],
[4, 3, "on"],
],
"swatch63": [
[8, 3, "on"],
[9, 3, "on"],
]
},
{
"swatch98": [1, 2, 0, 3],
"swatch12": [7, 3, 5, 3],
"swatch03": [2, 3, 1, 2],
"swatch23": [0, 3, 2, 3],
"swatch14": [1, 4, 0, 3
]
}
],
[
"bbb ",
"bbbbbbbbbl bbb",
"bbb rbbbbbeb",
"bbb hhb",
"bbb ",
"bbb ",
"bbb rbbbbbh ",
"bbbbbbbbl bb ",
"bsb bb ",
"bbb bh ",
[1, 1],
{
"swatch18": [
[8, 7, "onoff"]
],
"swatch126": [
[7, 2, "on"],
],
"swatch129": [
[9, 1, "on"],
[8, 7, "off"]
],
"swatch123": [
[6, 6, "off"]
],
"swatch133": [
[6, 6, "on"],
]
}
],
[
" ",
" s ",
"bbsb b ",
"bbbbb b ",
"bsbbbbbblrbblrb",
"bbbbbl b b ",
"bbsb b b ",
"b s bbb ",
"b bbeb ",
"blrh bbbb ",
[2, 4],
{
"swatch14": [
[8, 4, "off"],
[9, 4, "off"]
],
"swatch71": [
[8, 4, "on"],
[9, 4, "on"],
],
"swatch22": [
[12, 4, "off"],
[13, 4, "off"],
[1, 9, "off"],
[2, 9, "off"]
],
"swatch26": [
[12, 4, "off"],
[13, 4, "off"],
[1, 9, "off"],
[2, 9, "off"]
],
"swatch39": [
[5, 5, "onoff"]
],
"swatch87": [
[12, 4, "on"],
[13, 4, "on"],
[1, 9, "on"],
[2, 9, "on"],
]
}
],
[
" bbbbbbbbbsbbbb",
" bb bb",
" bb bb",
" bb",
" bb",
"bbb bblrbsbbbb",
"beb bb ",
"bbb bb ",
" bb bb ",
" bkqbbbbbbsbbb ",
[1, 0],
{
"swatch100": [
[7, 5, "onoff"],
[8, 5, "onoff"]
],
"swatch105": [
[2, 9, "off"],
[3, 9, "off"]
],
"swatch109": [
[2, 9, "on"],
[3, 9, "on"],
]
}
],
[
" bbb",
" bbbkqbbblrbbb",
" bbb sbb bbb",
" bbb bbb ",
" bsb vbs ",
" bbb bbb ",
"bbbb bbblrsbb",
"bs bbb",
" beb",
" bbb",
[8, 2],
{
"swatch72": [
[5, 1, "off"],
[6, 1, "off"]
],
"swatch94": [
[5, 1, "off"],
[6, 1, "off"]
],
"swatch34": [
[5, 1, "off"],
[6, 1, "off"]
],
"swatch126": [
[10, 6, "onoff"],
[11, 6, "onoff"]
],
"swatch17": [
[10, 1, "onoff"],
[11, 1, "onoff"]
]
},
{
"swatch74": [13, 1, 13, 7
]
}
],
[
" bb ",
" bbb ",
"bb bbbbbb ",
"bbbbbb b ",
"bbbb b bbb",
" bb hbbbbeb",
" b hb bbb",
" bbbl bb ",
" bbb bb ",
" rbbbbbb ",
[1, 3],
{
"swatch85": [
[3, 9, "onoff"]
],
"swatch86": [
[5, 7, "onoff"]
]
}
],
[
" bb bbb",
" bbbbbb beb",
" bbbbbbsbbbbbbb",
" bbbbs bbbbbl ",
" bbb bbb ",
" b b ",
" b b ",
" bl qb ",
" bb bb ",
" h h ",
[2, 3],
{
"swatch109": [
[3, 7, "onoff"]
],
"swatch39": [
[13, 3, "onoff"]
],
"swatch53": [
[3, 7, "off"],
[13, 3, "off"]
],
"swatch72": [
[3, 7, "off"],
[13, 3, "off"]
]
}
],
[
" bbb bbb",
" bhb bsb",
" bbb bbbkqbbb",
"rbbbl beb bbs",
"b b bbb b",
"s b fff b",
"blrbbbfffffbbbk",
" bbbfffffbvb ",
" bbbfffffbbb ",
" bbbbbl ",
[4, 7],
{
"swatch143": [
[14, 6, "off"],
[10, 2, "off"],
[11, 2, "off"]
],
"swatch131": [
[8, 9, "onoff"],
[1, 6, "on"],
[2, 6, "on"],
],
"swatch05": [
[0, 3, "on"],
[1, 6, "off"],
[2, 6, "off"]
],
"swatch21": [
[4, 3, "on"],
]
},
{
"swatch127": [12, 7, 2, 2
]
}
],
[
" ",
" bbbb",
" rbbbbbbbhbv",
" blrbhb bbbb",
" hb bb b ",
" bb b b ",
" bbbbb bbb ",
" bbb bbblrbeb ",
" hbl bbb ",
" ",
[2, 3],
{
"swatch14": [
[4, 2, "on"],
],
"swatch122": [
[4, 3, "on"],
[3, 3, "on"],
],
"swatch63": [
[8, 8, "on"],
],
"swatch68": [
[9, 7, "on"],
[10, 7, "on"],
]
},
{
"swatch142": [6, 7, 8, 7
]
}
],
[
" bb ",
" bbb ",
" bbs bbbl ",
" bbbbl bebl ",
" bblrbbb ",
" bb bb ",
"bbhbkqbb ",
"bbk bb bbb ",
"bbk bbsbbbbb ",
" bbb ",
[1, 7],
{
"swatch42": [
[13, 2, "onoff"],
[13, 3, "onoff"],
[8, 4, "onoff"],
[9, 4, "onoff"]
],
"swatch88": [
[7, 3, "on"],
[4, 6, "off"],
[5, 6, "off"]
],
"swatch26": [
[8, 4, "on"],
[9, 4, "on"],
]
}
],
[
" bbbb v ",
" bbsbbb b ",
" bbbbbbb b ",
"bbkqbbbb bbbb ",
"bbbl b bb ",
"bbb b b ",
" b bbb ",
" h bebl ",
" bbb ",
" ",
[10, 5],
{
"swatch71": [
[2, 3, "off"],
[3, 3, "off"]
],
"swatch17": [
[9, 7, "on"],
[3, 4, "on"],
]
},
{
"swatch130": [12, 3, 10, 5
]
}
],
[
"bbb bbbbbbbb",
"bbbbbbbbbbb bb",
"bbb bb bb",
" bhb",
" bb ",
"bbb ffffb ss ",
"bebfffffff bbb",
"bbbfffffffffbbb",
" fffffffbbb",
" qbbk ",
[1, 1],
{
"swatch125": [
[6, 9, "off"]
],
"swatch135": [
[9, 9, "off"]
],
"swatch133": [
[6, 9, "off"],
[9, 9, "off"]
]
}
],
[
" bbkqbb ",
" bb bbb ",
"ffb bbbb ",
"ff bbb ",
"ff bbb ",
"fbbb bbv ",
" beb bbbbb",
" bbbbbb bsbbb",
" b bb bbb ",
" b bbbkqbbb ",
[2, 2],
{
"swatch117": [
[4, 0, "off"],
[3, 0, "off"],
[8, 9, "off"],
[9, 9, "off"]
]
},
{
"swatch115": [14, 6, 12, 9
]
}
],
[
" skqb blrh ",
" b b ",
" bbbbb ",
"hlrbbbbbbbbblrh",
" bbbbb ",
" rb b ",
" rb bkqs ",
"bbb bb b ",
"beblrb b ",
"bbbl bkqs ",
[7, 3],
{
"swatch20": [
[10, 0, "on"],
[11, 0, "on"],
[10, 6, "off"],
[11, 6, "off"]
],
"swatch120": [
[5, 5, "on"],
[5, 6, "on"],
],
"swatch03": [
[3, 8, "on"],
[4, 8, "on"],
[10, 9, "off"],
[11, 9, "off"]
],
"swatch143": [
[3, 9, "on"],
],
"swatch126": [
[1, 3, "on"],
[2, 3, "on"],
],
"swatch129": [
[12, 3, "on"],
[13, 3, "on"],
[10, 6, "off"],
[11, 6, "off"],
[3, 0, "off"],
[4, 0, "off"],
[10, 0, "off"],
[11, 0, "off"]
]
}
],
[
" bbbbbffbbbb ",
" bebb fb ",
" bbb fbh",
" fbbkqbbb",
" b ff b",
" hbf ff b",
"ffff bbl rbb",
"fffbfbffbf hbl",
"bfffffffffffb ",
" fbfff ffffb ",
[2, 4],
{
"swatch15": [
[10, 3, "on"],
[11, 3, "on"],
],
"swatch142": [
[10, 3, "off"],
[11, 3, "off"],
[9, 6, "on"],
[12, 6, "on"],
],
"swatch127": [
[14, 7, "onoff"]
]
}
],
[
" bbbl",
" bbb h bebl",
" bbbkqbbblrbbbl",
" bbb bbb b ",
" fff sbb f ",
" f bbb fff ",
" b bbb bbb ",
"qbbblrbsbkqbbb ",
"qbhb h bbb ",
"qbbb ",
[12, 7],
{
"swatch81": [
[9, 2, "onoff"],
[10, 2, "onoff"]
],
"swatch68": [
[4, 7, "onoff"],
[5, 7, "onoff"]
],
"swatch28": [
[14, 2, "on"],
[14, 1, "on"],
[14, 0, "on"],
[4, 2, "off"],
[5, 2, "off"]
],
"swatch77": [
[4, 2, "off"],
[5, 2, "off"],
[9, 2, "off"],
[10, 2, "off"],
[4, 7, "off"],
[5, 7, "off"],
[9, 7, "off"],
[10, 7, "off"]
],
"swatch64": [
[4, 2, "off"],
[5, 2, "off"],
[9, 2, "off"],
[10, 2, "off"],
[4, 7, "off"],
[5, 7, "off"],
[9, 7, "off"],
[10, 7, "off"]
]
}
],
[
" bh",
" bbkqbb bbb",
" bbblrbb bhbb",
" beb bbbbb ",
" bbb bbb ",
" bb ",
" bbb bb ",
" bblrbhb bb ",
" bblrbbbbbbb ",
" ",
[11, 6],
{
"swatch140": [
[3, 7, "onoff"],
[4, 7, "onoff"],
[5, 1, "onoff"],
[6, 1, "onoff"]
],
"swatch122": [
[3, 8, "onoff"],
[4, 8, "onoff"]
],
"swatch67": [
[5, 2, "onoff"],
[6, 2, "onoff"]
]
}
],
[
" bbsbbb ",
" bbbbbbl ",
"bbb sbbsbbbbb ",
"bbbkqbbbbssbbs ",
" bbsbbsbbb ",
" bbbbbbsbb ",
"bbb bbbbbbsbbb",
"bebkqbsb bbbsh",
"bbb bbb bbbb",
"bbb bbb",
[1, 3],
{
"swatch147": [
[11, 1, "on"],
],
"swatch70": [
[3, 7, "off"],
[4, 7, "off"]
],
"swatch52": [
[3, 7, "off"],
[4, 7, "off"]
],
"swatch82": [
[3, 7, "off"],
[4, 7, "off"]
],
"swatch93": [
[3, 7, "off"],
[4, 7, "off"]
],
"swatch103": [
[3, 7, "off"],
[4, 7, "off"]
],
"swatch104": [
[3, 7, "off"],
[4, 7, "off"]
],
"swatch115": [
[3, 7, "off"],
[4, 7, "off"]
],
"swatch133": [
[3, 7, "off"],
[4, 7, "off"]
],
"swatch116": [
[3, 7, "off"],
[4, 7, "off"]
],
"swatch137": [
[3, 7, "off"],
[4, 7, "off"]
],
"swatch74": [
[3, 7, "off"],
[4, 7, "off"]
],
"swatch67": [
[3, 7, "off"],
[4, 7, "off"]
]
}
]
]
from xdf import *
import math
class Sprite:
def __init__(self, dis):
self.id = 0
self.x = 0
self.y = 0
self.w = 1
self.h = 1
self.visible = True
self.dis = dis
def front(self):
self.dis.front()
def move(self, x, y):
self.x = x
self.y = y
def change(self, value):
self.dis.change(value)
def update(self):
self.dis.move(self.x, self.y)
if self.visible:
self.dis.show()
else:
self.dis.hide()
class SpriteSheet(Sprite):
def __init__(self, arr, config):
self.isPlaying = True
self.isFlag = False
self.currentFrame = 0
self.totalFrames = len(arr)
self.stamps = []
self.config = config
self.flipped = False
self.flipArr = []
self.reverse = False
self.loop = True
self.lastFrame = self.currentFrame
for i in range(len(arr)):
sp = stamp(arr[i])
self.stamps.append(sp)
sp.hide()
self.flipArr.append(False)
Sprite.__init__(self, self.stamps[0])
def play(self):
self.isPlaying = True
def stop(self):
self.isPlaying = False
def gotoAndStop(self, n):
self.currentFrame = n;
self.stop()
def gotoAndPlay(self, n):
self.currentFrame = n;
self.play()
def prevFrame(self):
self.currentFrame = self.currentFrame - 1
if self.currentFrame < self.startFrame:
if self.loop:
self.currentFrame = self.endFrame
else:
self.currentFrame = self.startFrame
self.stop()
def nextFrame(self):
self.currentFrame = self.currentFrame + 1
if self.currentFrame > self.endFrame:
if self.loop:
self.currentFrame = self.startFrame
else:
self.currentFrame = self.endFrame
self.stop()
@property
def startFrame(self):
if self.isFlag:
return self.flagStart
return 0
@property
def endFrame(self):
if self.isFlag:
return self.flagEnd
return self.totalFrames - 1
def playFlag(self, flag, reverse = False):
if flag in self.config:
a = self.config[flag]
self.flagStart = a[0]
self.flagEnd = a[1]
self.isFlag = True
self.reverse = reverse
if reverse:
self.gotoAndPlay(self.flagEnd)
else:
self.gotoAndPlay(self.flagStart);
def clearPlayFlag(self):
self.isFlag = False
def update(self):
if self.isPlaying:
if self.reverse:
self.prevFrame()
else:
self.nextFrame()
for stm in self.stamps:
stm.hide()
self.dis = self.stamps[self.currentFrame]
if self.flipped != self.flipArr[self.currentFrame]:
self.flipArr[self.currentFrame] = self.flipped
self.dis.flip()
super().update()
if self.lastFrame != self.currentFrame:
if self.currentFrame == (self.startFrame if self.reverse else self.endFrame):
self.onPlayEnd()
self.lastFrame = self.currentFrame
def onPlayEnd(self):
pass
blockConfig = {
"0": [0, 9],
"1": [10, 19],
"2": [20, 29],
"3": [30, 39],
"4": [40, 49],
"5": [50, 59],
"6": [60, 69],
"7": [70, 79],
"8": [80, 89],
"9": [90, 99],
"10": [100, 109],
"11": [110, 120],
"12": [121, 128]
}
class Block(SpriteSheet):
def __init__(self):
SpriteSheet.__init__(self, list(map(mapAssetUrl, frames1)), blockConfig)
self.curState = 7
self.tarState = 0
self.isAnim = False
self.loop = False
self.reset()
self.I = 0
self.J = 0
self.drop = False
self.v = 0
self.states = [
# x y, w, h, tx, ty, tw, th, left, up, right, down
[0, -1, 1, 1, -2, -1, 2, 1, 8, 9, 10, 11],
[0, -1, 1, 1, 0, -3, 1, 2, 4, 5, 6, 7],
[0, -1, 1, 1, 1, -1, 2, 1, 8, 9, 10, 11],
[0, -1, 1, 1, 0, 0, 1, 2, 4, 5, 6, 7],
[0, -2, 1, 2, -1, -2, 1, 2, 4, 5, 6, 7],
[0, -2, 1, 2, 0, -3, 1, 1, 0, 1, 2, 3],
[0, -2, 1, 2, 1, -2, 1, 2, 4, 5, 6, 7],
[0, -2, 1, 2, 0, 0, 1, 1, 0, 1, 2, 3],
[0, -1, 2, 1, -1, -1, 1, 1, 0, 1, 2, 3],
[0, -1, 2, 1, 0, -2, 2, 1, 8, 9, 10, 11],
[0, -1, 2, 1, 2, -1, 1, 1, 0, 1, 2, 3],
[0, -1, 2, 1, 0, 0, 2, 1, 8, 9, 10, 11],
[0, -1, 1, 1, 0, -1, 1, 1, 4, 5, 6, 7]
]
def playDir(self, dr):
if self.isAnim or dr < 0 or dr > 3:
return
self.playState(self.states[self.curState][dr + 8])
def playState(self, state):
# print("play state:", state)
self.isAnim = True
self.tarState = state
self.playFlag(str(self.tarState))
a1 = self.states[self.curState]
a2 = self.states[self.tarState]
i = self.I + a1[4] - a2[0]
j = self.J + a1[5] - a2[1]
self.setPos(i, j)
def update(self):
super().update()
if self.drop:
self.v += 10
self.y += self.v
self.dis.back()
else:
self.dis.front()
def onPlayEnd(self):
#print("play end")
self.isAnim = False
self.curState = self.tarState
if self.curState == 12:
pos = [self.I, self.J]
self.reset()
self.setPos(pos[0], pos[1])
self.drop = True
else:
checkGame()
def getRect(self):
a = self.states[self.curState][4:8]
a[0] += self.I
a[1] += self.J
return a
def setPos(self, i, j):
self.I = i
self.J = j
xy = ij2xy(i, j)
self.x = xy[0] + 9
self.y = xy[1] - 40
#print(i, j, xy, self.curState)
def playSuccess(self):
self.playState(12)
def reset(self):
self.v = 0
self.drop = False
self.curState = 7
self.gotoAndStop(self.config['7'][1])
def playLose(self, pos):
if pos != None:
self.reset()
self.setPos(pos[0], pos[1])
self.drop = True
tileConfig = {
"b": [0, 0],
"e": [5, 5],
"s": [3, 3],
"h": [4, 4],
"f": [7, 7],
"l": [8,15],
"r": [16, 23],
"k": [8, 15],
"q": [16, 23]
}
class Tile(SpriteSheet):
def __init__(self, i, j):
SpriteSheet.__init__(self, list(map(mapAssetUrl, frames2)), tileConfig)
self.stop()
self.I = i
self.J = j
self.state = ''
self.isOpen = False
self.loop = False
def updatePos(self):
xy = ij2xy(self.I, self.J + 1)
if self.state in 'lrkq':
self.x = xy[0] - 91 + 100
self.y = xy[1] - 115 + 75
else:
self.x = xy[0] - 15 + 24.5
self.y = xy[1] - 25 + 16.5
def setState(self, c):
self.isOpen = False
self.state = c
if c == ' ':
self.visible = False
else:
self.visible = True
self.playFlag(c)
self.stop()
if self.state in "kq":
self.setOpen(True)
self.updatePos()
def exeCommand(self, command):
if command == "onoff":
self.toggleOpen()
elif command == "on":
self.setOpen(True)
elif command == "off":
self.setOpen(False)
def toggleOpen(self):
self.setOpen(not self.isOpen)
def setOpen(self, boo):
if self.state in 'lrkq' and self.isOpen != boo:
self.isOpen = boo
self.playFlag(self.state, not self.isOpen)
def update(self):
super().update()
def isF(self):
return self.state == 'f'
def isSwitch(self):
return self.state in "sh"
def isSwitch1(self):
return self.state == "h"
def isSwitch2(self):
return self.state == "s"
def isHole(self):
return self.state == 'e'
def isSpace(self):
return self.state == ' ' or (self.state in 'lrkq' and not self.isOpen)
class TileMap:
def __init__(self):
self.level = 0
self.data = levels[0]
self.tiles = []
for i in range(m):
self.tiles.append([])
for j in range(n):
self.tiles[i].append(Tile(m - 1 - i, j))
def nextLevel(self):
setLevel(self.level + 1)
def setLevel(self, level):
self.level = min(level, len(levels) - 1)
self.data = levels[self.level]
for j in range(n):
s = self.data[j]
for i in range(m):
self.getTile(i, j).setState(s[i])
def update(self):
for i in range(m):
for j in range(n):
self.tiles[i][j].update()
def getTile(self, i, j):
if i < 0 or i >= m or j < 0 or j >= n:
return self.tiles[0][0]
return self.tiles[m - 1 - i][j]
def mapAssetUrl(name):
return "https://code-file.xdf.cn/files/dingdangweb/" + assets[name]
m = 15
n = 10
CW = [31, 10]
CH = [-5, 16]
OX = (768 - m * CW[0] - n * CW[1]) // 2
OY = (1024 - m * CH[0] - n * CH[1]) // 2
def ij2xy(i, j):
return [OX + i * CW[0] + j * CW[1], OY + i * CH[0] + j * CH[1]]
def xy2ij(x, y):
a = CW[0]
b = CW[1]
c = CH[0]
d = CH[1]
dx = x - OX
dy = y - OY
i = (c * dx - a * dy) / (b * c - a * d)
j = (d * dx - b * dy) / (a * d - b * c)
return [i, j]
#fill("bg37")
tileMap = TileMap()
block = Block()
block.stop()
levelText = text("第1关", 10, 100, 80, "red")
maxLevel = 6
def checkGame():
rect = block.getRect()
[x,y,w,h] = rect
tiles = []
for i in range(w):
for j in range(h):
tiles.append(tileMap.getTile(x + i, y + j))
# check success
if len(tiles) == 1 and tiles[0].isHole():
block.playSuccess()
delay(nextLevel, 3000)
# print("success")
return
# check over
over = False
if len(tiles) == 1:
if tiles[0].isSpace():
block.playLose(None)
over = True
elif tiles[0].isF():
block.playLose(None)
tiles[0].visible = False
over = True
else:
if tiles[0].isSpace() and tiles[1].isSpace():
block.playLose(None)
over = True
elif tiles[0].isSpace():
block.playLose([tiles[0].I, tiles[0].J])
over = True
elif tiles[1].isSpace():
block.playLose([tiles[1].I, tiles[1].J])
over = True
if over:
delay(resetLevel, 3000)
# print("lose")
return
# check switch
for tl in tiles:
if tl.isSwitch2() or (tl.isSwitch1() and len(tiles) == 1):
data = levels[tileMap.level]
if len(data) > n + 1:
swConf = data[n + 1]
name = "swatch" + str(tl.I) + str(tl.J)
a2 = swConf[name]
for a in a2:
tl = tileMap.getTile(a[0], a[1])
tl.exeCommand(a[2])
pass
#pass
def nextLevel():
if tileMap.level == len(levels) - 1:
setLevel(0)
else:
setLevel(tileMap.level + 1)
def resetLevel():
setLevel(tileMap.level)
def setLevel(level):
level = min(maxLevel, level)
tileMap.setLevel(level)
data = levels[level]
bp = data[n]
block.reset()
block.setPos(bp[0], bp[1])
levelText.change("第"+ str(level+1)+"关")
def keydown(code, key):
block.playDir(code - 37)
def loop():
block.update()
tileMap.update()
setLevel(0)
class MyKeyBoard:
def __init__(self, x, y, w):
hw = w / 2
hhw = w * 0.75
self.arr = [
box(x, y - w, w, w, "white", "red"),
text("↑", x + hw, y - w + hhw, w, "center", "red"),
box(x, y, w, w, "white", "red"),
text("↓", x + hw, y + hhw, w, "center", "red"),
box(x - w, y, w, w, "white", "red"),
text("←", x - hw, y + hhw, w, "center", "red"),
box(x + w, y, w, w, "white", "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:
keydown(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-200, 1024-100, 100)
也可以下载代码,本地python环境运行(用pygame封装了xdf库)。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。