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