From 2b073bfdfe8664c7ec1f5ce528174b930166006a Mon Sep 17 00:00:00 2001 From: steev Date: Tue, 5 Dec 2023 21:46:12 +0100 Subject: [PATCH] added engine base window and applogic --- Game Client/.vscode/settings.json | 6 +++ Game Client/Classes/System/App.py | 41 ++++++++++++++++++ Game Client/Classes/System/InputHandler.py | 23 ++++++++++ Game Client/Classes/System/Window.py | 37 ++++++++++++++++ .../System/__pycache__/App.cpython-311.pyc | Bin 0 -> 3205 bytes .../__pycache__/InputHandler.cpython-311.pyc | Bin 0 -> 1458 bytes .../System/__pycache__/Window.cpython-311.pyc | Bin 0 -> 2306 bytes .../Classes/__pycache__/App.cpython-311.pyc | Bin 0 -> 2179 bytes .../__pycache__/Window.cpython-311.pyc | Bin 0 -> 2017 bytes Game Client/main.py | 7 +++ 10 files changed, 114 insertions(+) create mode 100644 Game Client/.vscode/settings.json create mode 100644 Game Client/Classes/System/App.py create mode 100644 Game Client/Classes/System/InputHandler.py create mode 100644 Game Client/Classes/System/Window.py create mode 100644 Game Client/Classes/System/__pycache__/App.cpython-311.pyc create mode 100644 Game Client/Classes/System/__pycache__/InputHandler.cpython-311.pyc create mode 100644 Game Client/Classes/System/__pycache__/Window.cpython-311.pyc create mode 100644 Game Client/Classes/__pycache__/App.cpython-311.pyc create mode 100644 Game Client/Classes/__pycache__/Window.cpython-311.pyc create mode 100644 Game Client/main.py diff --git a/Game Client/.vscode/settings.json b/Game Client/.vscode/settings.json new file mode 100644 index 0000000..9de5ddc --- /dev/null +++ b/Game Client/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "cSpell.words": [ + "pygame", + "yvel" + ] +} \ No newline at end of file diff --git a/Game Client/Classes/System/App.py b/Game Client/Classes/System/App.py new file mode 100644 index 0000000..36d6af4 --- /dev/null +++ b/Game Client/Classes/System/App.py @@ -0,0 +1,41 @@ +import pygame +from pygame.locals import * + +from Classes.System.Window import Window +from Classes.System.InputHandler import InputHandler + + +class App: + + __window:Window + __running:bool = True + __player = pygame.Rect((300,250, 50,50)) + __FPS = 60 + __speed = 1 + + def __init__(self, width:int=800, height:int=600, title:str="default title"): + self.__window = Window(width=width, height=height, title=title) + self.startGameLoop() + + def startGameLoop(self): + while self.__running: + #temporary refresh + self.__window.getScreen().fill((0,0,0)) + pygame.draw.rect(self.__window.getScreen(), (255,0,0), self.__player) + + self.__player.move_ip((InputHandler.getInputAxis()[0]*self.__speed),(InputHandler.getInputAxis()[1]*self.__speed)) + + # event handler + for event in pygame.event.get(): + if event.type == pygame.QUIT: + self.onCleanup() + + # emits update to the game + pygame.display.update() + + def setRunning(self, running:bool): + self.__running = running + + def onCleanup(self): + self.__running = False + pygame.quit() \ No newline at end of file diff --git a/Game Client/Classes/System/InputHandler.py b/Game Client/Classes/System/InputHandler.py new file mode 100644 index 0000000..5fc910e --- /dev/null +++ b/Game Client/Classes/System/InputHandler.py @@ -0,0 +1,23 @@ +import pygame + +class InputHandler: + # returns pressed key + def getPressed(): + return pygame.key.get_pressed() + + def getInputAxis() -> tuple: + xvel:int = 0 + yvel:int = 0 + + # construct x and y velocity input axis + if InputHandler.getPressed()[pygame.K_a]: + xvel = -1 + elif InputHandler.getPressed()[pygame.K_d]: + xvel = 1 + elif InputHandler.getPressed()[pygame.K_w]: + yvel = -1 + elif InputHandler.getPressed()[pygame.K_s]: + yvel = 1 + + return tuple((xvel, yvel)) + \ No newline at end of file diff --git a/Game Client/Classes/System/Window.py b/Game Client/Classes/System/Window.py new file mode 100644 index 0000000..9cb1f25 --- /dev/null +++ b/Game Client/Classes/System/Window.py @@ -0,0 +1,37 @@ +import pygame +from pygame.locals import * + +class Window: + __width:int = 800 + __height:int = 600 # takes 80% of width which tranlates to 640 + __title:str = "python game engine" + __screen:pygame.Surface + __clock:pygame.time.Clock + + def __init__(self, width:int=800, height:int=600, title:str="python game engine"): + self.__width = width + self.__height = height + self.__title = title + + self.__screen = pygame.display.set_mode((self.__width, self.__height)) + pygame.display.init() + + pygame.display.set_caption = self.__title + + # set framerate + + + def Render(self): + pass + + def setWidth(self, width:int): + self.__width = width + + def setHeight(self, height:int): + self.__height = height + + def setTitle(self, title:str): + self.__title = title + + def getScreen(self) -> pygame.surface: + return self.__screen \ No newline at end of file diff --git a/Game Client/Classes/System/__pycache__/App.cpython-311.pyc b/Game Client/Classes/System/__pycache__/App.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6f39121f916c4dfdcb40900a2dcdf62413dc0bf5 GIT binary patch literal 3205 zcmb6bO>f&qc1V%3Y>y;=$f+HFz^?2?mAFRI7+D}l0|ajB1noMj+CdkB0zx&%30;~} zNZMJuYM=#j@Gf)+77MtCE}%o3ZIC_mm}3t80iwXd0)YSldh$($yFii4_PwDfOKQ95 zj>tFf&AfSf-@|`JqkRO%cYn*X_hgun2!_-|j;{l9Kvbd%I?3QH>cSe%Azj=GWkLet zk}hq@8Cf7ASthFdkf`CuA|X%V^+zVG3acd5bA;qdO7Mg;0Ky+?hMK<*7`w(aXV zL)DqN-aN#oo+fcz0px%%k`Yvr5pNL|Vv;IchE-L}$Se$02q}@Up3Mj#e5lf60ThAP zADLcN&h)9_Ouss!_A#pV!%JCoBdkUr%9)rNdq^^IHO>Y=%3yG6EI`PHs17`oGDGSh z3j;m`_^>(*XA)`x3_Rt9t`-U&RRAi=eQw^G7xhVV+b}faPD;||L7$^nAoS=h0A@d8 zsQVG>c{CjY@F(!ytEkF0a@)E+ZELp9Jo&z++IPM1U8dc+YkM+ZT@OM9M+t{V*nDw!p zFJx~Tx@ItCZD~1+vZj}GjTv@!NzYjpv$CtZz`m6QZ!Z*fy@;Y{hGr|u9>tY_8h}5s z&H*Tq7o$^^TVG#%K2jZBc1D-o(dB)q9IZ#_VdQiza@vVZxRHr!@EpS#vflC!5H0_{ z51u+8MY4%3d^{4&aiCk=zr~l8RvZE;IIBWu&I-hC%GJ5)pe6G!;>~NUH8I;-8)b$o}`+&`<`U7bvtND1wFUROs{7vzrz%* zU}7?P6a?@FeD%+o<@NjB$|^9Xdh{;u$=7zE>MT!YIC~-B_j**#LTO%jyP)Q5_CzpG zfiMdTVA^~QwHpDjH;AR!(F_vE_9K82smF%O#`mPZclIS6DF5M*CTle5&^edR9nv#3 zdgiO&JM@A}FI4G;7j&rn-XWc+(TUI2KEHi9xmcTAbS5vllNX=$K41LiZHJ~^ny%7x zQ`St4&U|^4XZPIX)#tO{%sa`IZ_~Hk^rn;6-LziaGTd~&TCm+h(McB_ z`oN_Rs`No4OrnE_bh1V#|GDwGemJ#In_6(D&bd?P9D3fR=d1Mme}HGWymCnKzZ{x$ zX|hU_jn_zgxM^1djq3s?X0sRO&a~FsdoK0^e2+f@0R2ULhul8n3KaiP;|;a=`67si%2qc6bSG%3h+nQ~jK`q+K39qodC~De@55~nB1;Aa6ioS@%%Kd+hmZSUp$92Zm zf_=`!W@TcZN{!%UX+V=u6t7QFw({z>jyP46d)qnP-{IG}7gv;=VdU+ct>q0%QMjI- z^ie*qHoiunR*%I?%MD4CCm|Q*$gR{)bHL4dVW2pTi!_XTW7)l)>-hsnf=g= zckQ)*Mf29q{bybU=_ihT6}jw(`-*uDHZZ}g0)R$H5QI93miVtu#;d{elDtvveClMe X+W9oXa{}1*bMQT`{qPGLT%(@=`A47D literal 0 HcmV?d00001 diff --git a/Game Client/Classes/System/__pycache__/InputHandler.cpython-311.pyc b/Game Client/Classes/System/__pycache__/InputHandler.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..22552dc861a13b2f215753486179382bbf3a5a4e GIT binary patch literal 1458 zcmbtU%}X0m5TCcZNu$Yj51LkK4zeLvtO*K% zdI+TlZ+i5gmf}BSB%myKDm{2hNqh0q&g{CYskS{h%l_WS%==CDH}mpYmU{v1Mq{3v z0>D>V1SXwKI-@vQ108f`KoJBO2VGbJUEIbKJNWumWICIGtaL=n!rPNwZwO*KDO|1r z2aJWHptBVyin_q1NkJD^q+&#ukRjqGo|xr|^SET{2Di>JiAd5J^OzjOz-Cx5+X(Un z8{W8$xD)PR9#+VTZnRvTD$Q|MoaI$FKE)laY;oJ>`WNU>@bRiEnBr6&KJ}? zw`ZOCvijUKrcJKB%#Ew#NRY}I)7*5_oKeElwmMP8@HzGDhukSw-CoS_!cS1U-sL=X zL@=#=4WSN)O7c@}Um4m{hMLMqOBvaXjaXDMH)?UGVwqjyP{BNLKB5#@Ft$uDJ1f#g zC=$ko)-8<_6dwIE#OK*yFaZlowhZQnOYw#|x_Cw8eRC;Z63??PUSXM;w=cyTy?_^+ z7S&Y(55N*Eu}NVYHQotzrYljfs3VVlp&gMU8?)&9tpouvyW&%=M4%JAC$Qa!Qz;uf zE4b3)0ykW#if9v2DrLp#Py&0#>!C-B({^p}&vpu3F$}h;#&tO8>u*RN{ER|kU_YMT zi>I6MOe>z*dc9d}#qYM^N>B2jFWJa9@`v)^zMR>UGfjE8B@b^cY}Q)xy*5NBqW@nJ z;(s~V3CB03e^p=4uc}QY-BQxKv9#CVg>2M~X_|>wOViw5O`Dt7D+bLIn)a?zGJKCO zVG_U18X)K)pbO$DSLJbJbb6U9~U^h2NbAs;eb#NocIguDpIYLkdROhxdnv-%BkWN;h+I?b_1AwViHraNe$PStt^umStMqBkC^l@M#vHT z{ZWgVN|lroCnzqJ6;FAm8EnaAED+9q1!kWxQd3M)i`@bDwK$_JVa9I4jv241Qle5y z)W(4OU{#s^zeuldk33Z0L|^a>kq?gQneT-uDtR zf~WdEy@Wj049kYeA`eNCv%i7tlO1J;7{K{sCkB!dNpX;(BD!j*2Q(v(-zHvaUvfKS zJraPAJg&qJfj^35@E>{o7yn^zME;ODg#S^bQ3%BNpF9mMG&f0=JXV&6ZPsAm~Yhm zuDRBRObi2q8^(4fP=*T3T-*b)O9pSuc4#*>$j`x|2h#KW+@tif{Pm~#>pxEYH2cK; zC-=3l$jfOa~Hy*GY9!uaO5fQ)Vq75RqmMje|`5`gQb<{u-HJUxb;+o*YGF86T8kM5N*h9OGA!AU2-LnY+oI zS63e0LQ#gUde8$<5WFy4e$-GKBv+YRmG4#rK%{vK4hVd~p%j^1_hC<)l_@Nh;~ZOz z93g7rr?!qpFAm0h8^{@kx|~0wX2? zf!(3sAUnOg*s1jBG|WDo9^__rZ+EIaIs>y$X9n2?e}ADz7y5Kzpy#?@_GkfSpB4tG zZ1>~iRIx{K_G$5yYKeDG36O)TTz>GEClx7;lFLd$KP3@Sl|&KG!7@rc7Bxn z_o?E+`;Tsodb=3G2Mck6@=E-5|M9&Bus3YsLwFI^bM2;I>RbFhIEZ~EJ^^wXR}^JH c^j-NIkU}q1jC+hxs#fHr51^RXG9smFU literal 0 HcmV?d00001 diff --git a/Game Client/Classes/__pycache__/App.cpython-311.pyc b/Game Client/Classes/__pycache__/App.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..90821aaa8ef2e0ae80db5b64cce35ef6d14c139c GIT binary patch literal 2179 zcmZuy%}*Ow5Pxq!%mQ8$z@c^^#I#W1rbRvVKvAWZv?x+#)B=87IFPMvvcuWab-?(faan|(Vo zZ{F;$y52*8e*V^BAIOCKi9(B%CUZUm%pNg`NiCAaQL^YFjEP^hW zQdVUVkYpkCn_aBS)Zpo6+H%C~*;cdNX74u1_Lxz?UQ=h0Wyy?fE7_>o2O8bH2F?ul z^82NdA2k3CV?(&I=<9*V%eGy#SI$z9jI(fnYtg_pgR8UAh zL?UIj*IbP@pdy)9LH3m*?JGew}^nIHk1WD=xE^FTLTSeG2GeW_CKaC(f0gq$DXxV-Y%EY67Po>`6~b}x}Hk$0aRQA z*y_hU>L?FXyPE)2QjZPn+6|(1PyCg<_0!0UWcoOnK1$v`N#1S{S)UN_y;>hk{5bt& z=$GN+!8aR3>Yq4`Cm+9c6rVhaPuAj-^>|`0^F!t+K7JA(uf@mzZS<19!REqZ^-I9x z@b!)z$GnOij{t)mXn{PXnWq3EHW%lEs4(ykzhZ^5$F_8gEfkYrnZN~vALpaMr>WSHR(@XvReOH@9+!Ea25n?3Cej?rBWR1| z1HL3vQ2ntTxUR;HP6$Wt0kcQiTgcUlGo|(h;)V4}$QrI8=yLUmN|Q5KX;3WC@KWW{ zM`?u*gSCi`4*};Z56eZ5r+{rsHODAgNp2R~Ei`!@08Y84@2rPsxt<)wFi*AEZtr*c zuD&BK5ivHeZg_>`ABgt?q+{4cY$$WX@Ounn-7(7+@=?QhSk7C)jA(FvpJC)}+wt;V z(Xm~_2u_J|-*GHo#*-ks9_NF&G*&hrLl{Ru_c=N&ya>(&))z;>LUEq}RNJnX`e1dw zI{(dl{d%%`cgL(LNw|-cWJ8hEn^5}d&BqI3_$?To&kE@>Xb~08P6z{3)f*&)2vx`S zv>NP~9<+%m%PHh7*N-)u^i=T24gL)x*v?3iZnL{7LjFKuGHA?zHrWt*sEi#Vxc;?O55Ay45S4O4ZL zI;m(EDAp=UsJvsxTXIRq!uTg(P6;EX;t*542ky-jqfB$u+py!LOkGM;N}8Ew8Q9ZN zVsm>kZS(}XbgWxI8OL5WTIFs=+83NTMxA;1FR)BYce2NtX*k9)F>|=nQk~o}HS>4^ z_&o57@}%l40)NH10-v-L>i1pWX+OFs16ENfN+P8|O3D@J6FuOTc>GR#seQ>Ek-bC!KJnO6p8)?fk->lB70&%n zENjvc&{}nJrqn7Kjw(Kf1dAH#odd)#OgpaVc+G<_BUoTPY&(o&slx>n?Pe!%+kS*}o zLO}FVQDs~SxIoKt93884AMZv2)I@;+#|DrDs9v_0eT_V@S0;I2&0oo54#M7%*YR*M z1|rdv@Nk?-RI8rRGhQPT?14!pvhijS*~U9Rjfhl~!Hi3S*wiX1j`igkB>31>3fOl( zG^S;R^Aq>HF=ViI+lH*3@-MiGcGZa2lrT`@Ge( zSx5sH?w3}@=Z3$5K@k|fj^qZCw~(wM!Te-*aeO2sp}+`i)$Y`9SXl0E^{Rck40Ax2 zhf6EnJH2|JuD~47m0@8c+TZBYjRD;l8cQc%^yw6It z2$08hx%?O{&#F?IB}GLuMkFD+qLt7NmRSN@>yHI$*JsIpSS6k!JP-<~nFQ5{UaOmc zWz!Q8O0Ob!nYkU+?|r@rhInDc$3R9YMNx*t=*r)atoA2!L`w=}{!j83>R$ZIhRo}4 Da;~>| literal 0 HcmV?d00001 diff --git a/Game Client/main.py b/Game Client/main.py new file mode 100644 index 0000000..d243f0c --- /dev/null +++ b/Game Client/main.py @@ -0,0 +1,7 @@ +import pygame +from Classes.System.App import App + +if __name__ == "__main__": + pygame.init() + game = App() + game.onExecute() \ No newline at end of file