diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 13566b8..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml diff --git a/.idea/Online_TCG.iml b/.idea/Online_TCG.iml deleted file mode 100644 index 762c793..0000000 --- a/.idea/Online_TCG.iml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index 105ce2d..0000000 --- a/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 1df49cc..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 5693aa2..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1dd..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json index 720a496..23c2a55 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,14 +1,27 @@ { - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { - "name": "Python:app", + "name": "Old Shadowcrest Engine Server", "type": "python", "request": "launch", - "program": "main.py", + "program": "OLD_Server/index.py", + "console": "integratedTerminal", + "justMyCode": true + }, + { + "name": "Shadowcrest Engine Server", + "type": "python", + "request": "launch", + "program": "OLD_Server/index.py", + "console": "integratedTerminal", + "justMyCode": true + }, + { + "name": "ShadowCrest Python GameEngine Client", + "type": "python", + "request": "launch", + "program": "Client/main.py", "console": "integratedTerminal", "justMyCode": true } diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index dbb72d1..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "cSpell.ignoreWords": [ - "posx" - ] -} \ No newline at end of file diff --git a/Game_Client/.vscode/settings.json b/Client/.vscode/settings.json similarity index 100% rename from Game_Client/.vscode/settings.json rename to Client/.vscode/settings.json diff --git a/Game Server/Assets/Arenas/default.png b/Client/Assets/Arenas/default.png similarity index 100% rename from Game Server/Assets/Arenas/default.png rename to Client/Assets/Arenas/default.png diff --git a/Game Server/Assets/Cards/Arena/field.png b/Client/Assets/Cards/0/field.png similarity index 100% rename from Game Server/Assets/Cards/Arena/field.png rename to Client/Assets/Cards/0/field.png diff --git a/Game_Client/Assets/Cards/1/card.json b/Client/Assets/Cards/1/card.json similarity index 100% rename from Game_Client/Assets/Cards/1/card.json rename to Client/Assets/Cards/1/card.json diff --git a/Game Server/Assets/Cards/MonsterCards/testmonstercard/card.png b/Client/Assets/Cards/1/card.png similarity index 100% rename from Game Server/Assets/Cards/MonsterCards/testmonstercard/card.png rename to Client/Assets/Cards/1/card.png diff --git a/Game Server/Assets/Cards/SpeelCards/testspellcard/artworkjson.png b/Client/Assets/Cards/2/artworkjson.png similarity index 100% rename from Game Server/Assets/Cards/SpeelCards/testspellcard/artworkjson.png rename to Client/Assets/Cards/2/artworkjson.png diff --git a/Game_Client/Assets/Cards/2/testspellcard.json b/Client/Assets/Cards/2/testspellcard.json similarity index 100% rename from Game_Client/Assets/Cards/2/testspellcard.json rename to Client/Assets/Cards/2/testspellcard.json diff --git a/Game Server/Assets/Cards/TrapCards/testtrapcard/artworkjson.png b/Client/Assets/Cards/3/artworkjson.png similarity index 100% rename from Game Server/Assets/Cards/TrapCards/testtrapcard/artworkjson.png rename to Client/Assets/Cards/3/artworkjson.png diff --git a/Game_Client/Assets/Cards/3/testtrapcard.json b/Client/Assets/Cards/3/testtrapcard.json similarity index 100% rename from Game_Client/Assets/Cards/3/testtrapcard.json rename to Client/Assets/Cards/3/testtrapcard.json diff --git a/Game_Client/Classes/Game/BoardField.py b/Client/Classes/Game/BoardField.py similarity index 100% rename from Game_Client/Classes/Game/BoardField.py rename to Client/Classes/Game/BoardField.py diff --git a/Client/Classes/Game/Cards/Card.py b/Client/Classes/Game/Cards/Card.py new file mode 100644 index 0000000..c98e175 --- /dev/null +++ b/Client/Classes/Game/Cards/Card.py @@ -0,0 +1,110 @@ +import json +import pygame + +from Classes.System.Components.InputHandler import InputHandler +from Classes.Game.Player import Player + +class Card(pygame.sprite.Sprite): + __name:str + __id:int + __description:str + __attacks = [] + __type:str = "Monster" + __pos:pygame.Vector2 + __dragging:bool = False + __offset:pygame.Vector2 = pygame.Vector2(0,0) + __inputHandler: InputHandler + __owner:Player + __state:str + __dragable:bool = True + image:pygame.image + rect:pygame.rect + + def __init__(self, pos: pygame.Vector2, assetDir: str, inputHandler: InputHandler, owner: Player, dragable:bool=True): + if assetDir == "": + raise ValueError("Card: imagePath cannot be empty") + + pygame.sprite.Sprite.__init__(self) + + with open(assetDir + "/card.json", 'r') as file: + data = json.load(file) + + self.__owner = owner + self.__id = int(data["id"]) + self.__pos = pos + self.__name = data["name"] + self.__type = data.get("type") + self.image = pygame.image.load(assetDir + "/card.png").convert_alpha() + self.rect = self.image.get_rect() + self.__inputHandler = inputHandler + self.rect.center = self.__pos + self.__description = data["description"] + self.original_size = self.image.get_size() + self.original_position = self.rect.center + self.__state = "onHand" + self.__type = "Monster" + + self.__attacks = [] + for attack in data.get("attacks", []): + self.__attacks.append(attack) + + def update(self): + if self.__dragging: + if self.__dragable: + mouse_pos = self.__inputHandler.getMousePos() + self.__pos = mouse_pos + self.rect.center = self.__pos + + def attacks(self): + return self.__attacks + + def getName(self) -> str: + return self.__name + + def getCardSprite(self) -> pygame.image: + return self.__cardSprite + + def getDescription(self): + return self.__description + + def getDragging(self): + return self.__dragging + + def getDragable(self): + return self.__dragable + + def getOffset(self): + return self.__offset + + def getPos(self) -> pygame.Vector2: + return self.__pos + + def getX(self) -> int: + return self.__pos.x + + def getY(self) -> int: + return self.__pos.y + + def getType(self): + return self.__type + + def getID(self) -> int: + return self.__id + + def getOwner(self) -> Player: + return self.__owner + + def getState(self) -> str: + return self.__state + + def setDragging(self, dragging:bool): + self.__dragging = dragging + + def setOffset(self, offset:pygame.Vector2): + self.__offset = offset + + def setPos(self, pos:pygame.Vector2): + self.__pos = pos + + def setState(self, state:str): + self.__state = state \ No newline at end of file diff --git a/Game_Client/Classes/Game/Cards/MonsterCard.py b/Client/Classes/Game/Cards/MonsterCard.py similarity index 98% rename from Game_Client/Classes/Game/Cards/MonsterCard.py rename to Client/Classes/Game/Cards/MonsterCard.py index 5aa58a7..63f1e28 100644 --- a/Game_Client/Classes/Game/Cards/MonsterCard.py +++ b/Client/Classes/Game/Cards/MonsterCard.py @@ -9,7 +9,7 @@ class MonsterCard(pygame.sprite.Sprite): __id:int __description:str __attacks = [] - __type:str = "MonsterCard" + __type:str = "Monster" __pos:pygame.Vector2 __dragging:bool = False __offset:pygame.Vector2 = pygame.Vector2(0,0) diff --git a/Game_Client/Classes/Game/Cards/SpellCard.py b/Client/Classes/Game/Cards/SpellCard.py similarity index 98% rename from Game_Client/Classes/Game/Cards/SpellCard.py rename to Client/Classes/Game/Cards/SpellCard.py index ef31bf2..5209399 100644 --- a/Game_Client/Classes/Game/Cards/SpellCard.py +++ b/Client/Classes/Game/Cards/SpellCard.py @@ -12,7 +12,7 @@ class SpellCard(pygame.sprite.Sprite): __dragging:bool = False __offset:pygame.Vector2 = pygame.Vector2(0,0) __inputHandler: InputHandler - __type:str = "SpellCard" + __type:str = "Effect" image:pygame.image rect:pygame.rect diff --git a/Game_Client/Classes/Game/Cards/TrapCard.py b/Client/Classes/Game/Cards/TrapCard.py similarity index 98% rename from Game_Client/Classes/Game/Cards/TrapCard.py rename to Client/Classes/Game/Cards/TrapCard.py index 0dce7f6..dcb6f76 100644 --- a/Game_Client/Classes/Game/Cards/TrapCard.py +++ b/Client/Classes/Game/Cards/TrapCard.py @@ -12,7 +12,7 @@ class TrapCard(pygame.sprite.Sprite): __dragging:bool = False __offset:pygame.Vector2 = pygame.Vector2(0,0) __inputHandler: InputHandler - __type:str = "TrapCard" + __type:str = "Effect" image:pygame.image rect:pygame.rect diff --git a/Client/Classes/Game/Cards/__pycache__/Card.cpython-311.pyc b/Client/Classes/Game/Cards/__pycache__/Card.cpython-311.pyc new file mode 100644 index 0000000..c81c6ad Binary files /dev/null and b/Client/Classes/Game/Cards/__pycache__/Card.cpython-311.pyc differ diff --git a/Client/Classes/Game/Cards/__pycache__/Card.cpython-312.pyc b/Client/Classes/Game/Cards/__pycache__/Card.cpython-312.pyc new file mode 100644 index 0000000..14a9d06 Binary files /dev/null and b/Client/Classes/Game/Cards/__pycache__/Card.cpython-312.pyc differ diff --git a/Client/Classes/Game/Cards/__pycache__/MonsterCard.cpython-311.pyc b/Client/Classes/Game/Cards/__pycache__/MonsterCard.cpython-311.pyc new file mode 100644 index 0000000..704782a Binary files /dev/null and b/Client/Classes/Game/Cards/__pycache__/MonsterCard.cpython-311.pyc differ diff --git a/Client/Classes/Game/Cards/__pycache__/MonsterCard.cpython-312.pyc b/Client/Classes/Game/Cards/__pycache__/MonsterCard.cpython-312.pyc new file mode 100644 index 0000000..0b40c99 Binary files /dev/null and b/Client/Classes/Game/Cards/__pycache__/MonsterCard.cpython-312.pyc differ diff --git a/Client/Classes/Game/Cards/__pycache__/SpellCard.cpython-311.pyc b/Client/Classes/Game/Cards/__pycache__/SpellCard.cpython-311.pyc new file mode 100644 index 0000000..f31c7ed Binary files /dev/null and b/Client/Classes/Game/Cards/__pycache__/SpellCard.cpython-311.pyc differ diff --git a/Client/Classes/Game/Cards/__pycache__/SpellCard.cpython-312.pyc b/Client/Classes/Game/Cards/__pycache__/SpellCard.cpython-312.pyc new file mode 100644 index 0000000..3900395 Binary files /dev/null and b/Client/Classes/Game/Cards/__pycache__/SpellCard.cpython-312.pyc differ diff --git a/Client/Classes/Game/Cards/__pycache__/TrapCard.cpython-311.pyc b/Client/Classes/Game/Cards/__pycache__/TrapCard.cpython-311.pyc new file mode 100644 index 0000000..0871a3b Binary files /dev/null and b/Client/Classes/Game/Cards/__pycache__/TrapCard.cpython-311.pyc differ diff --git a/Client/Classes/Game/Cards/__pycache__/TrapCard.cpython-312.pyc b/Client/Classes/Game/Cards/__pycache__/TrapCard.cpython-312.pyc new file mode 100644 index 0000000..fcfff05 Binary files /dev/null and b/Client/Classes/Game/Cards/__pycache__/TrapCard.cpython-312.pyc differ diff --git a/Client/Classes/Game/Events/GameStart.py b/Client/Classes/Game/Events/GameStart.py new file mode 100644 index 0000000..c6c6a27 --- /dev/null +++ b/Client/Classes/Game/Events/GameStart.py @@ -0,0 +1,17 @@ +import pygame +from Classes.Game.World import World +from Classes.Game.Cards.Card import Card +from Classes.Game.Player import Player +from Classes.System.Components.InputHandler import InputHandler +from Classes.System.Utils.Path import PathUtil + + +# send from the server to tell the player the game starts +# gives the client its and the opponents stats (not cards!!) +def GameStart(world: World, handCards:list, inputHandler:InputHandler, owner:Player): + index:int = 0 + + for card in handCards: + #world.AddToPlayerHand(Card(pygame.Vector2(500 + (index * 100), 1050), PathUtil.getAbsolutePathTo(f"Assets/Cards/{card}/"), inputHandler, Player(1000, 0, "test"), dragable=True)) + world.spawnCard(PathUtil.getAbsolutePathTo(f"Assets/Cards/{card}"), pygame.Vector2(500 + (index * 100), 1050), inputHandler, world.getPlayer()) + index=index+1 \ No newline at end of file diff --git a/Client/Classes/Game/Events/Login.py b/Client/Classes/Game/Events/Login.py new file mode 100644 index 0000000..71fef11 --- /dev/null +++ b/Client/Classes/Game/Events/Login.py @@ -0,0 +1,25 @@ +import json +import pygame +from Classes.Game.World import World +from Classes.Game.Player import Player + + +# event the client sends to let the server know it logged in +def Login(tcpClient): + payload = { + "event":"login", + "username": "player", + "deck": [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] + } + + tcpClient.send(payload) + +# server response for login event +def LoginResponse(message:dict, world:World): + print("LoginResponse called") + # checks if the response on the login request is successfull + if message["status"] != "success": + print("login failed") + else: + print("receiving login confirmation from server") + world.setPlayer(Player(0,0,message["name"], message["id"])) \ No newline at end of file diff --git a/Client/Classes/Game/Events/PlaceCard.py b/Client/Classes/Game/Events/PlaceCard.py new file mode 100644 index 0000000..5d72646 --- /dev/null +++ b/Client/Classes/Game/Events/PlaceCard.py @@ -0,0 +1,32 @@ +import pygame +from Classes.Game.World import World +from Classes.System.Components.InputHandler import InputHandler +from Classes.Game.Cards.Card import Card +from Classes.System.Utils.Path import PathUtil + +# the event the client sends to the server when it places a card +def PlaceCard(tcpClient, card:Card, player): + # todo: send card information to the server + # todo: required info is: + # - position + # - field type (used for validating what field the card is played in will be compared on server side) + # - card id (server will do the rest to fetch card info) + payload = { + "event":"placecard", + "card": card.getID(), + "type": card.getType(), + "user": player.getID(), + "x": card.getX(), + "y": card.getY(), + } + + tcpClient.send(payload) + +# the event send from the server to display a card on the field +def CardPlaced(world:World, card:int, owner:str, pos:pygame.Vector2, inputHandler:InputHandler): + # todo: make this work with all cardtypes + print("placing enemy card") + world.spawnEnemyCard(PathUtil.getAbsolutePathTo(f"Assets/Cards/{card}"), pos, inputHandler, owner) + +def MovedCard(world:World, card:int, type:str, owner:str, oldPos:pygame.Vector2, newPos:pygame.Vector2, inputHandler:InputHandler): + pass \ No newline at end of file diff --git a/Client/Classes/Game/Events/__pycache__/GameStart.cpython-311.pyc b/Client/Classes/Game/Events/__pycache__/GameStart.cpython-311.pyc new file mode 100644 index 0000000..babfc56 Binary files /dev/null and b/Client/Classes/Game/Events/__pycache__/GameStart.cpython-311.pyc differ diff --git a/Client/Classes/Game/Events/__pycache__/GameStart.cpython-312.pyc b/Client/Classes/Game/Events/__pycache__/GameStart.cpython-312.pyc new file mode 100644 index 0000000..5d19205 Binary files /dev/null and b/Client/Classes/Game/Events/__pycache__/GameStart.cpython-312.pyc differ diff --git a/Client/Classes/Game/Events/__pycache__/Login.cpython-311.pyc b/Client/Classes/Game/Events/__pycache__/Login.cpython-311.pyc new file mode 100644 index 0000000..436d900 Binary files /dev/null and b/Client/Classes/Game/Events/__pycache__/Login.cpython-311.pyc differ diff --git a/Client/Classes/Game/Events/__pycache__/Login.cpython-312.pyc b/Client/Classes/Game/Events/__pycache__/Login.cpython-312.pyc new file mode 100644 index 0000000..11bdf15 Binary files /dev/null and b/Client/Classes/Game/Events/__pycache__/Login.cpython-312.pyc differ diff --git a/Client/Classes/Game/Events/__pycache__/PlaceCard.cpython-311.pyc b/Client/Classes/Game/Events/__pycache__/PlaceCard.cpython-311.pyc new file mode 100644 index 0000000..ca1ef0e Binary files /dev/null and b/Client/Classes/Game/Events/__pycache__/PlaceCard.cpython-311.pyc differ diff --git a/Client/Classes/Game/Events/__pycache__/PlaceCard.cpython-312.pyc b/Client/Classes/Game/Events/__pycache__/PlaceCard.cpython-312.pyc new file mode 100644 index 0000000..840027c Binary files /dev/null and b/Client/Classes/Game/Events/__pycache__/PlaceCard.cpython-312.pyc differ diff --git a/Client/Classes/Game/Player.py b/Client/Classes/Game/Player.py new file mode 100644 index 0000000..cb8ec7f --- /dev/null +++ b/Client/Classes/Game/Player.py @@ -0,0 +1,46 @@ +import pygame + +class Player: + __id:int + __hp:int + __mana:int + __name:str + __handCards:pygame.sprite.Group + + def __init__(self, hp:int, mana:int, name:str, id:int=0): + self.__hp = hp + self.__mana = mana + self.__name = name + self.__id = id + + def setID(self, id:int): + self.__id = id + + def getID(self) -> int: + return self.__id + + def getName(self) -> str: + return self.__name + + def getHP(self) -> int: + return self.__hp + + def getMana(self) -> int: + return self.__mana + + def adjustHP(self, hp:int) -> int: + self.__hp = self.__hp + hp + + def getHand(self) -> pygame.sprite.Group: + return self.__handCards + + def AddToHand(self, card) -> pygame.sprite.Group: + self.__handCards.add(card) + return self.__handCards + + def removeFromHand(self, pos:int) -> pygame.sprite.Group: + self.__handCards.remove(pos) + return self.__handCards + + def setMana(self, mana:int): + self.__mana = mana \ No newline at end of file diff --git a/Game_Client/Classes/Game/World.py b/Client/Classes/Game/World.py similarity index 72% rename from Game_Client/Classes/Game/World.py rename to Client/Classes/Game/World.py index 13f2937..c762375 100644 --- a/Game_Client/Classes/Game/World.py +++ b/Client/Classes/Game/World.py @@ -7,15 +7,16 @@ from Classes.Game.Cards.TrapCard import TrapCard from Classes.System.Components.InputHandler import InputHandler from Classes.Game.Player import Player from Classes.Game.Cards.Card import Card +from Classes.System.Utils.Path import PathUtil class World(): __boardFields:list - __player:Player - __enemy:Player + player:Player + enemy:Player __labels:list __cards:pygame.sprite.Group() __PlayerHandCards:pygame.sprite.Group() - __screen:pygame.surface + screen:pygame.surface __cardWidth:int = 150 __cardHeight:int = 200 __cardOffset:int = 400 @@ -29,8 +30,8 @@ class World(): self.__cardWidth = cardWidth self.__cardHeight = cardHeight self.__cardOffset = cardOffset - self.__player = None - self.__enemy = None + self.player = None + self.enemy = None self.buildGameWorld() def buildGameWorld(self): @@ -55,16 +56,23 @@ class World(): pManaPos = pygame.Vector2(20, pRow2Height + 255) # labeling +<<<<<<< HEAD:Game_Client/Classes/Game/World.py self.__labels.append(Label("PlayerHP", self.__screen, "0 / 0", pHPPos)) self.__labels.append(Label("PlayerName", self.__screen, "Not Connected", pNamePos)) self.__labels.append(Label("PlayerMana", self.__screen, "0", pManaPos)) self.__labels.append(Label("EnemyHP", self.__screen, "0 / 0", eHPPos)) +======= + self.__labels.append(Label("PlayerHP", self.__screen, "1000 / 1000", pHPPos)) + self.__labels.append(Label("PlayerName", self.__screen, "Not Connected", pNamePos)) + self.__labels.append(Label("PlayerName", self.__screen, "0", pManaPos)) + self.__labels.append(Label("EnemyHP", self.__screen, "1000 / 1000", eHPPos)) +>>>>>>> 18dcd6cc42f1f23e221702147a36f650f6aae6ac:Client/Classes/Game/World.py self.__labels.append(Label("EnemyName", self.__screen, "Not Connected", eNamePos)) - self.__boardFields.append(BoardField("EnemyDeck", "Enemy", "Deck", eDeckPos, "Assets/Cards/0/field.png", "e-deck")) - self.__boardFields.append(BoardField("EnemyGraveyard", "Enemy", "Grave", eGravePos, "Assets/Cards/0/field.png", "e-grave")) - self.__boardFields.append(BoardField("PlayerDeck", "Player", "Deck", pDeckPos, "Assets/Cards/0/field.png", "P-deck")) - self.__boardFields.append(BoardField("PlayerGraveyard", "Player", "Grave", pGravePos, "Assets/Cards/0/field.png", "p-grave")) + self.__boardFields.append(BoardField("EnemyDeck", "Enemy", "Deck", eDeckPos, PathUtil.getAbsolutePathTo("Assets/Cards/0/field.png"), "e-deck")) + self.__boardFields.append(BoardField("EnemyGraveyard", "Enemy", "Grave", eGravePos, PathUtil.getAbsolutePathTo("Assets/Cards/0/field.png"), "e-grave")) + self.__boardFields.append(BoardField("PlayerDeck", "Player", "Deck", pDeckPos, PathUtil.getAbsolutePathTo("Assets/Cards/0/field.png"), "P-deck")) + self.__boardFields.append(BoardField("PlayerGraveyard", "Player", "Grave", pGravePos, PathUtil.getAbsolutePathTo("Assets/Cards/0/field.png"), "p-grave")) # handle field creation for i in range(5): @@ -73,10 +81,10 @@ class World(): eMonsterPos = pygame.Vector2((self.__cardOffset + (((self.__cardWidth + 10) - 30) * (i+1)), eRow1Height)) eEffectPos = pygame.Vector2((self.__cardOffset + (((self.__cardWidth + 10) - 30) * (i+1))), eRow2Height) - self.__boardFields.append(BoardField("PlayerMonsterField-"+str(i), "Player", "MonsterField", pMonsterPos, "Assets/Cards/0/field.png", "pm"+str(id))) - self.__boardFields.append(BoardField("PlayerEffectField-"+str(i), "Player", "EffectField", pEffectPos, "Assets/Cards/0/field.png", "pe"+str(id))) - self.__boardFields.append(BoardField("EnemyMonsterField-"+str(i), "Enemy", "MonsterField", eMonsterPos, "Assets/Cards/0/field.png", "em"+str(id))) - self.__boardFields.append(BoardField("EnemySpellTrapField-"+str(i), "Enemy", "EffectField", eEffectPos, "Assets/Cards/0/field.png", "ee"+str(id))) + self.__boardFields.append(BoardField("PlayerMonsterField-"+str(i), "Player", "Monster", pMonsterPos, PathUtil.getAbsolutePathTo("Assets/Cards/0/field.png"), "pm"+str(id))) + self.__boardFields.append(BoardField("PlayerEffectField-"+str(i), "Player", "Effect", pEffectPos, PathUtil.getAbsolutePathTo("Assets/Cards/0/field.png"), "pe"+str(id))) + self.__boardFields.append(BoardField("EnemyMonsterField-"+str(i), "Enemy", "Monster", eMonsterPos, PathUtil.getAbsolutePathTo("Assets/Cards/0/field.png"), "em"+str(id))) + self.__boardFields.append(BoardField("EnemySpellTrapField-"+str(i), "Enemy", "Effect", eEffectPos, PathUtil.getAbsolutePathTo("Assets/Cards/0/field.png"), "ee"+str(id))) def getBoardFields(self) -> list: return self.__boardFields @@ -97,28 +105,38 @@ class World(): return self.__PlayerHandCards def getPlayer(self) -> Player: - return self.__player + return self.player def getEnemy(self) -> Player: return self.__enemy def setPlayer(self, player:Player): + print(f"setting player {player}") + self.player = player for label in self.__labels: if label.getName() == "PlayerName": label.setText(player.getName()) - self.__player = player def setEnemy(self, player:Player): + self.enemy = player for label in self.__labels: if label.getName() == "EnemyName": label.setText(player.getName()) - self.__enemy = player def spawnCard(self, asset:str, pos:pygame.Vector2, inputHandler:InputHandler, owner:Player) -> Card: card = Card(pos, asset, inputHandler, owner) self.__cards.add(card) return card + def spawnEnemyCard(self, asset:str, pos:pygame.Vector2, inputHandler:InputHandler, owner:str) -> Card: + pos.y = (self.__cardHeight + 45) + + card = Card(pos, asset, inputHandler, self.enemy, dragable=False) + self.__cards.add(card) + + print(f"new card collection {self.__cards}") + return card + def spawnCards(self, cards:pygame.sprite.Group): for card in cards: self.__cards.add(card) diff --git a/Game_Client/Classes/Game/__pycache__/BoardField.cpython-311.pyc b/Client/Classes/Game/__pycache__/BoardField.cpython-311.pyc similarity index 100% rename from Game_Client/Classes/Game/__pycache__/BoardField.cpython-311.pyc rename to Client/Classes/Game/__pycache__/BoardField.cpython-311.pyc diff --git a/Game_Client/Classes/Game/__pycache__/BoardField.cpython-312.pyc b/Client/Classes/Game/__pycache__/BoardField.cpython-312.pyc similarity index 94% rename from Game_Client/Classes/Game/__pycache__/BoardField.cpython-312.pyc rename to Client/Classes/Game/__pycache__/BoardField.cpython-312.pyc index 690b53a..a854e6c 100644 Binary files a/Game_Client/Classes/Game/__pycache__/BoardField.cpython-312.pyc and b/Client/Classes/Game/__pycache__/BoardField.cpython-312.pyc differ diff --git a/Client/Classes/Game/__pycache__/Player.cpython-311.pyc b/Client/Classes/Game/__pycache__/Player.cpython-311.pyc new file mode 100644 index 0000000..27b8347 Binary files /dev/null and b/Client/Classes/Game/__pycache__/Player.cpython-311.pyc differ diff --git a/Client/Classes/Game/__pycache__/Player.cpython-312.pyc b/Client/Classes/Game/__pycache__/Player.cpython-312.pyc new file mode 100644 index 0000000..5700898 Binary files /dev/null and b/Client/Classes/Game/__pycache__/Player.cpython-312.pyc differ diff --git a/Client/Classes/Game/__pycache__/World.cpython-311.pyc b/Client/Classes/Game/__pycache__/World.cpython-311.pyc new file mode 100644 index 0000000..0c2a398 Binary files /dev/null and b/Client/Classes/Game/__pycache__/World.cpython-311.pyc differ diff --git a/Client/Classes/Game/__pycache__/World.cpython-312.pyc b/Client/Classes/Game/__pycache__/World.cpython-312.pyc new file mode 100644 index 0000000..ec50959 Binary files /dev/null and b/Client/Classes/Game/__pycache__/World.cpython-312.pyc differ diff --git a/Client/Classes/System/App.py b/Client/Classes/System/App.py new file mode 100644 index 0000000..75e602d --- /dev/null +++ b/Client/Classes/System/App.py @@ -0,0 +1,141 @@ +import pygame +from pygame.locals import * + +from Classes.Game.Cards.MonsterCard import MonsterCard +from Classes.System.Components.Window import Window +from Classes.System.Components.InputHandler import InputHandler +from Classes.Game.World import World +from Classes.System.Network.TCPClient import TCPClient +from Classes.Game.Events.Login import Login +from Classes.Game.Events.PlaceCard import PlaceCard +from Classes.Game.Player import Player +from Classes.Game.Cards.Card import Card +from Classes.System.Utils.Path import PathUtil + +class App: + + __window:Window + __running:bool = True + __FPS = 60 + __clock = pygame.time.Clock() + __myFont:pygame.font + __world:World + __inputHandler: InputHandler + __tcpClient: TCPClient + + 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() + self.selectedCard = None + + # game word + self.__world = World(self.__window.getScreen()) + + try: + self.__tcpClient = TCPClient("127.0.0.1", "54322", self.__world, self.__inputHandler) + Login(self.__tcpClient) # will login to the server + except Exception as e: + print(f"failed to login due to error {e}") + print("server connection failed or got refused") + pass + + self.startGameLoop() + self.onCleanup() + + def startGameLoop(self): + + # create sprite groups + # todo: remove these and let server handle card creation instead + # blocker: server - client communication [WIP] + # self.__world.spawnCard(PathUtil.getAbsolutePathTo("Assets/Cards/1/"), pygame.Vector2(500, 1050), self.__inputHandler, Player(1000, 0, "test")) + # self.__world.spawnCard(PathUtil.getAbsolutePathTo("Assets/Cards/1/"), pygame.Vector2(600, 1050), self.__inputHandler, Player(1000, 0, "test")) + # self.__world.spawnCard(PathUtil.getAbsolutePathTo("Assets/Cards/1/"), pygame.Vector2(700, 1050), self.__inputHandler, Player(1000, 0, "test")) + # self.__world.spawnCard(PathUtil.getAbsolutePathTo("Assets/Cards/1/"), pygame.Vector2(800, 1050), self.__inputHandler, Player(1000, 0, "test")) + # self.__world.spawnCard(PathUtil.getAbsolutePathTo("Assets/Cards/1/"), pygame.Vector2(900, 1050), self.__inputHandler, Player(1000, 0, "test")) + # self.__world.spawnCard(PathUtil.getAbsolutePathTo("Assets/Cards/1/"), pygame.Vector2(1000, 1050), self.__inputHandler, Player(1000, 0, "test")) + + while self.__running: + self.__clock.tick(self.__FPS) + + self.__window.getScreen().fill((0,0,0)) + + # render world + self.__window.drawWorld(self.__world) + + # updates all cards inside the cards Spritegroup at each step the gameloops does + self.__world.getCards().update() + self.__world.getHandCards().update() + + # draw groups + self.__window.drawSpriteGroup(self.__world.getCards()) + self.__window.drawSpriteGroup(self.__world.getHandCards()) + + # event handler + self.handleEvent(pygame.event.get()) + + # emits update to the game + pygame.display.update() + + # handles incoming event queue + def handleEvent(self, events): + # TODO: fix bug that stacks cards when dragging them around + try: + for event in events: + if event.type == pygame.QUIT: + self.onCleanup() + elif self.__inputHandler.getMousePressed()[0]: + for card in self.__world.getCards(): + if card.getDragable() == True: + if card.rect.collidepoint(self.__inputHandler.getMousePos()): + #self.__logger.info(f"dragging card {card}") + self.selectedCard = card + + # failsafe to prevent NoneType errors + if self.selectedCard != None: + #self.__logger.info(f"working with card: {self.selectedCard}") + self.selectedCard.setDragging(True) + elif event.type == pygame.MOUSEBUTTONUP: + print("left mousebutton") + if event.button == 1: + if self.selectedCard != None: + self.selectedCard.setDragging(False) + print(self.selectedCard) + for field in self.__world.getBoardFields(): + print(f"checking field {field} is field mathinc? {field.getRect().collidepoint(self.__inputHandler.getMousePos())}") + if field.getRect().collidepoint(self.__inputHandler.getMousePos()): + print(f"is position valid? {field.getSide() == 'Player' and field.getType() == self.selectedCard.getType()} ") + print(f"side {field.getSide()} fieldtype {field.getType()} card type {self.selectedCard.getType()}") + + if field.getSide() == "Player" and field.getType() == self.selectedCard.getType(): + print(f"found field {field}") + try: + print(f"placing card {self.selectedCard} in field {field}") + # snap card into the correct field + self.selectedCard.rect.center = field.rect.center + self.selectedCard.setDragging(False) + + print(self.selectedCard) + # TODO: adapt this into the new game engine version + PlaceCard(self.__tcpClient, self.selectedCard, self.__world.getPlayer()) # tells te server that the player placed this card + self.selectedCard = None + except Exception as e: + print(f"failed to place card on server due to error: {e}") + + if self.selectedCard != None: + self.selectedCard = None + else: + raise ValueError("selected card in event handler was found empty this should never happen!") + pass + except: + pass + + # sets the running state for the gameloop + def setRunning(self, running:bool): + self.__running = running + + # ensures the gameloop stops running and the pygame instance is stopped properly + def onCleanup(self): + self.__running = False + pygame.quit() \ No newline at end of file diff --git a/Game_Client/Classes/System/Components/InputHandler.py b/Client/Classes/System/Components/InputHandler.py similarity index 93% rename from Game_Client/Classes/System/Components/InputHandler.py rename to Client/Classes/System/Components/InputHandler.py index d4dd428..df21df4 100644 --- a/Game_Client/Classes/System/Components/InputHandler.py +++ b/Client/Classes/System/Components/InputHandler.py @@ -8,6 +8,11 @@ class InputHandler: def getPressed(): return pygame.key.get_pressed() + # returns pressed key + @staticmethod + def getMousePressed(): + return pygame.mouse.get_pressed() + # takes in movement inputs and maps them to x and y axis @staticmethod def getInputAxis() -> tuple: diff --git a/Game_Client/Classes/System/Components/Label.py b/Client/Classes/System/Components/Label.py similarity index 100% rename from Game_Client/Classes/System/Components/Label.py rename to Client/Classes/System/Components/Label.py diff --git a/Game_Client/Classes/System/Components/Window.py b/Client/Classes/System/Components/Window.py similarity index 100% rename from Game_Client/Classes/System/Components/Window.py rename to Client/Classes/System/Components/Window.py diff --git a/Client/Classes/System/Components/__pycache__/InputHandler.cpython-311.pyc b/Client/Classes/System/Components/__pycache__/InputHandler.cpython-311.pyc new file mode 100644 index 0000000..a0402a9 Binary files /dev/null and b/Client/Classes/System/Components/__pycache__/InputHandler.cpython-311.pyc differ diff --git a/Client/Classes/System/Components/__pycache__/InputHandler.cpython-312.pyc b/Client/Classes/System/Components/__pycache__/InputHandler.cpython-312.pyc new file mode 100644 index 0000000..781662f Binary files /dev/null and b/Client/Classes/System/Components/__pycache__/InputHandler.cpython-312.pyc differ diff --git a/Client/Classes/System/Components/__pycache__/Label.cpython-311.pyc b/Client/Classes/System/Components/__pycache__/Label.cpython-311.pyc new file mode 100644 index 0000000..31d3e3d Binary files /dev/null and b/Client/Classes/System/Components/__pycache__/Label.cpython-311.pyc differ diff --git a/Game_Client/Classes/System/Components/__pycache__/Label.cpython-312.pyc b/Client/Classes/System/Components/__pycache__/Label.cpython-312.pyc similarity index 63% rename from Game_Client/Classes/System/Components/__pycache__/Label.cpython-312.pyc rename to Client/Classes/System/Components/__pycache__/Label.cpython-312.pyc index 6ff947a..5317076 100644 Binary files a/Game_Client/Classes/System/Components/__pycache__/Label.cpython-312.pyc and b/Client/Classes/System/Components/__pycache__/Label.cpython-312.pyc differ diff --git a/Game_Client/Classes/System/Components/__pycache__/Window.cpython-311.pyc b/Client/Classes/System/Components/__pycache__/Window.cpython-311.pyc similarity index 100% rename from Game_Client/Classes/System/Components/__pycache__/Window.cpython-311.pyc rename to Client/Classes/System/Components/__pycache__/Window.cpython-311.pyc diff --git a/Game_Client/Classes/System/Components/__pycache__/Window.cpython-312.pyc b/Client/Classes/System/Components/__pycache__/Window.cpython-312.pyc similarity index 66% rename from Game_Client/Classes/System/Components/__pycache__/Window.cpython-312.pyc rename to Client/Classes/System/Components/__pycache__/Window.cpython-312.pyc index 3ffb5fc..fb9b74b 100644 Binary files a/Game_Client/Classes/System/Components/__pycache__/Window.cpython-312.pyc and b/Client/Classes/System/Components/__pycache__/Window.cpython-312.pyc differ diff --git a/Client/Classes/System/GameManager.py b/Client/Classes/System/GameManager.py new file mode 100644 index 0000000..ea25200 --- /dev/null +++ b/Client/Classes/System/GameManager.py @@ -0,0 +1,23 @@ +from Classes.Game.Player import Player +from Classes.Game.World import World + + +class GameManager: + player:Player + enemy:Player + world:World + + def __init__(self, world): + self.world = world + + def getPlayer(self) -> Player: + return self.player + + def getEnemy(self) -> Player: + return self.enemy + + def setPlayer(self, player:Player): + self.player = player + + def setEnemy(self, enemy:Player): + self.enemy = enemy \ No newline at end of file diff --git a/Game_Client/Classes/System/Network/EventHandler.py b/Client/Classes/System/Network/EventHandler.py similarity index 65% rename from Game_Client/Classes/System/Network/EventHandler.py rename to Client/Classes/System/Network/EventHandler.py index cef919b..d4dc6b6 100644 --- a/Game_Client/Classes/System/Network/EventHandler.py +++ b/Client/Classes/System/Network/EventHandler.py @@ -13,19 +13,28 @@ class TCPEventHandler: def __init__(self, socket:socket): self.tcp_socket = socket +<<<<<<< HEAD:Game_Client/Classes/System/Network/EventHandler.py def handleEvents(self, message:dict, inputHandler:InputHandler, world:World): if message["event"] == "loginresponse": # todo: handle login response here +======= + def handleEvents(self, message, inputHandler:InputHandler, world:World): + print(message) + if message["event"] == "loginresponse": +>>>>>>> 18dcd6cc42f1f23e221702147a36f650f6aae6ac:Client/Classes/System/Network/EventHandler.py LoginResponse(message, world) pass elif message["event"] == "startgame": - print("gamestart") - GameStart(world, message["hand"], inputHandler, world.getPlayer()) + print(world.player) + # world.player.setMana(message["player"]["mana"]) + # world.player.setHp(message["player"]["hp"]) + GameStart(world, message["player"]["hand"], inputHandler, world.getPlayer(), Player(message["enemy"]["hp"],0,message["enemy"]["name"], message["enemy"]["id"])) pass - elif message["event"] == "PlaceCard": + elif message["event"] == "placecard": CardPlaced(world, message["card"], message["type"], message["owner"], pygame.Vector2(int(message["x"]), int(message["y"]), inputHandler)) pass elif message["event"] == "MoveCard": +<<<<<<< HEAD:Game_Client/Classes/System/Network/EventHandler.py # CardMoved( # world, # message["card"], @@ -34,6 +43,8 @@ class TCPEventHandler: # pygame.Vector2(int(message["old_x"]), int(message["old_y"])), # pygame.Vector2(int(message["new_x"]), int(message["new_y"])), # inputHandler, world) +======= +>>>>>>> 18dcd6cc42f1f23e221702147a36f650f6aae6ac:Client/Classes/System/Network/EventHandler.py pass elif message["event"] == "RemoveCard": pass diff --git a/Client/Classes/System/Network/TCPClient.py b/Client/Classes/System/Network/TCPClient.py new file mode 100644 index 0000000..dcaf1b0 --- /dev/null +++ b/Client/Classes/System/Network/TCPClient.py @@ -0,0 +1,69 @@ +import json +import socket +import threading + +import pygame + +from Classes.Game.World import World +from Classes.System.Components.InputHandler import InputHandler +from Classes.Game.Events.GameStart import GameStart +from Classes.Game.Events.Login import LoginResponse +from Classes.Game.Events.PlaceCard import CardPlaced +from Classes.Game.Player import Player + +class TCPClient: + def __init__(self, addr: str, port: str, world:World, inputHandler:InputHandler): + self.addr = addr + self.port = int(port) + self.tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.world = world + self.inputHandler = inputHandler + + try: + self.tcpSocket.connect((self.addr, self.port)) + except Exception as e: + print(f"Error connecting TCP socket: {e}") + + # Starten des Listener-Threads + self.listen() + + def send(self, message: dict): + try: + self.tcpSocket.sendall(json.dumps(message).encode()) + except Exception as e: + print(f"Error sending TCP data: {e}") + + def receive(self): + while True: + try: + data = self.tcpSocket.recv(1024) + if data: + decoded_data = json.loads(data.decode()) + self.handleEvents(decoded_data) + except Exception as e: + print(f"Error receiving TCP data: {e}") + break + + def handleEvents(self, message): + print(message) + if message["event"] == "loginresponse": + if message["status"] != "success": + print("login failed") + else: + print("receiving login confirmation from server") + self.world.setPlayer(Player(0,0,message["name"], message["id"])) + elif message["event"] == "startgame": + print(self.world.player) + # world.player.setMana(message["player"]["mana"]) + # world.player.setHp(message["player"]["hp"]) + self.world.setEnemy(Player(message["enemy"]["hp"],0,message["enemy"]["name"], message["enemy"]["id"])) + GameStart(self.world, message["player"]["hand"], self.inputHandler, self.world.getPlayer()) + pass + elif message["event"] == "PlacedCard": + CardPlaced(self.world, message["card"], message["owner"], pygame.Vector2(message["x"], message["y"]), self.inputHandler) + pass + + def listen(self): + tcpThread = threading.Thread(target=self.receive) + tcpThread.daemon = True + tcpThread.start() \ No newline at end of file diff --git a/Client/Classes/System/Network/__pycache__/EventHandler.cpython-311.pyc b/Client/Classes/System/Network/__pycache__/EventHandler.cpython-311.pyc new file mode 100644 index 0000000..03e8417 Binary files /dev/null and b/Client/Classes/System/Network/__pycache__/EventHandler.cpython-311.pyc differ diff --git a/Game_Client/Classes/System/Network/__pycache__/EventHandler.cpython-312.pyc b/Client/Classes/System/Network/__pycache__/EventHandler.cpython-312.pyc similarity index 100% rename from Game_Client/Classes/System/Network/__pycache__/EventHandler.cpython-312.pyc rename to Client/Classes/System/Network/__pycache__/EventHandler.cpython-312.pyc diff --git a/Game_Client/Classes/System/Network/__pycache__/NetworkManager.cpython-311.pyc b/Client/Classes/System/Network/__pycache__/NetworkManager.cpython-311.pyc similarity index 100% rename from Game_Client/Classes/System/Network/__pycache__/NetworkManager.cpython-311.pyc rename to Client/Classes/System/Network/__pycache__/NetworkManager.cpython-311.pyc diff --git a/Game_Client/Classes/System/Network/__pycache__/TCPClient.cpython-311.pyc b/Client/Classes/System/Network/__pycache__/TCPClient.cpython-311.pyc similarity index 100% rename from Game_Client/Classes/System/Network/__pycache__/TCPClient.cpython-311.pyc rename to Client/Classes/System/Network/__pycache__/TCPClient.cpython-311.pyc diff --git a/Client/Classes/System/Network/__pycache__/TCPClient.cpython-312.pyc b/Client/Classes/System/Network/__pycache__/TCPClient.cpython-312.pyc new file mode 100644 index 0000000..e36cb61 Binary files /dev/null and b/Client/Classes/System/Network/__pycache__/TCPClient.cpython-312.pyc differ diff --git a/Client/Classes/System/Utils/Path.py b/Client/Classes/System/Utils/Path.py new file mode 100644 index 0000000..9b01eb9 --- /dev/null +++ b/Client/Classes/System/Utils/Path.py @@ -0,0 +1,6 @@ +import os + + +class PathUtil: + def getAbsolutePathTo(notAbsolutPath:str) -> str: + return os.path.abspath("Client/" + notAbsolutPath) \ No newline at end of file diff --git a/Client/Classes/System/Utils/StringUtils.py b/Client/Classes/System/Utils/StringUtils.py new file mode 100644 index 0000000..e4d02a1 --- /dev/null +++ b/Client/Classes/System/Utils/StringUtils.py @@ -0,0 +1,11 @@ +import random +import string + + +class StringUtils: + def get_random_string(length) -> str: + # choose from all lowercase letter + letters = string.ascii_lowercase + result_str = ''.join(random.choice(letters) for i in range(length)) + print("Random string of length", length, "is:", result_str) + return result_str diff --git a/Client/Classes/System/Utils/__pycache__/Path.cpython-311.pyc b/Client/Classes/System/Utils/__pycache__/Path.cpython-311.pyc new file mode 100644 index 0000000..36eabe2 Binary files /dev/null and b/Client/Classes/System/Utils/__pycache__/Path.cpython-311.pyc differ diff --git a/Client/Classes/System/Utils/__pycache__/Path.cpython-312.pyc b/Client/Classes/System/Utils/__pycache__/Path.cpython-312.pyc new file mode 100644 index 0000000..c08f6e0 Binary files /dev/null and b/Client/Classes/System/Utils/__pycache__/Path.cpython-312.pyc differ diff --git a/Client/Classes/System/Utils/__pycache__/StringUtils.cpython-311.pyc b/Client/Classes/System/Utils/__pycache__/StringUtils.cpython-311.pyc new file mode 100644 index 0000000..4052b1a Binary files /dev/null and b/Client/Classes/System/Utils/__pycache__/StringUtils.cpython-311.pyc differ diff --git a/Client/Classes/System/__pycache__/App.cpython-311.pyc b/Client/Classes/System/__pycache__/App.cpython-311.pyc new file mode 100644 index 0000000..455bd28 Binary files /dev/null and b/Client/Classes/System/__pycache__/App.cpython-311.pyc differ diff --git a/Client/Classes/System/__pycache__/App.cpython-312.pyc b/Client/Classes/System/__pycache__/App.cpython-312.pyc new file mode 100644 index 0000000..115522b Binary files /dev/null and b/Client/Classes/System/__pycache__/App.cpython-312.pyc differ diff --git a/Game_Client/Classes/System/__pycache__/InputHandler.cpython-311.pyc b/Client/Classes/System/__pycache__/InputHandler.cpython-311.pyc similarity index 100% rename from Game_Client/Classes/System/__pycache__/InputHandler.cpython-311.pyc rename to Client/Classes/System/__pycache__/InputHandler.cpython-311.pyc diff --git a/Game_Client/Classes/System/__pycache__/InputHandler.cpython-312.pyc b/Client/Classes/System/__pycache__/InputHandler.cpython-312.pyc similarity index 100% rename from Game_Client/Classes/System/__pycache__/InputHandler.cpython-312.pyc rename to Client/Classes/System/__pycache__/InputHandler.cpython-312.pyc diff --git a/Game_Client/Classes/System/__pycache__/Window.cpython-311.pyc b/Client/Classes/System/__pycache__/Window.cpython-311.pyc similarity index 100% rename from Game_Client/Classes/System/__pycache__/Window.cpython-311.pyc rename to Client/Classes/System/__pycache__/Window.cpython-311.pyc diff --git a/Game_Client/Classes/System/__pycache__/Window.cpython-312.pyc b/Client/Classes/System/__pycache__/Window.cpython-312.pyc similarity index 100% rename from Game_Client/Classes/System/__pycache__/Window.cpython-312.pyc rename to Client/Classes/System/__pycache__/Window.cpython-312.pyc diff --git a/Game_Client/Classes/System/__pycache__/World.cpython-311.pyc b/Client/Classes/System/__pycache__/World.cpython-311.pyc similarity index 100% rename from Game_Client/Classes/System/__pycache__/World.cpython-311.pyc rename to Client/Classes/System/__pycache__/World.cpython-311.pyc diff --git a/Game_Client/Classes/System/__pycache__/World.cpython-312.pyc b/Client/Classes/System/__pycache__/World.cpython-312.pyc similarity index 100% rename from Game_Client/Classes/System/__pycache__/World.cpython-312.pyc rename to Client/Classes/System/__pycache__/World.cpython-312.pyc diff --git a/Game_Client/main.py b/Client/main.py similarity index 100% rename from Game_Client/main.py rename to Client/main.py diff --git a/Game Server/Classes/System/Network/__pycache__/EventHandler.cpython-311.pyc b/Game Server/Classes/System/Network/__pycache__/EventHandler.cpython-311.pyc deleted file mode 100644 index 5a17f8e..0000000 Binary files a/Game Server/Classes/System/Network/__pycache__/EventHandler.cpython-311.pyc and /dev/null differ diff --git a/Game Server/Classes/System/Network/__pycache__/EventHandler.cpython-312.pyc b/Game Server/Classes/System/Network/__pycache__/EventHandler.cpython-312.pyc deleted file mode 100644 index 3ad8486..0000000 Binary files a/Game Server/Classes/System/Network/__pycache__/EventHandler.cpython-312.pyc and /dev/null differ diff --git a/Game Server/Classes/System/Network/__pycache__/NetworkManger.cpython-312.pyc b/Game Server/Classes/System/Network/__pycache__/NetworkManger.cpython-312.pyc deleted file mode 100644 index 549b343..0000000 Binary files a/Game Server/Classes/System/Network/__pycache__/NetworkManger.cpython-312.pyc and /dev/null differ diff --git a/Game Server/Classes/System/__pycache__/GameManager.cpython-311.pyc b/Game Server/Classes/System/__pycache__/GameManager.cpython-311.pyc deleted file mode 100644 index 80b11c4..0000000 Binary files a/Game Server/Classes/System/__pycache__/GameManager.cpython-311.pyc and /dev/null differ diff --git a/Game Server/Classes/System/__pycache__/GameManager.cpython-312.pyc b/Game Server/Classes/System/__pycache__/GameManager.cpython-312.pyc deleted file mode 100644 index eda5f76..0000000 Binary files a/Game Server/Classes/System/__pycache__/GameManager.cpython-312.pyc and /dev/null differ diff --git a/Game Server/Classes/System/__pycache__/Logger.cpython-312.pyc b/Game Server/Classes/System/__pycache__/Logger.cpython-312.pyc deleted file mode 100644 index ac8ea48..0000000 Binary files a/Game Server/Classes/System/__pycache__/Logger.cpython-312.pyc and /dev/null differ diff --git a/Game_Client/Classes/Game/Cards/__pycache__/Card.cpython-312.pyc b/Game_Client/Classes/Game/Cards/__pycache__/Card.cpython-312.pyc deleted file mode 100644 index 3e97a31..0000000 Binary files a/Game_Client/Classes/Game/Cards/__pycache__/Card.cpython-312.pyc and /dev/null differ diff --git a/Game_Client/Classes/Game/Cards/__pycache__/MonsterCard.cpython-311.pyc b/Game_Client/Classes/Game/Cards/__pycache__/MonsterCard.cpython-311.pyc deleted file mode 100644 index 438e237..0000000 Binary files a/Game_Client/Classes/Game/Cards/__pycache__/MonsterCard.cpython-311.pyc and /dev/null differ diff --git a/Game_Client/Classes/Game/Cards/__pycache__/MonsterCard.cpython-312.pyc b/Game_Client/Classes/Game/Cards/__pycache__/MonsterCard.cpython-312.pyc deleted file mode 100644 index 6b648b0..0000000 Binary files a/Game_Client/Classes/Game/Cards/__pycache__/MonsterCard.cpython-312.pyc and /dev/null differ diff --git a/Game_Client/Classes/Game/Cards/__pycache__/SpellCard.cpython-311.pyc b/Game_Client/Classes/Game/Cards/__pycache__/SpellCard.cpython-311.pyc deleted file mode 100644 index 1832c8a..0000000 Binary files a/Game_Client/Classes/Game/Cards/__pycache__/SpellCard.cpython-311.pyc and /dev/null differ diff --git a/Game_Client/Classes/Game/Cards/__pycache__/SpellCard.cpython-312.pyc b/Game_Client/Classes/Game/Cards/__pycache__/SpellCard.cpython-312.pyc deleted file mode 100644 index 90a425e..0000000 Binary files a/Game_Client/Classes/Game/Cards/__pycache__/SpellCard.cpython-312.pyc and /dev/null differ diff --git a/Game_Client/Classes/Game/Cards/__pycache__/TrapCard.cpython-311.pyc b/Game_Client/Classes/Game/Cards/__pycache__/TrapCard.cpython-311.pyc deleted file mode 100644 index b7fcf13..0000000 Binary files a/Game_Client/Classes/Game/Cards/__pycache__/TrapCard.cpython-311.pyc and /dev/null differ diff --git a/Game_Client/Classes/Game/Cards/__pycache__/TrapCard.cpython-312.pyc b/Game_Client/Classes/Game/Cards/__pycache__/TrapCard.cpython-312.pyc deleted file mode 100644 index 7fb7dd7..0000000 Binary files a/Game_Client/Classes/Game/Cards/__pycache__/TrapCard.cpython-312.pyc and /dev/null differ diff --git a/Game_Client/Classes/Game/Events/__pycache__/GameStart.cpython-311.pyc b/Game_Client/Classes/Game/Events/__pycache__/GameStart.cpython-311.pyc deleted file mode 100644 index cd25649..0000000 Binary files a/Game_Client/Classes/Game/Events/__pycache__/GameStart.cpython-311.pyc and /dev/null differ diff --git a/Game_Client/Classes/Game/Events/__pycache__/GameStart.cpython-312.pyc b/Game_Client/Classes/Game/Events/__pycache__/GameStart.cpython-312.pyc deleted file mode 100644 index 8048845..0000000 Binary files a/Game_Client/Classes/Game/Events/__pycache__/GameStart.cpython-312.pyc and /dev/null differ diff --git a/Game_Client/Classes/Game/Events/__pycache__/Login.cpython-311.pyc b/Game_Client/Classes/Game/Events/__pycache__/Login.cpython-311.pyc deleted file mode 100644 index 448498c..0000000 Binary files a/Game_Client/Classes/Game/Events/__pycache__/Login.cpython-311.pyc and /dev/null differ diff --git a/Game_Client/Classes/Game/Events/__pycache__/Login.cpython-312.pyc b/Game_Client/Classes/Game/Events/__pycache__/Login.cpython-312.pyc deleted file mode 100644 index f293a04..0000000 Binary files a/Game_Client/Classes/Game/Events/__pycache__/Login.cpython-312.pyc and /dev/null differ diff --git a/Game_Client/Classes/Game/Events/__pycache__/PlaceCard.cpython-311.pyc b/Game_Client/Classes/Game/Events/__pycache__/PlaceCard.cpython-311.pyc deleted file mode 100644 index 82f3101..0000000 Binary files a/Game_Client/Classes/Game/Events/__pycache__/PlaceCard.cpython-311.pyc and /dev/null differ diff --git a/Game_Client/Classes/Game/Events/__pycache__/PlaceCard.cpython-312.pyc b/Game_Client/Classes/Game/Events/__pycache__/PlaceCard.cpython-312.pyc deleted file mode 100644 index d5ef877..0000000 Binary files a/Game_Client/Classes/Game/Events/__pycache__/PlaceCard.cpython-312.pyc and /dev/null differ diff --git a/Game_Client/Classes/Game/__pycache__/Player.cpython-311.pyc b/Game_Client/Classes/Game/__pycache__/Player.cpython-311.pyc deleted file mode 100644 index 3a363f1..0000000 Binary files a/Game_Client/Classes/Game/__pycache__/Player.cpython-311.pyc and /dev/null differ diff --git a/Game_Client/Classes/Game/__pycache__/Player.cpython-312.pyc b/Game_Client/Classes/Game/__pycache__/Player.cpython-312.pyc deleted file mode 100644 index ab04806..0000000 Binary files a/Game_Client/Classes/Game/__pycache__/Player.cpython-312.pyc and /dev/null differ diff --git a/Game_Client/Classes/Game/__pycache__/World.cpython-311.pyc b/Game_Client/Classes/Game/__pycache__/World.cpython-311.pyc deleted file mode 100644 index 39f0562..0000000 Binary files a/Game_Client/Classes/Game/__pycache__/World.cpython-311.pyc and /dev/null differ diff --git a/Game_Client/Classes/Game/__pycache__/World.cpython-312.pyc b/Game_Client/Classes/Game/__pycache__/World.cpython-312.pyc deleted file mode 100644 index 9ecabfc..0000000 Binary files a/Game_Client/Classes/Game/__pycache__/World.cpython-312.pyc and /dev/null differ diff --git a/Game_Client/Classes/System/App.py b/Game_Client/Classes/System/App.py deleted file mode 100644 index 3779dd2..0000000 --- a/Game_Client/Classes/System/App.py +++ /dev/null @@ -1,141 +0,0 @@ -import pygame -from pygame.locals import * - -from Classes.Game.Cards.MonsterCard import MonsterCard -from Classes.System.Components.Window import Window -from Classes.System.Components.InputHandler import InputHandler -from Classes.Game.World import World -from Classes.System.Network.TCPClient import TCPClient -from Classes.Game.Events.Login import Login -from Classes.Game.Events.PlaceCard import PlaceCard -from Classes.Game.Player import Player -from Classes.Game.Cards.Card import Card - -class App: - - __window:Window - __running:bool = True - __FPS = 60 - __clock = pygame.time.Clock() - __myFont:pygame.font - __world:World - __inputHandler: InputHandler - __tcpClient: TCPClient - - 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() - - # store selected card globaly in order to prevent packet flooding - self.selectedCard = None - - # game word - self.__world = World(self.__window.getScreen()) - - try: - self.__tcpClient = TCPClient("127.0.0.1", "54322", self.__world, self.__inputHandler) - Login(self.__tcpClient) # will login to the server - except Exception as e: - print(f"failed to login due to error {e}") - print("server connection failed or got refused") - pass - - self.startGameLoop() - self.onCleanup() - - def startGameLoop(self): - - # create sprite groups - # todo: remove these and let server handle card creation instead - # blocker: server - client communication [WIP] - # self.__world.spawnCard("Assets/Cards/1/", pygame.Vector2(500, 1050), self.__inputHandler, Player(1000, 0, "test")) - # self.__world.spawnCard("Assets/Cards/1/", pygame.Vector2(600, 1050), self.__inputHandler, Player(1000, 0, "test")) - # self.__world.spawnCard("Assets/Cards/1/", pygame.Vector2(700, 1050), self.__inputHandler, Player(1000, 0, "test")) - # self.__world.spawnCard("Assets/Cards/1/", pygame.Vector2(800, 1050), self.__inputHandler, Player(1000, 0, "test")) - # self.__world.spawnCard("Assets/Cards/1/", pygame.Vector2(900, 1050), self.__inputHandler, Player(1000, 0, "test")) - # self.__world.spawnCard("Assets/Cards/1/", pygame.Vector2(1000, 1050), self.__inputHandler, Player(1000, 0, "test")) - - while self.__running: - self.__clock.tick(self.__FPS) - - self.__window.getScreen().fill((0,0,0)) - - # render world - self.__window.drawWorld(self.__world) - - # updates all cards inside the cards Spritegroup at each step the gameloops does - self.__world.getCards().update() - self.__world.getHandCards().update() - - # draw groups - self.__window.drawSpriteGroup(self.__world.getCards()) - self.__window.drawSpriteGroup(self.__world.getHandCards()) - - # event handler - self.handleEvent(pygame.event.get()) - - # emits update to the game - pygame.display.update() - - # handles incoming event queue - def handleEvent(self, events): - # TODO: fix bug that stacks cards when dragging them around - # TODO: something prevents selected card from becoming function global - - for event in events: - if event.type == pygame.QUIT: - self.onCleanup() - elif pygame.mouse.get_pressed()[0]: # Wenn linke Maustaste gedrückt wird - mouse_x, mouse_y = pygame.mouse.get_pos() - mouse_pos = pygame.Vector2(mouse_x, mouse_y) - - for card in self.__world.getCards(): - if card.rect.collidepoint(mouse_pos) and self.selectedCard == None: - card.setDragging(True) - self.selectedCard = card - for field in self.__world.getBoardFields(): - if field.getRect().collidepoint(mouse_pos): - if field.getSide() == "Player": - if field.getType() == "MonsterField" and card.getType() == "MonsterCard": - # todo: resize card so that it fits into the card field - card.rect.center = field.rect.center - field.image = card.image.copy() - card.setDragging(False) - elif field.getType() == "EffectField" and card.getType() == "EffectCard" or field.getType() == "EffectField" and card.getType() == "EffectCard": - # todo: resize card so that it fits into the card field - card.rect.center = field.rect.center - field.image = card.image.copy() - card.setDragging(False) - - - elif self.__inputHandler.getPressed()[pygame.K_SPACE]: - print("card spawned") - self.__world.spawnMonsterCard("Assets/Cards/MonsterCards/testmonstercard/", self.__inputHandler.getMousePos(), self.__inputHandler) - elif event.type == pygame.MOUSEBUTTONUP: - mouse_x, mouse_y = pygame.mouse.get_pos() - if event.button == 1: # Wenn linke Maustaste losgelassen wird - for card in self.__world.getCards(): - card.setDragging(False) - # card.setState("placed") - # TODO: send place card event to server - # resets the currently selected card in order to prevent it getting moved - try: - if self.selectedCard == card: - print(self.selectedCard) - PlaceCard(self.__tcpClient, self.selectedCard, 1) # tells the server that the player placed this card - except Exception as e: - print(f"failed to place card on server due to error: {e}") - - if not self.selectedCard == None: - self.selectedCard = None - - # sets the running state for the gameloop - def setRunning(self, running:bool): - self.__running = running - - # ensures the gameloop stops running and the pygame instance is stopped properly - def onCleanup(self): - self.__running = False - pygame.quit() \ No newline at end of file diff --git a/Game_Client/Classes/System/Components/__pycache__/InputHandler.cpython-311.pyc b/Game_Client/Classes/System/Components/__pycache__/InputHandler.cpython-311.pyc deleted file mode 100644 index 9b98f1c..0000000 Binary files a/Game_Client/Classes/System/Components/__pycache__/InputHandler.cpython-311.pyc and /dev/null differ diff --git a/Game_Client/Classes/System/Components/__pycache__/InputHandler.cpython-312.pyc b/Game_Client/Classes/System/Components/__pycache__/InputHandler.cpython-312.pyc deleted file mode 100644 index 7761966..0000000 Binary files a/Game_Client/Classes/System/Components/__pycache__/InputHandler.cpython-312.pyc and /dev/null differ diff --git a/Game_Client/Classes/System/Network/__pycache__/EventHandler.cpython-311.pyc b/Game_Client/Classes/System/Network/__pycache__/EventHandler.cpython-311.pyc deleted file mode 100644 index 9766f6d..0000000 Binary files a/Game_Client/Classes/System/Network/__pycache__/EventHandler.cpython-311.pyc and /dev/null differ diff --git a/Game_Client/Classes/System/Network/__pycache__/TCPClient.cpython-312.pyc b/Game_Client/Classes/System/Network/__pycache__/TCPClient.cpython-312.pyc deleted file mode 100644 index 1471f32..0000000 Binary files a/Game_Client/Classes/System/Network/__pycache__/TCPClient.cpython-312.pyc and /dev/null differ diff --git a/Game_Client/Classes/System/__pycache__/App.cpython-311.pyc b/Game_Client/Classes/System/__pycache__/App.cpython-311.pyc deleted file mode 100644 index 290dcf6..0000000 Binary files a/Game_Client/Classes/System/__pycache__/App.cpython-311.pyc and /dev/null differ diff --git a/Game_Client/Classes/System/__pycache__/App.cpython-312.pyc b/Game_Client/Classes/System/__pycache__/App.cpython-312.pyc deleted file mode 100644 index 92bec22..0000000 Binary files a/Game_Client/Classes/System/__pycache__/App.cpython-312.pyc and /dev/null differ diff --git a/New_Client/App.py b/New_Client/App.py new file mode 100644 index 0000000..6b0b928 --- /dev/null +++ b/New_Client/App.py @@ -0,0 +1,76 @@ +import pygame +from Classes.Engine.EventHandler import EngineEventHandler +from Classes.Engine.InputHandler import InputHandler +from Classes.Engine.Logger import Logger +from Classes.Engine.TCPClient import TCPClient + +from Classes.Engine.Window import Window +from Classes.Game.World import World +from Classes.Game.NetworkEvents.Login import Login + + +class App: + + __running:bool + __FPS:int = 60 + __clock:pygame.time.Clock() + __myFont:pygame.font + __window:Window + __world:World + __inputHandler: InputHandler + __tcpClient: TCPClient + __eventHandler: EngineEventHandler + logger:Logger + + def __init__(self, logger:Logger, width:int=1280, height:int=720, title:str="default title"): + self.logger = logger + + self.logger.info("initializing dependencies") + pygame.init() + pygame.font.init() + self.__myFont = pygame.font.SysFont('Comic Sans MS', 30) + self.__window = Window(width=width, height=height, title=title) + self.__world = World(self.logger, self.__window.getScreen()) + self.__inputHandler = InputHandler() + + # attempt to connect to server + try: + self.logger.info("logging into server") + self.__tcpClient = TCPClient("127.0.0.1", "54322", self.__world, self.__inputHandler) + Login(self.__tcpClient) # will login to the server + except Exception as e: + print(f"failed to login due to error {e}") + print("server connection failed or got refused") + pass + + def startGameLoop(self): + self.__running = True + + while self.__running: + + self.__clock.tick(self.__FPS) + + self.__window.getScreen().fill((0,0,0)) + + # render world + self.__window.drawWorld(self.__world) + + # updates all cards inside the cards Spritegroup at each step the gameloops does + self.__world.getCards().update() + self.__world.getHandCards().update() + + # draw groups + self.__window.drawSpriteGroup(self.__world.getCards()) + self.__window.drawSpriteGroup(self.__world.getHandCards()) + + self.__eventHandler.handleEvent(pygame.event.get()) + + # emits update to the game + pygame.display.update() + + self.__running = False + + # ensures the gameloop stops running and the pygame instance is stopped properly + def onCleanup(self): + self.__running = False + pygame.quit() \ No newline at end of file diff --git a/Game_Client/Assets/Cards/0/field.png b/New_Client/Assets/Cards/0/field.png similarity index 100% rename from Game_Client/Assets/Cards/0/field.png rename to New_Client/Assets/Cards/0/field.png diff --git a/New_Client/Assets/Cards/1/card.json b/New_Client/Assets/Cards/1/card.json new file mode 100644 index 0000000..3ce8af5 --- /dev/null +++ b/New_Client/Assets/Cards/1/card.json @@ -0,0 +1,23 @@ +{ + "id": 1, + "type":"MonsterCard", + "name": "Test Monster", + "image": "Assets/Cards/1/cards.png", + "description": "can attack other monsters", + "costs": 30, + "defense": 40, + "attacks":[ + { + "id": 1, + "name":"test attack", + "description": "can attack another Monster", + "damage": 80 + }, + { + "id": 2, + "name":"test attack", + "description": "can attack another Monster", + "damage": 80 + } + ] +} diff --git a/New_Client/Assets/Cards/1/card.png b/New_Client/Assets/Cards/1/card.png new file mode 100644 index 0000000..76bef2d Binary files /dev/null and b/New_Client/Assets/Cards/1/card.png differ diff --git a/Game_Client/Assets/Cards/2/artworkjson.png b/New_Client/Assets/Cards/2/artworkjson.png similarity index 100% rename from Game_Client/Assets/Cards/2/artworkjson.png rename to New_Client/Assets/Cards/2/artworkjson.png diff --git a/New_Client/Assets/Cards/2/testspellcard.json b/New_Client/Assets/Cards/2/testspellcard.json new file mode 100644 index 0000000..f812019 --- /dev/null +++ b/New_Client/Assets/Cards/2/testspellcard.json @@ -0,0 +1,9 @@ +{ + "name": "testspell", + "type":"EffectCard", + "image":"Assets/Cards/2/artwork.png", + "costs": 30, + "defense": 0, + "description":"this is a test spell card", + "attacks": [] +} \ No newline at end of file diff --git a/Game_Client/Assets/Cards/3/artworkjson.png b/New_Client/Assets/Cards/3/artworkjson.png similarity index 100% rename from Game_Client/Assets/Cards/3/artworkjson.png rename to New_Client/Assets/Cards/3/artworkjson.png diff --git a/New_Client/Assets/Cards/3/testtrapcard.json b/New_Client/Assets/Cards/3/testtrapcard.json new file mode 100644 index 0000000..13ed51a --- /dev/null +++ b/New_Client/Assets/Cards/3/testtrapcard.json @@ -0,0 +1,9 @@ +{ + "name": "testtrap", + "type":"EffectCard", + "image":"Assets/Cards/3/artwork.png", + "costs": 30, + "defense": 0, + "description":"this is a test trap card", + "attacks": [] +} \ No newline at end of file diff --git a/Game_Client/Assets/Arenas/default.png b/New_Client/Assets/Cards/Arenas/default.png similarity index 100% rename from Game_Client/Assets/Arenas/default.png rename to New_Client/Assets/Cards/Arenas/default.png diff --git a/New_Client/Classes/Engine/Components/BoardField.py b/New_Client/Classes/Engine/Components/BoardField.py new file mode 100644 index 0000000..414c084 --- /dev/null +++ b/New_Client/Classes/Engine/Components/BoardField.py @@ -0,0 +1,85 @@ +import os +import pygame + +class BoardField(pygame.sprite.Sprite): + __fieldID:str + __name:str + __side:str + __type:str + __pos:pygame.Vector2 + __size:tuple + __color:tuple = (255,255,255) + __holdsCard = None + image:pygame.image + rect:pygame.rect + + def __init__(self, name:str, side:str, type:str, pos:pygame.Vector2, imagePath:str, fid:str): + pygame.sprite.Sprite.__init__(self) + self.__name = name + self.__side = side + self.__type = type + self.__pos = pos + self.__holdsCard = None + self.__fieldID = fid + + # Überprüfen des Dateipfads + if not os.path.exists(imagePath): + print("could not find image Location.") + else: + # Wenn der Pfad gültig ist, versuchen Sie, das Bild zu laden + self.image = pygame.image.load(imagePath).convert_alpha() + self.rect = self.image.get_rect() + self.rect.center = self.__pos + + def getName(self) -> str: + return self.__name + + def getSide(self) -> str: + return self.__side + + 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 getImage(self) -> pygame.image: + return self.image + + def getHoldingCard(self): + return self.__holdsCard + + 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 + + def setCardHolding(self, card): + self.__holdsCard = card + + def getFieldID(self) -> str: + return self.__fieldID \ No newline at end of file diff --git a/New_Client/Classes/Engine/Components/Label.py b/New_Client/Classes/Engine/Components/Label.py new file mode 100644 index 0000000..ed04c54 --- /dev/null +++ b/New_Client/Classes/Engine/Components/Label.py @@ -0,0 +1,47 @@ +import pygame + +class Label: + rect:pygame.rect + image:pygame.image + __screen:pygame.surface + __text:str + __pos:pygame.Vector2 + __font:pygame.font + font:pygame.font + __name:str + + def __init__(self, name:str, screen:pygame.surface, text:str, pos:pygame.Vector2, size:float=20, color:str="white"): + self.__font = pygame.font.SysFont("Arial", size) + self.font = pygame.font.SysFont("Arial", size) + self.image = self.font.render(text, 1, color) + _, _, w, h = self.image.get_rect() + self.__pos = pos + self.rect = pygame.Rect(self.__pos.x, self.__pos.y, w, h) + self.__screen = screen + self.__text = text + self.__name = name + + def getText(self) -> str: + return self.__text + + def getFont(self) -> pygame.font: + return self.__font + + def getPos(self) -> pygame.Vector2: + return self.__pos + + def getName(self) -> str: + return self.__name + + def setText(self, newtext:str, color:str="white"): + self.image = self.font.render(newtext, 1, color) + + def setFont(self, font:pygame.font, size:float, color:str="white"): + self.__font = pygame.font.SysFont(font, size) + self.change_text(self.text, color) + + def setPos(self, pos:pygame.Vector2): + self.__pos = pos + + def draw(self): + self.__screen.blit(self.image, (self.rect)) \ No newline at end of file diff --git a/New_Client/Classes/Engine/Components/__pycache__/BoardField.cpython-311.pyc b/New_Client/Classes/Engine/Components/__pycache__/BoardField.cpython-311.pyc new file mode 100644 index 0000000..68492b2 Binary files /dev/null and b/New_Client/Classes/Engine/Components/__pycache__/BoardField.cpython-311.pyc differ diff --git a/Game_Client/Classes/System/Components/__pycache__/Label.cpython-311.pyc b/New_Client/Classes/Engine/Components/__pycache__/Label.cpython-311.pyc similarity index 100% rename from Game_Client/Classes/System/Components/__pycache__/Label.cpython-311.pyc rename to New_Client/Classes/Engine/Components/__pycache__/Label.cpython-311.pyc diff --git a/New_Client/Classes/Engine/EventHandler.py b/New_Client/Classes/Engine/EventHandler.py new file mode 100644 index 0000000..8cb9a0b --- /dev/null +++ b/New_Client/Classes/Engine/EventHandler.py @@ -0,0 +1,117 @@ +import socket + +import pygame +from Classes.Engine.Logger import Logger + +from Classes.Game.NetworkEvents.PlaceCard import CardPlaced +from Classes.Game.NetworkEvents.GameStart import GameStart +from Classes.Game.NetworkEvents.PlaceCard import PlaceCard +from Classes.Engine.InputHandler import InputHandler +from Classes.Game.World import World +from Classes.Game.Player import Player +from Classes.Game.NetworkEvents.Login import LoginResponse + +# network event handler this only handles events coming from the server +class TCPEventHandler: + def __init__(self, socket:socket, inputHandler:InputHandler, world:World): + self.tcp_socket = socket + self.__world = world + self.__inputHandler = inputHandler + + def handleEvents(self, message:dict): + if message["event"] == "loginresponse": + LoginResponse(message) + pass + elif message["event"] == "startgame": + print("gamestart") + GameStart(self.__world, message["hand"], self.__inputHandler, self.__world.getPlayer()) + pass + elif message["event"] == "PlaceCard": + CardPlaced(self.__world, message["card"], message["type"], message["owner"], pygame.Vector2(int(message["x"]), int(message["y"]), self.__inputHandler)) + pass + elif message["event"] == "MoveCard": + CardMoved( + self.__world, + message["card"], + message["type"], + message["owner"], + pygame.Vector2(int(message["old_x"]), int(message["old_y"])), + pygame.Vector2(int(message["new_x"]), int(message["new_y"])), + self.__inputHandler) + pass + elif message["event"] == "RemoveCard": + pass + elif message["event"] == "AttackCard": + pass + elif message["event"] == "AttackPlayer": + pass + elif message["event"] == "ActivateEffectCard": + pass + elif message["event"] == "ActivateMonsterCard": + pass + +# handles engine events this is separate from the network event handler +class EngineEventHandler: + + __inputHandler:InputHandler + __world:World + __logger:Logger + + def __init__(self, inputHandler:InputHandler, world:World, logger:Logger, tcpClient): + self.__logger = logger + self.__logger.info("initializing engine Event Handler") + if inputHandler == None: + raise ValueError("InputHandler was found to be None") + + if world == None: + raise ValueError("world was found to be None") + + if world == tcpClient: + raise ValueError("tcpCLient was found to be None") + + self.__inputHandler = inputHandler + self.__world = world + self.__tcpClient = tcpClient + + # handles the incoming event queue + def handleEvent(self, events): + # TODO: fix bug that stacks cards when dragging them around + self.selectedCard = None + self.mousePos = self.__inputHandler.getMousePos() + + for event in events: + if event.type == pygame.QUIT: + self.onCleanup() + elif self.__inputHandler.getMousePos()[0]: + for card in self.__world.getCards(): + if card.rect.collidepoint(self.mousePos): + self.__logger.info(f"dragging card {card}") + self.selectedCard = card + + # failsafe to prevent NoneType errors + if self.selectedCard != None: + self.__logger.info(f"working with card: {self.selectedCard}") + self.selectedCard.setDragging(True) + elif event.type == pygame.MOUSEBUTTONUP: + if event.button == 1: + if self.selectedCard != None: + for field in self.__world.getBoardFields(): + if field.getRect().collidepoint(self.mousePos): + if field.getSide() == "Player" and field.getType() == self.selectedCard.getType(): + try: + # snap card into the correct field + self.selectedCard.rect.center = field.rect.center + self.selectedCard.setDragging(False) + print(self.selectedCard) + if self.selectedCard == card: + # TODO: adapt this into the new game engine version + PlaceCard(self.__tcpClient, self.selectedCard) # tells te server that the player placed this card + self.selectedCard = None + except Exception as e: + print(f"failed to place card on server due to error: {e}") + + if self.selectedCard != None: + self.selectedCard = None + else: + raise ValueError("selected card in event handler was found empty this should never happen!") + pass diff --git a/New_Client/Classes/Engine/InputHandler.py b/New_Client/Classes/Engine/InputHandler.py new file mode 100644 index 0000000..8df7dd3 --- /dev/null +++ b/New_Client/Classes/Engine/InputHandler.py @@ -0,0 +1,53 @@ +import pygame + +from Classes.Engine.Components.BoardField import BoardField + +class InputHandler: + # returns pressed key + @staticmethod + def getPressed(): + return pygame.key.get_pressed() + + # returns pressed key + @staticmethod + def getMousePressed(): + return pygame.mouse.get_pressed() + + # takes in movement inputs and maps them to x and y axis + @staticmethod + def getInputAxis() -> tuple: + xvel = 0 + yvel = 0 + + # construct x and y velocity input axis + if InputHandler.getPressed()[pygame.K_a] or InputHandler.getPressed()[pygame.K_LEFT]: + xvel = -1 + if InputHandler.getPressed()[pygame.K_d] or InputHandler.getPressed()[pygame.K_RIGHT]: + xvel = 1 + if InputHandler.getPressed()[pygame.K_w] or InputHandler.getPressed()[pygame.K_UP]: + yvel = -1 + if InputHandler.getPressed()[pygame.K_s] or InputHandler.getPressed()[pygame.K_DOWN]: + yvel = 1 + + return tuple((xvel, yvel)) + + @staticmethod + def getMousePos() -> pygame.Vector2: + return pygame.Vector2(pygame.mouse.get_pos()) + + # get field under mousbutton + @staticmethod + def getMouseHover(mouse_pos: pygame.Vector2, world_card_width: int, world_card_height: int, board_fields: list) -> BoardField: + x_pos = mouse_pos.x / world_card_width + y_pos = mouse_pos.y / world_card_height + + for field in board_fields: + field_x = field.getPos().x + field_y = field.getPos().y + field_width = world_card_width # Annahme: Jedes Feld hat eine Breite von 1 Einheit + field_height = world_card_height # Annahme: Jedes Feld hat eine Höhe von 1 Einheit + + if field_x <= x_pos < field_x + field_width and field_y <= y_pos < field_y + field_height: + return field + + return None diff --git a/Game Server/Classes/System/Logger.py b/New_Client/Classes/Engine/Logger.py similarity index 100% rename from Game Server/Classes/System/Logger.py rename to New_Client/Classes/Engine/Logger.py diff --git a/Game_Client/Classes/System/Network/TCPClient.py b/New_Client/Classes/Engine/TCPClient.py similarity index 68% rename from Game_Client/Classes/System/Network/TCPClient.py rename to New_Client/Classes/Engine/TCPClient.py index c1d7354..a44fbc9 100644 --- a/Game_Client/Classes/System/Network/TCPClient.py +++ b/New_Client/Classes/Engine/TCPClient.py @@ -2,23 +2,29 @@ import json import socket import threading -from Classes.System.Network.EventHandler import TCPEventHandler +from Classes.Engine.EventHandler import TCPEventHandler from Classes.Game.World import World -from Classes.System.Components.InputHandler import InputHandler +from Classes.Engine.InputHandler import InputHandler class TCPClient: + + __running:bool + def __init__(self, addr: str, port: str, world:World, inputHandler:InputHandler): self.addr = addr self.port = int(port) self.tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - self.eventHandler = TCPEventHandler(self.tcpSocket) self.world = world self.inputHandler = inputHandler - + self.eventHandler = TCPEventHandler(self.tcpSocket, self.inputHandler, self.world) + try: self.tcpSocket.connect((self.addr, self.port)) + self.__running = True + except Exception as e: print(f"Error connecting TCP socket: {e}") + self.__running = False # Starten des Listener-Threads self.listen() @@ -35,12 +41,12 @@ class TCPClient: data = self.tcpSocket.recv(1024) if data: decoded_data = json.loads(data.decode()) - self.eventHandler.handleEvents(decoded_data, self.inputHandler, self.world) + self.eventHandler.handleEvents(decoded_data) except Exception as e: print(f"Error receiving TCP data: {e}") break def listen(self): - tcpThread = threading.Thread(target=self.receive) - tcpThread.daemon = True - tcpThread.start() \ No newline at end of file + self.tcpThread = threading.Thread(target=self.receive) + self.tcpThread.daemon = True + self.tcpThread.start() \ No newline at end of file diff --git a/New_Client/Classes/Engine/Utils/Path.py b/New_Client/Classes/Engine/Utils/Path.py new file mode 100644 index 0000000..9b01eb9 --- /dev/null +++ b/New_Client/Classes/Engine/Utils/Path.py @@ -0,0 +1,6 @@ +import os + + +class PathUtil: + def getAbsolutePathTo(notAbsolutPath:str) -> str: + return os.path.abspath("Client/" + notAbsolutPath) \ No newline at end of file diff --git a/New_Client/Classes/Engine/Utils/StringUtils.py b/New_Client/Classes/Engine/Utils/StringUtils.py new file mode 100644 index 0000000..e4d02a1 --- /dev/null +++ b/New_Client/Classes/Engine/Utils/StringUtils.py @@ -0,0 +1,11 @@ +import random +import string + + +class StringUtils: + def get_random_string(length) -> str: + # choose from all lowercase letter + letters = string.ascii_lowercase + result_str = ''.join(random.choice(letters) for i in range(length)) + print("Random string of length", length, "is:", result_str) + return result_str diff --git a/New_Client/Classes/Engine/Utils/__pycache__/Path.cpython-311.pyc b/New_Client/Classes/Engine/Utils/__pycache__/Path.cpython-311.pyc new file mode 100644 index 0000000..36eabe2 Binary files /dev/null and b/New_Client/Classes/Engine/Utils/__pycache__/Path.cpython-311.pyc differ diff --git a/New_Client/Classes/Engine/Utils/__pycache__/StringUtils.cpython-311.pyc b/New_Client/Classes/Engine/Utils/__pycache__/StringUtils.cpython-311.pyc new file mode 100644 index 0000000..4052b1a Binary files /dev/null and b/New_Client/Classes/Engine/Utils/__pycache__/StringUtils.cpython-311.pyc differ diff --git a/New_Client/Classes/Engine/Window.py b/New_Client/Classes/Engine/Window.py new file mode 100644 index 0000000..461db85 --- /dev/null +++ b/New_Client/Classes/Engine/Window.py @@ -0,0 +1,54 @@ +import pygame +from pygame.locals import * + +from Classes.Engine.Components.BoardField import BoardField +from Classes.Game.World import World + +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 + + pygame.init() + + self.__screen = pygame.display.set_mode((self.__width, self.__height)) + self.__screen.fill((236, 240, 241)) # Hier liegt der Fehler, es muss eine Tuple übergeben werden + pygame.display.set_caption(self.__title) + + self.__clock = pygame.time.Clock() + self.__framerate = 60 # Framerate auf 60 FPS festlegen + + # set framerate (where the fuck is it?) + def Render(self): + # dear future me figure out what past me did! + 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 + + # draws a passed sprite group to the screen + def drawSpriteGroup(self, group:pygame.sprite.Group): + 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()) + for label in world.getLabels(): + label.draw() \ No newline at end of file diff --git a/New_Client/Classes/Engine/__pycache__/EventHandler.cpython-311.pyc b/New_Client/Classes/Engine/__pycache__/EventHandler.cpython-311.pyc new file mode 100644 index 0000000..f41445c Binary files /dev/null and b/New_Client/Classes/Engine/__pycache__/EventHandler.cpython-311.pyc differ diff --git a/New_Client/Classes/Engine/__pycache__/InputHandler.cpython-311.pyc b/New_Client/Classes/Engine/__pycache__/InputHandler.cpython-311.pyc new file mode 100644 index 0000000..3df4b9d Binary files /dev/null and b/New_Client/Classes/Engine/__pycache__/InputHandler.cpython-311.pyc differ diff --git a/New_Client/Classes/Engine/__pycache__/Logger.cpython-311.pyc b/New_Client/Classes/Engine/__pycache__/Logger.cpython-311.pyc new file mode 100644 index 0000000..0dec236 Binary files /dev/null and b/New_Client/Classes/Engine/__pycache__/Logger.cpython-311.pyc differ diff --git a/New_Client/Classes/Engine/__pycache__/TCPClient.cpython-311.pyc b/New_Client/Classes/Engine/__pycache__/TCPClient.cpython-311.pyc new file mode 100644 index 0000000..cd3e928 Binary files /dev/null and b/New_Client/Classes/Engine/__pycache__/TCPClient.cpython-311.pyc differ diff --git a/New_Client/Classes/Engine/__pycache__/Window.cpython-311.pyc b/New_Client/Classes/Engine/__pycache__/Window.cpython-311.pyc new file mode 100644 index 0000000..3824f8a Binary files /dev/null and b/New_Client/Classes/Engine/__pycache__/Window.cpython-311.pyc differ diff --git a/Game_Client/Classes/Game/Cards/Card.py b/New_Client/Classes/Game/Cards/Card.py similarity index 97% rename from Game_Client/Classes/Game/Cards/Card.py rename to New_Client/Classes/Game/Cards/Card.py index 748819e..cd11413 100644 --- a/Game_Client/Classes/Game/Cards/Card.py +++ b/New_Client/Classes/Game/Cards/Card.py @@ -1,7 +1,7 @@ import json import pygame -from Classes.System.Components.InputHandler import InputHandler +from Classes.Engine.InputHandler import InputHandler from Classes.Game.Player import Player class Card(pygame.sprite.Sprite): diff --git a/New_Client/Classes/Game/Cards/MonsterCard.py b/New_Client/Classes/Game/Cards/MonsterCard.py new file mode 100644 index 0000000..d73c45c --- /dev/null +++ b/New_Client/Classes/Game/Cards/MonsterCard.py @@ -0,0 +1,88 @@ +import json +import pygame + +from Classes.Engine.InputHandler import InputHandler +from Classes.Game.Player import Player + +class MonsterCard(pygame.sprite.Sprite): + __name:str + __id:int + __description:str + __attacks = [] + __type:str = "Monster" + __pos:pygame.Vector2 + __dragging:bool = False + __offset:pygame.Vector2 = pygame.Vector2(0,0) + __inputHandler: InputHandler + __owner:Player + image:pygame.image + rect:pygame.rect + + def __init__(self, pos:pygame.Vector2, assetDir:str, inputHandler:InputHandler, owner:Player): + if assetDir == "": + return ValueError.add_note("Card: imagePath cannot be empty") + + pygame.sprite.Sprite.__init__(self) + + data = json.load(open(assetDir + "/card.json")) + self.__owner = owner + self.__id = int(data["id"]) + self.__pos = pos + self.__name = data["name"] + self.image = pygame.image.load(assetDir + "/card.png").convert_alpha() + self.rect = self.image.get_rect() + self.dragging = False + self.offset = pygame.Vector2(0, 0) # Offset zwischen der Karte und der Mausposition + self.__inputHandler = inputHandler + self.rect.center = self.__pos + self.__description = data["description"] + self.original_size = self.image.get_size() + self.original_position = self.rect.center + + for attack in data["attacks"]: + self.__attacks.append(attack) + + def update(self): + if self.__dragging: + mouse_pos = self.__inputHandler.getMousePos() + self.__pos = mouse_pos + self.rect.center = self.__pos + + def attacks(self): + return self.__attacks + + def getName(self) -> str: + return self.__name + + def getCardSprite(self) -> pygame.image: + return self.__cardSprite + + def getDescription(self): + return self.__description + + def getDragging(self): + return self.__dragging + + def getOffset(self): + return self.__offset + + def getPos(self): + return self.__pos + + def getType(self): + return self.__type + + def getID(self) -> int: + return self.__id + + def getOwner(self) -> Player: + return self.__owner + + def setDragging(self, dragging:bool): + self.__dragging = dragging + + def setOffset(self, offset:pygame.Vector2): + self.__offset = offset + + def setPos(self, pos:pygame.Vector2): + self.__pos = pos \ No newline at end of file diff --git a/New_Client/Classes/Game/Cards/SpellCard.py b/New_Client/Classes/Game/Cards/SpellCard.py new file mode 100644 index 0000000..805ddb5 --- /dev/null +++ b/New_Client/Classes/Game/Cards/SpellCard.py @@ -0,0 +1,72 @@ +import json +from typing import Any + +import pygame + +from Classes.Engine.InputHandler import InputHandler + +class SpellCard(pygame.sprite.Sprite): + __name:str + __description:str + __pos:pygame.Vector2 + __dragging:bool = False + __offset:pygame.Vector2 = pygame.Vector2(0,0) + __inputHandler: InputHandler + __type:str = "Effect" + image:pygame.image + rect:pygame.rect + + def __init__(self, pos:pygame.Vector2, assetDir:str, inputHandler:InputHandler): + if assetDir == "": + return ValueError.add_note("Card: imagePath cannot be empty") + + pygame.sprite.Sprite.__init__(self) + + data = json.load(open(assetDir + "/card.json")) + self.__pos = pos + self.__name = data["name"] + self.image = pygame.image.load(assetDir + "/card.png").convert_alpha() + self.rect = self.image.get_rect() + self.dragging = False + self.offset = pygame.Vector2(0, 0) # Offset zwischen der Karte und der Mausposition + self.__inputHandler = inputHandler + self.rect.center = self.__pos + self.__description = data["description"] + self.original_size = self.image.get_size() + self.original_position = self.rect.center + + def update(self): + if self.getDragging(): + mouse_pos = self.__inputHandler.getMousePos() + self.__pos = mouse_pos + self.rect.center = self.__pos + + def getName(self) -> str: + return self.__name + + def getCardSprite(self) -> pygame.image: + return self.__cardSprite + + def getDescription(self): + return self.__description + + def getDragging(self): + return self.__dragging + + def getOffset(self): + return self.__offset + + def getPos(self): + return self.__pos + + def getType(self): + return self.__type + + def setDragging(self, dragging:bool): + self.__dragging = dragging + + def setOffset(self, offset:pygame.Vector2): + self.__offset = offset + + def setPos(self, pos:pygame.Vector2): + self.__pos = pos \ No newline at end of file diff --git a/New_Client/Classes/Game/Cards/TrapCard.py b/New_Client/Classes/Game/Cards/TrapCard.py new file mode 100644 index 0000000..0faba3d --- /dev/null +++ b/New_Client/Classes/Game/Cards/TrapCard.py @@ -0,0 +1,72 @@ +import json +from typing import Any + +import pygame + +from Classes.Engine.InputHandler import InputHandler + +class TrapCard(pygame.sprite.Sprite): + __name:str + __description:str + __pos:pygame.Vector2 + __dragging:bool = False + __offset:pygame.Vector2 = pygame.Vector2(0,0) + __inputHandler: InputHandler + __type:str = "Effect" + image:pygame.image + rect:pygame.rect + + def __init__(self, pos:pygame.Vector2, assetDir:str, inputHandler:InputHandler): + if assetDir == "": + return ValueError.add_note("Card: imagePath cannot be empty") + + pygame.sprite.Sprite.__init__(self) + + data = json.load(open(assetDir + "/card.json")) + self.__pos = pos + self.__name = data["name"] + self.__inputHandler = inputHandler + self.__description = data["description"] + self.original_size = self.image.get_size() + self.original_position = self.rect.center + self.offset = pygame.Vector2(0, 0) # Offset zwischen der Karte und der Mausposition + self.rect = self.image.get_rect() + self.rect.center = self.__pos + self.image = pygame.image.load(assetDir + "/card.png").convert_alpha() + self.__dragging = False + + def update(self): + if self.getDragging(): + mouse_pos = self.__inputHandler.getMousePos() + self.__pos = mouse_pos + self.rect.center = self.__pos + + def getName(self) -> str: + return self.__name + + def getCardSprite(self) -> pygame.image: + return self.__cardSprite + + def getDescription(self): + return self.__description + + def getDragging(self): + return self.__dragging + + def getOffset(self): + return self.__offset + + def getPos(self): + return self.__pos + + def getType(self): + return self.__type + + def setDragging(self, dragging:bool): + self.__dragging = dragging + + def setOffset(self, offset:pygame.Vector2): + self.__offset = offset + + def setPos(self, pos:pygame.Vector2): + self.__pos = pos \ No newline at end of file diff --git a/Game_Client/Classes/Game/Cards/__pycache__/Card.cpython-311.pyc b/New_Client/Classes/Game/Cards/__pycache__/Card.cpython-311.pyc similarity index 100% rename from Game_Client/Classes/Game/Cards/__pycache__/Card.cpython-311.pyc rename to New_Client/Classes/Game/Cards/__pycache__/Card.cpython-311.pyc diff --git a/New_Client/Classes/Game/Cards/__pycache__/MonsterCard.cpython-311.pyc b/New_Client/Classes/Game/Cards/__pycache__/MonsterCard.cpython-311.pyc new file mode 100644 index 0000000..3d1c166 Binary files /dev/null and b/New_Client/Classes/Game/Cards/__pycache__/MonsterCard.cpython-311.pyc differ diff --git a/New_Client/Classes/Game/Cards/__pycache__/SpellCard.cpython-311.pyc b/New_Client/Classes/Game/Cards/__pycache__/SpellCard.cpython-311.pyc new file mode 100644 index 0000000..ad3c56b Binary files /dev/null and b/New_Client/Classes/Game/Cards/__pycache__/SpellCard.cpython-311.pyc differ diff --git a/New_Client/Classes/Game/Cards/__pycache__/TrapCard.cpython-311.pyc b/New_Client/Classes/Game/Cards/__pycache__/TrapCard.cpython-311.pyc new file mode 100644 index 0000000..e01fe77 Binary files /dev/null and b/New_Client/Classes/Game/Cards/__pycache__/TrapCard.cpython-311.pyc differ diff --git a/Game_Client/Classes/Game/Events/GameStart.py b/New_Client/Classes/Game/NetworkEvents/GameStart.py similarity index 89% rename from Game_Client/Classes/Game/Events/GameStart.py rename to New_Client/Classes/Game/NetworkEvents/GameStart.py index 76de95f..be668f3 100644 --- a/Game_Client/Classes/Game/Events/GameStart.py +++ b/New_Client/Classes/Game/NetworkEvents/GameStart.py @@ -2,7 +2,7 @@ import pygame from Classes.Game.World import World from Classes.Game.Cards.Card import Card from Classes.Game.Player import Player -from Classes.System.Components.InputHandler import InputHandler +from Classes.Engine.InputHandler import InputHandler # send from the server to tell the player the game starts diff --git a/Game_Client/Classes/Game/Events/Login.py b/New_Client/Classes/Game/NetworkEvents/Login.py similarity index 100% rename from Game_Client/Classes/Game/Events/Login.py rename to New_Client/Classes/Game/NetworkEvents/Login.py diff --git a/Game_Client/Classes/Game/Events/PlaceCard.py b/New_Client/Classes/Game/NetworkEvents/PlaceCard.py similarity index 95% rename from Game_Client/Classes/Game/Events/PlaceCard.py rename to New_Client/Classes/Game/NetworkEvents/PlaceCard.py index 862f752..f257def 100644 --- a/Game_Client/Classes/Game/Events/PlaceCard.py +++ b/New_Client/Classes/Game/NetworkEvents/PlaceCard.py @@ -1,6 +1,6 @@ import pygame from Classes.Game.World import World -from Classes.System.Components.InputHandler import InputHandler +from Classes.Engine.InputHandler import InputHandler # the event the client sends to the server when it places a card def PlaceCard(tcpClient, card, id): diff --git a/Game_Client/Classes/Game/Player.py b/New_Client/Classes/Game/Player.py similarity index 100% rename from Game_Client/Classes/Game/Player.py rename to New_Client/Classes/Game/Player.py diff --git a/New_Client/Classes/Game/World.py b/New_Client/Classes/Game/World.py new file mode 100644 index 0000000..e92c06d --- /dev/null +++ b/New_Client/Classes/Game/World.py @@ -0,0 +1,116 @@ +import pygame +from Classes.Engine.Logger import Logger +from Classes.Engine.Components.BoardField import BoardField +from Classes.Engine.Components.Label import Label +from Classes.Game.Cards.MonsterCard import MonsterCard +from Classes.Game.Cards.SpellCard import SpellCard +from Classes.Game.Cards.TrapCard import TrapCard +from Classes.Engine.InputHandler import InputHandler +from Classes.Game.Player import Player +from Classes.Game.Cards.Card import Card +from Classes.Engine.Utils.Path import PathUtil + +class World(): + __boardFields:list + __player:Player + __enemy:Player + __labels:list + __cards:pygame.sprite.Group() + __PlayerHandCards:pygame.sprite.Group() + __screen:pygame.surface + __cardWidth:int = 150 + __cardHeight:int = 200 + __cardOffset:int = 400 + __logger:Logger + + def __init__(self, logger:Logger, screen:pygame.surface, cardWidth:int=200, cardHeight:int=250, cardOffset:int=400): + self.__logger = logger + + self.__logger.info("initializing world") + self.__boardFields = [] + self.__labels = [] + self.__cards = pygame.sprite.Group() + self.__PlayerHandCards = pygame.sprite.Group() + self.__screen = screen + self.__cardWidth = cardWidth + self.__cardHeight = cardHeight + self.__cardOffset = cardOffset + self.__player = None + self.__enemy = None + self.buildGameWorld() + + def buildGameWorld(self): + # construct elements around the player field + self.__logger.info("building game world") + + # presets the y position later passed down to the vector2 + eRow1Height = 85 + eRow2Height = (self.__cardHeight + 45) + pRow1Height = ((2 * self.__cardHeight) + 75) + pRow2Height = ((2 * self.__cardHeight) + self.__cardHeight + 30) + + self.__labels.append(Label("EnemyHP", self.__screen, "1000 / 1000", pygame.Vector2(15, 75))) + self.__labels.append(Label("EnemyName", self.__screen, "Enemy", pygame.Vector2(15, 45))) + self.__boardFields.append(BoardField("EnemyDeck", "Enemy", "Deck", pygame.Vector2((self.__cardOffset + ((self.__cardWidth + 10) * 0)), eRow1Height), PathUtil.getAbsolutePathTo("Assets/Cards/0/field.png"), "e-deck")) + self.__boardFields.append(BoardField("EnemyGraveyard", "Enemy", "Grave", pygame.Vector2((self.__cardOffset + ((self.__cardWidth + 10) * 0)), eRow2Height), PathUtil.getAbsolutePathTo("Assets/Cards/0/field.png"), "e-grave")) + + self.__labels.append(Label("PlayerHP", self.__screen, "1000 / 1000", pygame.Vector2(20, pRow2Height + 225))) + self.__labels.append(Label("PlayerName", self.__screen, "Player", pygame.Vector2(20, pRow2Height + 195))) + self.__labels.append(Label("Player Mana", self.__screen, "0", pygame.Vector2(20, pRow2Height + 255))) + self.__boardFields.append(BoardField("PlayerDeck", "Player", "Deck", pygame.Vector2((self.__cardOffset + (((self.__cardWidth + 10) - 30 ) * 5)), pRow2Height), PathUtil.getAbsolutePathTo("Assets/Cards/0/field.png"), "P-deck")) + self.__boardFields.append(BoardField("PlayerGraveyard", "Player", "Grave", pygame.Vector2((self.__cardOffset + (((self.__cardWidth + 10) - 30 ) * 5)), pRow1Height), PathUtil.getAbsolutePathTo("Assets/Cards/0/field.png"), "p-grave")) + + # handle field creation + for i in range(5): + self.__boardFields.append(BoardField("PlayerMonsterField-"+str(i), "Player", "Monster", pygame.Vector2((self.__cardOffset + (((self.__cardWidth + 10) - 30) * i)), pRow1Height), PathUtil.getAbsolutePathTo("Assets/Cards/0/field.png"), "pm"+str(id))) + self.__boardFields.append(BoardField("PlayerEffectField-"+str(i), "Player", "Effect", pygame.Vector2((self.__cardOffset + (((self.__cardWidth + 10) - 30) * i)), pRow2Height), PathUtil.getAbsolutePathTo("Assets/Cards/0/field.png"), "pe"+str(id))) + self.__boardFields.append(BoardField("EnemyMonsterField-"+str(i), "Enemy", "Monster", pygame.Vector2((self.__cardOffset + (((self.__cardWidth + 10) - 30) * (i+1)), eRow1Height)), PathUtil.getAbsolutePathTo("Assets/Cards/0/field.png"), "em"+str(id))) + self.__boardFields.append(BoardField("EnemySpellTrapField-"+str(i), "Enemy", "Effect", pygame.Vector2((self.__cardOffset + (((self.__cardWidth + 10) - 30) * (i+1))), eRow2Height), PathUtil.getAbsolutePathTo("Assets/Cards/0/field.png"), "ee"+str(id))) + + def getBoardFields(self) -> list: + return self.__boardFields + + def getLabels(self) -> list: + return self.__labels + + def getCardWidth(self) -> int: + return self.__cardWidth + + def getCardHeight(self) -> int: + return self.__cardHeight + + def getCards(self) -> pygame.sprite.Group: + return self.__cards + + def getHandCards(self) -> pygame.sprite.Group: + return self.__PlayerHandCards + + def getPlayer(self) -> Player: + return self.__player + + def getEnemy(self) -> Player: + return self.__enemy + + def setPlayer(self, player:Player): + for label in self.__labels: + if label.getName() == "PlayerName": + label.setText(player.getName()) + self.__player = player + + def setEnemy(self, player:Player): + for label in self.__labels: + if label.getName() == "EnemyName": + label.setText(player.getName()) + self.__enemy = player + + def spawnCard(self, asset:str, pos:pygame.Vector2, inputHandler:InputHandler, owner:Player) -> Card: + card = Card(pos, asset, inputHandler, owner) + self.__cards.add(card) + return card + + def spawnCards(self, cards:pygame.sprite.Group): + for card in cards: + self.__cards.add(card) + + def AddToPlayerHand(self, Card:Card): + self.__PlayerHandCards.add(Card) \ No newline at end of file diff --git a/New_Client/__pycache__/App.cpython-311.pyc b/New_Client/__pycache__/App.cpython-311.pyc new file mode 100644 index 0000000..b4f4b15 Binary files /dev/null and b/New_Client/__pycache__/App.cpython-311.pyc differ diff --git a/New_Client/log/aruudvef.log b/New_Client/log/aruudvef.log new file mode 100644 index 0000000..6d420c6 --- /dev/null +++ b/New_Client/log/aruudvef.log @@ -0,0 +1,6 @@ +18:31:53,299 root INFO starting game engine +18:31:53,300 root INFO initializing dependencies +18:31:53,543 root INFO initializing world +18:31:53,545 root INFO building game world +18:31:53,562 root INFO initializing engine Event Handler +18:31:53,562 root INFO attempting to login to server diff --git a/New_Client/log/azkihdia.log b/New_Client/log/azkihdia.log new file mode 100644 index 0000000..3e6a943 --- /dev/null +++ b/New_Client/log/azkihdia.log @@ -0,0 +1,6 @@ +18:35:17,398 root INFO starting game engine +18:35:17,399 root INFO initializing dependencies +18:35:17,647 root INFO initializing world +18:35:17,647 root INFO building game world +18:35:17,664 root INFO initializing engine Event Handler +18:35:17,664 root INFO attempting to login to server diff --git a/New_Client/log/cssmtaso.log b/New_Client/log/cssmtaso.log new file mode 100644 index 0000000..507a8b3 --- /dev/null +++ b/New_Client/log/cssmtaso.log @@ -0,0 +1,6 @@ +18:28:36,740 root INFO starting game engine +18:28:36,740 root INFO initializing dependencies +18:28:36,976 root INFO initializing world +18:28:36,976 root INFO building game world +18:28:36,995 root INFO initializing engine Event Handler +18:28:36,995 root INFO attempting to login to server diff --git a/New_Client/log/dypjnvwx.log b/New_Client/log/dypjnvwx.log new file mode 100644 index 0000000..9c3683e --- /dev/null +++ b/New_Client/log/dypjnvwx.log @@ -0,0 +1,6 @@ +18:24:39,228 root INFO starting game engine +18:24:39,229 root INFO initializing dependencies +18:24:39,473 root INFO initializing world +18:24:39,473 root INFO building game world +18:24:39,489 root INFO initializing engine Event Handler +18:24:39,490 root INFO attempting to login to server diff --git a/New_Client/log/ecnwzwpv.log b/New_Client/log/ecnwzwpv.log new file mode 100644 index 0000000..3f8fd1c --- /dev/null +++ b/New_Client/log/ecnwzwpv.log @@ -0,0 +1,6 @@ +18:24:07,392 root INFO starting game engine +18:24:07,392 root INFO initializing dependencies +18:24:07,636 root INFO initializing world +18:24:07,636 root INFO building game world +18:24:07,653 root INFO initializing engine Event Handler +18:24:07,653 root INFO attempting to login to server diff --git a/New_Client/log/ezuxqfek.log b/New_Client/log/ezuxqfek.log new file mode 100644 index 0000000..a669868 --- /dev/null +++ b/New_Client/log/ezuxqfek.log @@ -0,0 +1,6 @@ +18:34:47,406 root INFO starting game engine +18:34:47,406 root INFO initializing dependencies +18:34:47,651 root INFO initializing world +18:34:47,651 root INFO building game world +18:34:47,668 root INFO initializing engine Event Handler +18:34:47,669 root INFO attempting to login to server diff --git a/New_Client/log/hpyfylsj.log b/New_Client/log/hpyfylsj.log new file mode 100644 index 0000000..3890461 --- /dev/null +++ b/New_Client/log/hpyfylsj.log @@ -0,0 +1,6 @@ +18:15:16,227 root INFO starting game engine +18:15:16,227 root INFO initializing dependencies +18:15:16,469 root INFO initializing world +18:15:16,469 root INFO building game world +18:15:16,486 root INFO initializing engine Event Handler +18:15:16,487 root INFO attempting to login to server diff --git a/New_Client/log/jqqeltiy.log b/New_Client/log/jqqeltiy.log new file mode 100644 index 0000000..abcb170 --- /dev/null +++ b/New_Client/log/jqqeltiy.log @@ -0,0 +1,6 @@ +18:26:41,981 root INFO starting game engine +18:26:41,982 root INFO initializing dependencies +18:26:42,202 root INFO initializing world +18:26:42,202 root INFO building game world +18:26:44,431 root INFO initializing engine Event Handler +18:26:44,431 root INFO attempting to login to server diff --git a/New_Client/log/mhtlvsqm.log b/New_Client/log/mhtlvsqm.log new file mode 100644 index 0000000..5e1a630 --- /dev/null +++ b/New_Client/log/mhtlvsqm.log @@ -0,0 +1,6 @@ +18:03:55,272 root INFO starting game engine +18:03:55,273 root INFO initializing dependencies +18:03:55,522 root INFO initializing world +18:03:55,524 root INFO building game world +18:03:55,541 root INFO initializing engine Event Handler +18:03:55,541 root INFO attempting to login to server diff --git a/New_Client/log/pbwegfvw.log b/New_Client/log/pbwegfvw.log new file mode 100644 index 0000000..85b8c96 --- /dev/null +++ b/New_Client/log/pbwegfvw.log @@ -0,0 +1,4 @@ +18:28:05,511 root INFO starting game engine +18:28:05,512 root INFO initializing dependencies +18:28:05,733 root INFO initializing world +18:28:05,735 root INFO building game world diff --git a/New_Client/log/qqebhbex.log b/New_Client/log/qqebhbex.log new file mode 100644 index 0000000..150872d --- /dev/null +++ b/New_Client/log/qqebhbex.log @@ -0,0 +1,6 @@ +18:12:06,302 root INFO starting game engine +18:12:06,302 root INFO initializing dependencies +18:12:06,552 root INFO initializing world +18:12:06,553 root INFO building game world +18:12:06,570 root INFO initializing engine Event Handler +18:12:06,571 root INFO attempting to login to server diff --git a/New_Client/log/rnwforll.log b/New_Client/log/rnwforll.log new file mode 100644 index 0000000..17f202d --- /dev/null +++ b/New_Client/log/rnwforll.log @@ -0,0 +1,6 @@ +18:26:02,924 root INFO starting game engine +18:26:02,925 root INFO initializing dependencies +18:26:03,152 root INFO initializing world +18:26:03,153 root INFO building game world +18:26:15,219 root INFO initializing engine Event Handler +18:26:15,219 root INFO attempting to login to server diff --git a/New_Client/log/rrffvbhc.log b/New_Client/log/rrffvbhc.log new file mode 100644 index 0000000..8877eee --- /dev/null +++ b/New_Client/log/rrffvbhc.log @@ -0,0 +1,6 @@ +18:31:12,770 root INFO starting game engine +18:31:12,771 root INFO initializing dependencies +18:31:13,6 root INFO initializing world +18:31:13,6 root INFO building game world +18:31:13,23 root INFO initializing engine Event Handler +18:31:13,23 root INFO attempting to login to server diff --git a/New_Client/log/snqncicq.log b/New_Client/log/snqncicq.log new file mode 100644 index 0000000..df03f86 --- /dev/null +++ b/New_Client/log/snqncicq.log @@ -0,0 +1,6 @@ +18:32:14,21 root INFO starting game engine +18:32:14,22 root INFO initializing dependencies +18:32:14,268 root INFO initializing world +18:32:14,268 root INFO building game world +18:32:14,285 root INFO initializing engine Event Handler +18:32:14,285 root INFO attempting to login to server diff --git a/New_Client/log/sstwdlli.log b/New_Client/log/sstwdlli.log new file mode 100644 index 0000000..3142c48 --- /dev/null +++ b/New_Client/log/sstwdlli.log @@ -0,0 +1,6 @@ +18:17:42,689 root INFO starting game engine +18:17:42,689 root INFO initializing dependencies +18:17:42,927 root INFO initializing world +18:17:42,928 root INFO building game world +18:17:42,946 root INFO initializing engine Event Handler +18:17:42,946 root INFO attempting to login to server diff --git a/New_Client/log/vzybrxrc.log b/New_Client/log/vzybrxrc.log new file mode 100644 index 0000000..52e5aed --- /dev/null +++ b/New_Client/log/vzybrxrc.log @@ -0,0 +1,6 @@ +18:25:06,487 root INFO starting game engine +18:25:06,487 root INFO initializing dependencies +18:25:06,730 root INFO initializing world +18:25:06,730 root INFO building game world +18:25:06,748 root INFO initializing engine Event Handler +18:25:06,748 root INFO attempting to login to server diff --git a/New_Client/log/wqfhotaq.log b/New_Client/log/wqfhotaq.log new file mode 100644 index 0000000..825538c --- /dev/null +++ b/New_Client/log/wqfhotaq.log @@ -0,0 +1,6 @@ +18:35:28,383 root INFO starting game engine +18:35:28,383 root INFO initializing dependencies +18:35:28,619 root INFO initializing world +18:35:28,620 root INFO building game world +18:35:28,637 root INFO initializing engine Event Handler +18:35:28,638 root INFO attempting to login to server diff --git a/New_Client/log/xqetosuq.log b/New_Client/log/xqetosuq.log new file mode 100644 index 0000000..9822c82 --- /dev/null +++ b/New_Client/log/xqetosuq.log @@ -0,0 +1,6 @@ +18:28:22,876 root INFO starting game engine +18:28:22,876 root INFO initializing dependencies +18:28:23,117 root INFO initializing world +18:28:23,117 root INFO building game world +18:28:23,134 root INFO initializing engine Event Handler +18:28:23,135 root INFO attempting to login to server diff --git a/New_Client/log/xwrmortx.log b/New_Client/log/xwrmortx.log new file mode 100644 index 0000000..76c0ab5 --- /dev/null +++ b/New_Client/log/xwrmortx.log @@ -0,0 +1,6 @@ +18:14:40,491 root INFO starting game engine +18:14:40,492 root INFO initializing dependencies +18:14:40,714 root INFO initializing world +18:14:40,715 root INFO building game world +18:14:41,59 root INFO initializing engine Event Handler +18:14:41,168 root INFO attempting to login to server diff --git a/New_Client/log/xxfpqmla.log b/New_Client/log/xxfpqmla.log new file mode 100644 index 0000000..3a73195 --- /dev/null +++ b/New_Client/log/xxfpqmla.log @@ -0,0 +1,6 @@ +18:17:28,90 root INFO starting game engine +18:17:28,90 root INFO initializing dependencies +18:17:28,335 root INFO initializing world +18:17:28,336 root INFO building game world +18:17:28,352 root INFO initializing engine Event Handler +18:17:28,352 root INFO attempting to login to server diff --git a/New_Client/log/ysnrngup.log b/New_Client/log/ysnrngup.log new file mode 100644 index 0000000..a45e4ca --- /dev/null +++ b/New_Client/log/ysnrngup.log @@ -0,0 +1,4 @@ +18:30:56,421 root INFO starting game engine +18:30:56,421 root INFO initializing dependencies +18:30:56,654 root INFO initializing world +18:30:56,654 root INFO building game world diff --git a/New_Client/log/zlnfjkpf.log b/New_Client/log/zlnfjkpf.log new file mode 100644 index 0000000..0086ccb --- /dev/null +++ b/New_Client/log/zlnfjkpf.log @@ -0,0 +1,6 @@ +18:14:31,193 root INFO starting game engine +18:14:31,193 root INFO initializing dependencies +18:14:31,416 root INFO initializing world +18:14:31,416 root INFO building game world +18:14:36,438 root INFO initializing engine Event Handler +18:14:36,864 root INFO attempting to login to server diff --git a/New_Client/log/zoukqhzj.log b/New_Client/log/zoukqhzj.log new file mode 100644 index 0000000..4ead003 --- /dev/null +++ b/New_Client/log/zoukqhzj.log @@ -0,0 +1,6 @@ +18:34:33,865 root INFO starting game engine +18:34:33,865 root INFO initializing dependencies +18:34:34,103 root INFO initializing world +18:34:34,104 root INFO building game world +18:34:34,121 root INFO initializing engine Event Handler +18:34:34,121 root INFO attempting to login to server diff --git a/New_Client/log/zpvgppfk.log b/New_Client/log/zpvgppfk.log new file mode 100644 index 0000000..11d7f19 --- /dev/null +++ b/New_Client/log/zpvgppfk.log @@ -0,0 +1,5 @@ +18:37:44,978 root INFO starting game engine +18:37:44,978 root INFO initializing dependencies +18:37:45,225 root INFO initializing world +18:37:45,225 root INFO building game world +18:37:45,242 root INFO logging into server diff --git a/New_Client/main.py b/New_Client/main.py new file mode 100644 index 0000000..ec7ad0e --- /dev/null +++ b/New_Client/main.py @@ -0,0 +1,11 @@ +from App import App +from Classes.Engine.Logger import Logger +from Classes.Engine.Utils.StringUtils import StringUtils +from Classes.Engine.Utils.Path import PathUtil + +if __name__ == "__main__": + + logger = Logger(PathUtil.getAbsolutePathTo("log/"+StringUtils.get_random_string(8)+".log")) + + logger.info("starting game engine") + game = App(logger) \ No newline at end of file diff --git a/Game Server/.env b/OLD_Server/.env similarity index 100% rename from Game Server/.env rename to OLD_Server/.env diff --git a/Game Server/.vscode/settings.json b/OLD_Server/.vscode/settings.json similarity index 100% rename from Game Server/.vscode/settings.json rename to OLD_Server/.vscode/settings.json diff --git a/OLD_Server/Assets/Arenas/default.png b/OLD_Server/Assets/Arenas/default.png new file mode 100644 index 0000000..ba5da22 Binary files /dev/null and b/OLD_Server/Assets/Arenas/default.png differ diff --git a/OLD_Server/Assets/Cards/Arena/field.png b/OLD_Server/Assets/Cards/Arena/field.png new file mode 100644 index 0000000..472f0a1 Binary files /dev/null and b/OLD_Server/Assets/Cards/Arena/field.png differ diff --git a/Game Server/Assets/Cards/MonsterCards/testmonstercard/card.json b/OLD_Server/Assets/Cards/MonsterCards/testmonstercard/card.json similarity index 100% rename from Game Server/Assets/Cards/MonsterCards/testmonstercard/card.json rename to OLD_Server/Assets/Cards/MonsterCards/testmonstercard/card.json diff --git a/Game_Client/Assets/Cards/1/card.png b/OLD_Server/Assets/Cards/MonsterCards/testmonstercard/card.png similarity index 100% rename from Game_Client/Assets/Cards/1/card.png rename to OLD_Server/Assets/Cards/MonsterCards/testmonstercard/card.png diff --git a/OLD_Server/Assets/Cards/SpeelCards/testspellcard/artworkjson.png b/OLD_Server/Assets/Cards/SpeelCards/testspellcard/artworkjson.png new file mode 100644 index 0000000..9955a0c Binary files /dev/null and b/OLD_Server/Assets/Cards/SpeelCards/testspellcard/artworkjson.png differ diff --git a/Game Server/Assets/Cards/SpeelCards/testspellcard/testspellcard.json b/OLD_Server/Assets/Cards/SpeelCards/testspellcard/testspellcard.json similarity index 100% rename from Game Server/Assets/Cards/SpeelCards/testspellcard/testspellcard.json rename to OLD_Server/Assets/Cards/SpeelCards/testspellcard/testspellcard.json diff --git a/OLD_Server/Assets/Cards/TrapCards/testtrapcard/artworkjson.png b/OLD_Server/Assets/Cards/TrapCards/testtrapcard/artworkjson.png new file mode 100644 index 0000000..9955a0c Binary files /dev/null and b/OLD_Server/Assets/Cards/TrapCards/testtrapcard/artworkjson.png differ diff --git a/Game Server/Assets/Cards/TrapCards/testtrapcard/testtrapcard.json b/OLD_Server/Assets/Cards/TrapCards/testtrapcard/testtrapcard.json similarity index 100% rename from Game Server/Assets/Cards/TrapCards/testtrapcard/testtrapcard.json rename to OLD_Server/Assets/Cards/TrapCards/testtrapcard/testtrapcard.json diff --git a/Game Server/Classes/Game/Player.py b/OLD_Server/Classes/Game/Player.py similarity index 97% rename from Game Server/Classes/Game/Player.py rename to OLD_Server/Classes/Game/Player.py index 4578d56..5ac1b1a 100644 --- a/Game Server/Classes/Game/Player.py +++ b/OLD_Server/Classes/Game/Player.py @@ -10,6 +10,7 @@ class Player: def __init__(self, name:str, deck:list, hp:int=1000, mana:int=0): self.__hp = hp + self.__mana = mana self.__name = name self.__handCards = [] self.__deck = deck diff --git a/Game Server/Classes/Game/__pycache__/Player.cpython-311.pyc b/OLD_Server/Classes/Game/__pycache__/Player.cpython-311.pyc similarity index 57% rename from Game Server/Classes/Game/__pycache__/Player.cpython-311.pyc rename to OLD_Server/Classes/Game/__pycache__/Player.cpython-311.pyc index 85b3540..2c346f1 100644 Binary files a/Game Server/Classes/Game/__pycache__/Player.cpython-311.pyc and b/OLD_Server/Classes/Game/__pycache__/Player.cpython-311.pyc differ diff --git a/Game Server/Classes/Game/__pycache__/Player.cpython-312.pyc b/OLD_Server/Classes/Game/__pycache__/Player.cpython-312.pyc similarity index 100% rename from Game Server/Classes/Game/__pycache__/Player.cpython-312.pyc rename to OLD_Server/Classes/Game/__pycache__/Player.cpython-312.pyc diff --git a/Game Server/Classes/System/GameManager.py b/OLD_Server/Classes/System/GameManager.py similarity index 76% rename from Game Server/Classes/System/GameManager.py rename to OLD_Server/Classes/System/GameManager.py index 162f08e..6c4cb1b 100644 --- a/Game Server/Classes/System/GameManager.py +++ b/OLD_Server/Classes/System/GameManager.py @@ -1,5 +1,6 @@ import json import socket +import time from Classes.Game.Player import Player @@ -8,6 +9,7 @@ class GameManager: __playingPlayer:Player __state:str __round:str + __cards:list def __init__(self, logger): self.__players = {} @@ -15,11 +17,34 @@ class GameManager: self.__state = "waiting" self.__round = "none" self.logger = logger + self.__cards = [] pass def getLogger(self): return self.logger + # card management + def spawnCard(self, card, owner, x, y): + # self.logger.info("spawning card") + + self.__cards.append(card) + + payload = { + "event":"PlacedCard", + "owner": owner, + "card": card, + "x": x, + "y": y, + } + + for userAddr in self.__players.keys(): + try: + self.logger.info(f"send to client {self.__players[userAddr]['player'].getID() != owner}") + if self.__players[userAddr]["player"].getID() != owner: + self.__players[userAddr]["socket"].send(json.dumps(payload).encode()) + except: + pass + # game round management # this section manages the flow of rounds this should inherit itself # ============================================================================= @@ -56,7 +81,7 @@ class GameManager: user.addMana(1000) user.adjustHP(1000) user.shuffleDeck() - cards = user.getDeck() + cards = self.__players[userAddr]["deck"] user.setHand(cards[:5]) # iterates until the enemy player is not anymore equal to current player @@ -76,7 +101,8 @@ class GameManager: }, } - tcpSocket.send(json.dumps(payload).encode()) + print(f"user {player_data["socket"]}") + player_data["socket"].send(json.dumps(payload).encode()) except Exception as e: self.logger.error(f"failed to start game due to error: {e}") break @@ -96,19 +122,31 @@ class GameManager: # creates a player and handles counting all players and if conditions met starting the game # returns the new dict in which the new player now is added - def addPlayers(self, player:Player, socket:socket, clientAddr) -> dict: + def addPlayers(self, player:Player, socket:socket, clientAddr, deck) -> dict: self.logger.info(f"creating user with id: {player.getID}") self.__players[clientAddr] = { "player": player, + "deck": deck, "socket":socket } self.logger.info(f"new length of user dictionary: {len(self.__players)}") + payload = { + "event":"loginresponse", + "status": "success", + "id": player.getID(), + "name": player.getName() + } + + socket.send(json.dumps(payload).encode()) + + # counts participating players and starts the game if enough have joined - if len(self.__players) == 2: + if len(self.__players) >= 2: + time.sleep(1) self.logger.info("2 players have join game starts") - self.startGame(socket) + self.startGame() return self.__players diff --git a/OLD_Server/Classes/System/Logger.py b/OLD_Server/Classes/System/Logger.py new file mode 100644 index 0000000..b548160 --- /dev/null +++ b/OLD_Server/Classes/System/Logger.py @@ -0,0 +1,18 @@ +import logging + + +class Logger: + def __init__(self, filename): + logging.basicConfig(filename=filename, + filemode='a', + format='%(asctime)s,%(msecs)d %(name)s %(levelname)s %(message)s', + datefmt='%H:%M:%S', + level=logging.DEBUG) + + def info(self, message): + print(message) + logging.info(message) + + def error(self, message): + print(message) + logging.error(message) \ No newline at end of file diff --git a/Game Server/Classes/System/Network/EventHandler.py b/OLD_Server/Classes/System/Network/EventHandler.py similarity index 100% rename from Game Server/Classes/System/Network/EventHandler.py rename to OLD_Server/Classes/System/Network/EventHandler.py diff --git a/Game Server/Classes/System/Network/NetworkManger.py b/OLD_Server/Classes/System/Network/NetworkManger.py similarity index 99% rename from Game Server/Classes/System/Network/NetworkManger.py rename to OLD_Server/Classes/System/Network/NetworkManger.py index 930dc30..b6d2174 100644 --- a/Game Server/Classes/System/Network/NetworkManger.py +++ b/OLD_Server/Classes/System/Network/NetworkManger.py @@ -86,7 +86,7 @@ class NetworkManager: if messageJson["event"] == "login": self.__gameManager.getLogger().info("user logging in") self.__gameManager.getLogger().info("task passed off to gameManager") - user = self.__gameManager.addPlayers(Player(messageJson["username"], messageJson["deck"]), client_socket, client_address) + user = self.__gameManager.addPlayers(Player(messageJson["username"], messageJson["deck"]), client_socket, client_address, messageJson["deck"]) self.__gameManager.getLogger().info(f"connected users {len(self.__gameManager.getPlayers())}") self.__gameManager.getLogger().info(f"confirming login for user") diff --git a/OLD_Server/Classes/System/Network/__pycache__/EventHandler.cpython-311.pyc b/OLD_Server/Classes/System/Network/__pycache__/EventHandler.cpython-311.pyc new file mode 100644 index 0000000..8e128bb Binary files /dev/null and b/OLD_Server/Classes/System/Network/__pycache__/EventHandler.cpython-311.pyc differ diff --git a/OLD_Server/Classes/System/Network/__pycache__/EventHandler.cpython-312.pyc b/OLD_Server/Classes/System/Network/__pycache__/EventHandler.cpython-312.pyc new file mode 100644 index 0000000..5f66d8b Binary files /dev/null and b/OLD_Server/Classes/System/Network/__pycache__/EventHandler.cpython-312.pyc differ diff --git a/Game Server/Classes/System/Network/__pycache__/NetworkManger.cpython-311.pyc b/OLD_Server/Classes/System/Network/__pycache__/NetworkManger.cpython-311.pyc similarity index 50% rename from Game Server/Classes/System/Network/__pycache__/NetworkManger.cpython-311.pyc rename to OLD_Server/Classes/System/Network/__pycache__/NetworkManger.cpython-311.pyc index 30891a1..a79516b 100644 Binary files a/Game Server/Classes/System/Network/__pycache__/NetworkManger.cpython-311.pyc and b/OLD_Server/Classes/System/Network/__pycache__/NetworkManger.cpython-311.pyc differ diff --git a/OLD_Server/Classes/System/Network/__pycache__/NetworkManger.cpython-312.pyc b/OLD_Server/Classes/System/Network/__pycache__/NetworkManger.cpython-312.pyc new file mode 100644 index 0000000..69b4416 Binary files /dev/null and b/OLD_Server/Classes/System/Network/__pycache__/NetworkManger.cpython-312.pyc differ diff --git a/Game Server/Classes/System/PlayerManager.py b/OLD_Server/Classes/System/PlayerManager.py similarity index 100% rename from Game Server/Classes/System/PlayerManager.py rename to OLD_Server/Classes/System/PlayerManager.py diff --git a/Game Server/Classes/System/QueueManager.py b/OLD_Server/Classes/System/QueueManager.py similarity index 94% rename from Game Server/Classes/System/QueueManager.py rename to OLD_Server/Classes/System/QueueManager.py index d0b3adf..be82662 100644 --- a/Game Server/Classes/System/QueueManager.py +++ b/OLD_Server/Classes/System/QueueManager.py @@ -1,4 +1,6 @@ -from Classes.Objects.Player import Player + + +from Classes.Game.Player import Player class QueueManager: diff --git a/Game Server/Classes/System/Server.py b/OLD_Server/Classes/System/Server.py similarity index 100% rename from Game Server/Classes/System/Server.py rename to OLD_Server/Classes/System/Server.py diff --git a/OLD_Server/Classes/System/Utils/Path.py b/OLD_Server/Classes/System/Utils/Path.py new file mode 100644 index 0000000..a274f43 --- /dev/null +++ b/OLD_Server/Classes/System/Utils/Path.py @@ -0,0 +1,6 @@ +import os + + +class PathUtil: + def getAbsolutePathTo(notAbsolutPath:str) -> str: + return os.path.abspath("OLD_Server/" + notAbsolutPath) \ No newline at end of file diff --git a/OLD_Server/Classes/System/Utils/StringUtils.py b/OLD_Server/Classes/System/Utils/StringUtils.py new file mode 100644 index 0000000..e4d02a1 --- /dev/null +++ b/OLD_Server/Classes/System/Utils/StringUtils.py @@ -0,0 +1,11 @@ +import random +import string + + +class StringUtils: + def get_random_string(length) -> str: + # choose from all lowercase letter + letters = string.ascii_lowercase + result_str = ''.join(random.choice(letters) for i in range(length)) + print("Random string of length", length, "is:", result_str) + return result_str diff --git a/Game Server/Classes/System/World.py b/OLD_Server/Classes/System/World.py similarity index 100% rename from Game Server/Classes/System/World.py rename to OLD_Server/Classes/System/World.py diff --git a/OLD_Server/Classes/System/__pycache__/GameManager.cpython-311.pyc b/OLD_Server/Classes/System/__pycache__/GameManager.cpython-311.pyc new file mode 100644 index 0000000..34fddbb Binary files /dev/null and b/OLD_Server/Classes/System/__pycache__/GameManager.cpython-311.pyc differ diff --git a/OLD_Server/Classes/System/__pycache__/GameManager.cpython-312.pyc b/OLD_Server/Classes/System/__pycache__/GameManager.cpython-312.pyc new file mode 100644 index 0000000..9effb6a Binary files /dev/null and b/OLD_Server/Classes/System/__pycache__/GameManager.cpython-312.pyc differ diff --git a/Game Server/Classes/System/__pycache__/Logger.cpython-311.pyc b/OLD_Server/Classes/System/__pycache__/Logger.cpython-311.pyc similarity index 90% rename from Game Server/Classes/System/__pycache__/Logger.cpython-311.pyc rename to OLD_Server/Classes/System/__pycache__/Logger.cpython-311.pyc index 70bc9f6..7dc2efc 100644 Binary files a/Game Server/Classes/System/__pycache__/Logger.cpython-311.pyc and b/OLD_Server/Classes/System/__pycache__/Logger.cpython-311.pyc differ diff --git a/OLD_Server/Classes/System/__pycache__/Logger.cpython-312.pyc b/OLD_Server/Classes/System/__pycache__/Logger.cpython-312.pyc new file mode 100644 index 0000000..24c0a41 Binary files /dev/null and b/OLD_Server/Classes/System/__pycache__/Logger.cpython-312.pyc differ diff --git a/Game Server/Classes/System/__pycache__/PlayerManager.cpython-311.pyc b/OLD_Server/Classes/System/__pycache__/PlayerManager.cpython-311.pyc similarity index 77% rename from Game Server/Classes/System/__pycache__/PlayerManager.cpython-311.pyc rename to OLD_Server/Classes/System/__pycache__/PlayerManager.cpython-311.pyc index 8f10d08..b43d1ec 100644 Binary files a/Game Server/Classes/System/__pycache__/PlayerManager.cpython-311.pyc and b/OLD_Server/Classes/System/__pycache__/PlayerManager.cpython-311.pyc differ diff --git a/Game Server/Classes/System/__pycache__/PlayerManager.cpython-312.pyc b/OLD_Server/Classes/System/__pycache__/PlayerManager.cpython-312.pyc similarity index 90% rename from Game Server/Classes/System/__pycache__/PlayerManager.cpython-312.pyc rename to OLD_Server/Classes/System/__pycache__/PlayerManager.cpython-312.pyc index fccebea..d3f0a4c 100644 Binary files a/Game Server/Classes/System/__pycache__/PlayerManager.cpython-312.pyc and b/OLD_Server/Classes/System/__pycache__/PlayerManager.cpython-312.pyc differ diff --git a/Game Server/Classes/System/__pycache__/Server.cpython-311.pyc b/OLD_Server/Classes/System/__pycache__/Server.cpython-311.pyc similarity index 94% rename from Game Server/Classes/System/__pycache__/Server.cpython-311.pyc rename to OLD_Server/Classes/System/__pycache__/Server.cpython-311.pyc index 760f001..9c11ea7 100644 Binary files a/Game Server/Classes/System/__pycache__/Server.cpython-311.pyc and b/OLD_Server/Classes/System/__pycache__/Server.cpython-311.pyc differ diff --git a/Game Server/Classes/System/__pycache__/Server.cpython-312.pyc b/OLD_Server/Classes/System/__pycache__/Server.cpython-312.pyc similarity index 79% rename from Game Server/Classes/System/__pycache__/Server.cpython-312.pyc rename to OLD_Server/Classes/System/__pycache__/Server.cpython-312.pyc index 7700f63..e6f1af4 100644 Binary files a/Game Server/Classes/System/__pycache__/Server.cpython-312.pyc and b/OLD_Server/Classes/System/__pycache__/Server.cpython-312.pyc differ diff --git a/Game Server/Classes/System/__pycache__/World.cpython-311.pyc b/OLD_Server/Classes/System/__pycache__/World.cpython-311.pyc similarity index 89% rename from Game Server/Classes/System/__pycache__/World.cpython-311.pyc rename to OLD_Server/Classes/System/__pycache__/World.cpython-311.pyc index ccd945b..a74158d 100644 Binary files a/Game Server/Classes/System/__pycache__/World.cpython-311.pyc and b/OLD_Server/Classes/System/__pycache__/World.cpython-311.pyc differ diff --git a/Game Server/Classes/System/__pycache__/World.cpython-312.pyc b/OLD_Server/Classes/System/__pycache__/World.cpython-312.pyc similarity index 72% rename from Game Server/Classes/System/__pycache__/World.cpython-312.pyc rename to OLD_Server/Classes/System/__pycache__/World.cpython-312.pyc index e427115..d798c68 100644 Binary files a/Game Server/Classes/System/__pycache__/World.cpython-312.pyc and b/OLD_Server/Classes/System/__pycache__/World.cpython-312.pyc differ diff --git a/Game Server/index.py b/OLD_Server/index.py similarity index 84% rename from Game Server/index.py rename to OLD_Server/index.py index d06c09f..27fd861 100644 --- a/Game Server/index.py +++ b/OLD_Server/index.py @@ -6,6 +6,7 @@ import sys from Classes.System.Server import Server from Classes.System.Logger import Logger +from Classes.System.Utils.Path import PathUtil def get_random_string(length) -> str: # choose from all lowercase letter @@ -20,7 +21,7 @@ def main(): TCPPORT = "54322" UDPPORT = "54323" - logger = Logger("log/"+get_random_string(8)+".log") + logger = Logger(PathUtil.getAbsolutePathTo("log/"+get_random_string(8)+".log")) logger.info("starting up server") server = Server(HOST, TCPPORT, UDPPORT, logging) server.getNetworkManager().tcp.stop() diff --git a/OLD_Server/log/ftosavkt.log b/OLD_Server/log/ftosavkt.log new file mode 100644 index 0000000..5997e28 --- /dev/null +++ b/OLD_Server/log/ftosavkt.log @@ -0,0 +1,35 @@ +10:14:25,144 root INFO starting up server +10:14:25,145 root INFO starting up game manager +10:14:25,145 root INFO preparing to start server +10:14:25,145 root INFO starting up network manager +10:14:25,145 root INFO starting up network manager +10:14:25,145 root INFO starting up tcp server +10:14:25,147 root INFO starting up thread for client socket accepting +10:14:28,852 root INFO Connected with ('127.0.0.1', 40793) +10:14:28,853 root INFO starting client handler thread for client at address ('127.0.0.1', 40793) +10:14:28,862 root INFO decoded message {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:14:28,863 root INFO user in message None +10:14:28,864 root INFO user logging in +10:14:28,865 root INFO task passed off to gameManager +10:14:28,866 root INFO creating user with id: > +10:14:28,866 root INFO new length of user dictionary: 1 +10:14:28,866 root INFO connected users 1 +10:14:28,867 root INFO confirming login for user +10:14:28,868 root INFO incommingevent {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:14:28,868 root INFO Received message from ('127.0.0.1', 40793): {"event": "login", "username": "player", "deck": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:14:37,604 root INFO Connected with ('127.0.0.1', 40802) +10:14:37,604 root INFO starting client handler thread for client at address ('127.0.0.1', 40802) +10:14:37,617 root INFO decoded message {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:14:37,618 root INFO user in message None +10:14:37,618 root INFO user logging in +10:14:37,618 root INFO task passed off to gameManager +10:14:37,620 root INFO creating user with id: > +10:14:37,622 root INFO new length of user dictionary: 2 +10:14:38,623 root INFO 2 players have join game starts +10:14:38,624 root INFO game manager is starting the game +10:14:38,624 root INFO connected users 2 +10:14:38,625 root INFO confirming login for user +10:14:38,626 root INFO incommingevent {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:14:38,626 root INFO Received message from ('127.0.0.1', 40802): {"event": "login", "username": "player", "deck": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:14:45,312 root ERROR Connection with ('127.0.0.1', 40802) forcibly closed by remote host. +10:14:48,810 root ERROR Connection with ('127.0.0.1', 40793) forcibly closed by remote host. diff --git a/OLD_Server/log/kuketiqt.log b/OLD_Server/log/kuketiqt.log new file mode 100644 index 0000000..25a6234 --- /dev/null +++ b/OLD_Server/log/kuketiqt.log @@ -0,0 +1,35 @@ +10:03:57,851 root INFO starting up server +10:03:57,851 root INFO starting up game manager +10:03:57,852 root INFO preparing to start server +10:03:57,852 root INFO starting up network manager +10:03:57,852 root INFO starting up network manager +10:03:57,853 root INFO starting up tcp server +10:03:57,854 root INFO starting up thread for client socket accepting +10:04:05,109 root INFO Connected with ('127.0.0.1', 40671) +10:04:05,110 root INFO starting client handler thread for client at address ('127.0.0.1', 40671) +10:04:05,124 root INFO decoded message {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:04:05,125 root INFO user in message None +10:04:05,125 root INFO user logging in +10:04:05,125 root INFO task passed off to gameManager +10:04:05,126 root INFO creating user with id: > +10:04:05,126 root INFO new length of user dictionary: 1 +10:04:05,126 root INFO connected users 1 +10:04:05,126 root INFO confirming login for user +10:04:05,126 root INFO incommingevent {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:04:05,127 root INFO Received message from ('127.0.0.1', 40671): {"event": "login", "username": "player", "deck": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:04:11,420 root INFO Connected with ('127.0.0.1', 40672) +10:04:11,420 root INFO starting client handler thread for client at address ('127.0.0.1', 40672) +10:04:11,439 root INFO decoded message {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:04:11,439 root INFO user in message None +10:04:11,439 root INFO user logging in +10:04:11,439 root INFO task passed off to gameManager +10:04:11,440 root INFO creating user with id: > +10:04:11,440 root INFO new length of user dictionary: 2 +10:04:12,441 root INFO 2 players have join game starts +10:04:12,442 root INFO game manager is starting the game +10:04:12,442 root ERROR failed to start game due to error: list indices must be integers or slices, not str +10:04:12,444 root ERROR failed to start game due to error: list indices must be integers or slices, not str +10:04:12,445 root INFO connected users 2 +10:04:12,445 root INFO confirming login for user +10:04:12,445 root INFO incommingevent {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:04:12,445 root INFO Received message from ('127.0.0.1', 40672): {"event": "login", "username": "player", "deck": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} diff --git a/OLD_Server/log/mjlawgym.log b/OLD_Server/log/mjlawgym.log new file mode 100644 index 0000000..6a8d90a --- /dev/null +++ b/OLD_Server/log/mjlawgym.log @@ -0,0 +1,35 @@ +10:13:00,7 root INFO starting up server +10:13:00,8 root INFO starting up game manager +10:13:00,8 root INFO preparing to start server +10:13:00,8 root INFO starting up network manager +10:13:00,9 root INFO starting up network manager +10:13:00,9 root INFO starting up tcp server +10:13:00,11 root INFO starting up thread for client socket accepting +10:13:16,730 root INFO Connected with ('127.0.0.1', 40780) +10:13:16,731 root INFO starting client handler thread for client at address ('127.0.0.1', 40780) +10:13:16,732 root INFO decoded message {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:13:16,733 root INFO user in message None +10:13:16,733 root INFO user logging in +10:13:16,734 root INFO task passed off to gameManager +10:13:16,734 root INFO creating user with id: > +10:13:16,735 root INFO new length of user dictionary: 1 +10:13:16,735 root INFO connected users 1 +10:13:16,737 root INFO confirming login for user +10:13:16,738 root INFO incommingevent {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:13:16,738 root INFO Received message from ('127.0.0.1', 40780): {"event": "login", "username": "player", "deck": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:13:25,741 root INFO Connected with ('127.0.0.1', 40781) +10:13:25,741 root INFO starting client handler thread for client at address ('127.0.0.1', 40781) +10:13:25,773 root INFO decoded message {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:13:25,775 root INFO user in message None +10:13:25,775 root INFO user logging in +10:13:25,776 root INFO task passed off to gameManager +10:13:25,779 root INFO creating user with id: > +10:13:25,780 root INFO new length of user dictionary: 2 +10:13:26,781 root INFO 2 players have join game starts +10:13:26,781 root INFO game manager is starting the game +10:13:26,783 root INFO connected users 2 +10:13:26,784 root INFO confirming login for user +10:13:26,784 root INFO incommingevent {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:13:26,784 root INFO Received message from ('127.0.0.1', 40781): {"event": "login", "username": "player", "deck": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:13:50,23 root ERROR Connection with ('127.0.0.1', 40780) forcibly closed by remote host. +10:14:14,978 root ERROR Connection with ('127.0.0.1', 40781) forcibly closed by remote host. diff --git a/OLD_Server/log/ncyhufrr.log b/OLD_Server/log/ncyhufrr.log new file mode 100644 index 0000000..17a3e86 --- /dev/null +++ b/OLD_Server/log/ncyhufrr.log @@ -0,0 +1,35 @@ +10:05:33,787 root INFO starting up server +10:05:33,788 root INFO starting up game manager +10:05:33,788 root INFO preparing to start server +10:05:33,788 root INFO starting up network manager +10:05:33,788 root INFO starting up network manager +10:05:33,788 root INFO starting up tcp server +10:05:33,790 root INFO starting up thread for client socket accepting +10:05:41,185 root INFO Connected with ('127.0.0.1', 40678) +10:05:41,185 root INFO starting client handler thread for client at address ('127.0.0.1', 40678) +10:05:41,203 root INFO decoded message {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:05:41,204 root INFO user in message None +10:05:41,204 root INFO user logging in +10:05:41,204 root INFO task passed off to gameManager +10:05:41,204 root INFO creating user with id: > +10:05:41,204 root INFO new length of user dictionary: 1 +10:05:41,205 root INFO connected users 1 +10:05:41,205 root INFO confirming login for user +10:05:41,206 root INFO incommingevent {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:05:41,206 root INFO Received message from ('127.0.0.1', 40678): {"event": "login", "username": "player", "deck": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:05:47,221 root INFO Connected with ('127.0.0.1', 40680) +10:05:47,221 root INFO starting client handler thread for client at address ('127.0.0.1', 40680) +10:05:47,229 root INFO decoded message {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:05:47,233 root INFO user in message None +10:05:47,234 root INFO user logging in +10:05:47,234 root INFO task passed off to gameManager +10:05:47,234 root INFO creating user with id: > +10:05:47,234 root INFO new length of user dictionary: 2 +10:05:48,235 root INFO 2 players have join game starts +10:05:48,236 root INFO game manager is starting the game +10:05:48,236 root ERROR failed to start game due to error: list indices must be integers or slices, not str +10:05:48,237 root ERROR failed to start game due to error: list indices must be integers or slices, not str +10:05:48,237 root INFO connected users 2 +10:05:48,237 root INFO confirming login for user +10:05:48,237 root INFO incommingevent {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:05:48,237 root INFO Received message from ('127.0.0.1', 40680): {"event": "login", "username": "player", "deck": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} diff --git a/OLD_Server/log/oiaflmlv.log b/OLD_Server/log/oiaflmlv.log new file mode 100644 index 0000000..1b02e2b --- /dev/null +++ b/OLD_Server/log/oiaflmlv.log @@ -0,0 +1,34 @@ +10:18:24,131 root INFO starting up server +10:18:24,131 root INFO starting up game manager +10:18:24,132 root INFO preparing to start server +10:18:24,132 root INFO starting up network manager +10:18:24,132 root INFO starting up network manager +10:18:24,133 root INFO starting up tcp server +10:18:24,135 root INFO starting up thread for client socket accepting +10:18:29,738 root INFO Connected with ('127.0.0.1', 10248) +10:18:29,738 root INFO starting client handler thread for client at address ('127.0.0.1', 10248) +10:18:29,741 root INFO decoded message {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:18:29,741 root INFO user in message None +10:18:29,741 root INFO user logging in +10:18:29,741 root INFO task passed off to gameManager +10:18:29,742 root INFO creating user with id: > +10:18:29,742 root INFO new length of user dictionary: 1 +10:18:29,742 root INFO connected users 1 +10:18:29,742 root INFO confirming login for user +10:18:29,742 root INFO incommingevent {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:18:29,742 root INFO Received message from ('127.0.0.1', 10248): {"event": "login", "username": "player", "deck": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:18:34,161 root INFO Connected with ('127.0.0.1', 10249) +10:18:34,163 root INFO starting client handler thread for client at address ('127.0.0.1', 10249) +10:18:34,182 root INFO decoded message {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:18:34,182 root INFO user in message None +10:18:34,183 root INFO user logging in +10:18:34,183 root INFO task passed off to gameManager +10:18:34,183 root INFO creating user with id: > +10:18:34,184 root INFO new length of user dictionary: 2 +10:18:35,184 root INFO 2 players have join game starts +10:18:35,186 root INFO game manager is starting the game +10:18:35,187 root INFO connected users 2 +10:18:35,187 root INFO confirming login for user +10:18:35,187 root INFO incommingevent {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:18:35,188 root INFO Received message from ('127.0.0.1', 10249): {"event": "login", "username": "player", "deck": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:18:48,867 root ERROR Connection with ('127.0.0.1', 10249) forcibly closed by remote host. diff --git a/OLD_Server/log/ooqpxwpe.log b/OLD_Server/log/ooqpxwpe.log new file mode 100644 index 0000000..75c8e7e --- /dev/null +++ b/OLD_Server/log/ooqpxwpe.log @@ -0,0 +1,41 @@ +10:20:46,144 root INFO starting up server +10:20:46,144 root INFO starting up game manager +10:20:46,144 root INFO preparing to start server +10:20:46,145 root INFO starting up network manager +10:20:46,145 root INFO starting up network manager +10:20:46,145 root INFO starting up tcp server +10:20:46,146 root INFO starting up thread for client socket accepting +10:20:51,500 root INFO Connected with ('127.0.0.1', 10276) +10:20:51,501 root INFO starting client handler thread for client at address ('127.0.0.1', 10276) +10:20:51,515 root INFO decoded message {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:20:51,515 root INFO user in message None +10:20:51,516 root INFO user logging in +10:20:51,516 root INFO task passed off to gameManager +10:20:51,517 root INFO creating user with id: > +10:20:51,517 root INFO new length of user dictionary: 1 +10:20:51,517 root INFO connected users 1 +10:20:51,518 root INFO confirming login for user +10:20:51,518 root INFO incommingevent {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:20:51,518 root INFO Received message from ('127.0.0.1', 10276): {"event": "login", "username": "player", "deck": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:21:07,724 root INFO Connected with ('127.0.0.1', 10277) +10:21:07,725 root INFO starting client handler thread for client at address ('127.0.0.1', 10277) +10:21:07,751 root INFO decoded message {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:21:07,752 root INFO user in message None +10:21:07,753 root INFO user logging in +10:21:07,753 root INFO task passed off to gameManager +10:21:07,753 root INFO creating user with id: > +10:21:07,753 root INFO new length of user dictionary: 2 +10:21:08,754 root INFO 2 players have join game starts +10:21:08,754 root INFO game manager is starting the game +10:21:08,756 root INFO connected users 2 +10:21:08,756 root INFO confirming login for user +10:21:08,756 root INFO incommingevent {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:21:08,756 root INFO Received message from ('127.0.0.1', 10277): {"event": "login", "username": "player", "deck": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:21:10,800 root INFO decoded message {'event': 'placecard', 'card': 1, 'type': 'Monster', 'user': 848, 'x': 1120.0, 'y': 600.0} +10:21:10,801 root INFO user in message 848 +10:21:10,801 root INFO incommingevent {'event': 'placecard', 'card': 1, 'type': 'Monster', 'user': 848, 'x': 1120.0, 'y': 600.0} +10:21:10,801 root INFO send to client True +10:21:10,802 root INFO send to client False +10:21:10,802 root INFO Received message from ('127.0.0.1', 10277): {"event": "placecard", "card": 1, "type": "Monster", "user": 848, "x": 1120.0, "y": 600.0} +10:21:21,124 root ERROR Connection with ('127.0.0.1', 10277) forcibly closed by remote host. +10:21:21,148 root ERROR Connection with ('127.0.0.1', 10276) forcibly closed by remote host. diff --git a/OLD_Server/log/qrgtwasn.log b/OLD_Server/log/qrgtwasn.log new file mode 100644 index 0000000..3751ca7 --- /dev/null +++ b/OLD_Server/log/qrgtwasn.log @@ -0,0 +1,35 @@ +10:08:28,843 root INFO starting up server +10:08:28,843 root INFO starting up game manager +10:08:28,844 root INFO preparing to start server +10:08:28,844 root INFO starting up network manager +10:08:28,844 root INFO starting up network manager +10:08:28,844 root INFO starting up tcp server +10:08:28,846 root INFO starting up thread for client socket accepting +10:08:40,764 root INFO Connected with ('127.0.0.1', 40708) +10:08:40,764 root INFO starting client handler thread for client at address ('127.0.0.1', 40708) +10:08:40,785 root INFO decoded message {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:08:40,787 root INFO user in message None +10:08:40,787 root INFO user logging in +10:08:40,788 root INFO task passed off to gameManager +10:08:40,789 root INFO creating user with id: > +10:08:40,789 root INFO new length of user dictionary: 1 +10:08:40,789 root INFO connected users 1 +10:08:40,790 root INFO confirming login for user +10:08:40,790 root INFO incommingevent {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:08:40,790 root INFO Received message from ('127.0.0.1', 40708): {"event": "login", "username": "player", "deck": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:08:50,849 root INFO Connected with ('127.0.0.1', 40709) +10:08:50,850 root INFO starting client handler thread for client at address ('127.0.0.1', 40709) +10:08:50,865 root INFO decoded message {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:08:50,866 root INFO user in message None +10:08:50,866 root INFO user logging in +10:08:50,866 root INFO task passed off to gameManager +10:08:50,867 root INFO creating user with id: > +10:08:50,868 root INFO new length of user dictionary: 2 +10:08:51,868 root INFO 2 players have join game starts +10:08:51,868 root INFO game manager is starting the game +10:08:51,868 root ERROR failed to start game due to error: list indices must be integers or slices, not str +10:08:51,869 root ERROR failed to start game due to error: list indices must be integers or slices, not str +10:08:51,869 root INFO connected users 2 +10:08:51,869 root INFO confirming login for user +10:08:51,869 root INFO incommingevent {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:08:51,869 root INFO Received message from ('127.0.0.1', 40709): {"event": "login", "username": "player", "deck": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} diff --git a/OLD_Server/log/sxuostca.log b/OLD_Server/log/sxuostca.log new file mode 100644 index 0000000..3d78e83 --- /dev/null +++ b/OLD_Server/log/sxuostca.log @@ -0,0 +1,40 @@ +10:11:31,951 root INFO starting up server +10:11:31,951 root INFO starting up game manager +10:11:31,951 root INFO preparing to start server +10:11:31,952 root INFO starting up network manager +10:11:31,952 root INFO starting up network manager +10:11:31,952 root INFO starting up tcp server +10:11:31,953 root INFO starting up thread for client socket accepting +10:11:39,945 root INFO Connected with ('127.0.0.1', 40745) +10:11:39,945 root INFO starting client handler thread for client at address ('127.0.0.1', 40745) +10:11:39,959 root INFO decoded message {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:11:39,960 root INFO user in message None +10:11:39,960 root INFO user logging in +10:11:39,960 root INFO task passed off to gameManager +10:11:39,960 root INFO creating user with id: > +10:11:39,961 root INFO new length of user dictionary: 1 +10:11:39,962 root INFO connected users 1 +10:11:39,962 root INFO confirming login for user +10:11:39,962 root INFO incommingevent {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:11:39,963 root INFO Received message from ('127.0.0.1', 40745): {"event": "login", "username": "player", "deck": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:11:48,547 root INFO Connected with ('127.0.0.1', 40751) +10:11:48,547 root INFO starting client handler thread for client at address ('127.0.0.1', 40751) +10:11:48,578 root INFO decoded message {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:11:48,578 root INFO user in message None +10:11:48,578 root INFO user logging in +10:11:48,579 root INFO task passed off to gameManager +10:11:48,579 root INFO creating user with id: > +10:11:48,579 root INFO new length of user dictionary: 2 +10:11:49,581 root INFO 2 players have join game starts +10:11:49,582 root INFO game manager is starting the game +10:11:49,585 root INFO connected users 2 +10:11:49,585 root INFO confirming login for user +10:11:49,586 root INFO incommingevent {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:11:49,586 root INFO Received message from ('127.0.0.1', 40751): {"event": "login", "username": "player", "deck": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:12:17,219 root INFO decoded message {'event': 'placecard', 'card': 1, 'type': 'Monster', 'user': 56607, 'x': 386.0, 'y': 568.0} +10:12:17,219 root INFO user in message 56607 +10:12:17,219 root INFO incommingevent {'event': 'placecard', 'card': 1, 'type': 'Monster', 'user': 56607, 'x': 386.0, 'y': 568.0} +10:12:17,219 root INFO send to client False +10:12:17,219 root INFO send to client True +10:12:17,219 root INFO Received message from ('127.0.0.1', 40745): {"event": "placecard", "card": 1, "type": "Monster", "user": 56607, "x": 386.0, "y": 568.0} +10:12:26,488 root ERROR Connection with ('127.0.0.1', 40751) forcibly closed by remote host. diff --git a/OLD_Server/log/xtjfeaau.log b/OLD_Server/log/xtjfeaau.log new file mode 100644 index 0000000..c37963a --- /dev/null +++ b/OLD_Server/log/xtjfeaau.log @@ -0,0 +1,35 @@ +10:09:58,809 root INFO starting up server +10:09:58,809 root INFO starting up game manager +10:09:58,809 root INFO preparing to start server +10:09:58,809 root INFO starting up network manager +10:09:58,810 root INFO starting up network manager +10:09:58,810 root INFO starting up tcp server +10:09:58,812 root INFO starting up thread for client socket accepting +10:10:02,221 root INFO Connected with ('127.0.0.1', 40727) +10:10:02,221 root INFO starting client handler thread for client at address ('127.0.0.1', 40727) +10:10:02,225 root INFO decoded message {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:10:02,225 root INFO user in message None +10:10:02,225 root INFO user logging in +10:10:02,226 root INFO task passed off to gameManager +10:10:02,226 root INFO creating user with id: > +10:10:02,226 root INFO new length of user dictionary: 1 +10:10:02,227 root INFO connected users 1 +10:10:02,227 root INFO confirming login for user +10:10:02,227 root INFO incommingevent {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:10:02,228 root INFO Received message from ('127.0.0.1', 40727): {"event": "login", "username": "player", "deck": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:10:22,682 root INFO Connected with ('127.0.0.1', 40736) +10:10:22,682 root INFO starting client handler thread for client at address ('127.0.0.1', 40736) +10:10:22,709 root INFO decoded message {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:10:22,709 root INFO user in message None +10:10:22,710 root INFO user logging in +10:10:22,710 root INFO task passed off to gameManager +10:10:22,710 root INFO creating user with id: > +10:10:22,712 root INFO new length of user dictionary: 2 +10:10:23,713 root INFO 2 players have join game starts +10:10:23,714 root INFO game manager is starting the game +10:10:23,714 root ERROR failed to start game due to error: list indices must be integers or slices, not tuple +10:10:23,715 root ERROR failed to start game due to error: list indices must be integers or slices, not tuple +10:10:23,715 root INFO connected users 2 +10:10:23,715 root INFO confirming login for user +10:10:23,715 root INFO incommingevent {'event': 'login', 'username': 'player', 'deck': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} +10:10:23,715 root INFO Received message from ('127.0.0.1', 40736): {"event": "login", "username": "player", "deck": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} diff --git a/Game Server/server logic notes.md b/OLD_Server/server logic notes.md similarity index 100% rename from Game Server/server logic notes.md rename to OLD_Server/server logic notes.md diff --git a/Online_TCG.code-workspace b/Online_TCG.code-workspace deleted file mode 100644 index 51ec5f5..0000000 --- a/Online_TCG.code-workspace +++ /dev/null @@ -1,12 +0,0 @@ -{ - "folders": [ - { - "path": "." - } - ], - "settings": { - "cSpell.words": [ - "MOUSEBUTTONUP" - ] - } -} \ No newline at end of file diff --git a/card files/Card_Template.blend1 b/card files/Card_Template.blend1 deleted file mode 100644 index 184db21..0000000 Binary files a/card files/Card_Template.blend1 and /dev/null differ diff --git a/card files/MonsterCard/MonsterCard.blend b/card files/MonsterCard/MonsterCard.blend deleted file mode 100644 index 116b342..0000000 Binary files a/card files/MonsterCard/MonsterCard.blend and /dev/null differ diff --git a/card files/MonsterCard/MonsterCard.blend1 b/card files/MonsterCard/MonsterCard.blend1 deleted file mode 100644 index a59e989..0000000 Binary files a/card files/MonsterCard/MonsterCard.blend1 and /dev/null differ diff --git a/card files/MonsterCard/MonsterCard.mtl b/card files/MonsterCard/MonsterCard.mtl deleted file mode 100644 index 74dd202..0000000 --- a/card files/MonsterCard/MonsterCard.mtl +++ /dev/null @@ -1,2 +0,0 @@ -# Blender 3.4.1 MTL File: 'MonsterCard.blend' -# www.blender.org diff --git a/card files/MonsterCard/MonsterCard.obj b/card files/MonsterCard/MonsterCard.obj deleted file mode 100644 index 79b6460..0000000 --- a/card files/MonsterCard/MonsterCard.obj +++ /dev/null @@ -1,45 +0,0 @@ -# Blender 3.4.1 -# www.blender.org -mtllib MonsterCard.mtl -g Cube_Mesh -v -1.779980 -0.015007 2.505141 -v -1.779980 0.015007 2.505141 -v -1.779980 -0.015007 -2.505141 -v -1.779980 0.015007 -2.505141 -v 1.779980 -0.015007 2.505141 -v 1.779980 0.015007 2.505141 -v 1.779980 -0.015007 -2.505141 -v 1.779980 0.015007 -2.505141 -vn -1.0000 -0.0000 -0.0000 -vn -0.0000 -0.0000 -1.0000 -vn 1.0000 -0.0000 -0.0000 -vn -0.0000 -0.0000 1.0000 -vn -0.0000 -1.0000 -0.0000 -vn -0.0000 1.0000 -0.0000 -vt 0.375000 0.000000 -vt 0.375000 1.000000 -vt 0.125000 0.750000 -vt 0.625000 0.000000 -vt 0.625000 1.000000 -vt 0.875000 0.750000 -vt 0.125000 0.500000 -vt 0.375000 0.250000 -vt 0.625000 0.250000 -vt 0.875000 0.500000 -vt 0.375000 0.750000 -vt 0.625000 0.750000 -vt 0.375000 0.500000 -vt 0.625000 0.500000 -s 0 -f 2/4/1 3/8/1 1/1/1 -f 4/9/2 7/13/2 3/8/2 -f 8/14/3 5/11/3 7/13/3 -f 6/12/4 1/2/4 5/11/4 -f 7/13/5 1/3/5 3/7/5 -f 4/10/6 6/12/6 8/14/6 -f 2/4/1 4/9/1 3/8/1 -f 4/9/2 8/14/2 7/13/2 -f 8/14/3 6/12/3 5/11/3 -f 6/12/4 2/5/4 1/2/4 -f 7/13/5 5/11/5 1/3/5 -f 4/10/6 2/6/6 6/12/6 diff --git a/card files/MonsterCard/MonsterCard.png b/card files/MonsterCard/MonsterCard.png deleted file mode 100644 index df2429c..0000000 Binary files a/card files/MonsterCard/MonsterCard.png and /dev/null differ diff --git a/card files/MonsterCard/MonsterCard.psd b/card files/MonsterCard/MonsterCard.psd deleted file mode 100644 index c6a22f2..0000000 Binary files a/card files/MonsterCard/MonsterCard.psd and /dev/null differ diff --git a/card files/TCG_Concept_server_infrastructure.drawio b/card files/TCG_Concept_server_infrastructure.drawio deleted file mode 100644 index 742bece..0000000 --- a/card files/TCG_Concept_server_infrastructure.drawio +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/card files/Templates/Card_Template.blend b/card files/Templates/Card_Template.blend deleted file mode 100644 index a59e989..0000000 Binary files a/card files/Templates/Card_Template.blend and /dev/null differ diff --git a/card files/Templates/Texture Template.psd b/card files/Templates/Texture Template.psd deleted file mode 100644 index 784bf75..0000000 Binary files a/card files/Templates/Texture Template.psd and /dev/null differ diff --git a/card files/arena _field/Card_Template.blend b/card files/arena _field/Card_Template.blend deleted file mode 100644 index ffb47f6..0000000 Binary files a/card files/arena _field/Card_Template.blend and /dev/null differ diff --git a/card files/arena _field/Card_Template.blend1 b/card files/arena _field/Card_Template.blend1 deleted file mode 100644 index c01db4f..0000000 Binary files a/card files/arena _field/Card_Template.blend1 and /dev/null differ diff --git a/card files/arena _field/Card_Template.fbx b/card files/arena _field/Card_Template.fbx deleted file mode 100644 index 60462f0..0000000 Binary files a/card files/arena _field/Card_Template.fbx and /dev/null differ diff --git a/card files/arena _field/Card_Template.mtl b/card files/arena _field/Card_Template.mtl deleted file mode 100644 index 22ae829..0000000 --- a/card files/arena _field/Card_Template.mtl +++ /dev/null @@ -1,13 +0,0 @@ -# Blender MTL File: 'Card_Template.blend' -# Material Count: 1 - -newmtl Material -Ns 250.000000 -Ka 1.000000 1.000000 1.000000 -Kd 0.800000 0.800000 0.800000 -Ks 0.500000 0.500000 0.500000 -Ke 0.000000 0.000000 0.000000 -Ni 1.450000 -d 1.000000 -illum 2 -map_Kd arena_field.png diff --git a/card files/arena _field/Card_Template.obj b/card files/arena _field/Card_Template.obj deleted file mode 100644 index 0415c6a..0000000 --- a/card files/arena _field/Card_Template.obj +++ /dev/null @@ -1,40 +0,0 @@ -# Blender v3.4.1 OBJ File: 'Card_Template.blend' -# www.blender.org -mtllib Card_Template.mtl -o Cube_Cube.001 -v -1.779980 -0.015007 2.505141 -v -1.779980 0.015007 2.505141 -v -1.779980 -0.015007 -2.505141 -v -1.779980 0.015007 -2.505141 -v 1.779980 -0.015007 2.505141 -v 1.779980 0.015007 2.505141 -v 1.779980 -0.015007 -2.505141 -v 1.779980 0.015007 -2.505141 -vt 0.375000 0.000000 -vt 0.625000 0.000000 -vt 0.625000 0.250000 -vt 0.375000 0.250000 -vt 0.625000 0.500000 -vt 0.375000 0.500000 -vt 0.625000 0.750000 -vt 0.375000 0.750000 -vt 0.625000 1.000000 -vt 0.375000 1.000000 -vt 0.125000 0.500000 -vt 0.125000 0.750000 -vt 0.875000 0.500000 -vt 0.875000 0.750000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 0.0000 1.0000 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 1.0000 0.0000 -usemtl Material -s off -f 1/1/1 2/2/1 4/3/1 3/4/1 -f 3/4/2 4/3/2 8/5/2 7/6/2 -f 7/6/3 8/5/3 6/7/3 5/8/3 -f 5/8/4 6/7/4 2/9/4 1/10/4 -f 3/11/5 7/6/5 5/8/5 1/12/5 -f 8/5/6 4/13/6 2/14/6 6/7/6 diff --git a/card files/arena _field/arena_field.png b/card files/arena _field/arena_field.png deleted file mode 100644 index 958adc2..0000000 Binary files a/card files/arena _field/arena_field.png and /dev/null differ diff --git a/card files/arena _field/arena_vield.psd b/card files/arena _field/arena_vield.psd deleted file mode 100644 index a8c6735..0000000 Binary files a/card files/arena _field/arena_vield.psd and /dev/null differ diff --git a/card files/tcg_concept_card.png b/card files/tcg_concept_card.png deleted file mode 100644 index a80fb69..0000000 Binary files a/card files/tcg_concept_card.png and /dev/null differ diff --git a/card files/tcg_concept_card.psd b/card files/tcg_concept_card.psd deleted file mode 100644 index 16c8c6e..0000000 Binary files a/card files/tcg_concept_card.psd and /dev/null differ diff --git a/card files/tcg_concept_field.png b/card files/tcg_concept_field.png deleted file mode 100644 index 68b4d99..0000000 Binary files a/card files/tcg_concept_field.png and /dev/null differ diff --git a/card files/tcg_concept_field.psd b/card files/tcg_concept_field.psd deleted file mode 100644 index e425460..0000000 Binary files a/card files/tcg_concept_field.psd and /dev/null differ diff --git a/card files/untitled.blend b/card files/untitled.blend deleted file mode 100644 index d569eb5..0000000 Binary files a/card files/untitled.blend and /dev/null differ diff --git a/card files/untitled.blend1 b/card files/untitled.blend1 deleted file mode 100644 index 54588d7..0000000 Binary files a/card files/untitled.blend1 and /dev/null differ diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 244463b..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,26 +0,0 @@ -version: '3' - -services: - tcg_database: - image: postgres - restart: always - environment: - POSTGRES_PASSWORD: example - ports: - - 51346:5432 - database_visualizer: - image: adminer - restart: always - ports: - - 8080:8080 - redis_cache: - image: redis - restart: always - ports: - - 6379:6379 -volumes: - dbdata: - -networks: - shoplistnetwork: - driver: bridge \ No newline at end of file