From bbc92b1ca9585a991e9c0a42d5807ff7399f2777 Mon Sep 17 00:00:00 2001 From: PABLO Date: Tue, 6 May 2025 12:46:32 +0300 Subject: [PATCH 1/2] add: movement --- DATA/Levels/Default/data.json | 1 + DATA/Levels/level_1/data.json | 108 +++++++++ .../Enemies/Tier 0/healthy_food.aseprite | Bin 0 -> 383 bytes DATA/Sprites/Enemies/Tier 0/healthy_food.png | Bin 0 -> 173 bytes .../Enemies/Tier 1/little-spider.aseprite | Bin 0 -> 532 bytes DATA/Sprites/Enemies/Tier 1/little-spider.png | Bin 0 -> 400 bytes DATA/Sprites/Floor/floor_grey.aseprite | Bin 0 -> 303 bytes DATA/Sprites/Floor/floor_grey.png | Bin 0 -> 142 bytes DATA/Sprites/Floor/move_ghost.aseprite | Bin 0 -> 369 bytes DATA/Sprites/Floor/move_ghost.png | Bin 0 -> 136 bytes DATA/Sprites/Floor/simple_border.aseprite | Bin 0 -> 467 bytes DATA/Sprites/Floor/simple_border.png | Bin 0 -> 213 bytes DATA/Sprites/Snake/body-rotate.aseprite | Bin 0 -> 491 bytes DATA/Sprites/Snake/body-rotate.png | Bin 0 -> 368 bytes DATA/Sprites/Snake/body.aseprite | Bin 0 -> 468 bytes DATA/Sprites/Snake/body.png | Bin 0 -> 371 bytes DATA/Sprites/Snake/head.aseprite | Bin 0 -> 486 bytes DATA/Sprites/Snake/head.png | Bin 0 -> 329 bytes DATA/Sprites/Snake/tail.aseprite | Bin 0 -> 431 bytes DATA/Sprites/Snake/tail.png | Bin 0 -> 315 bytes __pycache__/fill_level.cpython-313.pyc | Bin 0 -> 2837 bytes fill_level.py | 108 +++++++++ main.py | 208 ++++++++++++++++++ 23 files changed, 425 insertions(+) create mode 100644 DATA/Levels/Default/data.json create mode 100644 DATA/Levels/level_1/data.json create mode 100644 DATA/Sprites/Enemies/Tier 0/healthy_food.aseprite create mode 100644 DATA/Sprites/Enemies/Tier 0/healthy_food.png create mode 100644 DATA/Sprites/Enemies/Tier 1/little-spider.aseprite create mode 100644 DATA/Sprites/Enemies/Tier 1/little-spider.png create mode 100644 DATA/Sprites/Floor/floor_grey.aseprite create mode 100644 DATA/Sprites/Floor/floor_grey.png create mode 100644 DATA/Sprites/Floor/move_ghost.aseprite create mode 100644 DATA/Sprites/Floor/move_ghost.png create mode 100644 DATA/Sprites/Floor/simple_border.aseprite create mode 100644 DATA/Sprites/Floor/simple_border.png create mode 100644 DATA/Sprites/Snake/body-rotate.aseprite create mode 100644 DATA/Sprites/Snake/body-rotate.png create mode 100644 DATA/Sprites/Snake/body.aseprite create mode 100644 DATA/Sprites/Snake/body.png create mode 100644 DATA/Sprites/Snake/head.aseprite create mode 100644 DATA/Sprites/Snake/head.png create mode 100644 DATA/Sprites/Snake/tail.aseprite create mode 100644 DATA/Sprites/Snake/tail.png create mode 100644 __pycache__/fill_level.cpython-313.pyc create mode 100644 fill_level.py diff --git a/DATA/Levels/Default/data.json b/DATA/Levels/Default/data.json new file mode 100644 index 0000000..2fce87e --- /dev/null +++ b/DATA/Levels/Default/data.json @@ -0,0 +1 @@ +{"name": "Default", "start_point": {"x": 4, "y": 8}, "enemy_types": [[{"type": "little_spider", "sprite": "DATA/Sprites/Enemies/Tier 1/little-spider.png"}], [{"type": "wolf", "sprite": "DATA/Sprites/Enemies/Tier 2/wolf.png"}]], "enemy_spawns": [{"x": 1, "y": 2}, {"x": 3, "y": 12}, {"x": 1, "y": 6}, {"x": 10, "y": 10}], "size": [13, 10], "floor": [{"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 0}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 0}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 0}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 0}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 0}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 13, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 13, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 1, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 2, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 3, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 13, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 1, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 2, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 3, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 13, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 1, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 2, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 3, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 13, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 0, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 1, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 2, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 3, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 0, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 1, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 2, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 3, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 1, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 2, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 3, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 3, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 10}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 10}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 10}]} \ No newline at end of file diff --git a/DATA/Levels/level_1/data.json b/DATA/Levels/level_1/data.json new file mode 100644 index 0000000..f1c7b75 --- /dev/null +++ b/DATA/Levels/level_1/data.json @@ -0,0 +1,108 @@ +{ + "name": "default", + "starting_position": { + "x": 6, + "y": 1 + }, + "enemies": [ + { + "type": "spider", + "sprite": "DATA/Sprites/Enemies/Tier 1/little-spider.png", + "x": 1, + "y": 6 + }, + { + "type": "spider", + "sprite": "DATA/Sprites/Enemies/Tier 1/little-spider.png", + "x": 1, + "y": 2 + }, + { + "type": "spider", + "sprite": "DATA/Sprites/Enemies/Tier 1/little-spider.png", + "x": 12, + "y": 3 + }, + { + "type": "spider", + "sprite": "DATA/Sprites/Enemies/Tier 1/little-spider.png", + "x": 10, + "y": 8 + } + ], + "floor": [ + { + "sprite": "DATA/Sprites/Floor/floor_grey.png", + "y": 0, + "x_start": 6, + "x_end": 8 + }, + { + "sprite": "DATA/Sprites/Floor/floor_grey.png", + "y": 1, + "x_start": 3, + "x_end": 11 + }, + { + "sprite": "DATA/Sprites/Floor/floor_grey.png", + "y": 1, + "x_start": 3, + "x_end": 11 + }, + { + "sprite": "DATA/Sprites/Floor/floor_grey.png", + "y": 2, + "x_start": 1, + "x_end": 12 + }, + { + "sprite": "DATA/Sprites/Floor/floor_grey.png", + "y": 3, + "x_start": 0, + "x_end": 12 + }, + { + "sprite": "DATA/Sprites/Floor/floor_grey.png", + "y": 4, + "x_start": 0, + "x_end": 12 + }, + { + "sprite": "DATA/Sprites/Floor/floor_grey.png", + "y": 5, + "x_start": 1, + "x_end": 13 + }, + { + "sprite": "DATA/Sprites/Floor/floor_grey.png", + "y": 6, + "x_start": 1, + "x_end": 13 + }, + { + "sprite": "DATA/Sprites/Floor/floor_grey.png", + "y": 7, + "x_start": 1, + "x_end": 13 + }, + { + "sprite": "DATA/Sprites/Floor/floor_grey.png", + "y": 8, + "x_start": 4, + "x_end": 11 + }, + { + "sprite": "DATA/Sprites/Floor/floor_grey.png", + "y": 9, + "x_start": 5, + "x_end": 8 + }, + { + "sprite": "DATA/Sprites/Floor/floor_grey.png", + "y": 10, + "x_start": 5, + "x_end": 6 + } + ] + +} \ No newline at end of file diff --git a/DATA/Sprites/Enemies/Tier 0/healthy_food.aseprite b/DATA/Sprites/Enemies/Tier 0/healthy_food.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..42d44fa201fa4783eb45be73eeb931764675182c GIT binary patch literal 383 zcmbr}e zfjr121!f=#10WZ&Gx#J{rWPp}1^_v%3JeTf44e%AnP5t|8F(2g<|HQ^;M?>~@(+8W w%q5Li94i?cP2Jr7C(e*CeK8}V^u?>rQ12eAsN|@hy;nY{n%!eyX4q#706&FNI{*Lx literal 0 HcmV?d00001 diff --git a/DATA/Sprites/Enemies/Tier 0/healthy_food.png b/DATA/Sprites/Enemies/Tier 0/healthy_food.png new file mode 100644 index 0000000000000000000000000000000000000000..e0c2b3a5cc235e9e57cb90afedb4182f362e01bc GIT binary patch literal 173 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}>7Fi*ArY;~ z2@TSCi&<5t@ID|2XvNS;c+W6U1w<26fIZuPUhyb32OvzCY3n!IeT1c zIA2sGd(fpTDT-lHtas1*#D*yW5+4L43fOzp4lNAjdr-uos`^j^Vk{HG_RY$oSGQhS Q2(*&H)78&qol`;+0E(eJ!2kdN literal 0 HcmV?d00001 diff --git a/DATA/Sprites/Enemies/Tier 1/little-spider.aseprite b/DATA/Sprites/Enemies/Tier 1/little-spider.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..c58316a7e9e42f921d6db1ecaacbeb7d529fd3fb GIT binary patch literal 532 zcmWe(Vqkc%l#xLJ3>g_17*c>30TdY+L4phdKu8NP1!(%Ok1SwYS%4OZ0WrG**h(bp za)E3X2B4@SkfEet;;LbjW@*?TW_`a@#`U3+F$R%BREnN!yqBcq$)$=9oQ^-uTe z$~OpKpehftOo186`u{*SJA+SRWonUv;Ugf2Re^zlnSqtzKQQzlK#D<}p<>S7seyb) z6gXULTj$3e_zqXWP zgVg6JiGup>jVfz{BVI*5nUn7(pD%H3&K>JxOQ*Q87J2@YonP(tF7*5pg~)8d=Njqv z`d<|qyn9jZ6nU#^n)p@jtrkz}%A9`wkb7{iB7Sn5LutnO6Sp(`r6cCm{Z9NKXRyiU z3U;+PUxTDL!DI$Y)@FPDQuebfA%Ch3rqcD0IS8G A+yDRo literal 0 HcmV?d00001 diff --git a/DATA/Sprites/Enemies/Tier 1/little-spider.png b/DATA/Sprites/Enemies/Tier 1/little-spider.png new file mode 100644 index 0000000000000000000000000000000000000000..cfa5a300417163f798f23900c056cadf03f127d3 GIT binary patch literal 400 zcmV;B0dM|^P)Px$N=ZaPR9J=WRxysmAPk(GuArezN4)rT5AA^La3f| zVwwUZ^#`&jgz&974`~*wH({wOutznFjwjz~--2`z70000r}e Zfjr121&~W%;6IST&ft?+nOdY^2mlD@H%|Zn literal 0 HcmV?d00001 diff --git a/DATA/Sprites/Floor/floor_grey.png b/DATA/Sprites/Floor/floor_grey.png new file mode 100644 index 0000000000000000000000000000000000000000..f3131c0977a4f2c979316f3534c4336da4121d0b GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}9-c0aArY-_ zuWuA&5D;Oxm^?+nnCr`JGb398kCK9udCcE0c`H9U5ixN|*zVMtw<~iZ|1klzA%m_j bajRBy^EPpq?9i}j1<822`njxgN@xNAbkHcU literal 0 HcmV?d00001 diff --git a/DATA/Sprites/Floor/move_ghost.aseprite b/DATA/Sprites/Floor/move_ghost.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..b59773c748854c263612c83eb4abef57925d14c2 GIT binary patch literal 369 zcmXS9WMFu(l#xLJ41pYm6d*r}e zfjr121!f=#1OI^xb_Sos%G4qSLnk1IRe=HM6h?;sOfV&K3~~$=bKagc1iFxeS>gBe fdAf7hMHF7nOpaTB{q@(Xy+G>s*W8Fw)pHI2t)NW% literal 0 HcmV?d00001 diff --git a/DATA/Sprites/Floor/move_ghost.png b/DATA/Sprites/Floor/move_ghost.png new file mode 100644 index 0000000000000000000000000000000000000000..874d83b686da4ead54dc9c51c6a8d35d1b798fac GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}PM$7~ArY-_ zuP+p3FyLVdeDV69cChGV#;%>gg*DPE=csCWYCYa|mFdj0pSF9Lff|rNdEd3>sP~K$ WlLZW-9u#f{$#}Z@xvXyADL{+>3Ji=OK?VUJqy-2Dn*Qq}3)of`pao(;%&q{o63MzO zAe)5&D5?NtC@Gk@YS^S%8uo`--!D|VxghP`;aR^wnaz9}khRaid`g~orhbsOijj?_ zy?u#6LQ{0!!{pijl*yKds8COG0BI~D(D7N#fzEq!O}vN>!))ecTUeZQq0@p`Qtn(oUwQs3|h z-kvd0sc)l_%ML>uhQ#$1Od|K(ts62YZ(*9V&)bbQUmHq0rie-VTBR@}y4@`Q} zTE}>+<%PteZjRWaFASZ|8)kU~c(=_8x-xC?L6+XM42z|YfAR(?)i2$8?)`J1(-=Hm L{an^LB{Ts51XfXU literal 0 HcmV?d00001 diff --git a/DATA/Sprites/Snake/body-rotate.aseprite b/DATA/Sprites/Snake/body-rotate.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..cc4ef420e312f1022425e287052812886795a7c5 GIT binary patch literal 491 zcmaFO$iVPmDIyADL{+>iVTb(K?VUJqy@+Zn*Qq}3)of`pao(;%&q{o63Mz; zAe)5&D5?l#C@Gk@YS^S%8uo`--!D|VxghP`;aR^wnaz9}khRaid`g~orhbsOijj?_ zy?u#6LQ{0!!{pij!x%l4NK7t5WT zx&7fS>*Tm(z9$RCdXFwTb8v>Lo2F9uv)&D+YxD1CWlktfN{`50Gs{aad0LikY3jCZ z?LPkZpIc93k5hZK-DX9i*VPx$DoI2^R9J=WR=W;@KoFcWR9H%FL4u#8t%aXuL93sn2?aHjP?4O4SzMMwxZ~9@ z%_iiynVo$Auwlc74J$*YF@9rpB@r2T7b-wlLn!WJS}iI z?vW)Wg3w2nlnpV?0?zkS%U(&^6}gz*SaRiQ1fgHYKJq**>T^Npy9uC70rZmfMe7pq z?EhuVZRSy)vleiPBdsfCysWFy2&M-0Yz1^>PNZ2<*2Hq=c>-UtmJZO%QUuS~L}~(+ zauNpsWkn7E&)Z7@7(NBGa7^|CX1j;LY7D7%vi7psW)lFk9iV-%n1HVCUrc~$t&V}y z7>*r54ySLysyzUh%OHO~hGMdBfv)VA5#ZyADL{+>iVTb(K?VUJqy-28n*Qq}3)of`pao(;%&q{o63Mz; zAe)5&D5?l#C@Gk@YS^S%8uo`--!D|VxghP`;aR^wnaz9}khRaid`g~orhbsOijj?_ zy?u#6LQ{0!!{pij;{z3jo+eHOKfwK*46P`}^DiGwa{n?RW_RlQ^!n@>Z@|?=Kb?>;W{ApmH z7~HSz<7l$0D(Ep!ctlcgzpt*5@0#77yyY|Gf)2^X+U_f9KAn?vnL$U+qtIM4QzCxH gg-tOBQtk9?e_S#!z1yPe^YNwRo2TjwiV51!0oF@+xc~qF literal 0 HcmV?d00001 diff --git a/DATA/Sprites/Snake/body.png b/DATA/Sprites/Snake/body.png new file mode 100644 index 0000000000000000000000000000000000000000..0a661648014a573013e73fd8d13d10599366c86f GIT binary patch literal 371 zcmV-(0gV2MP)Px$ElET{R9J=WmoaX_KoCXWL|d5>*A$k>kwQz6W2K;lBY{NW8keTBG%3(Z$X*vS zUKT0J^xl2`Gyjh*7;AUfst!WkRCI06db6Tydvp*aD98OpEa!b#0b)I0zTT|7$M^xB zFYnsEJiyx&h&>)FP&XAi2)n~pUkU&qLAhP;S=!)k0Wg6m25{V8M1oGN=xIY%1w3t7 z1Ta>>(}t`H+^+X>0I4{xn+gdg7h=loSaBan(1`-pec)0+hsXI#<#z#m{d_7+2QbQC zWE-ZYznB7ZF&snakPpBC%LE0PyPQJ#`-h=hQE9AB~Kwd Rp#%T`002ovPDHLkV1kK@o8ABb literal 0 HcmV?d00001 diff --git a/DATA/Sprites/Snake/head.aseprite b/DATA/Sprites/Snake/head.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..039b8f74758b768d4fd8e39c8d37a290721b490e GIT binary patch literal 486 zcmaFH$iVPmDIyADL{+>$_$JkK?VUJqyu9FHn^SS*gH`=dPn5Z2@ipbGF++0FSEbjAVftrs*X2$suvIWqG@rbfU#al-h)S_eVu$uV$qK;jTt$=HoSDa*6l0rqihkJ$#?SH9M!5!qU?5^Bl^x?aY&kwav`zY8QXw)&0$2uqd@30E`fT AWdHyG literal 0 HcmV?d00001 diff --git a/DATA/Sprites/Snake/head.png b/DATA/Sprites/Snake/head.png new file mode 100644 index 0000000000000000000000000000000000000000..370d62f41b6655d419ef71acc923759dfe5e0f4e GIT binary patch literal 329 zcmV-P0k-~$P)Px$14%?dR9J=WRv`|9KoFcZbtrAj>KYyqahvW!-^)B+7oD|UBawE#|kIkCrZfL2r_3VGztV)DpEk*LL-%>pQi zi5Rf}0O*?#Y1z%r)3QU~gxu?R0@)fV^^cD z+HpMpbre$~if_V<3(z9;O7{}5KQ8?kp-$+%c3#bEAH@L74SO=^F byF2g#%7(Q6BQCc800000NkvXXu0mjfdHsVW literal 0 HcmV?d00001 diff --git a/DATA/Sprites/Snake/tail.aseprite b/DATA/Sprites/Snake/tail.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..f55b22a737242f0a49197b9d0a1849d9d276449c GIT binary patch literal 431 zcmZ3_$iVPmDIyADL{+>iVTb(K?VUJqy^9in*Qq}3)of`pao(;%&q{o63Mz; zAe)5&D5?l#C@Gk@YS^S%8uo`--!D|VxghP`;aR^wnaz9}khRaid`g~orhbsOijj?_ zy?u#6LQ{0!!{pijP}dp=|68|7Px#^+`lQR9J=8m7xxUFc60SE>j>uBS^+0F+0IyA!f%Tu>^qz$rMQ^mLttFbJt5R z`%PW{uivGu12fnA#rxf%tTU|hhN8-`&Kvyh;LaY8+tYFOJ8=OhVR=#I(rx$ve*YXW zEMMm>9l+3y4lp!8DXJXH^g31m?D8{oS<_VgkEjjI<0psAk?Fm$6cHvquS z0EGJ%*^iz!X4h4F73B;{}WY(2N*B%YwOqsF*xN+A#+(&l_?YhB+k{$e#cJ N002ovPDHLkV1n)vdw>7{ literal 0 HcmV?d00001 diff --git a/__pycache__/fill_level.cpython-313.pyc b/__pycache__/fill_level.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..34fb3385a6d2695bfa356da0d7cb8ff080156885 GIT binary patch literal 2837 zcmc&$-ESMm5#PNJev?O9qD!;HZdY2HA_DD%KoaZjV z+1cIMnc3Oj%&S=31+2`LRPDWgV+o;}Out zF~km<%IEX`>FVP3rRCC<<;&NXHtf39vd!g+Yw_!NMzd-C$Z8hbTYkhe8+OArO|E#BTiPF$2McU(f&FcvyrbOG_CbKGQKW+wf?h=F55T~6 zQaJx`?MR=3%l(>c(`yH@DbvHNmWVA~8v=t|Mx9Tz0>%}O{X{EEL%8G-O7J@z*U1cd zo(ylQ3SQTwJUL17@T-$=$R|k+0JgH7SSnp98Q;PfImUL(s8-xc@olGN`}BscieURn zt8Ll7B4(B9#(LY2iJ+P&tjjzOe)$oIsUcOsu9GrMOyuia1PyQR+(>Gv=F^3rbg*R9*F?mPDr z`j;|E%{)lv|DMeM$3ZtfER-VhUm~&6SokqKqYZIWHbmkMDMP|ANR^_*6sEFJQ8FkC zvq-=h5~NK`tj1YF^ih@+eTt>9Hxz>yglWYPU>Z~hjiqgwWo(5-ZAd&jR94ur#bbn2 zKxDP_br7n2AGlG3+X#965+QcD9A+apwj--QXJTb>k&r6n)SIw#^{0!!f?Y5wM{M=! z=weyi|FpbYT>uZpit>3lGqyZvVbOEIJ#G#4zc~;8HwcM?)au0ptBN>9ut#}|z7;t* z6YjxtT{Wby@ay;)uv8~{ZiS+%?;+hV24?!JjP?EjoT87&z_94cmc|)Y!IsRg|ginaAv3 z#4=_C1+31kEi}%BT@4KR)bXjspGTWA&qK#2kzf_#&jHaTo`ud2Roak!RXr-wOccJL z1m;l^#eH?tT(4~U>Q>NgLdmm*HV0u36*6c+HpUK%qMsQgwx8#8#c6a+j!<(4=&CB;HUCYZ&ex%*i?uGYqFFeT2 z@8#zIeBsm8@9Zsn_kQl0H#ya*+`(ZLMi90_s9;sydIq+pP`@zfIO2_g>vmJVS z`8Iu+&i0QJExlW~RqKzFS-o4_QQp^np>;xkjhy6og^zs-k}x3(%#VS=Pr;G$f&~K$ zPDqpvEHpz73eI5eX&ijJ2djr%@V1 zBtH$Lhwh53%ktV6@m61yZ{369zsnR_#M%yz^a3p zmKUhwxav<0;P&*7{Y4OQ{siPE>4y$6G{B51XS99{rx8+pSxRgD$p3SQhz2(@+M^OZ zm5%kvsc1~V0@4{PiO61&sVh45!%M;AMvvk%1V5AT42hZMdaJqtRnYVkruoiBr8!v9 zOtaSDj@xY5mfbQ9MJ^dBVtWvE7J>~nZx&_Ln;001*@3;+NC literal 0 HcmV?d00001 diff --git a/fill_level.py b/fill_level.py new file mode 100644 index 0000000..9bece64 --- /dev/null +++ b/fill_level.py @@ -0,0 +1,108 @@ +import json + + +class filler(): + def __init__(self, name = "None", floor_code = []): + self.name = name + self.floor_code = floor_code if floor_code else self.get_default_floor_code() + + def export2json(self): + filename = f"DATA/Levels/{self.name}/data.json" + with open(filename, 'w') as f: + json.dump(self.level_data, f) + + def fill_level(self, floor_code, name = "Default"): + self.level_data = { + "name": name, + "start_point": { + "x": 4, + "y": 8, + }, + "enemy_types": [ + [ + { + "type": "little_spider", + "sprite": "DATA/Sprites/Enemies/Tier 1/little-spider.png", + } + ], + [ + { + "type": "wolf", + "sprite": "DATA/Sprites/Enemies/Tier 2/wolf.png", + } + ], + ], + "enemy_spawns": [ + { "x" : 1, "y" : 2 }, + { "x" : 3, "y" : 12 }, + { "x" : 1, "y" : 6 }, + { "x" : 10, "y" : 10 } + ], + "size" : [], + "floor": [] + } + # Загрузка пола + + # floor_code - закодированная информация об уровне, представляет собой ас массив последовательностей 2х чисел: + # начало пола, конец пола + # Ключами являются координаты по y + + sprite = "DATA/Sprites/Floor/floor_grey.png" + y = 0 + x_max = 1 + y_max = 1 + + while y < 15: + if y in floor_code: + for x_len in floor_code[y]: + x = x_len["s"] + while x <= x_len["e"]: + if x > x_max: x_max = x + self.level_data["floor"].append({"sprite": sprite, "x": x, "y": y}) + x = x+1 + if y > y_max: y_max = y + y = y + 1 + else: + break + + self.level_data["size"] = [x_max, y_max] + + def get_default_floor_code(self): + return { + 0: [ + { "s" : 5, "e" : 6 }, + { "s" : 10, "e" : 12 }, + ], + 1:[ + { "s" : 5, "e" : 13 }, + ], + 2:[ + { "s" : 4, "e" : 13 }, + ], + 3:[ + { "s" : 1, "e" : 13 }, + ], + 4:[ + { "s" : 1, "e" : 13 }, + ], + 5:[ + { "s" : 1, "e" : 13 }, + ], + 6:[ + { "s" : 0, "e" : 12 }, + ], + 7:[ + { "s" : 0, "e" : 12 }, + ], + 8:[ + { "s" : 1, "e" : 12 }, + ], + 9:[ + { "s" : 3, "e" : 11 }, + ], + 10:[ + { "s" : 6, "e" : 8 }, + ] + } + + diff --git a/main.py b/main.py index e69de29..fc74e4c 100644 --- a/main.py +++ b/main.py @@ -0,0 +1,208 @@ +import arcade +import json +import math +from fill_level import filler + +SCREEN_WIDTH = 800 +SCREEN_HEIGHT = 600 + +class body(): + def __init__(self, x, y, rotate, type): + self.x = x + self.y = y + self.rotate = rotate + self.type = type + +class SNAKE(): + def __init__(self, star_point_x, star_point_y, start_rotate = 90): + self.body = [ + body(star_point_x, star_point_y, start_rotate, "head"), + body(star_point_x - 1, star_point_y, start_rotate, "tail") + ] + def move(self, vector): + self.body[0].rotate = vector * 90 + i = 0 + while i < len(self.body): + if self.body[i].type == "body" or self.body[i].type == "tail": + self.body[i].x = self.body[i-1].x + self.body[i].y = self.body[i-1].y + self.body[i].rotate = self.body[i-1].rotate + i = i + 1 + a = int(math.cos(-self.body[0].rotate * math.pi / 180)) + self.body[0].x = int(-math.sin(-self.body[0].rotate * math.pi / 180)) + self.body[0].x + self.body[0].y = int(math.cos(-self.body[0].rotate * math.pi / 180)) + self.body[0].y + + # print(f"Move {vector}") + +class Level_data(): + def __init__(self, level_data_json = []): + if level_data_json: + self.fill_grid(level_data_json) + + def fill_grid(self, level_data_json): + self.name = level_data_json["name"] + self.floor = level_data_json["floor"] + self.size = level_data_json["size"] + self.enemy_types = level_data_json["enemy_types"] + self.enemy_spawns = level_data_json["enemy_spawns"] + self.start_point = level_data_json["start_point"] + +class MYGAME(arcade.Window): + Sprites = [] + + def __init__(self, width, height): + super().__init__(width, height) + arcade.set_background_color(arcade.color.AMAZON) + + def setup(self, level_name): + + print(f"Upload level: {level_name}") + + with open(f'./DATA/Levels/{level_name}/data.json', 'r') as file: + self.Lvl_data = Level_data(json.load(file)) + + if self.Lvl_data.name : + print(f"{self.Lvl_data.name} loaded") + else: + print("Error to load level") + + self.player_list = arcade.SpriteList() + self.floor_list = arcade.SpriteList() + self.eat_list = arcade.SpriteList() + self.enemies_list = arcade.SpriteList() + self.enemy_spanw = arcade.SpriteList() + + grid = fill_empty_grid() + self.floor_grid = self.arr2grid(self.Lvl_data.floor, grid) + self.print_grid(self.floor_grid) + self.snake = SNAKE(self.Lvl_data.start_point["x"], self.Lvl_data.start_point["y"]) + + # Счет + self.score = 0 + self.scale_ = 1.3 + + screen_center = [SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2] + self.level_start = [screen_center[0] - self.Lvl_data.size[0] * 16 * self.scale_, screen_center[1] - self.Lvl_data.size[1] * 16 * self.scale_] + + # Загрузка змеи + for body in self.snake.body: + snake_sprite = arcade.Sprite(f"./DATA/Sprites/Snake/{body.type}.png", self.scale_) + snake_sprite.angle = 90 + snake_sprite.center_x = self.level_start[0] - 16 + ( body.x + 1 ) * 32 * self.scale_ + snake_sprite.center_y = self.level_start[1] - 16 + ( body.y + 1 ) * 32 * self.scale_ + self.player_list.append(snake_sprite) + + # Загрузка пола + for floor in self.Lvl_data.floor: + floor_sprite = arcade.Sprite(floor["sprite"], self.scale_) + floor_sprite.center_x = self.level_start[0] - 16 + ( floor["x"] + 1 ) * 32 * self.scale_ + floor_sprite.center_y = self.level_start[1] - 16 + ( floor["y"] + 1 ) * 32 * self.scale_ + self.floor_list.append(floor_sprite) + + # Загрузка врагов + # if "enemies" in self.level_data: + # for enemy in self.level_data["enemies"]: + # enemy_sprite = arcade.Sprite(enemy["sprite"], 1) + # enemy_sprite.center_x = enemy["x"] * 32 + # enemy_sprite.center_y = enemy["y"] * 32 + # self.enemies_list.append(enemy_sprite) + + def update(self): + if len(self.snake.body) > 0: + i = 0 + while i < len(self.snake.body): + self.player_list[i] = arcade.Sprite(f"./DATA/Sprites/Snake/{self.snake.body[i].type}.png", self.scale_) + self.player_list[i].angle = self.snake.body[i].rotate + self.player_list[i].center_x = self.level_start[0] - 16 + ( self.snake.body[i].x + 1 ) * 32 * self.scale_ + self.player_list[i].center_y = self.level_start[1] - 16 + ( self.snake.body[i].y + 1 ) * 32 * self.scale_ + i = i + 1 + + def print_grid(self, grid): + x = 0 + y = 15 + print_ = '' + while y > 0: + while x < 15: + print_ += " " if grid[y][x] == 0 else "1 " + x += 1 + print(print_) + print_ = '' + y -= 1 + x = 0 + + + def arr2grid(self, arr, grid): + for point in arr: + grid[point["y"]][point["x"]] = 1 + return grid + + # Обработка нажатий + MOVEMENT_SPEED = 1 + + def on_key_press(self, key, modifiers): + """Вызывается при нажатии пользователем клавиши""" + + # Get the first sprite (head) from the player list + if len(self.player_list) > 0: + + if key in (arcade.key.UP, arcade.key.W): + if self.floor_grid[self.snake.body[0].y + 1][self.snake.body[0].x] == 1 and self.snake.body[0].rotate != 180: + self.snake.move(0) + + elif key in (arcade.key.DOWN, arcade.key.S): + if self.floor_grid[self.snake.body[0].y - 1][self.snake.body[0].x] == 1 and self.snake.body[0].rotate != 0: + self.snake.move(2) + + elif key in (arcade.key.LEFT, arcade.key.A): + if self.floor_grid[self.snake.body[0].y][self.snake.body[0].x - 1] == 1 and self.snake.body[0].rotate != 90: + self.snake.move(3) + + elif key in (arcade.key.RIGHT, arcade.key.D): + if self.floor_grid[self.snake.body[0].y][self.snake.body[0].x + 1] == 1 and self.snake.body[0].rotate != 270: + self.snake.move(1) + + def on_key_release(self, key, modifiers): + """Вызывается, когда пользователь отпускает клавишу""" + if len(self.player_list) > 0: + self.player_sprite = self.player_list[0] + + if key in (arcade.key.UP, arcade.key.DOWN, arcade.key.W, arcade.key.S): + self.player_sprite.change_y = 0 + elif key in (arcade.key.LEFT, arcade.key.RIGHT, arcade.key.A, arcade.key.D): + self.player_sprite.change_x = 0 + def on_draw(self): + self.update() + # Очищаем экран перед каждой отрисовкой + self.clear() + # Отрисовываем все спрайты + self.floor_list.draw() + self.enemies_list.draw() + self.eat_list.draw() + self.player_list.draw() + + +def fill_empty_grid(): + grid = [] + y = 0 + x = 0 + while y < 15: + grid.append([]) + while x < 15: + grid[y].append([x]) + grid[y][x] = 0 + x = x + 1 + y = y + 1 + x = 0 + return grid + +def main(): + filler_ = filler("Default") + filler_.fill_level(filler_.floor_code) + filler_.export2json() + + game = MYGAME(SCREEN_WIDTH, SCREEN_HEIGHT) + game.setup( "Default" ) + arcade.run() + +if __name__ == "__main__": + main() \ No newline at end of file From ec9b9c90efe0bbd523b9b0d0da4e941d1551db9c Mon Sep 17 00:00:00 2001 From: PABLO Date: Tue, 6 May 2025 14:10:14 +0300 Subject: [PATCH 2/2] add: Food --- DATA/Levels/Default/data.json | 2 +- __pycache__/fill_level.cpython-313.pyc | Bin 2837 -> 2934 bytes fill_level.py | 13 ++-- main.py | 102 ++++++++++++++++++++----- 4 files changed, 93 insertions(+), 24 deletions(-) diff --git a/DATA/Levels/Default/data.json b/DATA/Levels/Default/data.json index 2fce87e..e1cb036 100644 --- a/DATA/Levels/Default/data.json +++ b/DATA/Levels/Default/data.json @@ -1 +1 @@ -{"name": "Default", "start_point": {"x": 4, "y": 8}, "enemy_types": [[{"type": "little_spider", "sprite": "DATA/Sprites/Enemies/Tier 1/little-spider.png"}], [{"type": "wolf", "sprite": "DATA/Sprites/Enemies/Tier 2/wolf.png"}]], "enemy_spawns": [{"x": 1, "y": 2}, {"x": 3, "y": 12}, {"x": 1, "y": 6}, {"x": 10, "y": 10}], "size": [13, 10], "floor": [{"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 0}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 0}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 0}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 0}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 0}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 13, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 13, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 1, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 2, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 3, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 13, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 1, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 2, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 3, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 13, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 1, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 2, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 3, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 13, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 0, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 1, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 2, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 3, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 0, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 1, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 2, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 3, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 1, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 2, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 3, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 3, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 10}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 10}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 10}]} \ No newline at end of file +{"name": "Default", "start_point": {"x": 4, "y": 8}, "enemy_types": [[{"type": "little_spider", "sprite": "DATA/Sprites/Enemies/Tier 1/little-spider.png"}], [{"type": "wolf", "sprite": "DATA/Sprites/Enemies/Tier 2/wolf.png"}]], "enemy_spawns": [[{"x": 1, "y": 3, "tier": 1, "sleep": 600, "delay": 600}, {"x": 12, "y": 7, "tier": 1, "sleep": 9000, "delay": 9000}, {"x": 1, "y": 4, "tier": 1, "sleep": 800, "delay": 800}, {"x": 10, "y": 0, "tier": 1, "sleep": 600, "delay": 600}]], "size": [13, 10], "floor": [{"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 0}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 0}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 0}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 0}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 0}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 13, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 13, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 1, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 2, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 3, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 13, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 1, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 2, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 3, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 13, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 1, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 2, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 3, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 13, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 0, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 1, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 2, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 3, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 0, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 1, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 2, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 3, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 1, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 2, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 3, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 3, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 10}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 10}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 10}]} \ No newline at end of file diff --git a/__pycache__/fill_level.cpython-313.pyc b/__pycache__/fill_level.cpython-313.pyc index 34fb3385a6d2695bfa356da0d7cb8ff080156885..44a1f1b44772ad082869a9c6f413a7ba8a0cbaf4 100644 GIT binary patch delta 582 zcmZ8dF>KR76upb@+}N#c(lkyT6DUNYb*08cDzr_34uFaTLWNVMY^YGHR0^iLz`(-5 z(hMx<#K4xJL#0lr3sRO246NNE4=haH3>A!s{{upZ|8-CQ>A!b(|G#yAxb}%W(W%B6eO~O7zg%88M2UuBqX9( z*VjoK?;nPkh&3@DGhxKwkM(sXO3GoiQI|tM&bM|&SzTq9&Q2n~kDvH2T8rTE)Enl} zvN~W3w4}bUX`?a?x-Am;s>sz1^li6tgallkhFVqu683C6k_qp$qi84Ln^Ak?MT(=Q zBPgG#0Zf52#dXM>>hp(I>Y$N!5*o?63iT45Q#bXObXk4WudnUj`%paU92ag6Jipff zHt~ra7w!(cO79#n?dZ`zy`l0>X7Dq1MtIf9Y~oH1O69LhRp0Eg*G_ipusO0u8>tR& z203{VztKPl5OBcM!U|U-&m+KuMAlS4@6D#a>%aXateOZj2tGh+U=^sJ`DMC#*fcIs zdRc9lQ*=eWGUxdMZ+w@kZ~B!L)Zye3*OTP0JbAkLyd7PWt12^HXNywv8$le3egUsI BfDZrw delta 504 zcmW+yJ5K^Z5WeO14(<*PQ8-1wC2io%V zrd;$fg9RC~#zG#O%tS8Hl2npdxTsd8Q|#g$HsHuC;!vhJiZHcG*&q~X#u!pW-U;ko zu_)})WfFrsnj#iF(Kw01D=m{j_@jAkI4|msq{0ZyDG>7sr-$?Of(R;t4pgmAaW54X zfi7uwNrTS{S&;d-Af7}>A*jf|wN)bC(sCrdgb@sPW47INYwpRuU2|Q2Qg6A9rfu^Iyz5KK qiZcIw0ZAh 0: if self.body[i].type == "body" or self.body[i].type == "tail": self.body[i].x = self.body[i-1].x self.body[i].y = self.body[i-1].y self.body[i].rotate = self.body[i-1].rotate - i = i + 1 - a = int(math.cos(-self.body[0].rotate * math.pi / 180)) + i = i - 1 + self.body[0].x = int(-math.sin(-self.body[0].rotate * math.pi / 180)) + self.body[0].x self.body[0].y = int(math.cos(-self.body[0].rotate * math.pi / 180)) + self.body[0].y @@ -68,15 +91,20 @@ class MYGAME(arcade.Window): self.player_list = arcade.SpriteList() self.floor_list = arcade.SpriteList() - self.eat_list = arcade.SpriteList() + self.enemies_list = arcade.SpriteList() - self.enemy_spanw = arcade.SpriteList() + self.enemy_spawn = arcade.SpriteList() grid = fill_empty_grid() self.floor_grid = self.arr2grid(self.Lvl_data.floor, grid) self.print_grid(self.floor_grid) self.snake = SNAKE(self.Lvl_data.start_point["x"], self.Lvl_data.start_point["y"]) + # food + self.food_list = arcade.SpriteList() + self.food_sleep = 300 + self.delay = 400 + self.food = [] # Счет self.score = 0 self.scale_ = 1.3 @@ -103,9 +131,22 @@ class MYGAME(arcade.Window): # if "enemies" in self.level_data: # for enemy in self.level_data["enemies"]: # enemy_sprite = arcade.Sprite(enemy["sprite"], 1) - # enemy_sprite.center_x = enemy["x"] * 32 - # enemy_sprite.center_y = enemy["y"] * 32 + # enemy_sprite.center_x = self.level_start[0] - 16 + ( enemy["x"] + 1 ) * 32 * self.scale_ + # enemy_sprite.center_y = self.level_start[0] - 16 + ( enemy["y"] + 1 ) * 32 * self.scale_ # self.enemies_list.append(enemy_sprite) + def spawn_food(self): + spawn = False + while spawn == False: + x = random.randint(0, 14) + y = random.randint(0, 14) + if self.floor_grid[y][x] == 1 and not(self.snake.check_contact(x,y)): + self.food.append(food(x,y)) + food_sprite = arcade.Sprite(f"./DATA/Sprites/Enemies/Tier 0/healthy_food.png", self.scale_) + food_sprite.angle = 0 + food_sprite.center_x = self.level_start[0] - 16 + ( x + 1 ) * 32 * self.scale_ + food_sprite.center_y = self.level_start[1] - 16 + ( y + 1 ) * 32 * self.scale_ + self.food_list.append(food_sprite) + spawn = True def update(self): if len(self.snake.body) > 0: @@ -116,12 +157,37 @@ class MYGAME(arcade.Window): self.player_list[i].center_x = self.level_start[0] - 16 + ( self.snake.body[i].x + 1 ) * 32 * self.scale_ self.player_list[i].center_y = self.level_start[1] - 16 + ( self.snake.body[i].y + 1 ) * 32 * self.scale_ i = i + 1 - + # Food + self.food_sleep -= 1 + if self.food_sleep <= 0: + self.spawn_food() + self.food_sleep = self.delay + i = 0 + while i < len(self.food_list): + if self.snake.check_contact(self.food[i].x, self.food[i].y): + self.food_list[i].kill() + self.food.pop(i) + self.score += 1 + self.snake.add_dody() + self.player_list.append(arcade.Sprite()) + i += 1 + # Enemy_spawn + for spawn in self.Lvl_data.enemy_spawns[0]: + spawn["sleep"] -= 1 + if spawn["sleep"] <= 0: + spawn["sleep"] = spawn["delay"] + self.spawn_enemy(spawn["y"], spawn["x"], spawn["tier"]) + + def spawn_enemy(self, y, x, tier): + type = random.randint(0, len(self.Lvl_data.enemy_types[tier-1])) + print_spawn("tier: " + str(type), x, y) + + def print_grid(self, grid): x = 0 - y = 15 + y = 14 print_ = '' - while y > 0: + while y >= 0: while x < 15: print_ += " " if grid[y][x] == 0 else "1 " x += 1 @@ -144,21 +210,21 @@ class MYGAME(arcade.Window): # Get the first sprite (head) from the player list if len(self.player_list) > 0: - + if key in (arcade.key.UP, arcade.key.W): - if self.floor_grid[self.snake.body[0].y + 1][self.snake.body[0].x] == 1 and self.snake.body[0].rotate != 180: + if self.floor_grid[self.snake.body[0].y + 1][self.snake.body[0].x] == 1 and self.snake.body[0].rotate != 180 and not(self.snake.check_contact(self.snake.body[0].x ,self.snake.body[0].y+1)): self.snake.move(0) elif key in (arcade.key.DOWN, arcade.key.S): - if self.floor_grid[self.snake.body[0].y - 1][self.snake.body[0].x] == 1 and self.snake.body[0].rotate != 0: + if self.floor_grid[self.snake.body[0].y - 1][self.snake.body[0].x] == 1 and self.snake.body[0].rotate != 0 and not(self.snake.check_contact(self.snake.body[0].x ,self.snake.body[0].y-1)): self.snake.move(2) elif key in (arcade.key.LEFT, arcade.key.A): - if self.floor_grid[self.snake.body[0].y][self.snake.body[0].x - 1] == 1 and self.snake.body[0].rotate != 90: + if self.floor_grid[self.snake.body[0].y][self.snake.body[0].x - 1] == 1 and self.snake.body[0].rotate != 90 and not(self.snake.check_contact(self.snake.body[0].x - 1,self.snake.body[0].y)): self.snake.move(3) elif key in (arcade.key.RIGHT, arcade.key.D): - if self.floor_grid[self.snake.body[0].y][self.snake.body[0].x + 1] == 1 and self.snake.body[0].rotate != 270: + if self.floor_grid[self.snake.body[0].y][self.snake.body[0].x + 1] == 1 and self.snake.body[0].rotate != 270 and not(self.snake.check_contact(self.snake.body[0].x + 1,self.snake.body[0].y)): self.snake.move(1) def on_key_release(self, key, modifiers): @@ -177,9 +243,11 @@ class MYGAME(arcade.Window): # Отрисовываем все спрайты self.floor_list.draw() self.enemies_list.draw() - self.eat_list.draw() + self.food_list.draw() self.player_list.draw() +def print_spawn(who, x, y): + print(f"Spawn: {who}\nx: {x}\ny: {y}") def fill_empty_grid(): grid = []