From e680636923ff86e1e31554720de640aa9eaf5f16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konrad=20Pierzy=C5=84ski?= Date: Mon, 1 Apr 2019 10:33:32 +0200 Subject: [PATCH] Inicjalizacja nowej wersji projektu --- .gitignore | 6 +- Makefile | 13 --- config.py | 39 +++----- enums/house_image.py | 10 -- fonts/Bazgroly.ttf | Bin 36040 -> 0 bytes game.py | 85 ---------------- images/garbage_collector.png | Bin 2117 -> 0 bytes images/grass.png | Bin 1649 -> 0 bytes images/house.png | Bin 2358 -> 0 bytes images/house_full.png | Bin 2867 -> 0 bytes images/house_glass.png | Bin 2558 -> 0 bytes images/house_glass_metal.png | Bin 2754 -> 0 bytes images/house_metal.png | Bin 2590 -> 0 bytes images/house_plastic.png | Bin 2578 -> 0 bytes images/house_plastic_glass.png | Bin 2738 -> 0 bytes images/house_plastic_metal.png | Bin 2759 -> 0 bytes images/icon.png | Bin 4130 -> 0 bytes images/landfill_glass.png | Bin 5472 -> 0 bytes images/landfill_metal.png | Bin 5469 -> 0 bytes images/landfill_plastic.png | Bin 5354 -> 0 bytes logs/houses_stats_20190327101235.csv | 12 --- logs/houses_stats_20190327101837.csv | 5 - logs/stats_20190327101235.csv | 12 --- logs/stats_20190327101837.csv | 5 - main.py | 10 ++ raports/SI_Raport_1.md | 139 --------------------------- requirements.txt | 1 - sprites/cell.py | 18 ---- sprites/garbage_collector.py | 77 --------------- sprites/grass.py | 9 -- sprites/house.py | 71 -------------- sprites/hud.py | 73 -------------- sprites/landfill.py | 17 ---- to_do.txt | 6 -- utils.py | 100 ------------------- 35 files changed, 23 insertions(+), 685 deletions(-) delete mode 100644 Makefile delete mode 100644 enums/house_image.py delete mode 100644 fonts/Bazgroly.ttf delete mode 100644 game.py delete mode 100644 images/garbage_collector.png delete mode 100644 images/grass.png delete mode 100644 images/house.png delete mode 100644 images/house_full.png delete mode 100644 images/house_glass.png delete mode 100644 images/house_glass_metal.png delete mode 100644 images/house_metal.png delete mode 100644 images/house_plastic.png delete mode 100644 images/house_plastic_glass.png delete mode 100644 images/house_plastic_metal.png delete mode 100644 images/icon.png delete mode 100644 images/landfill_glass.png delete mode 100644 images/landfill_metal.png delete mode 100644 images/landfill_plastic.png delete mode 100644 logs/houses_stats_20190327101235.csv delete mode 100644 logs/houses_stats_20190327101837.csv delete mode 100644 logs/stats_20190327101235.csv delete mode 100644 logs/stats_20190327101837.csv create mode 100644 main.py delete mode 100644 raports/SI_Raport_1.md delete mode 100644 requirements.txt delete mode 100644 sprites/cell.py delete mode 100644 sprites/garbage_collector.py delete mode 100644 sprites/grass.py delete mode 100644 sprites/house.py delete mode 100644 sprites/hud.py delete mode 100644 sprites/landfill.py delete mode 100644 to_do.txt delete mode 100644 utils.py diff --git a/.gitignore b/.gitignore index 322a308..fa8bd9d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1 @@ -VENV -env -**/__pycache__ -linux_env -.vscode +VENV \ No newline at end of file diff --git a/Makefile b/Makefile deleted file mode 100644 index 7c10e1e..0000000 --- a/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -.PHONY: init install start - -init-linux: - python3 -m venv env - -install: - env/bin/pip3 install -r requirements.txt - -start: - env/bin/python3 ./game.py --home-count=5 - - - diff --git a/config.py b/config.py index ca6e693..d398027 100644 --- a/config.py +++ b/config.py @@ -1,27 +1,12 @@ -import sys -import getopt -from sprites.cell import CELL_SIZE - - -def set_home_amount(): - arguments = sys.argv[1:] - try: - optlist, args = getopt.getopt(arguments, '', ['home-count=']) - for o, amount in optlist: - if o == '--home-count': - if int(amount) < 2: - print('Home count too low - must be higher than 2') - sys.exit(2) - return int(amount) - print('Missing argument: --home-count ') - sys.exit(2) - except getopt.GetoptError as err: - print(err) - sys.exit(2) - - -home_amount = set_home_amount() - -PLAY_WIDTH = (home_amount + 4)*CELL_SIZE -PLAY_HEIGHT = PLAY_WIDTH -HUD_HEIGHT = int(home_amount*CELL_SIZE/4) + +CELL_SIZE = 64 + +FPS = 60 + +HOME_AMOUNT = 7 + +GRID_HEIGHT = HOME_AMOUNT +GRID_WIDTH = GRID_HEIGHT + +WINDOW_HEIGHT = GRID_HEIGHT * CELL_SIZE +WINDOW_WIDTH = GRID_WIDTH * CELL_SIZE \ No newline at end of file diff --git a/enums/house_image.py b/enums/house_image.py deleted file mode 100644 index f5d954d..0000000 --- a/enums/house_image.py +++ /dev/null @@ -1,10 +0,0 @@ -from enum import Enum -class House_image(Enum): - house = "images/house.png" - plastic = "images/house_plastic.png" - metal = "images/house_metal.png" - glass = "images/house_glass.png" - plastic_glass = "images/house_plastic_glass.png" - plastic_metal = "images/house_plastic_metal.png" - glass_metal = "images/house_glass_metal.png" - full = "images/house_full.png" \ No newline at end of file diff --git a/fonts/Bazgroly.ttf b/fonts/Bazgroly.ttf deleted file mode 100644 index 44bfd5f4b130f49622d5b40aa0173c0cce831963..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36040 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 diff --git a/game.py b/game.py deleted file mode 100644 index 9907e26..0000000 --- a/game.py +++ /dev/null @@ -1,85 +0,0 @@ -from pygame import * -import sys -import random -from config import PLAY_WIDTH, PLAY_HEIGHT, HUD_HEIGHT, home_amount -from sprites.house import House -from sprites.hud import Hud -from pygame.locals import * -import utils -import csv -import datetime - -##INITIALIZE STATIC VARIABLES######### -FPS = 20 - -all_sprites = sprite.Group() -fps_clock = time.Clock() - -###################################### - -interactables = { - "homes": [], - "landfills": [] -} - - -##GAMEWINDOW########################## -WINDOW_WIDTH = PLAY_WIDTH -WINDOW_HEIGHT = PLAY_HEIGHT #+ HUD_HEIGHT -GAMEWINDOW = display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT), 0, 32) -hud = Hud(home_amount,WINDOW_WIDTH, WINDOW_HEIGHT,GAMEWINDOW) -display.set_caption('Smieciarz WMI') -icon = image.load('images/icon.png') -display.set_icon(icon) -###################################### - -## -# Generate level -utils.generate_grass(all_sprites) -utils.generate_landfills(all_sprites, interactables) -utils.generate_houses(all_sprites, interactables) -gc = utils.generate_garbage_collector(all_sprites, interactables) -## - -##COUNTER FOR HUB BRAKE IN CONSOLE##### -hud_break = 0 -####################################### - -##INIT CSV FILE######################## -csv_name, houses_csv_name = utils.init_csv() -####################################### - -##GAME LOOP####################################################################### -while(1): - for e in event.get(): - if e.type == QUIT: - quit() - sys.exit() - if e.type == KEYUP: - if e.key == K_UP: - gc.move('up', interactables["homes"] + interactables["landfills"]) - if e.key == K_DOWN: - gc.move('down', interactables["homes"] + interactables["landfills"]) - if e.key == K_RIGHT: - gc.move('right', interactables["homes"] + interactables["landfills"]) - if e.key == K_LEFT: - gc.move('left', interactables["homes"] + interactables["landfills"]) - if e.key == K_SPACE: - gc.select_object(all_sprites) - - all_sprites.update() - all_sprites.draw(GAMEWINDOW) - - for item in all_sprites: - if(type(item) == House): - item.generate_rubbish() - - ##LIMIT LOGS TO 1 LOG EVERY 2s##### - hud_break = (hud_break + 1) % (FPS*2) - - if(hud_break == 0): - ################################### - hud.get_statistics(all_sprites, csv_name, houses_csv_name) - display.flip() - fps_clock.tick(FPS) -################################################################################## diff --git a/images/garbage_collector.png b/images/garbage_collector.png deleted file mode 100644 index 17952c0a23110b6970807906f3cce7c2531229e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2117 zcmV-L2)g%)P)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00*r}L_t(|+U;9gY-7b4{$|dJ zojA5@JDW6{8w={jtx6*S>IE%AWl^ZM&^~uJJQShQg;uET10W$pmI|p-A1d_$rImVl zD9fr<)m3*_JXokNMYOD7TehMkY!>b2vRONc9p8`7nHe5@;n+Ej&x{>!1o*lUMfjOK073|?q}H*JSV692C;^Z+{WyHU zLT`^B8m0082q92?s|a9!N%L1rr&KKr-Z2n>VTF{!phhW7Ch*~U3SM1PhynoP9ES%(D4J?v zFyQUMYC4CkX@U|30KReiFb)kAAq0~iyvaEJx4MCUUbz8-scG;lqk}j)ISPP5cKAX7 z@oXNKme#RZC@Fv5M@Iin}K3u>s%b;!KipZHv34kvPU?|`NB^s0)&*GPZR*yj{>{#r%zl=xWD;g z0xNhIhK8dB-^R>?tr@9A*u2t+;NcvzQP_ui+MNR9|(J*53 z$)G%A5_+p67=mn*oc74BlJa1d~jJ{+8uCPW4t))$&e&+0AJuVVx*A z_ZDvd`FC0aplcd*je!QNWJneawNzMCY^N1(^z@sUbg=!Qlczf>pk3P+E}VDFK%K5h<-Ke5fcXOMbqF5PkA_xy5r{=^ad;`rFb76`IG_BDTS_4h&`$yJE)ZcMx7I+gn)4l zlW{dCc=o+Te6+D5y&7yspsJSb*KTO+XJ5h}|8=#_3x;|xp+jaqd}3-Rr>#)+^WQ=}1r-5kvzs6_Y@-Ud4iNOEr=8l6_o$lQd9%!>Yo_{m~ z-=8)+?(FQ8IvxUc7@NI4uF{^<$3y+d7(u1>xK0TsW=Aj<>c`oi{JZlDpC3=4mF`1* z9^A|pP!b$e!7Grtw_XyfTUVva;s9VVj)iy%OQ{^phW7Z@D@$z&Kl93cE=oZH8#x2- zuWe$>FqJAI`f#uh9xW)}7y(c;EiA-SxUrQ(&TQCdc|7E-vDZ>{)BC~bZJ3UZL!(?_ ze}I4xX`~7zEN|u1>H%dRpx7R-s7N9o8uU7YaV08|klI z@bK_mNUmMlGiwdH+k!W0y$XWUjIdL;mff@)TDMc9_OH&-ZGu;Y?*<4uC8V;uO0qo; z)OKa@iY+#y^odVOX~EOm>xsXdx!}n6{F!gJ90MVw<_naT!|9@dWT6P5&>c3da_$i9 z^}wq)@IO8b_Pe#3(Awj}Wrycr3QqLo?~h_LUu+cxQ7|p^d31#OyinP1t-pQ!Caxxy zmD=N!00FNDUqAGD$0!iPTJ5^L6|Vj}CzAkx$!90=#{9CYF?cnKFARPTca97wEspg6 z-$>!|YC@?X;?Xo5Jv@S`kpcLc``FmwMjy?Mhox&bZ8e`I#ARu5^3?JM~;qR9}f?>7huL|uuISL;}k)K-u0DOP$frcE> z{c`wbwt#o9$B`_WYW09fzza_M)y@l40NBVDQD}8uU?zh8S2vNHi6ECL)V{m_@Hh^% zabCc%7&3;1gz9+#K)t?B8q(5M)U3MOi8{YpTVy{B?gOxYVx+{1Ff6t0@1=&KDY59l!L7?00000NkvXXu0mjf7Wdfw diff --git a/images/grass.png b/images/grass.png deleted file mode 100644 index 1edac355c6acc89497cbb536dced1e26a0de7f97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1649 zcmV-%29EiOP) z0K=Pj8NW%EfsuCz5acPc$u6tp9RfH893Ti{C$>PFGJPQ_aX8{|I5XWn-Bl-xX$pjQ zeMCeHb~PHas;TO~y3YUCe@>f^|MENe^5kp0^q)}4)DR3?p%*7JN*SagM_Xx4}gepG&y5`bi{m_ zssLDIT^?@aG;3WVYs&*5B3#{?2e^Kf?tgVD$G?d=SZ;Z%0H^@C<<0pZhZK zqrqOI#_@E{EX%M)0l+Wc+GcM(LByAyeC7lHIUe)LHz%ZCw}QXe-Q=T3yMU+c^hMxw zw%}hsobe)Fs;JZr+YO+N5K0a%q}d9z@jPLkc@+Tf3T*Y-SQ99_fFeSi<;>EI)5`@x zAthW8!H4o9LPYQd;?^2n3@Dlpf*4T&AR-vE8s8`YsA#YP;I`|4sMxlz@TG+%QU0csIk>+ zp;-d=+2Jz|Mn4dwBml+aH#;ppeCrNQA%p8!`g4YmSFo13HZw3LS(y z7+v!D@e90^=kZ1qvGb_SJ9pOTHWiML2!DS%;;WMh3#Ag=TkG+`{S6)rdsvMj;-Ux_ zS&U)>y^H~(ivd^4trl6F*TrLN4M89eLR1+d6%AGZl#T)B2L42f`*k(>$!{qD*4s@s zJ57Ru1zfc91IDw2d77)H9z@vaH0jih>dCwH8q;LC(h{cp3vK@N*&pQD{18g(03ppi zpC66cA6<~<0(m& zmycosgJzw#xB3iPO%yT!cRY>RAC1)Y0lRNFhV4F`Moo1ZJRC1MID4V44|uTFxfK52+HwSa|qYQR|uh-;PIPiuWS5@25&tL-c)+rDNT$s zae&+h_D?5#a_~$ogxQyM_P?p98Fvh%$1u9Q)nxve^38Kgj zXN4)+Z`Nrz9Ss^_5~moWs}hT|oL1d2Xf@ERf%*8azm=z>19f`5*QnEL)^sdjV4emh zaZ2uW>G4Kn8MGTTYfg2ba$lWH_~Lk^N{`p0h>srLppaP%*paP&A z3-s$XdUb~n2Ek~G&T!S{AH`T3nSPyiqzJfFq<_jt^ClIi?_VXr~39d&)cljjr0vxHb# zAK#8xRSfB#nw$tF!C#1QqTt3M?vvkHq vJXL=*HCxU|^TjKCG&N_MTr!Dgsv!73Z83S;UwDLP00000NkvXXu0mjfwi*D2 diff --git a/images/house.png b/images/house.png deleted file mode 100644 index 0f6d4016d0283c19b080318089ff5b6d3f83e54c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2358 zcmV-63CZ?}P)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00^E*L_t(|+U;9wj2l-OJ@?M6 z$Gcv8z3*2xBtdB?Bq0!x(m#!qR7r(|D3K5#q97hcBn?ra5^3QFMCBP(fU58d6#=v{bGCr8cXcJt&YZdT zJ2Ug0bLZY+kG=R^@$Z>yu!IS(MdlK=uIj*7un3 zx3ojz+&ck62$U-&fXYA5`0^jI{kzczj(fbU5U@hPJziwX7BFoamTh}yucSIM0xE4=AktKo(0G4fIeQy{AgC>JP zr3I0UhOA+LGXeqI)(&7zcL73Jo;zbDS=~T% zE(e=nC1hI&ShjZ)A%uWcVw`hE%K@cg*#d$I5&=R8Fjj1z5eWF7SAno z{LG07Jn?Fh6nwcX7YY2`2)teroCWROF3@(_d=v)pAMHQGm z@TZ#N)l>$<;n2c%{NO9Fey|-v2+ZjQf=Ubef~}y8C)uMX4v6vCIBemOfKums1Fh%| zD3B|S(BZR=n93jkKz-_?NNNUVvpJZiiA~R5sM^1?OIi4R_O@Pwe`Vh~w6(|>2(=-g zw1D7)Adko9@Mh#TEa6?p6-mP2eQns#--&jA@rB66y~i5_QGF$ce|R3*uW!YbnG|w{ zj!h1@F4eQZ{wl)H zKJ1-ZRbWR0ov#eUDF~+k8WHFgn>us~`u866<^!Jp=l8{|b`$X61JwP0 zbfxoNf?tgN=@XM?jQZ9mPhvF)PEvBV;UK17M}<4eK_yd6Gej&L8{qK>(ua3cAN0 zf~roFux>}5Bp=|_tf=ZV8JkK+m(?V3uUFrzSpk5Tzwu)-_Af_%MaH_h3)mknKO+*k zrIX-=&;8D^6XoZyUgj?+C?`dDH?Tk2+0mGQFO2RNHxg>Y(clxmx!9CjEK8r;t9ZAu zy+7YmUj-tWJl>AQNE0Joaz-Nqv)tH$RtZApb!1Qgmat(pFhXB`XaKu<2JxMbe4OUD z^(5|BI!V~DRKWd~pMfA@L(^%eeQFoFaTjdixv>*qhVh- z{abu~_g)hAs=A!RVPONpESVM2@bs^ZpC@Cp{s0-f%){Zbe`HYAX{6Foggg2$JUjwb zow~C<*p0rS0W!9kc3t^^^7Qyp)vB0yRMjbbJ}M$Yc7ZDv2?>KZ(BQn)m^!o*Wx#{1TwKWjFLRsTDofgs=ffG zqnfMRES^k~v9_KkV=qj{@mf08I0p=bTH%vIHBNBt!`pHGum3&tiF~%4~seKXwnSzdF zz5qd(9X8D3RS)@nP-NOFF$N%&*TEQVl~~>|(dv^CZdE|J2JEqyz9!yjVtPEN_z?8B zESYWVMX%{LQh6Pw<^6jF0YH&B!fgutEix#RJo1&96fQ+#r0H>=Bw@$;A#5J%M!V8N z3gFy$6c?ux$PpJxzNagQ&BNVT-4%573`-IqOA;iBgYp1LoB^yfJx;j&gb)B@kR=Yu z;^h1xL{X7ISgN`mmw`D+Ju@GB|G)pqsSi@&(gER?i}x&yYWw%Fbt@o4F=Fn$nOd%psM} cl9J$m0J8Msw`|gMMF0Q*07*qoM6N<$g7+*-5dZ)H diff --git a/images/house_full.png b/images/house_full.png deleted file mode 100644 index 5f2a95f98950fb87b9f8854d9f3d1519547bc7b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2867 zcmV-33(WM1P)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{01BH)L_t(|+U=WrY+KbG$3OSl ziIX@<^JvmIZc5wHmX^W_1y;0)N-eY#(!@iXHZ;_+6*dB>W55P%LIW|jj>k5!?jdd6 zK-yMXl~MKpO4~8k(hW*QAB4VW15K`z+IiTHpRw;f`@@gexwhkb(y$>o)|G5ue|^sH zdw%El`<{EwQEq?sLGe!C33QRfYO$*}md>2c;`T{eX$wWz9M-G+Au-shjVfP(EI}&_i2Pj<5C1f61B{m zo}{Xx7MrSCCqM{6=8`cW_hlKMc}doPHrk-_5icJT@G$`&@nY8vLDDeL4Z}Kn>8xW{ zRBRF{2$8}h4TGda{Q!m#*c1i3s>-Foxy^ONlMPa7(59*+bis)MKMuQ1A`5_S7|d&F zAeN9zgLRGyJi#!bL;_WjAYj>?HfA@+5JI=y_=Ilowr7w%@AeVb<$CY}cMB`#y8#`m z%@+c^p$KpF3@{WOl}e@drWyxOgTSy@xgefMkv15P5l-k*1e`CRwXOzLF|gW!LI|RX zB%yc$???ngLQ2>TAm(o@QKC6}cFYF1jHQijX2e2!W!c>Q^KP_`lBrZ?Dps?tf z>3J=3y@~)>F?ggMDxu0hxWqHR>={dOv3obuu!t9I@hdcSvKw0F?A)4O?z(vy=v9 z^8AJ`-T{cb9xNZb4o&No!j?Ppl+poK#fql&N@M*2@05xp)oSls6)OPG-SuN>>?;rb zUK(4D7bwqnJuU_#69>TqUw)=wBQoQ#Sme(Hs6rXxgTSs|IjuASU)|Ixx(BtAv%$On zcyLl`F_Zer?ZvZ=ZTZFZ#j}7X80EOnC$%tQC1#WoFjI|ftF|HRYLPT3Ko*kUZytE8~Uj3X?r98ITqQG7C_l#w?T!0l=QwX*!! zDH0$OguOAGt#a6>xBrQ+tiDkSdrX_k>98GbMC-+HXLsd>`>=aLjGx||M z(|Yj-yfjQ}#qI7u(|X1}yP9cjZnuyz?*GE<}-kj^R&_`R!pK^RZ+03r7yLk!O7g_degOJ;53V)!z>v%&60uB==~?t zjnLTm)N=ql^ynYZw4Q>hEcf$UU0u>x-G4?JduAlUyS_ll%f4(*8?%}srpMyl;X#7F z0TSu-XoLfK_h+^`>Gg)oatDg`zzkdfK z_4&^NuUcL)A#UyK=3JNFB2##I{GuzCv3=7v0EUBsqEWYDS}Ooe_UU6^MoKp(QZqJb ziM_pN?EM5r%=q-xV?F#%^S@rx;c^$C&hHLY)u@JRS4ygfb|x<%H=Sa8&2EI`kxFdcK9 z^qfisvEHUO&dD({5D1!#1)Fvo~wxj#m>VV*$E7UCe1epKecA zaUrBCN_uydwFl%Poo6AnRjp8Y^6`fOSa;6@SrYOhybuMez5Da40eE8T_ACjx#a3h$ z^pYjN0^rR9ommo0^^GSW7>hF;jUgmfhZD(Eimb1y1kCQg?w$v-L_GG(^``rc)sBKu z?}@G3vqU`e+9A{Zp-7CT0&RNpKxdYSLGOmb^^GUsjnij1-LBi$)6Vv6FfC|?BP4ZEP-K)UecCX7f5f`ijT+b_ zccq@)=K<+b(^$j21uiMkU38hq^v&O-~wkDdLRYkYUXX=|$4=7bhsnXoh%%ND!@~N>58P$z7%=|_`!sI=Qi>Z!eYy40bs)Mn?}N;@iYkL4XU8<9kkU~E)smzeUKy$_4N zP`70z2&uWi(KCMD8y+E^l#9%ZT`eq{(FhU*2q8EViqhp7WH^>6D#=TFKvSIqLv_lX z7f2H@7>W^U~B|`G$a)S{|iFlf4O>v RcHsa3002ovPDHLkV1f__fFl3^ diff --git a/images/house_glass.png b/images/house_glass.png deleted file mode 100644 index 6a8d7d80e9d94ea3fa888d8196b87c6ce6ec7781..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2558 zcmVe zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{010MEL_t(|+U;9=j8s=0{?5I3 z9=o$M`<{IxECOwXmWmIWn36yPjY$)O)q;NJTyJzowbIl?&2#7qq|w!sMT6#?07@yucmyAWMMycBiGZ}yfF*4z zysifD9Os+>N-2t!#Q@`vV|?+4@&0qs2M)J*xlO=r0&ejlXgY(F%FIeUeuBM=Te zLkI%RV^m#-%5Z-G&?yB^2n3E}3xoZwe#mMQQyAnq4vI!`DH4ZA;2EL-py@i6v^OEE zu!TXt$A!_Pgp{IyBMbzrUet+&tyxg2Iqtlo>3DB6iho@mgRHTQ;EJAhtXr644Kf5Je(|9upAZ|f1n zcD{adhrzENxrWEyh%p&oEb~PI_hA@cEKW!;8b6;TaD3tUWv#_$*s2X3j! z=i7aCX!Us@7=_TT6P6gG5da|W{xo8eg7H)us;XkefzxHz*R^;`f1j9?P59Tg_M_e< zpfgYppT`9T9Ry)8JcV~hC!ta2aoof6=vrEjWgX3E@a8u}&TKhc!-(>c?D_csQr}yJ z^J8(O6&Wima2Iq>p>4*$I~v8pWX$ zIM4y&wpVS%c_+qKV!!mOU8c_*{Kk)LVW0hChkXM6a&{k$O2f95;Moe9I+Iv28d7P% zOxPWV50?JkyFHy}0y+RvsLrr=vxnTVtrc| ze*CG2*z~p>!=0XHCTtU*#hsd$342jLkLB)MA;i<_iy>koZV~`JUF`tpw(mQs0#F4~ zC<|YZ4g12eKjCW|wlHBYiu1V~raC~?f>@z7zy9Rl05dk_^)X}Tc{yCvj|8GPf_Nf? zrp6$8dio%W!_)1qRs_2{nX$9EuPq%=JRYB^YKDVHQ5?p%AKeFWbQ}OdJQ2e2PzU0P zP^lBeHUJRAZlzN!oyC1QLLhLpE7#ZLLw{?)R98l>V|gZqm67XM8MzK^e6Y|75zjvV zG5}!DzCS<|hb>i^vHi}ubIe#RKEaHgm`dYvI8n0-s~2@*K}*`SEq+CcA{mZADTGH| zN|asi4f-$=l59=0NG!&T)#VH`_Vh>uClle?KAqP*7H&Dz|e6`}YVQ1H0tj*mw`IPz?sJO*m$3KKs**edXd)m{cRC{!Y&Xn>#`; z+1wF2cIYVDyF1E)k)~6OB_xDX8K@Q0e57SM^er13g5;^U{NC=y26Q+2KnN|F{>e4> zRlRSq{O6wnvdLV{J{!sC>-XW!#wm6kuwnDY@@PycWK~1#l8Df780i`*G8eo0t6p2Y zq!0Hl>8+X~Q+eNM0tQM(W|KLSu>deUB%!b0hvA{>PE+6rDP&hU+aRZfI1A)c)pW*O z-(tMZ*V!$)4(#6x0NDBXlO+<$e33;Tg=AJnERzLgI2~5h{HO=KZg>Q?EHMHgo{>R_ z^DME-vh(pLOGNzgnWs(Ho9oO=YT>Qx6Br7QFdvWmJ#Kt`>o_?mLeDEpp*iHK;Sv>n!Op+oKoP;Y2bTh;C+{A z`U9|>{trETmt`Msx@2i@PJ^J)Is3kwj)1J2N2<>GD*o;N4$bv`z>O^`PvFhC;aQ$W zKoF1|g30lzm9lBcsShmzy#pg5NDb)1Au@x4=Wy^0|6!ekq^q+~5|#fo)sf!}CZhDw5e8 zQcc zTKpd9oR95&fdT>1R2CV=_XV_0indw2FCeQLreqai*7pVAco|f6)z4fA?43>6*`xl* z>wvi~w+Xn_2@rBx7P88gE}vC3q~sJ5nI!W|Q>k1EvYMX7OH&e(*(t;`DJCcQKS8$p U-%}EAo&W#<07*qoM6N<$g2vCXB>(^b diff --git a/images/house_glass_metal.png b/images/house_glass_metal.png deleted file mode 100644 index a9a20bf80834c987868e82ffef8a8557c4e934e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2754 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 IM6N<$g0UGlkN^Mx diff --git a/images/house_metal.png b/images/house_metal.png deleted file mode 100644 index 8d7dedfa5f1a86366fb47fa64c415b5380a4cad2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2590 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 AxBvhE diff --git a/images/house_plastic.png b/images/house_plastic.png deleted file mode 100644 index 0b589aa0e7a992f5aac00928bdc5fab2724adde8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2578 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 g0E@+9u~e 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 WEWN`-M^mE!0000e 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 T6e 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 Klasy dziedziczące po klasie *Enum*, ułatwiające parsowanie informacji - ---fonts     => Czcionki - ---images    => Obrazy i ikony używane w aplikacji - ---raports    => Raporty - ---sprites     => Klasy reprezentujące obiekty na mapie - -    .gitignore - -    config.py    => Plik przechowujący funkcję zarządzające konfiguracją aplikacji     - -    game.py    => Plik rozruchowy programu - -    utils.py    => Funkcje pomocnicze - -    README.md     => Informacje o aplikacji - -    requirements.txt    => Przechowuje informacje na temat używanych bibliotek - -    to_do.txt    => Lista przyszłych zadań do zrobienia - - - -### Reprezentacja Wiedzy - -Przyjeliśmy na potrzeby projektu, że agent będzie wiedział co się dzieje na całym obszarze środowiska. W tym momencie wszystko co wie agent wyświetlane jest w oknie terminala, w czasie rzeczywistym, podczas trwania programu. Dodatkowo, przy każdym puszczeniu programu, zostaje wygenerowany plik .csv, który zawiera takie same informacje. Do informacji posiadanych przez agenta należą: - - - -* Ile zebrano śmieci od startu programu - -* Stopień zapełnienia śmieciarki - -* Ile śmieci zostało na mapie - - - -Podczas dalszego rozwoju powyższe informacje będą przedstawiane na ekranie aplikacji. - - - -### Uruchamianie aplikacji - -**Linux** - -Uruchomienie standardowe (z 5 domami) - -```bash -make init #stworzenie wirtualnego środowiska -make install #zainstalowanie zależności -make start #uruchomienie z domyślnym parametrem home-count=5 -``` - -Uruchomienie niestandardowe - -```bash -env/bin/python3 ./game.py home-count=amount #Liczba domów nie może być mniejsza niż 3 -``` - -**Windows** - -```powershell -py -m virtualenv env # Stworzenie wirtualnego środowiska -env\Scripts\pip.exe install -r requirements.txt -env\Scripts\python.exe ./game.py --home-count=amount -``` - - diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index c1056b4..0000000 --- a/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -pygame==1.9.4 diff --git a/sprites/cell.py b/sprites/cell.py deleted file mode 100644 index 31f73f2..0000000 --- a/sprites/cell.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- -import pygame -import sys -from pygame.locals import * - -CELL_SIZE = 64 - - -class Cell(pygame.sprite.Sprite): - def __init__(self, x, y): - pygame.sprite.Sprite.__init__(self) - self.x = x - self.y = y - self.update() - - def update(self): - self.rect = pygame.Rect( - self.x*CELL_SIZE, self.y*CELL_SIZE, CELL_SIZE, CELL_SIZE) diff --git a/sprites/garbage_collector.py b/sprites/garbage_collector.py deleted file mode 100644 index 77b470d..0000000 --- a/sprites/garbage_collector.py +++ /dev/null @@ -1,77 +0,0 @@ -import pygame -from sprites.cell import Cell, CELL_SIZE -from sprites.house import House -from sprites.landfill import Landfill -from config import PLAY_HEIGHT, PLAY_WIDTH - -GC_CAPACITY = 10 - -class Garbage_collector(Cell): - - def __init__(self, x, y): - Cell.__init__(self, x, y) - self.image = pygame.image.load("images/garbage_collector.png") - self.move_options = { - "up": lambda forbidden: ('y', self.y - 1) if (self.x, self.y - 1) not in forbidden and self.y - 1 >= 0 else ('y', self.y), - "down": lambda forbidden: ('y', self.y + 1) if (self.x, self.y + 1) not in forbidden and self.y + 1 < PLAY_HEIGHT // CELL_SIZE else ('y', self.y), - "left": lambda forbidden: ('x', self.x - 1) if (self.x - 1, self.y) not in forbidden and self.x - 1 >= 0 else ('x', self.x), - "right": lambda forbidden: ('x', self.x + 1) if (self.x + 1, self.y) not in forbidden and self.x + 1 < PLAY_WIDTH // CELL_SIZE else ('x', self.x) - } - self.trash_space_taken = { - "plastic": 0, - "glass": 0, - "metal": 0 - } - self.trash_collected = 0 - - def move(self, direction, forbidden): - (destination, value) = self.move_options[direction](forbidden) - if(destination is 'x'): - self.x = value - elif(destination is 'y'): - self.y = value - self.update() - - def collect_trash(self, house): - global GC_CAPACITY - rubbish = house.get_rubbish_data() - to_collect = rubbish.copy() - - dic = { - 0: "plastic", - 1: "glass", - 2: "metal" - } - - for i in range(0,3): - - if(rubbish[i] > GC_CAPACITY - self.trash_space_taken.get(dic[i])): - to_collect[i] = GC_CAPACITY - self.trash_space_taken.get(dic[i]) - self.trash_space_taken[dic[i]] += to_collect[i] - self.trash_collected += to_collect[i] - print("GARBAGE COLLECTOR>> Took "+str(to_collect[i])+" "+dic[i]) - - house.give_away_rubbish(to_collect[0], to_collect[1], to_collect[2]) - - def throw_trash(self, landfill): - landfill_type = landfill.get_type() - print("GARBAGE COLLECTOR>> REMOVED "+landfill_type) - self.trash_space_taken[landfill_type] = 0 - - def select_object(self, interactables): - print("### INTERACTION ###") - for item in interactables: - if(type(item)==House): - item_x, item_y = item.get_coordinates() - if((abs(self.x - item_x)==1 and abs(self.y - item_y)==0) or (abs(self.x - item_x)==0 and abs(self.y - item_y)==1)): - self.collect_trash(item) - elif(type(item)==Landfill): - item_x, item_y = item.get_coordinates() - if((abs(self.x - item_x)==1 and abs(self.y - item_y)==0) or (abs(self.x - item_x)==0 and abs(self.y - item_y)==1)): - self.throw_trash(item) - - def get_collect_data(self): - return self.trash_collected - - def get_space_data(self): - return self.trash_space_taken diff --git a/sprites/grass.py b/sprites/grass.py deleted file mode 100644 index 9e2c56f..0000000 --- a/sprites/grass.py +++ /dev/null @@ -1,9 +0,0 @@ -import pygame -import sys -from sprites.cell import Cell - - -class Grass(Cell): - def __init__(self, x, y): - Cell.__init__(self, x, y) - self.image = pygame.image.load("images/grass.png") diff --git a/sprites/house.py b/sprites/house.py deleted file mode 100644 index c66dbb9..0000000 --- a/sprites/house.py +++ /dev/null @@ -1,71 +0,0 @@ -import pygame -import sys -import random -from enum import Enum -from sprites.cell import Cell -from enums.house_image import House_image - -PLASTIC = 0 # blue -GLASS = 1 # green -METAL = 2 # yellow - - -class House(Cell): - def __init__(self, x, y, max_plastic, max_glass, max_metal): - Cell.__init__(self, x, y) - self.image = pygame.image.load(House_image.house.value) - self.rubbish = [random.randint(0, max_plastic), random.randint( - 0, max_glass), random.randint(0, max_metal)] # plastic, glass, metal - - self.max_plastic = max_plastic - self.max_glass = max_glass - self.max_metal = max_metal - - def generate_rubbish(self): - if(random.randint(0, 25) == 1): # 1/25 szansa na wyrzucenie śmiecia w klatce - thrash_type = random.randint(0, 2) - if(thrash_type == 0 and self.rubbish[thrash_type] < self.max_plastic): - self.rubbish[thrash_type] = self.rubbish[thrash_type] + 1 - if(thrash_type == 1 and self.rubbish[thrash_type] < self.max_glass): - self.rubbish[thrash_type] = self.rubbish[thrash_type] + 1 - if(thrash_type == 2 and self.rubbish[thrash_type] < self.max_metal): - self.rubbish[thrash_type] = self.rubbish[thrash_type] + 1 - - #mozna ladniej? - if(self.rubbish[PLASTIC] == self.max_plastic): - if(self.rubbish[GLASS] == self.max_glass): - if(self.rubbish[METAL] == self.max_metal): - self.image = pygame.image.load(House_image.full.value) #plastik, szklo, metal - else: - self.image = pygame.image.load(House_image.plastic_glass.value) #plastik, szklo - elif(self.rubbish[METAL] == self.max_metal): - self.image = pygame.image.load(House_image.plastic_metal.value) #plastik, metal - else: - self.image = pygame.image.load(House_image.plastic.value) #plastik - elif(self.rubbish[GLASS] == self.max_glass): - if(self.rubbish[METAL] == self.max_metal): - self.image = pygame.image.load(House_image.glass_metal.value) #szklo, metal - else: - self.image = pygame.image.load(House_image.glass.value) #szklo - elif(self.rubbish[METAL] == self.max_metal): - self.image = pygame.image.load(House_image.metal.value) #metal - else: - self.image = pygame.image.load(House_image.house.value) #niezapelnione - - def give_away_rubbish(self, plastic, glass, metal): - print("HOUSE>> Before giving away "+str(self.rubbish[PLASTIC])+" plastic, "+str(self.rubbish[GLASS])+" glass, "+str(self.rubbish[METAL])+" metal, ") - self.rubbish[PLASTIC] -= plastic - self.rubbish[GLASS] -= glass - self.rubbish[METAL] -= metal - print("HOUSE>> Gave away "+str(plastic)+" plastic, "+str(glass)+" glass, "+str(metal)+" metal, ") - print("HOUSE>> After giving away "+str(self.rubbish[PLASTIC])+" plastic, "+str(self.rubbish[GLASS])+" glass, "+str(self.rubbish[METAL])+" metal, ") - - def check_rubbish_status(self): - print("plastic: " + str(self.rubbish[PLASTIC]) + " glass: " + str( - self.rubbish[GLASS]) + " metal: " + str(self.rubbish[METAL])) - - def get_rubbish_data(self): - return self.rubbish - - def get_coordinates(self): - return self.x, self.y \ No newline at end of file diff --git a/sprites/hud.py b/sprites/hud.py deleted file mode 100644 index 48e9fa0..0000000 --- a/sprites/hud.py +++ /dev/null @@ -1,73 +0,0 @@ -import pygame -from sprites.house import House -from sprites.garbage_collector import Garbage_collector -from config import HUD_HEIGHT -import csv -HUD_COLOR = (51,21,4) -WHITE = (255,255,255) -class Hud(): - texts = [] - def __init__(self,house_amount,WINDOW_WIDTH, WINDOW_HEIGHT,GAMEWINDOW): - pygame.init() - hud_upper = WINDOW_WIDTH - HUD_HEIGHT - hud_lower = WINDOW_WIDTH - height = hud_upper - hud_lower - font_type = 'fonts/Bazgroly.ttf' - font_size = house_amount * 2 - GAMEWINDOW.fill(HUD_COLOR) - font = pygame.font.Font(font_type, font_size) - - gc_plastic_text = font.render("Plastic: 0/0",True,WHITE) - gc_metal_text = font.render("Metal: 0/0",True,WHITE) - gc_glass_text = font.render("Glass: 0/0",True,WHITE) - map_plastic_text = font.render("Plastic: 0",True,WHITE) - map_metal_text = font.render("Metal: 0",True,WHITE) - map_glass_text = font.render("Glass: 0",True,WHITE) - overall_text = font.render("Garbage thrown away: 0",True,WHITE) - GAMEWINDOW.blit(overall_text,(20, 20)) - - def get_statistics(self, all_sprites, csv_name, houses_csv_name): - ###Garbage collector stats### - gc_taken_space_plastic = 0 - gc_taken_space_metal = 0 - gc_taken_space_glass = 0 - gc_trash_space = 10 - - ###Board stats############### - plastic_left = 0 - metal_left = 0 - glass_left = 0 - total_gathered = 0 - - houses_data = [] - - for item in all_sprites: - if(type(item) == House): - rubbish = item.get_rubbish_data() - plastic_left += rubbish[0] - glass_left += rubbish[1] - metal_left += rubbish[2] - houses_data.append(str(rubbish[0])) - houses_data.append(str(rubbish[1])) - houses_data.append(str(rubbish[2])) - if(type(item) == Garbage_collector): - space_taken = item.get_space_data() - gc_taken_space_plastic += space_taken.get("plastic") - gc_taken_space_glass += space_taken.get("glass") - gc_taken_space_metal += space_taken.get("metal") - total_gathered += item.get_collect_data() - - print("plastic left: "+str(plastic_left)+" | glass left: "+str(glass_left)+" | metal left: "+str(metal_left)) - print(" plastic: "+str(gc_taken_space_plastic)+"/"+str(gc_trash_space)+" | glass: "+str(gc_taken_space_glass)+"/"+str(gc_trash_space)+" | metal: "+str(gc_taken_space_metal)+"/"+str(gc_trash_space)) - print("### TOTAL COLLECTED: "+str(total_gathered)+" ###") - - with open(csv_name, 'a', newline='') as csvfile: - filewriter = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL) - row = [str(plastic_left), str(glass_left), str(metal_left), str(gc_taken_space_plastic)+"/"+str(gc_trash_space), str(gc_taken_space_glass)+"/"+str(gc_trash_space), str(gc_taken_space_metal)+"/"+str(gc_trash_space), str(total_gathered)] - filewriter.writerow(row) - csvfile.close() - - with open(houses_csv_name, 'a', newline='') as csvfile: - filewriter = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL) - filewriter.writerow(houses_data) - csvfile.close() diff --git a/sprites/landfill.py b/sprites/landfill.py deleted file mode 100644 index c702076..0000000 --- a/sprites/landfill.py +++ /dev/null @@ -1,17 +0,0 @@ -import pygame -import sys -from sprites.cell import Cell - - -class Landfill(Cell): - def __init__(self, x, y, type): - Cell.__init__(self, x, y) - types = ["plastic", "glass", "metal"] - self.type = types[type] - self.image = pygame.image.load("images/landfill_%s.png" % (self.type)) - - def get_coordinates(self): - return self.x, self.y - - def get_type(self): - return self.type diff --git a/to_do.txt b/to_do.txt deleted file mode 100644 index 965b122..0000000 --- a/to_do.txt +++ /dev/null @@ -1,6 +0,0 @@ -+Przy losowaniu domku: Sprawdzić, czy pole które wylosowaliśmy jest typu Grass (bo nie można go postawić na wysypisku ani na innym domku) -+Dodanie metody od zapełniania śmietników która updatuje się co klatkę (Jeżeli zapełnienie == 100 to zmienia się sprite i trzeba zabrać czy coś takiego) --Dodanie hudu -+Wpisywanie na początku gry liczby domków -+Umieszczenie na mapie wysypisk(I dodanie ich klasy) --W JAKI SPOSÓB MOŻNA PREZENTOWAĆ KILKA RÓŻNYCH ŚMIECI NA DOMKU? diff --git a/utils.py b/utils.py deleted file mode 100644 index d05ef20..0000000 --- a/utils.py +++ /dev/null @@ -1,100 +0,0 @@ -import sys -import getopt -import random -import csv -import datetime -from config import PLAY_WIDTH, PLAY_HEIGHT, home_amount -from sprites.cell import CELL_SIZE -from sprites.grass import Grass -from sprites.house import House -from sprites.landfill import Landfill -from sprites.garbage_collector import Garbage_collector - - -def generate_rand_coordinates(max_x, max_y): - return (random.randint(0, max_x), random.randint(0, (max_y))) - -##GENERATE GRASS################################################################## -def generate_grass(all_sprites): - grass = [] - for k in range(0, (PLAY_WIDTH//CELL_SIZE)*(PLAY_HEIGHT//CELL_SIZE)): - x, y = (int(k % (PLAY_WIDTH//CELL_SIZE)), - int(k/(PLAY_WIDTH//CELL_SIZE))) - grass.append(Grass(x, y)) - - for item in grass: - all_sprites.add(item) -################################################################################## - -##GENERATE HOUSES################################################################# - - -def generate_houses(all_sprites, obstacles_coords): - houses = [] - home_counter = home_amount - while(home_counter != 0): - x, y = generate_rand_coordinates( - (PLAY_WIDTH//CELL_SIZE)-1, (PLAY_HEIGHT//CELL_SIZE)-1) - if(((x, y)) not in obstacles_coords["homes"] and ((x, y)) not in obstacles_coords["landfills"] and ((x, y-1)) not in obstacles_coords["landfills"]): - houses.append(House(x, y, 10, 10, 10)) - obstacles_coords["homes"].append((x, y)) - home_counter = home_counter - 1 - - for item in houses: - all_sprites.add(item) -################################################################################## - -##GENERATE LANDFILLS############################################################## - - -def generate_landfills(all_sprites, obstacles_coords): - landfills = [] - landfill_counter = 3 - y=0 - for x in range(landfill_counter): - landfills.append(Landfill(x,y,x)) - obstacles_coords["landfills"].append((x,y)) - for item in landfills: - all_sprites.add(item) -################################################################################## - -##GENERATE GARBAGE COLLECTOR###################################################### - - -def generate_garbage_collector(all_sprites, obstacles_coords): - while(True): - x, y = generate_rand_coordinates( - (PLAY_WIDTH//CELL_SIZE)-1, (PLAY_HEIGHT//CELL_SIZE)-1) - if((x, y) not in obstacles_coords["landfills"] and (x, y) not in obstacles_coords["homes"]): - gc = Garbage_collector(x, y) - break - all_sprites.add(gc) - return gc -################################################################################## - -##INIT CSV FILES####################### -def init_csv(): - - currentDT = datetime.datetime.now().strftime("%Y%m%d%H%M%S") - stats_csv_name = "logs/stats_" + currentDT + ".csv" - - with open(stats_csv_name, 'w', newline='') as csvfile: - filewriter = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL) - row = ["Plastic left", "Glass left", "Metal left", "GC plastic", "GC glass", "GC metal", "Total collected"] - filewriter.writerow(row) - csvfile.close() - - houses_csv_name = "logs/houses_stats_" + currentDT + ".csv" - - with open(houses_csv_name, 'w', newline='') as csvfile: - filewriter = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL) - row = [] - for i in range(home_amount): - row.append("House "+str(i+1)+" plastic") - row.append("House "+str(i+1)+" glass") - row.append("House "+str(i+1)+" metal") - filewriter.writerow(row) - csvfile.close() - - return stats_csv_name, houses_csv_name -#######################################