codingpirates-maze 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (539) hide show
  1. codingpirates_maze-0.1.0.dist-info/METADATA +105 -0
  2. codingpirates_maze-0.1.0.dist-info/RECORD +539 -0
  3. codingpirates_maze-0.1.0.dist-info/WHEEL +4 -0
  4. codingpirates_maze-0.1.0.dist-info/licenses/LICENSE +201 -0
  5. importer/code_blocks.py +339 -0
  6. importer/convert_level.py +150 -0
  7. importer/create_course.py +278 -0
  8. importer/lesson.md.j2 +3 -0
  9. importer/maze.py.j2 +20 -0
  10. importer/test.py +24 -0
  11. importer/test_all.py +24 -0
  12. maze/__init__.py +9 -0
  13. maze/bee.py +184 -0
  14. maze/beeshape.py +115 -0
  15. maze/birds.py +69 -0
  16. maze/collector.py +106 -0
  17. maze/farmer.py +95 -0
  18. maze/harvester.py +141 -0
  19. maze/images/bee/background.png +0 -0
  20. maze/images/bee/cloud.gif +0 -0
  21. maze/images/bee/honeycomb.gif +0 -0
  22. maze/images/bee/path.gif +0 -0
  23. maze/images/bee/purple_flower.gif +0 -0
  24. maze/images/bee/red_flower.gif +0 -0
  25. maze/images/birds/.gitignore +2 -0
  26. maze/images/birds/background.png +0 -0
  27. maze/images/birds/monster.gif +0 -0
  28. maze/images/birds/path.gif +0 -0
  29. maze/images/birds/tnt.gif +0 -0
  30. maze/images/birds/wall_1.gif +0 -0
  31. maze/images/birds/wall_2.gif +0 -0
  32. maze/images/birds/wall_3.gif +0 -0
  33. maze/images/birds/wall_4.gif +0 -0
  34. maze/images/birds/wall_5.gif +0 -0
  35. maze/images/collector/.gitignore +1 -0
  36. maze/images/collector/crystal.gif +0 -0
  37. maze/images/collector/floor_1.gif +0 -0
  38. maze/images/collector/floor_2.gif +0 -0
  39. maze/images/collector/floor_3.gif +0 -0
  40. maze/images/collector/floor_4.gif +0 -0
  41. maze/images/collector/wall_1.gif +0 -0
  42. maze/images/collector/wall_2.gif +0 -0
  43. maze/images/farmer/background.png +0 -0
  44. maze/images/farmer/corn.gif +0 -0
  45. maze/images/farmer/hole.gif +0 -0
  46. maze/images/farmer/lettuce.gif +0 -0
  47. maze/images/farmer/path.gif +0 -0
  48. maze/images/farmer/pile.gif +0 -0
  49. maze/images/farmer/pumpkin.gif +0 -0
  50. maze/images/farmer/sprout.gif +0 -0
  51. maze/images/pvz/background.gif +0 -0
  52. maze/images/pvz/flower.gif +0 -0
  53. maze/images/pvz/obstacle.gif +0 -0
  54. maze/images/pvz/path.gif +0 -0
  55. maze/images/pvz/pumpkin.gif +0 -0
  56. maze/levels/CourseD_2022LessonExtra14a_2023.json +46 -0
  57. maze/levels/CourseD_2022LessonExtra14a_2024.json +46 -0
  58. maze/levels/CourseD_2022LessonExtra14a_2025.json +46 -0
  59. maze/levels/CourseD_2022LessonExtra15a_2023.json +46 -0
  60. maze/levels/CourseD_2022LessonExtra15a_2024.json +46 -0
  61. maze/levels/CourseD_2022LessonExtra15a_2025.json +46 -0
  62. maze/levels/CourseD_2022LessonExtra16a_2023.json +46 -0
  63. maze/levels/CourseD_2022LessonExtra16a_2024.json +46 -0
  64. maze/levels/CourseD_2022LessonExtra16a_2025.json +46 -0
  65. maze/levels/CourseD_2022_LessonExtra14b_2023.json +47 -0
  66. maze/levels/CourseD_2022_LessonExtra14b_2024.json +47 -0
  67. maze/levels/CourseD_2022_LessonExtra14b_2025.json +47 -0
  68. maze/levels/CourseD_2022_LessonExtra15b_2023.json +47 -0
  69. maze/levels/CourseD_2022_LessonExtra15b_2024.json +47 -0
  70. maze/levels/CourseD_2022_LessonExtra15b_2025.json +47 -0
  71. maze/levels/CourseD_2022_LessonExtra16b_2023.json +47 -0
  72. maze/levels/CourseD_2022_LessonExtra16b_2024.json +47 -0
  73. maze/levels/CourseD_2022_LessonExtra16b_2025.json +47 -0
  74. maze/levels/courseA_harvester_loops10_2024.json +51 -0
  75. maze/levels/courseA_harvester_loops11_2024.json +51 -0
  76. maze/levels/courseA_harvester_loops1_2024.json +50 -0
  77. maze/levels/courseA_harvester_loops2_2024.json +54 -0
  78. maze/levels/courseA_harvester_loops3_2024.json +57 -0
  79. maze/levels/courseA_harvester_loops4_2024.json +52 -0
  80. maze/levels/courseA_harvester_loops5_2024.json +53 -0
  81. maze/levels/courseA_harvester_loops5a_2024.json +53 -0
  82. maze/levels/courseA_harvester_loops5b_2024.json +52 -0
  83. maze/levels/courseA_harvester_loops6_2024.json +55 -0
  84. maze/levels/courseA_harvester_loops7_2024.json +53 -0
  85. maze/levels/courseA_harvester_loops9_2024.json +51 -0
  86. maze/levels/courseA_harvester_seq10_2024.json +50 -0
  87. maze/levels/courseA_harvester_seq11_2024.json +50 -0
  88. maze/levels/courseA_harvester_seq12_2024.json +50 -0
  89. maze/levels/courseA_harvester_seq13_2024.json +50 -0
  90. maze/levels/courseA_harvester_seq1_2024.json +49 -0
  91. maze/levels/courseA_harvester_seq2_2024.json +54 -0
  92. maze/levels/courseA_harvester_seq3_2024.json +54 -0
  93. maze/levels/courseA_harvester_seq4_2024.json +51 -0
  94. maze/levels/courseA_harvester_seq5_2024.json +51 -0
  95. maze/levels/courseA_harvester_seq6_2024.json +50 -0
  96. maze/levels/courseA_harvester_seq7_2024.json +51 -0
  97. maze/levels/courseA_harvester_seq8_2024.json +51 -0
  98. maze/levels/courseA_harvester_seq9_2024.json +51 -0
  99. maze/levels/courseA_maze_ramp2_2024.json +53 -0
  100. maze/levels/courseA_maze_ramp3a_2024.json +53 -0
  101. maze/levels/courseA_maze_ramp3b_2024.json +50 -0
  102. maze/levels/courseA_maze_ramp4a_2024.json +48 -0
  103. maze/levels/courseA_maze_ramp5a_2024.json +47 -0
  104. maze/levels/courseA_maze_seq10_2024.json +48 -0
  105. maze/levels/courseA_maze_seq11_2024.json +47 -0
  106. maze/levels/courseA_maze_seq12_2024.json +47 -0
  107. maze/levels/courseA_maze_seq13_2024.json +49 -0
  108. maze/levels/courseA_maze_seq1_2024.json +52 -0
  109. maze/levels/courseA_maze_seq5_2024.json +47 -0
  110. maze/levels/courseA_maze_seq5a_2024.json +47 -0
  111. maze/levels/courseA_maze_seq6_2024.json +47 -0
  112. maze/levels/courseA_maze_seq8_2024.json +47 -0
  113. maze/levels/courseA_maze_seq_challenge1_2024.json +45 -0
  114. maze/levels/courseA_maze_seq_challenge2_2024.json +50 -0
  115. maze/levels/courseB_collector_loops10_2024.json +53 -0
  116. maze/levels/courseB_collector_loops11_2024.json +51 -0
  117. maze/levels/courseB_collector_loops1_2024.json +53 -0
  118. maze/levels/courseB_collector_loops2_2024.json +53 -0
  119. maze/levels/courseB_collector_loops3_2024.json +57 -0
  120. maze/levels/courseB_collector_loops4_2024.json +57 -0
  121. maze/levels/courseB_collector_loops5_2024.json +54 -0
  122. maze/levels/courseB_collector_loops6_2024.json +54 -0
  123. maze/levels/courseB_collector_loops7_2024.json +53 -0
  124. maze/levels/courseB_collector_loops8_2024.json +54 -0
  125. maze/levels/courseB_collector_loops9_2024.json +54 -0
  126. maze/levels/courseB_collector_loops_challenge1_2024.json +54 -0
  127. maze/levels/courseB_collector_loops_challenge2a_2024.json +51 -0
  128. maze/levels/courseC_collector_loops_challenge2_2024.json +53 -0
  129. maze/levels/courseC_collector_prog1_2023.json +52 -0
  130. maze/levels/courseC_collector_prog1_2024.json +52 -0
  131. maze/levels/courseC_collector_prog2_2023.json +53 -0
  132. maze/levels/courseC_collector_prog2_2024.json +53 -0
  133. maze/levels/courseC_collector_prog3_2023.json +49 -0
  134. maze/levels/courseC_collector_prog3_2024.json +49 -0
  135. maze/levels/courseC_collector_prog4_2023.json +50 -0
  136. maze/levels/courseC_collector_prog4_2024.json +50 -0
  137. maze/levels/courseC_collector_prog5_2023.json +50 -0
  138. maze/levels/courseC_collector_prog5_2024.json +50 -0
  139. maze/levels/courseC_collector_prog6_2023.json +50 -0
  140. maze/levels/courseC_collector_prog6_2024.json +50 -0
  141. maze/levels/courseC_collector_prog7_2023.json +51 -0
  142. maze/levels/courseC_collector_prog7_2024.json +51 -0
  143. maze/levels/courseC_collector_prog8_2023.json +52 -0
  144. maze/levels/courseC_collector_prog8_2024.json +52 -0
  145. maze/levels/courseC_collector_prog9_2023.json +52 -0
  146. maze/levels/courseC_collector_prog9_2024.json +52 -0
  147. maze/levels/courseC_collector_prog_challenge1_2023.json +51 -0
  148. maze/levels/courseC_collector_prog_challenge1_2024.json +51 -0
  149. maze/levels/courseC_collector_prog_challenge2_2023.json +51 -0
  150. maze/levels/courseC_collector_prog_challenge2_2024.json +51 -0
  151. maze/levels/courseC_harvester_loops10_2024.json +50 -0
  152. maze/levels/courseC_harvester_loops11_2024.json +50 -0
  153. maze/levels/courseC_harvester_loops11_predict1_2024.json +47 -0
  154. maze/levels/courseC_harvester_loops1_2024.json +52 -0
  155. maze/levels/courseC_harvester_loops2_2024.json +50 -0
  156. maze/levels/courseC_harvester_loops3_2024.json +50 -0
  157. maze/levels/courseC_harvester_loops4_2024.json +50 -0
  158. maze/levels/courseC_harvester_loops5_2024.json +50 -0
  159. maze/levels/courseC_harvester_loops6_2024.json +50 -0
  160. maze/levels/courseC_harvester_loops7_2024.json +50 -0
  161. maze/levels/courseC_harvester_loops8_2024.json +49 -0
  162. maze/levels/courseC_harvester_loops9_2024.json +50 -0
  163. maze/levels/courseC_harvester_loops_challenge1a_2024.json +50 -0
  164. maze/levels/courseC_harvester_loops_challenge2_2024.json +48 -0
  165. maze/levels/courseC_maze_debugging1.json +47 -0
  166. maze/levels/courseC_maze_debugging2.json +44 -0
  167. maze/levels/courseC_maze_debugging3.json +46 -0
  168. maze/levels/courseC_maze_debugging4.json +44 -0
  169. maze/levels/courseC_maze_debugging5.json +46 -0
  170. maze/levels/courseC_maze_debugging6.json +44 -0
  171. maze/levels/courseC_maze_debugging7.json +45 -0
  172. maze/levels/courseC_maze_debugging8_predict1.json +43 -0
  173. maze/levels/courseC_maze_debugging9.json +44 -0
  174. maze/levels/courseC_maze_loops_challenge1a_2024.json +47 -0
  175. maze/levels/courseC_maze_programming1_2023.json +50 -0
  176. maze/levels/courseC_maze_programming1_2024.json +50 -0
  177. maze/levels/courseC_maze_programming2_2023.json +53 -0
  178. maze/levels/courseC_maze_programming2_2024.json +53 -0
  179. maze/levels/courseC_maze_programming3_2023.json +47 -0
  180. maze/levels/courseC_maze_programming3_2024.json +47 -0
  181. maze/levels/courseC_maze_programming4_2023.json +46 -0
  182. maze/levels/courseC_maze_programming4_2024.json +46 -0
  183. maze/levels/courseC_maze_programming5_2023.json +46 -0
  184. maze/levels/courseC_maze_programming5_2024.json +46 -0
  185. maze/levels/courseC_maze_programming6_2023.json +50 -0
  186. maze/levels/courseC_maze_programming6_2024.json +49 -0
  187. maze/levels/courseC_maze_programming7_2023.json +54 -0
  188. maze/levels/courseC_maze_programming7_2024.json +54 -0
  189. maze/levels/courseC_maze_programming8_2023.json +52 -0
  190. maze/levels/courseC_maze_programming8_2024.json +51 -0
  191. maze/levels/courseC_maze_programming8_predict1_2024.json +45 -0
  192. maze/levels/courseC_maze_programming9_2023.json +47 -0
  193. maze/levels/courseC_maze_programming9_2024.json +47 -0
  194. maze/levels/courseC_maze_programming_challenge1_2023.json +47 -0
  195. maze/levels/courseC_maze_programming_challenge1_2024.json +47 -0
  196. maze/levels/courseC_maze_programming_challenge2_2023.json +49 -0
  197. maze/levels/courseC_maze_programming_challenge2_2024.json +49 -0
  198. maze/levels/courseD_bee_conditionals10_2023.json +57 -0
  199. maze/levels/courseD_bee_conditionals10_2024.json +57 -0
  200. maze/levels/courseD_bee_conditionals10_2025.json +57 -0
  201. maze/levels/courseD_bee_conditionals1_predict1_2023.json +51 -0
  202. maze/levels/courseD_bee_conditionals1_predict1_2024.json +51 -0
  203. maze/levels/courseD_bee_conditionals1_predict1_2025.json +51 -0
  204. maze/levels/courseD_bee_conditionals2_2023.json +60 -0
  205. maze/levels/courseD_bee_conditionals2_2024.json +60 -0
  206. maze/levels/courseD_bee_conditionals2_2025.json +60 -0
  207. maze/levels/courseD_bee_conditionals3_2023.json +57 -0
  208. maze/levels/courseD_bee_conditionals3_2024.json +57 -0
  209. maze/levels/courseD_bee_conditionals3_2025.json +57 -0
  210. maze/levels/courseD_bee_conditionals4_2023.json +58 -0
  211. maze/levels/courseD_bee_conditionals4_2024.json +58 -0
  212. maze/levels/courseD_bee_conditionals4_2025.json +58 -0
  213. maze/levels/courseD_bee_conditionals5_2023.json +58 -0
  214. maze/levels/courseD_bee_conditionals5_2024.json +58 -0
  215. maze/levels/courseD_bee_conditionals5_2025.json +58 -0
  216. maze/levels/courseD_bee_conditionals6_2023.json +57 -0
  217. maze/levels/courseD_bee_conditionals6_2024.json +57 -0
  218. maze/levels/courseD_bee_conditionals6_2025.json +57 -0
  219. maze/levels/courseD_bee_conditionals7_2023.json +57 -0
  220. maze/levels/courseD_bee_conditionals7_2024.json +57 -0
  221. maze/levels/courseD_bee_conditionals7_2025.json +57 -0
  222. maze/levels/courseD_bee_conditionals7_predict2_2023.json +54 -0
  223. maze/levels/courseD_bee_conditionals7_predict2_2024.json +54 -0
  224. maze/levels/courseD_bee_conditionals7_predict2_2025.json +54 -0
  225. maze/levels/courseD_bee_conditionals8_2023.json +57 -0
  226. maze/levels/courseD_bee_conditionals8_2024.json +57 -0
  227. maze/levels/courseD_bee_conditionals8_2025.json +57 -0
  228. maze/levels/courseD_bee_conditionals9_2023.json +55 -0
  229. maze/levels/courseD_bee_conditionals9_2024.json +55 -0
  230. maze/levels/courseD_bee_conditionals9_2025.json +55 -0
  231. maze/levels/courseD_bee_conditionals_challenge1_2023.json +57 -0
  232. maze/levels/courseD_bee_conditionals_challenge1_2024.json +57 -0
  233. maze/levels/courseD_bee_conditionals_challenge1_2025.json +57 -0
  234. maze/levels/courseD_bee_conditionals_challenge2_2023.json +58 -0
  235. maze/levels/courseD_bee_conditionals_challenge2_2024.json +58 -0
  236. maze/levels/courseD_bee_conditionals_challenge2_2025.json +58 -0
  237. maze/levels/courseD_bee_nestedLoops1.json +49 -0
  238. maze/levels/courseD_bee_nestedLoops1_2023.json +53 -0
  239. maze/levels/courseD_bee_nestedLoops1_2024.json +53 -0
  240. maze/levels/courseD_bee_nestedLoops1_2025.json +53 -0
  241. maze/levels/courseD_bee_nestedLoops1a.json +49 -0
  242. maze/levels/courseD_bee_nestedLoops1a_2023.json +55 -0
  243. maze/levels/courseD_bee_nestedLoops1a_2024.json +55 -0
  244. maze/levels/courseD_bee_nestedLoops1a_2025.json +55 -0
  245. maze/levels/courseD_bee_nestedLoops2.json +50 -0
  246. maze/levels/courseD_bee_nestedLoops2_2023.json +57 -0
  247. maze/levels/courseD_bee_nestedLoops2_2024.json +57 -0
  248. maze/levels/courseD_bee_nestedLoops2_2025.json +57 -0
  249. maze/levels/courseD_bee_nestedLoops2_predict1.json +51 -0
  250. maze/levels/courseD_bee_nestedLoops2_predict1_2023.json +51 -0
  251. maze/levels/courseD_bee_nestedLoops2_predict1_2024.json +51 -0
  252. maze/levels/courseD_bee_nestedLoops2_predict1_2025.json +51 -0
  253. maze/levels/courseD_bee_nestedLoops7.json +53 -0
  254. maze/levels/courseD_bee_nestedLoops7_2023.json +59 -0
  255. maze/levels/courseD_bee_nestedLoops7_2024.json +59 -0
  256. maze/levels/courseD_bee_nestedLoops7_2025.json +59 -0
  257. maze/levels/courseD_bee_nestedLoops8.json +52 -0
  258. maze/levels/courseD_bee_nestedLoops8_2023.json +59 -0
  259. maze/levels/courseD_bee_nestedLoops8_2024.json +59 -0
  260. maze/levels/courseD_bee_nestedLoops8_2025.json +59 -0
  261. maze/levels/courseD_bee_nestedLoops9.json +53 -0
  262. maze/levels/courseD_bee_nestedLoops9_2023.json +60 -0
  263. maze/levels/courseD_bee_nestedLoops9_2024.json +60 -0
  264. maze/levels/courseD_bee_nestedLoops9_2025.json +60 -0
  265. maze/levels/courseD_bee_nestedLoops9_predict2.json +51 -0
  266. maze/levels/courseD_bee_nestedLoops9_predict2_2023.json +54 -0
  267. maze/levels/courseD_bee_nestedLoops9_predict2_2024.json +54 -0
  268. maze/levels/courseD_bee_nestedLoops9_predict2_2025.json +54 -0
  269. maze/levels/courseD_collector_debugging1a_2023.json +50 -0
  270. maze/levels/courseD_collector_debugging1a_2024.json +50 -0
  271. maze/levels/courseD_collector_debugging1a_2025.json +50 -0
  272. maze/levels/courseD_collector_debugging2a_2023.json +50 -0
  273. maze/levels/courseD_collector_debugging2a_2024.json +50 -0
  274. maze/levels/courseD_collector_debugging2a_2025.json +50 -0
  275. maze/levels/courseD_collector_debugging3a_2023.json +50 -0
  276. maze/levels/courseD_collector_debugging3a_2024.json +50 -0
  277. maze/levels/courseD_collector_debugging3a_2025.json +50 -0
  278. maze/levels/courseD_collector_debugging4a_2023.json +50 -0
  279. maze/levels/courseD_collector_debugging4a_2024.json +50 -0
  280. maze/levels/courseD_collector_debugging4a_2025.json +50 -0
  281. maze/levels/courseD_collector_debugging5a_2023.json +50 -0
  282. maze/levels/courseD_collector_debugging5a_2024.json +50 -0
  283. maze/levels/courseD_collector_debugging5a_2025.json +50 -0
  284. maze/levels/courseD_collector_debugging6a_2023.json +56 -0
  285. maze/levels/courseD_collector_debugging6a_2024.json +56 -0
  286. maze/levels/courseD_collector_debugging6a_2025.json +56 -0
  287. maze/levels/courseD_collector_debugging8a_2023.json +49 -0
  288. maze/levels/courseD_collector_debugging8a_2024.json +49 -0
  289. maze/levels/courseD_collector_debugging8a_2025.json +49 -0
  290. maze/levels/courseD_collector_debugging9a_2023.json +49 -0
  291. maze/levels/courseD_collector_debugging9a_2024.json +49 -0
  292. maze/levels/courseD_collector_debugging9a_2025.json +49 -0
  293. maze/levels/courseD_collector_nested_loops_challenge2_2024.json +50 -0
  294. maze/levels/courseD_collector_nested_loops_challenge2_2025.json +50 -0
  295. maze/levels/courseD_farmer_while10_2023.json +50 -0
  296. maze/levels/courseD_farmer_while10_2024.json +50 -0
  297. maze/levels/courseD_farmer_while10_2025.json +50 -0
  298. maze/levels/courseD_farmer_while10_predict2_2024.json +45 -0
  299. maze/levels/courseD_farmer_while10_predict2_2025.json +45 -0
  300. maze/levels/courseD_farmer_while1_2023.json +49 -0
  301. maze/levels/courseD_farmer_while1_2024.json +49 -0
  302. maze/levels/courseD_farmer_while1_2025.json +49 -0
  303. maze/levels/courseD_farmer_while2_2023.json +45 -0
  304. maze/levels/courseD_farmer_while2_2024.json +45 -0
  305. maze/levels/courseD_farmer_while2_2025.json +45 -0
  306. maze/levels/courseD_farmer_while3_2023.json +47 -0
  307. maze/levels/courseD_farmer_while3_2024.json +47 -0
  308. maze/levels/courseD_farmer_while3_2025.json +47 -0
  309. maze/levels/courseD_farmer_while4_2023.json +50 -0
  310. maze/levels/courseD_farmer_while4_2024.json +50 -0
  311. maze/levels/courseD_farmer_while4_2025.json +50 -0
  312. maze/levels/courseD_farmer_while4_predict1_2024.json +47 -0
  313. maze/levels/courseD_farmer_while4_predict1_2025.json +47 -0
  314. maze/levels/courseD_farmer_while5_2023.json +52 -0
  315. maze/levels/courseD_farmer_while5_2024.json +52 -0
  316. maze/levels/courseD_farmer_while5_2025.json +52 -0
  317. maze/levels/courseD_farmer_while6_2023.json +51 -0
  318. maze/levels/courseD_farmer_while6_2024.json +51 -0
  319. maze/levels/courseD_farmer_while6_2025.json +51 -0
  320. maze/levels/courseD_farmer_while7_2023.json +52 -0
  321. maze/levels/courseD_farmer_while7_2024.json +52 -0
  322. maze/levels/courseD_farmer_while7_2025.json +52 -0
  323. maze/levels/courseD_farmer_while8_2023.json +51 -0
  324. maze/levels/courseD_farmer_while8_2024.json +51 -0
  325. maze/levels/courseD_farmer_while8_2025.json +51 -0
  326. maze/levels/courseD_farmer_while9_2023.json +50 -0
  327. maze/levels/courseD_farmer_while9_2024.json +50 -0
  328. maze/levels/courseD_farmer_while9_2025.json +50 -0
  329. maze/levels/courseD_farmer_while_challenge1_2023.json +50 -0
  330. maze/levels/courseD_farmer_while_challenge1_2024.json +50 -0
  331. maze/levels/courseD_farmer_while_challenge1_2025.json +50 -0
  332. maze/levels/courseD_harvester_nested_loops_challenge1_2024.json +51 -0
  333. maze/levels/courseD_harvester_nested_loops_challenge1_2025.json +51 -0
  334. maze/levels/courseD_iceage_loops10_2024.json +48 -0
  335. maze/levels/courseD_iceage_loops10_2025.json +48 -0
  336. maze/levels/courseD_iceage_loops11_2024.json +46 -0
  337. maze/levels/courseD_iceage_loops11_2025.json +46 -0
  338. maze/levels/courseD_iceage_loops12_2024.json +46 -0
  339. maze/levels/courseD_iceage_loops12_2025.json +46 -0
  340. maze/levels/courseD_iceage_loops1_2024.json +49 -0
  341. maze/levels/courseD_iceage_loops1_2025.json +49 -0
  342. maze/levels/courseD_iceage_loops2_2024.json +51 -0
  343. maze/levels/courseD_iceage_loops2_2025.json +51 -0
  344. maze/levels/courseD_iceage_loops3_2024.json +51 -0
  345. maze/levels/courseD_iceage_loops3_2025.json +51 -0
  346. maze/levels/courseD_iceage_loops4_2024.json +47 -0
  347. maze/levels/courseD_iceage_loops4_2025.json +47 -0
  348. maze/levels/courseD_iceage_loops6_2024.json +47 -0
  349. maze/levels/courseD_iceage_loops6_2025.json +47 -0
  350. maze/levels/courseD_iceage_loops7_2024.json +47 -0
  351. maze/levels/courseD_iceage_loops7_2025.json +47 -0
  352. maze/levels/courseD_iceage_loops8_2024.json +49 -0
  353. maze/levels/courseD_iceage_loops8_2025.json +49 -0
  354. maze/levels/courseD_iceage_loops9_2024.json +49 -0
  355. maze/levels/courseD_iceage_loops9_2025.json +49 -0
  356. maze/levels/courseD_maze_intro4_2023.json +45 -0
  357. maze/levels/courseD_maze_intro4_2024.json +45 -0
  358. maze/levels/courseD_maze_intro4_2025.json +45 -0
  359. maze/levels/courseD_maze_intro5a_2023.json +45 -0
  360. maze/levels/courseD_maze_intro5a_2024.json +45 -0
  361. maze/levels/courseD_maze_intro5a_2025.json +45 -0
  362. maze/levels/courseD_maze_intro5c_2023.json +45 -0
  363. maze/levels/courseD_maze_intro5c_2024.json +45 -0
  364. maze/levels/courseD_maze_intro5c_2025.json +45 -0
  365. maze/levels/courseD_maze_nestedLoops3.json +46 -0
  366. maze/levels/courseD_maze_nestedLoops3_2023.json +47 -0
  367. maze/levels/courseD_maze_nestedLoops3_2024.json +47 -0
  368. maze/levels/courseD_maze_nestedLoops3_2025.json +47 -0
  369. maze/levels/courseD_maze_nestedLoops4.json +45 -0
  370. maze/levels/courseD_maze_nestedLoops4_2023.json +47 -0
  371. maze/levels/courseD_maze_nestedLoops4_2024.json +47 -0
  372. maze/levels/courseD_maze_nestedLoops4_2025.json +47 -0
  373. maze/levels/courseD_maze_nestedLoops5.json +44 -0
  374. maze/levels/courseD_maze_nestedLoops5_2023.json +45 -0
  375. maze/levels/courseD_maze_nestedLoops5_2024.json +45 -0
  376. maze/levels/courseD_maze_nestedLoops5_2025.json +45 -0
  377. maze/levels/courseD_maze_nestedLoops6.json +43 -0
  378. maze/levels/courseD_maze_nestedLoops6_2023.json +45 -0
  379. maze/levels/courseD_maze_nestedLoops6_2024.json +45 -0
  380. maze/levels/courseD_maze_nestedLoops6_2025.json +45 -0
  381. maze/levels/courseD_maze_ramp1.json +47 -0
  382. maze/levels/courseD_maze_ramp1_2023.json +45 -0
  383. maze/levels/courseD_maze_ramp1_2024.json +45 -0
  384. maze/levels/courseD_maze_ramp1_2025.json +45 -0
  385. maze/levels/courseD_maze_ramp2.json +47 -0
  386. maze/levels/courseD_maze_ramp2_2023.json +45 -0
  387. maze/levels/courseD_maze_ramp2_2024.json +45 -0
  388. maze/levels/courseD_maze_ramp2_2025.json +45 -0
  389. maze/levels/courseD_maze_ramp3.json +46 -0
  390. maze/levels/courseD_maze_ramp3_2023.json +45 -0
  391. maze/levels/courseD_maze_ramp3_2024.json +45 -0
  392. maze/levels/courseD_maze_ramp3_2025.json +45 -0
  393. maze/levels/courseD_maze_ramp4.json +47 -0
  394. maze/levels/courseD_maze_ramp5.json +44 -0
  395. maze/levels/courseD_maze_ramp5_2023.json +42 -0
  396. maze/levels/courseD_maze_ramp5_2024.json +42 -0
  397. maze/levels/courseD_maze_ramp5_2025.json +42 -0
  398. maze/levels/courseD_maze_ramp5a.json +45 -0
  399. maze/levels/courseD_maze_ramp5b.json +45 -0
  400. maze/levels/courseD_maze_ramp5b_2023.json +43 -0
  401. maze/levels/courseD_maze_ramp5b_2024.json +43 -0
  402. maze/levels/courseD_maze_ramp5b_2025.json +43 -0
  403. maze/levels/courseD_maze_ramp5c.json +46 -0
  404. maze/levels/courseD_maze_ramp5d.json +45 -0
  405. maze/levels/courseD_maze_ramp5d_2023.json +43 -0
  406. maze/levels/courseD_maze_ramp5d_2024.json +43 -0
  407. maze/levels/courseD_maze_ramp5d_2025.json +43 -0
  408. maze/levels/courseD_maze_until10_2023.json +53 -0
  409. maze/levels/courseD_maze_until10_2024.json +53 -0
  410. maze/levels/courseD_maze_until10_2025.json +53 -0
  411. maze/levels/courseD_maze_until10_predict2_2024.json +52 -0
  412. maze/levels/courseD_maze_until10_predict2_2025.json +52 -0
  413. maze/levels/courseD_maze_until1_2023.json +47 -0
  414. maze/levels/courseD_maze_until1_2024.json +47 -0
  415. maze/levels/courseD_maze_until1_2025.json +47 -0
  416. maze/levels/courseD_maze_until2_predict1_2024.json +44 -0
  417. maze/levels/courseD_maze_until2_predict1_2025.json +44 -0
  418. maze/levels/courseD_maze_until3_2023.json +48 -0
  419. maze/levels/courseD_maze_until3_2024.json +48 -0
  420. maze/levels/courseD_maze_until3_2025.json +48 -0
  421. maze/levels/courseD_maze_until4_2023.json +49 -0
  422. maze/levels/courseD_maze_until4_2024.json +49 -0
  423. maze/levels/courseD_maze_until4_2025.json +49 -0
  424. maze/levels/courseD_maze_until5_2023.json +49 -0
  425. maze/levels/courseD_maze_until5_2024.json +49 -0
  426. maze/levels/courseD_maze_until5_2025.json +49 -0
  427. maze/levels/courseD_maze_until6_2023.json +49 -0
  428. maze/levels/courseD_maze_until6_2024.json +49 -0
  429. maze/levels/courseD_maze_until6_2025.json +49 -0
  430. maze/levels/courseD_maze_until7_2023.json +49 -0
  431. maze/levels/courseD_maze_until7_2024.json +49 -0
  432. maze/levels/courseD_maze_until7_2025.json +49 -0
  433. maze/levels/courseD_maze_until9_2023.json +53 -0
  434. maze/levels/courseD_maze_until9_2024.json +53 -0
  435. maze/levels/courseD_maze_until9_2025.json +53 -0
  436. maze/levels/courseD_scrat_predict1.json +44 -0
  437. maze/levels/courseD_scrat_ramp1.json +46 -0
  438. maze/levels/courseD_scrat_ramp2.json +47 -0
  439. maze/levels/courseD_scrat_ramp3.json +45 -0
  440. maze/levels/courseD_scrat_ramp4.json +46 -0
  441. maze/levels/courseD_scrat_ramp5.json +46 -0
  442. maze/levels/courseD_scrat_ramp6.json +47 -0
  443. maze/levels/courseD_scrat_ramp8.json +47 -0
  444. maze/levels/courseE_farmer_functions10a1_2023.json +55 -0
  445. maze/levels/courseE_farmer_functions10a1_2024.json +55 -0
  446. maze/levels/courseE_farmer_functions11_predict_2024.json +49 -0
  447. maze/levels/courseE_farmer_functions13_2023.json +55 -0
  448. maze/levels/courseE_farmer_functions13_2024.json +55 -0
  449. maze/levels/courseE_farmer_functions1_2023.json +54 -0
  450. maze/levels/courseE_farmer_functions1_2024.json +54 -0
  451. maze/levels/courseE_farmer_functions1a_2023.json +55 -0
  452. maze/levels/courseE_farmer_functions1a_2024.json +55 -0
  453. maze/levels/courseE_farmer_functions2b_2023.json +55 -0
  454. maze/levels/courseE_farmer_functions2b_2024.json +55 -0
  455. maze/levels/courseE_farmer_functions2ba_2023.json +55 -0
  456. maze/levels/courseE_farmer_functions2ba_2024.json +55 -0
  457. maze/levels/courseE_farmer_functions3c1_2023.json +56 -0
  458. maze/levels/courseE_farmer_functions3c1_2024.json +56 -0
  459. maze/levels/courseE_farmer_functions3c_2023.json +55 -0
  460. maze/levels/courseE_farmer_functions3c_2024.json +55 -0
  461. maze/levels/courseE_farmer_functions7a1_2023.json +59 -0
  462. maze/levels/courseE_farmer_functions7a1_2024.json +59 -0
  463. maze/levels/courseE_farmer_functions8a1_2023.json +56 -0
  464. maze/levels/courseE_farmer_functions8a1_2024.json +56 -0
  465. maze/levels/courseE_farmer_functions9a1_2023.json +58 -0
  466. maze/levels/courseE_farmer_functions9a1_2024.json +58 -0
  467. maze/levels/courseE_farmer_ramp11a_2023.json +49 -0
  468. maze/levels/courseE_farmer_ramp11a_2024.json +49 -0
  469. maze/levels/courseE_farmer_ramp11b_2023.json +50 -0
  470. maze/levels/courseE_farmer_ramp11b_2024.json +50 -0
  471. maze/levels/courseE_farmer_ramp12_forswap_2023.json +50 -0
  472. maze/levels/courseE_farmer_ramp12_forswap_2024.json +50 -0
  473. maze/levels/courseE_farmer_ramp12b_2023.json +50 -0
  474. maze/levels/courseE_farmer_ramp12b_2024.json +50 -0
  475. maze/levels/courseE_farmer_ramp12c_2023.json +50 -0
  476. maze/levels/courseE_farmer_ramp12c_2024.json +50 -0
  477. maze/levels/courseE_farmer_ramp12d_2023.json +50 -0
  478. maze/levels/courseE_farmer_ramp12d_2024.json +50 -0
  479. maze/levels/courseE_farmer_ramp12e_2023.json +50 -0
  480. maze/levels/courseE_farmer_ramp12e_2024.json +50 -0
  481. maze/levels/courseE_farmer_ramp12f_2023.json +51 -0
  482. maze/levels/courseE_farmer_ramp12f_2024.json +51 -0
  483. maze/levels/courseE_farmer_while1_2023.json +54 -0
  484. maze/levels/courseE_farmer_while1_2024.json +54 -0
  485. maze/levels/courseF_bee_conditionals10.json +53 -0
  486. maze/levels/courseF_bee_conditionals1_predict1.json +52 -0
  487. maze/levels/courseF_bee_conditionals2.json +53 -0
  488. maze/levels/courseF_bee_conditionals3.json +51 -0
  489. maze/levels/courseF_bee_conditionals4.json +50 -0
  490. maze/levels/courseF_bee_conditionals5.json +53 -0
  491. maze/levels/courseF_bee_conditionals7_predict2.json +53 -0
  492. maze/levels/courseF_bee_conditionals8.json +54 -0
  493. maze/levels/courseF_bee_for1.json +50 -0
  494. maze/levels/courseF_bee_for10.json +53 -0
  495. maze/levels/courseF_bee_for11.json +48 -0
  496. maze/levels/courseF_bee_for2.json +51 -0
  497. maze/levels/courseF_bee_for3_predict1.json +52 -0
  498. maze/levels/courseF_bee_for4.json +54 -0
  499. maze/levels/courseF_bee_for5.json +52 -0
  500. maze/levels/courseF_bee_for6.json +55 -0
  501. maze/levels/courseF_bee_for7.json +53 -0
  502. maze/levels/courseF_bee_for8.json +54 -0
  503. maze/levels/courseF_bee_for9.json +55 -0
  504. maze/levels/courseF_bee_for_challenge1.json +52 -0
  505. maze/levels/courseF_bee_for_challenge2.json +48 -0
  506. maze/levels/courseF_bee_functions2.json +55 -0
  507. maze/levels/courseF_bee_functions3.json +55 -0
  508. maze/levels/courseF_bee_functions3a.json +55 -0
  509. maze/levels/courseF_bee_functions4.json +54 -0
  510. maze/levels/courseF_bee_functions5a.json +55 -0
  511. maze/levels/courseF_bee_functions6.json +57 -0
  512. maze/levels/courseF_bee_functions7.json +55 -0
  513. maze/levels/courseF_bee_functions8a.json +52 -0
  514. maze/levels/courseF_bee_functionsPre7.json +56 -0
  515. maze/levels/courseF_bee_functions_challenge1.json +52 -0
  516. maze/levels/courseF_bee_functions_challenge2.json +51 -0
  517. maze/levels/courseF_bee_fwp1.json +52 -0
  518. maze/levels/courseF_bee_fwp2.json +52 -0
  519. maze/levels/courseF_bee_fwp3.json +54 -0
  520. maze/levels/courseF_bee_fwp4.json +52 -0
  521. maze/levels/courseF_bee_fwp5.json +52 -0
  522. maze/levels/courseF_bee_fwp6.json +53 -0
  523. maze/levels/courseF_bee_fwp7.json +52 -0
  524. maze/levels/courseF_bee_fwp8.json +55 -0
  525. maze/levels/courseF_bee_fwp9_predict1.json +54 -0
  526. maze/levels/courseF_bee_fwp_challenge1.json +47 -0
  527. maze/levels/courseF_bee_fwp_challenge2.json +48 -0
  528. maze/levels/coursea_maze_ramp1_2024.json +53 -0
  529. maze/levels/grade2_collector_10_2023.json +45 -0
  530. maze/levels/grade2_collector_10_2024.json +45 -0
  531. maze/levels/grade2_collector_A_2023.json +50 -0
  532. maze/levels/grade2_collector_A_2024.json +50 -0
  533. maze/levels/grade2_collector_A_predict1_2023.json +46 -0
  534. maze/levels/grade2_collector_A_predict1_2024.json +46 -0
  535. maze/maze.py +650 -0
  536. maze/puzzle.py +75 -0
  537. maze/pvz.py +62 -0
  538. maze/screencapture.py +22 -0
  539. maze/zombieshape.py +108 -0
