From 8c544556ed4c828c01d169935d0399b84b379232 Mon Sep 17 00:00:00 2001 From: steev Date: Mon, 11 Dec 2023 15:32:33 +0100 Subject: [PATCH] moved position system over to use vector2 --- Game_Client/Classes/Objects/BoardField.py | 55 +++++++++ .../__pycache__/MonsterCard.cpython-312.pyc | Bin 0 -> 2699 bytes Game_Client/Classes/Objects/World.py | 53 ++++++++ .../__pycache__/BoardField.cpython-312.pyc | Bin 0 -> 3305 bytes .../Objects/__pycache__/World.cpython-312.pyc | Bin 0 -> 5408 bytes Game_Client/Classes/System/App.py | 68 +++-------- Game_Client/Classes/System/InputHandler.py | 23 +++- Game_Client/Classes/System/Window.py | 10 +- Game_Client/Classes/System/World.py | 9 -- .../System/__pycache__/App.cpython-312.pyc | Bin 3122 -> 3898 bytes .../__pycache__/InputHandler.cpython-312.pyc | Bin 1683 -> 3209 bytes .../System/__pycache__/Window.cpython-312.pyc | Bin 2176 -> 3104 bytes .../System/__pycache__/World.cpython-312.pyc | Bin 0 -> 774 bytes ref.py | 115 ++++++++++++++++++ 14 files changed, 273 insertions(+), 60 deletions(-) create mode 100644 Game_Client/Classes/Objects/BoardField.py create mode 100644 Game_Client/Classes/Objects/Cards/__pycache__/MonsterCard.cpython-312.pyc create mode 100644 Game_Client/Classes/Objects/World.py create mode 100644 Game_Client/Classes/Objects/__pycache__/BoardField.cpython-312.pyc create mode 100644 Game_Client/Classes/Objects/__pycache__/World.cpython-312.pyc delete mode 100644 Game_Client/Classes/System/World.py create mode 100644 Game_Client/Classes/System/__pycache__/World.cpython-312.pyc create mode 100644 ref.py diff --git a/Game_Client/Classes/Objects/BoardField.py b/Game_Client/Classes/Objects/BoardField.py new file mode 100644 index 0000000..c4d8270 --- /dev/null +++ b/Game_Client/Classes/Objects/BoardField.py @@ -0,0 +1,55 @@ +import pygame + +class BoardField(): + __name:str + __type:str + __pos:pygame.Vector2 + __size:tuple + __color:tuple = (255,255,255) + _rect:pygame.Rect + + def __init__(self, name:str, type:str, pos:pygame.Vector2, size:tuple, color:tuple): + self.__name = name + self.__type = type + self.__pos = pos + self.__size = size + self.__color = color + self.__rect = pygame.Rect(pos.x, pos.y, size[0], size[1]) + + def getName(self) -> str: + return self.__name + + def getType(self) -> str: + return self.__type + + def getPos(self) -> pygame.Vector2: + return self.__pos + + def getSize(self) -> tuple: + return self.__size + + def getColor(self) -> tuple: + return self.__color + + def getRect(self) -> pygame.Rect: + return self.__rect + + def setName(self, name:str) -> str: + self.__name = name + return self.__name + + def setType(self,type:str) -> str: + self.__type = type + return self.__type + + def setPos(self, pos:pygame.Vector2) -> pygame.Vector2: + self.pos = pos + return self.__pos + + def setSize(self, size:tuple) -> tuple: + self.__size = size + return self.__size + + def setColor(self, color:tuple) -> tuple: + self.__color = color + return self.__color \ No newline at end of file diff --git a/Game_Client/Classes/Objects/Cards/__pycache__/MonsterCard.cpython-312.pyc b/Game_Client/Classes/Objects/Cards/__pycache__/MonsterCard.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..066b14d1321e897503fa85eff3a7654ffe0d37bd GIT binary patch literal 2699 zcmbtV-ESL35a08iopWr*!5^VXn$!-&!TkgwkXn_hC56(eb&*1OunecGZ=2e6Y_oTX zu3#{!2GNKn6i6C(S3y{ErCoxh6VsxLoFkfemuM0d z^Rn$=ch8$qc4g!qik6)ARD`7aZxm8Vfs1E~m8@m4D5Pbs?jzVX2qkGjBWc$avPjY* zm8e@2PJ+ecTqftqk652LDV!5~)={V4;=wARRdZ9X=AqIxNgKK=rH3{7E=l_|FHpZW z40@O51APGaJ)?l#5B3o)0ABolroS*~p4 zN=5F@Evbu?ON?d>E|yC=msMS-#@QUp_R44G?*WQ(S9W2IYA#K<@fIO0YM5pudFT0_ zR&zZREOvnycAZHcy$!5Af2wcb5QsHmdlZNfui|6ov03#VGd1PnBKJ9gIiwnf zn!TYXLwxviwXjS-VywgfotmbAcgj8G$|8c>qnB9@uJYFsLn zX^|oB7)}o!$d-yLlo^UzC|_5(yhsfNdw?MfxF<`C&`@j$g=l~G^zz~!wG1w`q?=1R zEnH*xR~Z79OPXq^V7D%SLoSBv#pU@EnJYSFdS=0(bR~0^>Nkv1IrG{4x!9#kmow+! zI?8+@2eC8r1#Ck-bNOl>veGkHV?E<&?W5%i8w1zXh*N3b9YLc12ILOu_`>(ucc-3& zr`q8}Gn{D5ebNe_Z}`tYlSkG9^*~$R-<0>a<=Lh@yQMvr4?PQp*DCeO50TC5jpXU( z^y$|4nO5+_Rq3y>iOu)d3#-yS-;?O%MrJ+JjwYJX#Mal34mIaKXhl!8qZgaei>+u1 z&J1@V`!+7DUuZ|>nvuCyBndiiXL5Q~TJzSukL7)xsrc5B=G5D((qnl7eIH*hJtu_Q0|j|=nPUlO%LYL5fslFtgdG4`$CEKO z1C)D~%kWodHRP<8rJKg1_?MtovY#RH`(mIMGY0k=j6RZweQ+%hHVe9>z@V!Ln*-tq z&+tL0hMlo{=!oM%KM)8Gb-!J|-H@lu9Jq&3W0@6SB^ML#1G(@azuP>jT^3DEy zZq{!$LfG+Ew+G&MaIz7;6S&4LSCzshTbS zQdT1n8oJefHLDW?X*p~Mv4D=e;>}>ZA;-;jHh8mSt@DE1?2sT^3}3h zuq-BoxTqV92NlH}rYb(xx}vZ!xHl)5HK^Ria=AdwLBQZSCMM9>VdRb>c?U@X3BuZJ z1%^;J38F*SfP70jqoF(JJHC-`E_6cCmK5y_kFFiAA8tuw9dB@LvOd|8BHL2XeQ@)= zZ35fR?{;x}J|nmT&pm>BdK<{(X1GgWLq5K_@?-7$8p`o5$TL;~7&|${@O|VSqf*Wl z7a8`JbuWAjSrmzxV}IT+p~Qa#6lU=M0fh!PssI20 literal 0 HcmV?d00001 diff --git a/Game_Client/Classes/Objects/World.py b/Game_Client/Classes/Objects/World.py new file mode 100644 index 0000000..1fb6eab --- /dev/null +++ b/Game_Client/Classes/Objects/World.py @@ -0,0 +1,53 @@ +import pygame +from Classes.Objects.BoardField import BoardField + +class World(): + __boardFields:list + __cardWidth:int = 200 + __cardHeight:int = 250 + __cardOffset:int = 400 + + def __init__(self, cardWidth:int=200, cardHeight:int=250, cardOffset:int=400): + self.__boardFields = [] + self.__cardWidth = cardWidth + self.__cardHeight = cardHeight + self.__cardOffset = cardOffset + self.buildGameWorld() + + def buildGameWorld(self): + # TODO: rebuild these to use the BoardField Class and to append them to the __boardFields list + # construct elements arround the playerfield + # Todo add lifepoint label for player and enemy and make them scriptable + pVector = pygame.Vector2((self.__cardOffset + ((self.__cardWidth + 10) * 0)), 15) + self.__boardFields.append(BoardField("EnemyDeck", "Deck", pVector, (self.__cardWidth, self.__cardHeight), (0,255,0))) + + pVector = pygame.Vector2((self.__cardOffset + ((self.__cardWidth + 10) * 0)), (self.__cardHeight + 25)) + self.__boardFields.append(BoardField("EnemyGraveyard", "Grave", pVector, (self.__cardWidth, self.__cardHeight), (0,255,0))) + + pVector = pygame.Vector2((self.__cardOffset + ((self.__cardWidth + 10) * 5)), ((2 * self.__cardHeight) + 60)) + self.__boardFields.append(BoardField("PlayerDeck", "Deck", pVector, (self.__cardWidth, self.__cardHeight), (255,0,0))) + + pVector = pygame.Vector2((self.__cardOffset + ((self.__cardWidth + 10) * 5)), ((2 * self.__cardHeight) + self.__cardHeight + 70)) + self.__boardFields.append(BoardField("PlayerGraveyard", "Grave", pVector, (self.__cardWidth, self.__cardHeight), (255,0,0))) + + for i in range(5): + pVector = pygame.Vector2((self.__cardOffset + ((self.__cardWidth + 10) * i)), ((2 * self.__cardHeight) + 60)) + self.__boardFields.append(BoardField("PlayerMonsterField-"+str(i),"MonsterField",pVector,(self.__cardWidth, self.__cardHeight),(255,255,255))) + + pVector = pygame.Vector2((self.__cardOffset + ((self.__cardWidth + 10) * i)), ((2 * self.__cardHeight) + self.__cardHeight + 70)) + self.__boardFields.append(BoardField("PlayerMonsterField-"+str(i), "EffectField", pVector, (self.__cardWidth, self.__cardHeight), (255,255,255))) + + pVector = pygame.Vector2((self.__cardOffset + ((self.__cardWidth + 10) * (i+1)), 15), (self.__cardWidth, self.__cardHeight)) + self.__boardFields.append(BoardField("EnemyMonsterField-"+str(i), "MonsterField", pVector, (self.__cardWidth, self.__cardHeight), (255,255,255))) + + pVector = pygame.Vector2((self.__cardOffset + ((self.__cardWidth + 10) * (i+1))), (self.__cardHeight + 25)) + self.__boardFields.append(BoardField("EnemySpellTrapField-"+str(i), "EffectField", pVector, (self.__cardWidth, self.__cardHeight), (255,255,255))) + + def getBoardFields(self) -> list: + return self.__boardFields + + def getCardWidth(self) -> int: + return self.__cardWidth + + def getCardHeifht(self) -> int: + return self.__cardHeight \ No newline at end of file diff --git a/Game_Client/Classes/Objects/__pycache__/BoardField.cpython-312.pyc b/Game_Client/Classes/Objects/__pycache__/BoardField.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..581dbe11bbe7158c89df365dfdd488a59f6d0970 GIT binary patch literal 3305 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 literal 0 HcmV?d00001 diff --git a/Game_Client/Classes/System/App.py b/Game_Client/Classes/System/App.py index 1b49e03..b67f46a 100644 --- a/Game_Client/Classes/System/App.py +++ b/Game_Client/Classes/System/App.py @@ -4,8 +4,7 @@ from pygame.locals import * from Classes.Objects.Cards.MonsterCard import MonsterCard from Classes.System.Window import Window from Classes.System.InputHandler import InputHandler -from Classes.System.World import World - +from Classes.Objects.World import World class App: @@ -13,71 +12,38 @@ class App: __running:bool = True __FPS = 60 __clock = pygame.time.Clock() + __myFont:pygame.font + __world:World + __inputHandler: InputHandler def __init__(self, width:int=1920, height:int=1080, title:str="default title"): + pygame.font.init() + self.__myFont = pygame.font.SysFont('Comic Sans MS', 30) self.__window = Window(width=width, height=height, title=title) + self.__inputHandler = InputHandler() + + # game word + self.__world = World() + self.startGameLoop() self.onCleanup() - + def startGameLoop(self): # create sprite groups cards = pygame.sprite.Group() - # game word - # the field - playerMonsterGroup = [] - playerSpellGroup = [] - enemyMonsterGroup = [] - ememySpellGroup = [] - enemyOtherGroup = [] - playerOtherGroup = [] - - cardWith = 200 - cardHeight = 250 - cardOffset = 400 - - # player card fields - for i in range(5): - playerMonsterGroup.append(pygame.Rect(cardOffset + ((cardWith + 10) * i), (2 * cardHeight) + 60, cardWith, cardHeight)) - playerSpellGroup.append(pygame.Rect(cardOffset + ((cardWith + 10) * i), (2 * cardHeight) + cardHeight + 70, cardWith, cardHeight)) - - enemyMonsterGroup.append(pygame.Rect(cardOffset + ((cardWith + 10) * (i+1)), 15, cardWith, cardHeight)) - ememySpellGroup.append(pygame.Rect(cardOffset + ((cardWith + 10) * (i+1)), cardHeight + 25, cardWith, cardHeight)) - - enemyOtherGroup.append(pygame.Rect(cardOffset + ((cardWith + 10) * 0), 15, cardWith, cardHeight)) - enemyOtherGroup.append(pygame.Rect(cardOffset + ((cardWith + 10) * 0), cardHeight + 25, cardWith, cardHeight)) - - playerOtherGroup.append(pygame.Rect(cardOffset + ((cardWith + 10) * 5), (2*cardHeight) + 60, cardWith, cardHeight)) - playerOtherGroup.append(pygame.Rect(cardOffset + ((cardWith + 10) * 5), (2*cardHeight) + cardHeight + 70, cardWith, cardHeight)) - testMonsterCard = MonsterCard((500,500), "Assets/Cards/MonsterCards/testmonstercard/") cards.add(testMonsterCard) while self.__running: - self.__clock.tick(self.__FPS) self.__window.getScreen().fill((0,0,0)) - # world.draw(self.__window.getScreen()) - for card in playerOtherGroup: - pygame.draw.rect(self.__window.getScreen(), (0,255,0), card) - - for card in playerMonsterGroup: - pygame.draw.rect(self.__window.getScreen(), (255,255,255), card) - - for card in playerSpellGroup: - pygame.draw.rect(self.__window.getScreen(), (255,255,255), card) - - for card in enemyOtherGroup: - pygame.draw.rect(self.__window.getScreen(), (255,0,0), card) - - for card in enemyMonsterGroup: - pygame.draw.rect(self.__window.getScreen(), (255,0,255), card) - - for card in ememySpellGroup: - pygame.draw.rect(self.__window.getScreen(), (255,0,255), card) + # render world + self.__inputHandler.getMouseHover(self.__world) + self.__window.drawWorld(self.__world) # update sprite groups cards.update() @@ -96,6 +62,10 @@ class App: for event in events: if event.type == pygame.QUIT: self.onCleanup() + if event.type == pygame.MOUSEBUTTONDOWN: + pass + if event.type == pygame.MOUSEBUTTONUP: + pass # sets the running state for the gameloop def setRunning(self, running:bool): diff --git a/Game_Client/Classes/System/InputHandler.py b/Game_Client/Classes/System/InputHandler.py index addfcfa..293f55e 100644 --- a/Game_Client/Classes/System/InputHandler.py +++ b/Game_Client/Classes/System/InputHandler.py @@ -1,5 +1,8 @@ import pygame +from Classes.Objects.World import World +from Classes.Objects.BoardField import BoardField + class InputHandler: # returns pressed key def getPressed(): @@ -21,4 +24,22 @@ class InputHandler: yvel = 1 return tuple((xvel, yvel)) - \ No newline at end of file + + def getMousePos(self) -> pygame.Vector2: + return pygame.Vector2(pygame.mouse.get_pos()) + + # get field under mousbutton + def getMouseHover(self, world:World) -> BoardField: + mouse_pos = self.getMousePos() + xPos = [int(v//world.getCardWidth()) for v in mouse_pos.x] + yPos = [int(v//world.getCardHeifht()) for v in mouse_pos.y] + + try: + for field in world.getBoardFields(): + for x in xPos: + for y in yPos: + if x == field.getPos().x and y == field.getPos().y: + return field + except IndexError: pass + + return None \ No newline at end of file diff --git a/Game_Client/Classes/System/Window.py b/Game_Client/Classes/System/Window.py index 8a3bd44..ee73bb9 100644 --- a/Game_Client/Classes/System/Window.py +++ b/Game_Client/Classes/System/Window.py @@ -1,6 +1,9 @@ import pygame from pygame.locals import * +from Classes.Objects.BoardField import BoardField +from Classes.Objects.World import World + class Window: __width:int = 800 __height:int = 600 # takes 80% of width which tranlates to 640 @@ -37,4 +40,9 @@ class Window: # draws a passed sprite group to the screen def drawSpriteGroup(self, group:pygame.sprite.Group): - group.draw(self.__screen) \ No newline at end of file + group.draw(self.__screen) + + # draws a given group of rectangles onto the screen + def drawWorld(self, world:World): + for field in world.getBoardFields(): + pygame.draw.rect(self.__screen, field.getColor(), field.getRect()) \ No newline at end of file diff --git a/Game_Client/Classes/System/World.py b/Game_Client/Classes/System/World.py deleted file mode 100644 index 26f4c7e..0000000 --- a/Game_Client/Classes/System/World.py +++ /dev/null @@ -1,9 +0,0 @@ -import pygame - -class World(): - - def __init__(self, mapImage): - self.__map = mapImage - - def draw(self, surface:pygame.Surface): - surface.blit(self.__map, (0,0)) \ No newline at end of file diff --git a/Game_Client/Classes/System/__pycache__/App.cpython-312.pyc b/Game_Client/Classes/System/__pycache__/App.cpython-312.pyc index 351f2ddb33b4c3990370ee6299b2d1ee94969228..7defadcba7bd2dec6c5b5306318776e144d22bd2 100644 GIT binary patch literal 3898 zcmbtXU2Gf25#A&3sH1pCQoo^oXi-trm`Wv8aL}LBEs{vKY*eDsNU8x^DZ%hg_EE

-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 OFLH?6^?(5I4*v`tn_;*B diff --git a/Game_Client/Classes/System/__pycache__/InputHandler.cpython-312.pyc b/Game_Client/Classes/System/__pycache__/InputHandler.cpython-312.pyc index a2216a94546fa46a611cfe7c839cd389dfaae58f..f15ea1f87b8cbef711ab1506fbf65ed3c5159a46 100644 GIT binary patch delta 1598 zcmah}O-x%y5T1Q+pML=V&>9&NejWiQ7!08lXhhr4;G`v1N*keqf|^9s@0kDwr~6F! ziHUQ_AxKEUawUjVl~g@6RW3w5BvqxhY1C6MxK?88^+&z*&_g9-BDKk>vo>x>6sari zx3jym-^}dJPQtR}vi@kXlmNEgnpt(&5Vuyoe-LM@pnyU`Fv3S6M5crhfpA$2iBoih z5)j}mQ0Qe)q?-ai4=^Il6OZ9fE)IBzE)9oSNI{{bFFeYWH^qkb(GkU8f?b zh6yXzeYyn&B&8!JMN-YEQxc?#0q3RjMvp1J93)@FxBcWy;t=r@Q(}qK63dr2$Tvc% z0cn_xgE{db9VFJo57bM_5;^+YUJEV<$Syk+WfA+fg0Kn^62DU|NB&co;QP1Gv~q@Mo%?06x8@Jnelk_Qrvr+ zYrPxR7AlWTpPPyFk4`Hgm9_2KsYX?;7U2^7Vyn1%ap~g6!S&GV*Fx#qj$~~|s)JGRF&>;Q&GNer>^uan0C4y6G3L`Z)~JqG$#*Vc`mUkHD!xv~P$~ zl#Zihj7lgSMadL3Mhz1-u7)04C!6p}$Z~zuR9xk5#CDc@qlN&cXt56hh2;V4?@=(r z{LcEKIJ-+~fQY>qbR#g4z)94cg*ovg%#y+bo0%I`bTX%lWG&Fs3 zd`rS3TOu-SiAb2Wg55FnDCY#bk37N)V7 zVElJ6UMg4@hcXWQH|C#)@JYE$70jcS^zwY~Gf1lAp`EnjK#{^(WD?mbDyg0FeM vp7!;z>9wh_G80k{u~*RyuT@$lLQPgAg!~MaKVbi_@Y3IOKXK#$A@9<^{Tql4 delta 319 zcmeB_oXpF2nwOW00SK=87NmwUPvnzuRsiy*Go&!2Fy=5sF)%T>Go&!JFr+ZAW&){W zV2EO@WYlDN31a#sgGd;F$}@bHn>a(BrIJOHb>izZM$O4Vj9!ciljj0S*2ymz{lh$n`Y9+LyO_R2y-Nn{YS%};1&Lm`+?SwlU z!}%aLgD49r%DK@4h?+|+Fa%GW5 zxkx`eYwS1u#a;|+9L2uIInKreqkUe=b{Lx333dnA(MqR&fSdFSI=}zmO$KQ5iu+TqhGtj`W2hXN#7 zoZpdREirV+0Jq6cz7R|Br}Bv;(sk-7(FHGt;g$}TJBg8soM=A;lN}Tbk)81c>26ar zrcjGUt@Y>yIoX~>Pc=H4faq}J-r@g6w>3nEltl0)@UWK=68sJ2ooH1sR)8Hrb}hxb zO7h)T(18a6Lig=onq8dz(HCb4aJcd~v!^Bt)iweTA!7B}831F2%+Mm`w$MAbhD*Yr zq(YdtpWsRc%TF`hwU+3sVDBXgw!050S0>p+**u4P-RihDanrD;Q%!#CI0qBOa|ka5 z76YHWzH)l`^fTWPPil`VPh$%=XjOradUu`zRJE=PvEH*}^a3HXLU}K-q6CblQB)x@ zt<%@!hUtt@3_^3pBrw8g%&p-zFete*BJEW`btB_uxqi_crU8c?2XG~37Rp|2Tpy4I zZOdk^3f5)t>*8)#^&?Xr!%OPm4oU1T^!c$o-krVG0tK6^Rm^jxfZ+@RK&`acmZooL z`lfdD1)=^7T^M>EYFipv9N7xRH$w4y@82K&bo9%iN9on{=CM=XnBSG2l)kl}h0=eD zNcW1H20d5?hJPl8t)d@reYxDte96q^+(3^1u0*MyQ#IDIdozLJicXm^jUQEG1-uKa z3!xjK2SEpLRcDHgg^)zRw)9HC@Nhjq!+Fd z*01Vob325}hqirG?s_o%@Y3g(wz^Mlbe}|T*S1fPGxVPM7s2=LY8bDp-qE<>$;vn+ zm9p$Y-g4a7pp|zV(@AA+6yaE$RQ)U&c8sev6W{=@TE?zwPhk>hb=Cj+PL*t9$}-<( m=ivk183&8AEmBHMvW3rs2i delta 770 zcmZ8fJ!lj`6n<}acJKdkF?YJR_v1zqWr79`sGuT(g;tlsMh=p2+-~H^UhbIP6bBY5 zEVKymn8G%NpdqBSx3aJi6p_`^LOaobVCB5M9CB{)?VE4DZ{9bL*|WB%^KWyxG^p=u zx$nKwhk5Jzf?7QT7hLqANq^19Lk&TLJK*Y%z-0#-IRKj40J-s<$_B>>7luzyYTsb^ z@(C8@60Wkr3@^zK_#CTppzUT4kfZ<)Va=3#+Buw(D@j|1`qgT3v;#1JeQfZQNGL+2 z2r}}GUOz9gs*YG^vlB*{zzf&ft$x_)ZE_Z|!1LEdp0ra01zBU4(2>jRnwe2V(3HFE zivHee$am~+>4c*8RTp8=9z}9QSza*gLQEKn*oIHZtfSMO^pPRPEZp!%2%}u9RC+65~)s;Ip*_$pgb{8hxhh{x9s~B;H zpdvq-x2)s9G%pdKJig*$!ofMYoG4iox50H`l7>bv=ne3qJW9=DLfUD&HyXWSBRvR( zn4v0hZ%eGV+Fr!MPS=Z!+kUUTA#C!WCWw>FQFS(!2P3)QMAZnWu_zPJm}6k72zKP_ z^nJ9YomtvA0yJtPC5cqbxOuKWc+l#4i>hbK4@UmUGyf!SbbIcW@7)xam65I;lob5X U5%DwRzCh(So5k8sP!Kox3k-&owEzGB diff --git a/Game_Client/Classes/System/__pycache__/World.cpython-312.pyc b/Game_Client/Classes/System/__pycache__/World.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e5851d52f0980325e79b5057193d513f59243661 GIT binary patch literal 774 zcmY*Xzi-n(6no54L>WXH}DrTnpQBR!{ zMZ3;LZ6hI3Lq^Hx&m4wl7qJdXR^9^xly7x?OH*17r2R=eNVJO{3{)skLs+js(|{S5 zI(l|gE#@cgQN|SnoZZ`eU3*!3v$qW11|J(gyqkIh16{vD(#NzRkyUZg6FG~C*MvBj zMR5_)bitWBP4_V|tLzri^(J~hL*6K#K$HF)XbI*T!U9e>b8Z~F%-MQ(=R@m#>n|WJ uYA7AmTrR70gBZ<~w>$N=i*Z`|D*9-ZhW?ggn=$qa>i@XQwoU*culWzF@t(W@ literal 0 HcmV?d00001 diff --git a/ref.py b/ref.py new file mode 100644 index 0000000..c1b234a --- /dev/null +++ b/ref.py @@ -0,0 +1,115 @@ +import pygame + +TILESIZE = 32 +BOARD_POS = (10, 10) + +def create_board_surf(): + board_surf = pygame.Surface((TILESIZE*8, TILESIZE*8)) + dark = False + for y in range(8): + for x in range(8): + rect = pygame.Rect(x*TILESIZE, y*TILESIZE, TILESIZE, TILESIZE) + pygame.draw.rect(board_surf, pygame.Color('darkgrey' if dark else 'beige'), rect) + dark = not dark + dark = not dark + return board_surf + +def get_square_under_mouse(board): + mouse_pos = pygame.Vector2(pygame.mouse.get_pos()) - BOARD_POS + x, y = [int(v // TILESIZE) for v in mouse_pos] + try: + if x >= 0 and y >= 0: return (board[y][x], x, y) + except IndexError: pass + return None, None, None + +def create_board(): + board = [] + for y in range(8): + board.append([]) + for x in range(8): + board[y].append(None) + + for x in range(0, 8): + board[1][x] = ('black', 'pawn') + for x in range(0, 8): + board[6][x] = ('white', 'pawn') + + return board + +def draw_pieces(screen, board, font, selected_piece): + sx, sy = None, None + if selected_piece: + piece, sx, sy = selected_piece + + for y in range(8): + for x in range(8): + piece = board[y][x] + if piece: + selected = x == sx and y == sy + color, type = piece + s1 = font.render(type[0], True, pygame.Color('red' if selected else color)) + s2 = font.render(type[0], True, pygame.Color('darkgrey')) + pos = pygame.Rect(BOARD_POS[0] + x * TILESIZE+1, BOARD_POS[1] + y * TILESIZE + 1, TILESIZE, TILESIZE) + screen.blit(s2, s2.get_rect(center=pos.center).move(1, 1)) + screen.blit(s1, s1.get_rect(center=pos.center)) + +def draw_selector(screen, piece, x, y): + if piece != None: + rect = (BOARD_POS[0] + x * TILESIZE, BOARD_POS[1] + y * TILESIZE, TILESIZE, TILESIZE) + pygame.draw.rect(screen, (255, 0, 0, 50), rect, 2) + +def draw_drag(screen, board, selected_piece, font): + if selected_piece: + piece, x, y = get_square_under_mouse(board) + if x != None: + rect = (BOARD_POS[0] + x * TILESIZE, BOARD_POS[1] + y * TILESIZE, TILESIZE, TILESIZE) + pygame.draw.rect(screen, (0, 255, 0, 50), rect, 2) + + color, type = selected_piece[0] + s1 = font.render(type[0], True, pygame.Color(color)) + s2 = font.render(type[0], True, pygame.Color('darkgrey')) + pos = pygame.Vector2(pygame.mouse.get_pos()) + screen.blit(s2, s2.get_rect(center=pos + (1, 1))) + screen.blit(s1, s1.get_rect(center=pos)) + selected_rect = pygame.Rect(BOARD_POS[0] + selected_piece[1] * TILESIZE, BOARD_POS[1] + selected_piece[2] * TILESIZE, TILESIZE, TILESIZE) + pygame.draw.line(screen, pygame.Color('red'), selected_rect.center, pos) + return (x, y) + +def main(): + pygame.init() + font = pygame.font.SysFont('', 32) + screen = pygame.display.set_mode((640, 480)) + board = create_board() + board_surf = create_board_surf() + clock = pygame.time.Clock() + selected_piece = None + drop_pos = None + while True: + piece, x, y = get_square_under_mouse(board) + events = pygame.event.get() + for e in events: + if e.type == pygame.QUIT: + return + if e.type == pygame.MOUSEBUTTONDOWN: + if piece != None: + selected_piece = piece, x, y + if e.type == pygame.MOUSEBUTTONUP: + if drop_pos: + piece, old_x, old_y = selected_piece + board[old_y][old_x] = 0 + new_x, new_y = drop_pos + board[new_y][new_x] = piece + selected_piece = None + drop_pos = None + + screen.fill(pygame.Color('grey')) + screen.blit(board_surf, BOARD_POS) + draw_pieces(screen, board, font, selected_piece) + draw_selector(screen, piece, x, y) + drop_pos = draw_drag(screen, board, selected_piece, font) + + pygame.display.flip() + clock.tick(60) + +if __name__ == '__main__': + main() \ No newline at end of file