merged broken branches client with master branch and added first statehandling for card placement
This commit is contained in:
98
Game_Client/Classes/Game/Cards/Card.py
Normal file
98
Game_Client/Classes/Game/Cards/Card.py
Normal file
@ -0,0 +1,98 @@
|
||||
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 = "MonsterCard"
|
||||
__pos:pygame.Vector2
|
||||
__dragging:bool = False
|
||||
__offset:pygame.Vector2 = pygame.Vector2(0,0)
|
||||
__inputHandler: InputHandler
|
||||
__owner:Player
|
||||
__state:str
|
||||
image:pygame.image
|
||||
rect:pygame.rect
|
||||
|
||||
def __init__(self, pos: pygame.Vector2, assetDir: str, inputHandler: InputHandler, owner: Player):
|
||||
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.__attacks = []
|
||||
for attack in data.get("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 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
|
BIN
Game_Client/Classes/Game/Cards/__pycache__/Card.cpython-311.pyc
Normal file
BIN
Game_Client/Classes/Game/Cards/__pycache__/Card.cpython-311.pyc
Normal file
Binary file not shown.
BIN
Game_Client/Classes/Game/Cards/__pycache__/Card.cpython-312.pyc
Normal file
BIN
Game_Client/Classes/Game/Cards/__pycache__/Card.cpython-312.pyc
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,8 +1,16 @@
|
||||
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
|
||||
|
||||
|
||||
# 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):
|
||||
print("game starts")
|
||||
pass
|
||||
def GameStart(world: World, handCards:list, inputHandler:InputHandler, owner:Player, opponent:Player):
|
||||
index:int = 0
|
||||
world.setEnemy(opponent)
|
||||
|
||||
for card in handCards:
|
||||
world.AddToPlayerHand(Card(pygame.Vector2(500 + (index + 100), 1050), f"Assets/Cards/{card}/", inputHandler, owner))
|
||||
|
@ -1,20 +1,22 @@
|
||||
import json
|
||||
import pygame
|
||||
from Classes.System.Network.NetworkManager import NetworkManager
|
||||
from Classes.System.Network.TCPClient import TCPClient
|
||||
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(networkManager:NetworkManager):
|
||||
def Login(tcpClient:TCPClient):
|
||||
payload = {
|
||||
"event":"login",
|
||||
"username": "player"
|
||||
"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]
|
||||
}
|
||||
|
||||
networkManager.tcp.send(payload)
|
||||
tcpClient.send(payload)
|
||||
|
||||
# server response for login event
|
||||
def LoginResponse(networkManager:NetworkManager, gameWorld: World):
|
||||
# todo: get labels from world
|
||||
# todo: get name for enemy
|
||||
# todo: adjust enemy name label
|
||||
pass
|
||||
def LoginResponse(message:json):
|
||||
# checks if the response on the login request is successfull
|
||||
if message["status"] != "success":
|
||||
print("login failed")
|
@ -1,9 +1,9 @@
|
||||
import pygame
|
||||
from Classes.Game.World import World
|
||||
from Classes.System.Network.NetworkManager import NetworkManager
|
||||
from Classes.System.Components.InputHandler import InputHandler
|
||||
|
||||
# the event the client sends to the server when it places a card
|
||||
def PlaceCard(networkManager: NetworkManager, card):
|
||||
def PlaceCard(tcpClient, card):
|
||||
# todo: send card information to the server
|
||||
# todo: required info is:
|
||||
# - position
|
||||
@ -12,12 +12,24 @@ def PlaceCard(networkManager: NetworkManager, card):
|
||||
payload = {
|
||||
"event":"placecard",
|
||||
"card": card.getID(),
|
||||
"type": card.getType(),
|
||||
"pos": card.getPos(),
|
||||
}
|
||||
|
||||
networkManager.udp.send(payload)
|
||||
tcpClient.send(payload)
|
||||
|
||||
# the event send from the server to display a card on the field
|
||||
def CardPlaced(world:World, card:int, pos:pygame.Vector2):
|
||||
|
||||
def CardPlaced(world:World, card:int, type:str, owner:str, pos:pygame.Vector2, inputHandler:InputHandler):
|
||||
if type == "MonsterCard":
|
||||
world.spawnMonsterCard(f"Assets/Cards/{card}/", pos, inputHandler, owner)
|
||||
pass
|
||||
elif type == "SpellCard":
|
||||
world.spawnSpellCard(f"Assets/Cards/{card}/", pos, inputHandler, owner)
|
||||
pass
|
||||
elif type == "TrapCard":
|
||||
world.spawmTrapCard(f"Assets/Cards/{card}/", pos, inputHandler, owner)
|
||||
pass
|
||||
pass
|
||||
|
||||
def MovedCard(world:World, card:int, type:str, owner:str, oldPos:pygame.Vector2, newPos:pygame.Vector2, inputHandler:InputHandler):
|
||||
pass
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -6,6 +6,7 @@ from Classes.Game.Cards.SpellCard import SpellCard
|
||||
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
|
||||
|
||||
class World():
|
||||
__boardFields:list
|
||||
@ -113,18 +114,8 @@ class World():
|
||||
label.setText(player.getName())
|
||||
self.__enemy = player
|
||||
|
||||
def spawnMonsterCard(self, asset:str, pos:pygame.Vector2, inputHandler:InputHandler, owner:Player) -> MonsterCard:
|
||||
card = MonsterCard(pos, asset, inputHandler, owner)
|
||||
self.__cards.add(card)
|
||||
return card
|
||||
|
||||
def spawnSpellCard(self, asset:str, pos:pygame.Vector2, inputHandler:InputHandler, owner:Player) -> SpellCard:
|
||||
card = SpellCard(pos, asset, inputHandler, owner)
|
||||
self.__cards.add(card)
|
||||
return card
|
||||
|
||||
def spawnTrapCard(self, asset:str, pos:pygame.Vector2, inputHandler:InputHandler, owner:Player) -> TrapCard:
|
||||
card = TrapCard(pos, asset, inputHandler, owner)
|
||||
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
|
||||
|
||||
@ -132,5 +123,5 @@ class World():
|
||||
for card in cards:
|
||||
self.__cards.add(card)
|
||||
|
||||
def AddToPlayerHand(self, Card):
|
||||
def AddToPlayerHand(self, Card:Card):
|
||||
self.__PlayerHandCards.add(Card)
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Game_Client/Classes/Game/__pycache__/Player.cpython-312.pyc
Normal file
BIN
Game_Client/Classes/Game/__pycache__/Player.cpython-312.pyc
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user