@@ -0,0 +1,105 @@
1
+ Metadata-Version: 2.4
2
+ Name: codingpirates-maze
3
+ Version: 0.1.0
4
+ Summary: Turtle-graphics maze framework and code.org level importer used by Coding Pirates Python puzzles
5
+ License-Expression: Apache-2.0
6
+ License-File: LICENSE
7
+ Requires-Python: >=3.11
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: Programming Language :: Python :: 3.11
10
+ Classifier: Programming Language :: Python :: 3.12
11
+ Classifier: Programming Language :: Python :: 3.13
12
+ Classifier: Programming Language :: Python :: 3.14
13
+ Classifier: Programming Language :: Python :: 3.15
14
+ Project-URL: Repository, https://github.com/StefanUG/stefans-code-org-maze
15
+ Description-Content-Type: text/markdown
16
+
17
+ # maze
18
+
19
+ This is the Python Turtle-graphics maze framework and the code.org level importer behind the
20
+ [Coding Pirates Python puzzles](https://github.com/StefanUG/code-org-python) student repository.
21
+
22
+ It is published to PyPI as `codingpirates-maze`, but imported in code as `maze`:
23
+
24
+ ```
25
+ pip install codingpirates-maze
26
+ ```
27
+
28
+ ```python
29
+ from maze import Puzzle, Farmer
30
+
31
+ maze = Puzzle.from_file("courseD_farmer_while1_2024")
32
+ farmer: Farmer = maze.player
33
+ ```
34
+
35
+ Level files are bundled with the package under `src/maze/levels/`, so `Puzzle.from_file(name)`
36
+ works the same way whether `maze` is installed from PyPI or from a local/editable checkout.
37
+
38
+ # Repository layout
39
+
40
+ - `src/maze/` — the published package: the Turtle-based maze framework, game skins (bee, farmer,
41
+ harvester, birds, collector, plants-vs-zombies) and the bundled level `.json` files.
42
+ - `src/importer/` — a dev-only tool (not needed by students) that imports lesson/level content from
43
+ a locally checked out clone of [code.org's `code-dot-org`](https://github.com/code-dot-org/code-dot-org)
44
+ repository and generates:
45
+ - the student-facing puzzle `.py` files (written into the student repo),
46
+ - the private `test_*.py` solution files and matching level `.json` files (written into this repo).
47
+ - `course*-*/` — mirrors the student repo's course/lesson folder structure, but only holds the
48
+ private `test_*.py` solution files (used by `test_all.py` for regression testing). It
49
+ intentionally excludes the student-facing puzzle files and has no `levels/` subfolder — the level
50
+ `.json` files instead live in `src/maze/levels/`.
51
+
52
+ Only lessons that code.org has released under a Creative Commons license are imported and re-shared
53
+ here, using alternative artwork since code.org holds exclusive rights to their own artwork.
54
+
55
+ # Local development
56
+
57
+ 1. `poetry install --with importer` (the `importer` group pulls in Jinja2, only needed to run the
58
+ importer; the published `codingpirates-maze` package has no runtime dependencies).
59
+ 2. Run the regression tests: `python test_all.py` (recurses into every `course*-*/**/test_*.py`).
60
+ 3. Run the importer, e.g.:
61
+ ```
62
+ python -m importer.create_course -s ../code-dot-org -t ../code-org-python -m . coursed-2024
63
+ ```
64
+ This writes puzzle `.py` files into the student repo (`-t`), and level `.json` + `test_*.py`
65
+ files into this repo (`-m`).
66
+
67
+ # Publishing to PyPI
68
+
69
+ Releases are published via GitHub Actions using PyPI Trusted Publishing — see
70
+ `.github/workflows/publish.yml`. Push a `v*` tag / create a GitHub Release to trigger a publish.
71
+
72
+ # Artwork Attribution
73
+
74
+ Code.org has exclusive rights to their artwork and graphics, so alternative artwork was used
75
+ instead. The graphics and artwork is found on https://opengameart.org/. Specific mentions should go
76
+ to the following for the bits used.
77
+
78
+ ## Bee
79
+
80
+ * Honeycomb from [Admurin's Insect Items](https://opengameart.org/content/admurins-insect-items)
81
+ * Grass background from [LPC Tile Atlas](https://opengameart.org/content/lpc-tile-atlas)
82
+ * Flowers from [Plants and Flowers - Pixel Art](https://opengameart.org/content/plants-and-flowers-pixel-art)
83
+
84
+ ## Plants vs. Zombies
85
+
86
+ * Ground tiles from [Whispers of Avalon: Grassland Tileset](https://opengameart.org/content/whispers-of-avalon-grassland-tileset)
87
+ * Evil Flower obstacle from: [Bevouliin Free sprite sheets - Plant Monster](https://opengameart.org/content/bevouliin-free-sprite-sheets-plant-monster)
88
+ * Sunflower from [Plants and Flowers - Pixel Art](https://opengameart.org/content/plants-and-flowers-pixel-art)
89
+
90
+ ## Farmer and Harvester
91
+
92
+ * Crops from [LPC Crops](https://opengameart.org/content/lpc-crops)
93
+ * Background from [LPC Farming tilesets, magic animations and UI elements](https://opengameart.org/content/lpc-farming-tilesets-magic-animations-and-ui-elements)
94
+
95
+ ## Birds
96
+
97
+ * Grass background, same as Bee
98
+ * "Pig" monster from [Fat Green Monster Sprites](https://opengameart.org/content/fat-green-monster-sprites)
99
+ * Walls from [Platformer Tiles](https://opengameart.org/content/platformer-tiles) and [Shape Characters](https://opengameart.org/content/shape-characters)
100
+ * TNT from [Wooden Boxes Crates](https://opengameart.org/content/wooden-boxes-crates)
101
+
102
+ ## Collector
103
+
104
+ * Walls, Floor and Gem from [Dungeon Crawl 32x32 tiles](https://opengameart.org/content/dungeon-crawl-32x32-tiles)
105
+