diff --git a/Game Server/Assets/Arenas/default.png b/Game Server/Assets/Arenas/default.png new file mode 100644 index 0000000..ba5da22 Binary files /dev/null and b/Game Server/Assets/Arenas/default.png differ diff --git a/Game Server/Assets/Cards/Arena/field.png b/Game Server/Assets/Cards/Arena/field.png new file mode 100644 index 0000000..472f0a1 Binary files /dev/null and b/Game Server/Assets/Cards/Arena/field.png differ diff --git a/Game Server/Assets/Cards/MonsterCards/testmonstercard/card.json b/Game Server/Assets/Cards/MonsterCards/testmonstercard/card.json new file mode 100644 index 0000000..0df2ece --- /dev/null +++ b/Game Server/Assets/Cards/MonsterCards/testmonstercard/card.json @@ -0,0 +1,22 @@ +{ + "id": 1, + "name": "Test Monster", + "image": "Assets/Cards/testmonstercard/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/Game Server/Assets/Cards/MonsterCards/testmonstercard/card.png b/Game Server/Assets/Cards/MonsterCards/testmonstercard/card.png new file mode 100644 index 0000000..320d60d Binary files /dev/null and b/Game Server/Assets/Cards/MonsterCards/testmonstercard/card.png differ diff --git a/Game Server/Assets/Cards/SpeelCards/testspellcard/artworkjson.png b/Game Server/Assets/Cards/SpeelCards/testspellcard/artworkjson.png new file mode 100644 index 0000000..9955a0c Binary files /dev/null and b/Game Server/Assets/Cards/SpeelCards/testspellcard/artworkjson.png differ diff --git a/Game Server/Assets/Cards/SpeelCards/testspellcard/testspellcard.json b/Game Server/Assets/Cards/SpeelCards/testspellcard/testspellcard.json new file mode 100644 index 0000000..51d4083 --- /dev/null +++ b/Game Server/Assets/Cards/SpeelCards/testspellcard/testspellcard.json @@ -0,0 +1,6 @@ +{ + "name": "testspell", + "image":"Assets/Cards/testspelltcard/artwork.png", + "costs": 30, + "description":"this is a test spell card" +} \ No newline at end of file diff --git a/Game Server/Assets/Cards/TrapCards/testtrapcard/artworkjson.png b/Game Server/Assets/Cards/TrapCards/testtrapcard/artworkjson.png new file mode 100644 index 0000000..9955a0c Binary files /dev/null and b/Game Server/Assets/Cards/TrapCards/testtrapcard/artworkjson.png differ diff --git a/Game Server/Assets/Cards/TrapCards/testtrapcard/testtrapcard.json b/Game Server/Assets/Cards/TrapCards/testtrapcard/testtrapcard.json new file mode 100644 index 0000000..6d1cd5a --- /dev/null +++ b/Game Server/Assets/Cards/TrapCards/testtrapcard/testtrapcard.json @@ -0,0 +1,6 @@ +{ + "name": "testtrap", + "image":"Assets/Cards/testtrapcard/artwork.png", + "costs": 30, + "description":"this is a test tryp card" +} \ No newline at end of file diff --git a/Game Server/Classes/Objects/Player.py b/Game Server/Classes/Objects/Player.py new file mode 100644 index 0000000..8682682 --- /dev/null +++ b/Game Server/Classes/Objects/Player.py @@ -0,0 +1,37 @@ +import random + + +class Player: + __id:int + __hp:int + __name:str + __handCards:list + + def __init__(self, name:str, hp:int=1000): + self.__hp = hp + self.__name = name + self.__handCards = [] + self.__id = random.randint(3, 99999) + + def getName(self) -> str: + return self.__name + + def getHP(self) -> int: + return self.__hp + + def adjustHP(self, hp:int) -> int: + self.__hp = self.__hp + hp + + def getID(self) -> int: + return self.__id + + def getHand(self) -> list: + return self.__handCards + + def AddToHand(self, card) -> list: + self.__handCards.append(card) + return self.__handCards + + def removeFromHand(self, pos:int) -> list: + self.__handCards.remove(pos) + return self.__handCards \ No newline at end of file diff --git a/Game Server/Classes/Player.py b/Game Server/Classes/System/PlayerManager.py similarity index 89% rename from Game Server/Classes/Player.py rename to Game Server/Classes/System/PlayerManager.py index 550cc19..838ae45 100644 --- a/Game Server/Classes/Player.py +++ b/Game Server/Classes/System/PlayerManager.py @@ -1,5 +1,5 @@ import json - +from Classes.Objects.Player import Player class Player: __queue:list @@ -29,8 +29,8 @@ class Player: self.__users.append(user) def createUser(self, user:json): - if self.getUser(user["id"]) == None: - self.__users.append(user) + if self.getUser(user["username"]) == None: + self.__users.append(Player(user["username"])) def removeUser(self, user:int): self.__users.remove(user) diff --git a/Game Server/Classes/Server.py b/Game Server/Classes/System/Server.py similarity index 76% rename from Game Server/Classes/Server.py rename to Game Server/Classes/System/Server.py index f708aa7..9e96425 100644 --- a/Game Server/Classes/Server.py +++ b/Game Server/Classes/System/Server.py @@ -9,12 +9,13 @@ class Server: __udpPort:str __tcpSocket:socket __udpSocket:socket - __clientThread:threading.Thread + __TCPclientThread:threading.Thread + __UDPclientThread:threading.Thread def __init__(self, address:str, tcpPort:str, udpPort:str): self.__address = address self.__tcpPort = tcpPort - self.__udpPort = tcpPort + self.__udpPort = udpPort self.__tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.__udpSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) @@ -34,15 +35,15 @@ class Server: while True: # accept incoming connection # TODO: validate this connection is a valid game connection - client_tcpSocket, client_tcpAddress = self.__tcpSocket.accept() + clientTcpSocket, clientTcpAddress = self.__tcpSocket.accept() # create network thread for connection - self.__TCPclientThread = threading.Thread(target=self.handleTCPConnection, args=(client_tcpSocket, client_tcpAddress)) - self.__TCPclientThread.start() + self.__TCPClientThread = threading.Thread(target=self.handleTCPConnection, args=(clientTcpSocket, clientTcpAddress)) + self.__TCPClientThread.start() - client_udpSocket, client_udpAddress = self.__udpSocket.accept() - self.__UDPclientThread = threading.Thread(target=self.handleUDPConnection, args=(client_udpSocket, client_udpAddress)) - self.__UDPclientThread.start() + clientUdpSocket, clientUdpAddress = self.__udpSocket.accept() + self.__UDPClientThread = threading.Thread(target=self.handleUDPConnection, args=(clientUdpSocket, clientUdpAddress)) + self.__UDPClientThread.start() # handles ticking the game loop server side converting data and passing of to the event handler @@ -104,6 +105,16 @@ class Server: pass def handleUDPEvents(self, event): - if event["event"] == "gameAction": - # pass of to own handler function which handles game logic - pass \ No newline at end of file + if event["event"] == "placeCard": + pass + elif event["event"] == "removeCard": + pass + elif event["event"] == "attackCard": + pass + elif event["event"] == "attackPlayer": + pass + elif event["event"] == "activateeffectCard": + pass + elif event["event"] == "activatemonstereffect": + pass + \ No newline at end of file diff --git a/Game Server/index.py b/Game Server/index.py index f66de53..db425cc 100644 --- a/Game Server/index.py +++ b/Game Server/index.py @@ -1,16 +1,17 @@ import os import dotenv -from Classes.Server import Server +from Classes.System.Server import Server def main(self): dotenv.load_dotenv() # retrieves host data from environment HOST = os.getenv("HOST") - PORT = os.getenv("PORT") + TCPPORT = os.getenv("TCPPORT") + UDPPORT = os.getenv("UDPPORT") - Server(HOST, PORT) + Server(HOST, TCPPORT, UDPPORT) if __name__ == "__main__": diff --git a/Game_Client/Classes/Objects/BoardField.py b/Game_Client/Classes/Objects/BoardField.py index 122faa7..57c9240 100644 --- a/Game_Client/Classes/Objects/BoardField.py +++ b/Game_Client/Classes/Objects/BoardField.py @@ -2,6 +2,7 @@ import os import pygame class BoardField(pygame.sprite.Sprite): + __fieldID:str __name:str __side:str __type:str @@ -12,13 +13,14 @@ class BoardField(pygame.sprite.Sprite): image:pygame.image rect:pygame.rect - def __init__(self, name:str, side:str, type:str, pos:pygame.Vector2, imagePath:str): + 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): @@ -78,4 +80,7 @@ class BoardField(pygame.sprite.Sprite): return self.__color def setCardHolding(self, card): - self.__holdsCard = card \ No newline at end of file + self.__holdsCard = card + + def getFieldID(self) -> str: + return self.__fieldID \ No newline at end of file diff --git a/Game_Client/Classes/Objects/Player.py b/Game_Client/Classes/Objects/Player.py index a38304f..92cd119 100644 --- a/Game_Client/Classes/Objects/Player.py +++ b/Game_Client/Classes/Objects/Player.py @@ -1,6 +1,7 @@ import pygame class Player: + __id:int __hp:int __name:str __handCards:pygame.Sprite.Group @@ -9,6 +10,12 @@ class Player: self.__hp = hp self.__name = name + def setID(self, id:int): + self.__id = id + + def getID(self) -> int: + return self.__id + def getName(self) -> str: return self.__name @@ -21,7 +28,8 @@ class Player: def getHand(self) -> pygame.Sprite.Group: return self.__handCards - def getAddToHand(self, card) -> pygame.Sprite.Group: + def AddToHand(self, card) -> pygame.Sprite.Group: + self.__handCards.add(card) return self.__handCards def removeFromHand(self, pos:int) -> pygame.Sprite.Group: diff --git a/Game_Client/Classes/Objects/World.py b/Game_Client/Classes/Objects/World.py index 2c1c4ff..2cfe233 100644 --- a/Game_Client/Classes/Objects/World.py +++ b/Game_Client/Classes/Objects/World.py @@ -61,12 +61,11 @@ 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/Arena/field.png")) - self.__boardFields.append(BoardField("PlayerEffectField-"+str(i), "Player", "EffectField", pEffectPos, "Assets/Cards/Arena/field.png")) - self.__boardFields.append(BoardField("EnemyMonsterField-"+str(i), "Enemy", "MonsterField", eMonsterPos, "Assets/Cards/Arena/field.png")) - self.__boardFields.append(BoardField("EnemySpellTrapField-"+str(i), "Enemy", "EffectField", eEffectPos, "Assets/Cards/Arena/field.png")) + self.__boardFields.append(BoardField("PlayerMonsterField-"+str(i), "Player", "MonsterField", pMonsterPos, "Assets/Cards/Arena/field.png", "pm"+str(id))) + self.__boardFields.append(BoardField("PlayerEffectField-"+str(i), "Player", "EffectField", pEffectPos, "Assets/Cards/Arena/field.png", "pe"+str(id))) + self.__boardFields.append(BoardField("EnemyMonsterField-"+str(i), "Enemy", "MonsterField", eMonsterPos, "Assets/Cards/Arena/field.png", "em"+str(id))) + self.__boardFields.append(BoardField("EnemySpellTrapField-"+str(i), "Enemy", "EffectField", eEffectPos, "Assets/Cards/Arena/field.png", "ee"+str(id))) - def getBoardFields(self) -> list: return self.__boardFields