27/09-24
This commit is contained in:
parent
046d80f515
commit
5e1411d741
7 changed files with 209 additions and 48 deletions
241
Main.py
241
Main.py
|
|
@ -13,8 +13,8 @@ import RealmManager
|
|||
|
||||
# pygame setup
|
||||
pygame.init()
|
||||
w,h = 1280, 720
|
||||
screen = pygame.display.set_mode((w, h))
|
||||
screenwidth,screenheight = 1280, 720
|
||||
screen = pygame.display.set_mode((screenwidth,screenheight))
|
||||
pygame.display.set_caption('CountDuchKing')
|
||||
clock = pygame.time.Clock()
|
||||
running = True
|
||||
|
|
@ -132,25 +132,22 @@ class uText:
|
|||
self.takenPos = []
|
||||
self.texts_to_remove = []
|
||||
|
||||
def getRect(self,text):
|
||||
tp = self.font.render(text, True, (255, 255, 255))
|
||||
return tp.get_rect()
|
||||
|
||||
def write(self, text, position):
|
||||
if not (text,position) in self.texts:
|
||||
for textTest in self.texts:
|
||||
if textTest[0] != text and textTest[1] == position:
|
||||
self.texts.remove(textTest)
|
||||
self.texts.append((text,position))
|
||||
#print("\n\nT E X T S :")
|
||||
#p = []
|
||||
#for t in self.texts:
|
||||
# p.append(t[0])
|
||||
#print(p)
|
||||
|
||||
def delete(self, parameter, info):
|
||||
def removeText(self, t):
|
||||
text2 = []
|
||||
for place in self.texts:
|
||||
if place[0] != info and parameter == "name":
|
||||
text2.append(place)
|
||||
elif place[1] != info and parameter == "pos":
|
||||
text2.append(place)
|
||||
for text in self.texts:
|
||||
if str(text[0]) != str(t):
|
||||
text2.append(text)
|
||||
self.texts = text2
|
||||
|
||||
def runText(self):
|
||||
|
|
@ -182,6 +179,12 @@ class uText:
|
|||
for subbit in bit[1]:
|
||||
i += 1
|
||||
self.write(f"{subbit[1].capitalize()}, {subbit[0]}",(1090,100+50*i))
|
||||
elif bit[0] == "buildings":
|
||||
self.write(f"{bit[0].capitalize()}:", (840,100 + 50*i))
|
||||
i -= 1
|
||||
for subbit in bit[1]:
|
||||
i += 1
|
||||
self.write(f"{subbit.capitalize()}",(1090,100+50*i))
|
||||
else:
|
||||
self.write(f"{bit[0].capitalize()}:",(840,100 + 50*i))
|
||||
if bit[1] != [] and bit[1] != {}:
|
||||
|
|
@ -225,7 +228,7 @@ class uButtons:
|
|||
"blue": (0, 0, 255,)
|
||||
}
|
||||
|
||||
def addButton(self, name, x, y, width, height, colour_standby=(255,255,255), colour_hover=(200, 200, 200), onAction=None, delOnAction=False):
|
||||
def addButton(self, name, x, y, colour_standby=(255,255,255), colour_hover=(200, 200, 200), onAction=None, delOnAction=False, padX=10, padY=4, padding=None):
|
||||
if colour_standby != (255,255,255):
|
||||
if self.colours[colour_standby] != None:
|
||||
colour_standby = self.colours[colour_standby]
|
||||
|
|
@ -236,21 +239,39 @@ class uButtons:
|
|||
colour_hover = self.colours[colour_hover]
|
||||
else:
|
||||
colour_hover = (200, 200, 200)
|
||||
if padding != None:
|
||||
padding[0] = self.colours[padding[0]]
|
||||
|
||||
textRect = uTexter.getRect(name)
|
||||
width = textRect.width + padX
|
||||
height = textRect.height + padY
|
||||
button = {
|
||||
"text": name,
|
||||
"xPos": x,
|
||||
"yPos": y,
|
||||
"xPos": x-(padX/2),
|
||||
"yPos": y-(padY/2),
|
||||
"width": int(width),
|
||||
"height": int(height),
|
||||
"colour_standby": colour_standby,
|
||||
"colour_hover": colour_hover,
|
||||
"button_action": onAction,
|
||||
"delOnAction": delOnAction,
|
||||
"isHover": False
|
||||
"isHover": False,
|
||||
"padding": padding
|
||||
}
|
||||
self.buttons.append(button)
|
||||
uTexter.write(name,(x,y))
|
||||
|
||||
def removeButton(self, name):
|
||||
for b in self.buttons:
|
||||
if b["text"] == name:
|
||||
print(f"Succesfully removed button {name}")
|
||||
uTexter.removeText(name)
|
||||
self.buttons.remove(b)
|
||||
pass
|
||||
print(f"Failed to remove button {name} among buttons ")
|
||||
for b in self.buttons:
|
||||
print(b["text"])
|
||||
|
||||
def updateHover(self):
|
||||
pos = pygame.mouse.get_pos()
|
||||
for button in self.buttons:
|
||||
|
|
@ -264,6 +285,11 @@ class uButtons:
|
|||
|
||||
def drawButtons(self):
|
||||
for button in self.buttons:
|
||||
if button["padding"] != None:
|
||||
bP = button["padding"]
|
||||
ofst = bP[1]/2
|
||||
padRect = pygame.Rect(button["xPos"]-ofst,button["yPos"]-ofst,button["width"]+bP[1],button["height"]+bP[1])
|
||||
pygame.draw.rect(screen,(bP[0]),padRect)
|
||||
buttonRect = pygame.Rect(button["xPos"],button["yPos"],button["width"],button["height"])
|
||||
if button["isHover"] == False:
|
||||
pygame.draw.rect(screen,(button["colour_standby"]),buttonRect)
|
||||
|
|
@ -275,11 +301,11 @@ class uButtons:
|
|||
if button["isHover"] == True:
|
||||
if button["button_action"] != None:
|
||||
if button["delOnAction"] == True:
|
||||
self.buttons.remove(button)
|
||||
uTexter.write("",(button["xPos"],button["yPos"]))
|
||||
self.removeButton(button["text"])
|
||||
exec(button["button_action"])
|
||||
else:
|
||||
print(f"No action found for button {button["text"]}")
|
||||
|
||||
|
||||
class uCommunicate:
|
||||
|
||||
|
|
@ -289,29 +315,33 @@ class uCommunicate:
|
|||
self.turnHolder = 0
|
||||
self.resourceView = False #False = State resources, True = Player resources
|
||||
self.resourceViewActive = True #False = No Button Rendered, True = Button Rendered
|
||||
self.tileSelectable = True
|
||||
|
||||
def startGame(self):
|
||||
GameRealms.load(map)
|
||||
self.globalGameState = 1
|
||||
self.globalTurn = 1
|
||||
uTexter.write("Turn:",(850,580))
|
||||
uButtoner.addButton("Player", 850, 0, 120, 50, "darkgray", "gray", "uCommunicator.switchResourceView()", True)
|
||||
uButtoner.addButton("Claim", 850, 500,110,40,"darkgray","gray","uCommunicator.claimState()")
|
||||
uButtoner.addButton("Player", 850, 0, "darkgray", "gray", "uCommunicator.switchResourceView()", True)
|
||||
uButtoner.addButton("Claim", 850, 500,"darkgray","gray","uCommunicator.claimState()")
|
||||
t2 = Thread(target=uCommunicator.gameLoop)
|
||||
t2.start()
|
||||
|
||||
def tileSelected(self):
|
||||
uButtoner.addButton("Build", 0, 600, 100, 50, "darkgray", "gray", "uPopper.buildMenu()")
|
||||
uButtoner.addButton("Assemble", 150, 600, 180, 50, "darkgray", "gray", "uPopper.buildMenu()")
|
||||
uButtoner.addButton("Order", 380, 600, 120, 50, "darkgray", "gray", "uPopper.buildMenu()")
|
||||
|
||||
def tileSelected(self, tPressed):
|
||||
if self.globalGameState == 1:
|
||||
print(f"Checking for {tPressed} in {GameRealms.getPlayer("p1").heldTiles}")
|
||||
if GameRealms.tileInPlayer(tPressed,self.turnHolder):
|
||||
uPopper.buttonManager()
|
||||
else:
|
||||
uPopper.buttonManager(True)
|
||||
|
||||
def switchResourceView(self):
|
||||
if self.resourceView:
|
||||
uButtoner.addButton("Player", 850, 0, 120, 50, "darkgray", "gray", "uCommunicator.switchResourceView()", True)
|
||||
uButtoner.addButton("Player", 850, 0, "darkgray", "gray", "uCommunicator.switchResourceView()", True)
|
||||
self.resourceView = False
|
||||
elif not self.resourceView:
|
||||
if tile_pressed != None:
|
||||
uButtoner.addButton("State", 850, 0, 120, 50, "darkgray", "gray", "uCommunicator.switchResourceView()", True)
|
||||
uButtoner.addButton("State", 850, 0, "darkgray", "gray", "uCommunicator.switchResourceView()", True)
|
||||
self.resourceViewActive = True
|
||||
else:
|
||||
self.resourceViewActive = False
|
||||
|
|
@ -394,31 +424,147 @@ class uCommunicate:
|
|||
GameMap.claimTileFor(expandTile,GameRealms.getPlayer(f"{ccc}"),map)
|
||||
curPlayer.heldTiles.append(expandTile)
|
||||
|
||||
class tileMod:
|
||||
|
||||
def __init__(self):
|
||||
self.ct = 0 #Current tile
|
||||
|
||||
def cct(self, t): #cycle current tile
|
||||
self.ct = t
|
||||
|
||||
def modIsAvailable(self,mod):
|
||||
tile = GameMap.tiles[str(self.ct)]
|
||||
if str(mod) in tile.buildings:
|
||||
return False
|
||||
return True
|
||||
def buildHouse(self):
|
||||
tile = GameMap.tiles[str(self.ct)]
|
||||
tile.buildings.append("house")
|
||||
tile.resources.append((0.25,"villagers"))
|
||||
|
||||
def buildLogger(self):
|
||||
print("building logger")
|
||||
tile = GameMap.tiles[str(self.ct)]
|
||||
tile.buildings.append("logger")
|
||||
for r in tile.resources:
|
||||
print(r)
|
||||
if r[1] == "wood":
|
||||
a = r[0]*2
|
||||
i = tile.resources.index(r)
|
||||
tile.resources.remove(r)
|
||||
tile.resources.insert(i,(a,"wood"))
|
||||
break
|
||||
|
||||
print((a,"wood"))
|
||||
|
||||
class uPop:
|
||||
|
||||
def __init__(self):
|
||||
self.yes = True
|
||||
self.menuColour = (100, 100, 100)
|
||||
self.itemColour = (200, 200, 200)
|
||||
self.Popup = None
|
||||
self.hasPopup = False
|
||||
|
||||
def buildMenu(self):
|
||||
self.hasPopup = True
|
||||
self.Popup = {
|
||||
"x": 200, "y": 200
|
||||
}
|
||||
self.pops = {}
|
||||
self.pop = None
|
||||
self.buttons = False
|
||||
self.popButtons = False
|
||||
self.doneCheck = False
|
||||
|
||||
def buttonManager(self,clean=False):
|
||||
if self.buttons == False and not clean:
|
||||
print("Creating buttons")
|
||||
uButtoner.addButton("Build", 0, 600, "darkgray", "gray", "uPopper.prefabBuild()", True)
|
||||
uButtoner.addButton("Assemble", 150, 600, "darkgray", "gray", "uPopper.prefabAssemble()", True)
|
||||
uButtoner.addButton("Order", 380, 600, "darkgray", "gray", "uPopper.prefabOrder()", True)
|
||||
self.buttons = True
|
||||
elif clean == True and self.buttons == True:
|
||||
uButtoner.removeButton("Build")
|
||||
uButtoner.removeButton("Assemble")
|
||||
uButtoner.removeButton("Order")
|
||||
self.buttons = False
|
||||
|
||||
def prefabBuild(self):
|
||||
print("running prefab build")
|
||||
uPopper.buildPop("build",(("house","tModder.buildHouse()"),("logger","tModder.buildLogger()")))
|
||||
uButtoner.addButton("Exit", 0, 600, "darkgray", "gray", "uPopper.closePop()", True)
|
||||
def prefabAssemble(self):
|
||||
uPopper.buildPop("assemble",(("hello","print(\"gayass\")"),("goodbye","print(\"WootWoot\")")))
|
||||
uButtoner.addButton("Exit", 150, 600, "darkgray", "gray", "uPopper.closePop()", True)
|
||||
def prefabOrder(self):
|
||||
uPopper.buildPop("order",(("hello","print(\"gayass\")"),("goodbye","print(\"WootWoot\")")))
|
||||
uButtoner.addButton("Exit", 380, 600, "darkgray", "gray", "uPopper.closePop()", True)
|
||||
|
||||
def buildPop(self,nameId,content,defaultColour=(100,100,100),itemColour=(200,200,200)):
|
||||
curWidth = 0
|
||||
curHeight = 0
|
||||
for item in content:
|
||||
t = item[0]
|
||||
w, h = uTexter.getRect(str(t)).width,uTexter.getRect(str(t)).height
|
||||
curHeight += h+10
|
||||
if curWidth < w:
|
||||
curWidth = w
|
||||
|
||||
w = curWidth + 20
|
||||
h = curHeight + 20
|
||||
x = (mapWidth-w)/2
|
||||
y = (mapHeight-h)/2
|
||||
|
||||
popup = {
|
||||
"x":x,"y":y,"w":w,"h":h,
|
||||
"name": nameId,
|
||||
"defaultColour": defaultColour,
|
||||
"itemColour": itemColour,
|
||||
"contents": content #Lists in the format of (buttonName,buttonAction) as the position and size is predefined
|
||||
}
|
||||
self.pops[nameId] = popup
|
||||
self.pop = nameId
|
||||
|
||||
def drawPop(self):
|
||||
if self.pop != None:
|
||||
p = self.pops[self.pop]
|
||||
iX = p["x"] + 10
|
||||
iY = p["y"] + 10
|
||||
oY = 0
|
||||
a = 0
|
||||
if self.popButtons == False:
|
||||
|
||||
uCommunicator.tileSelectable = False
|
||||
for item in p["contents"]:
|
||||
text = item[0]
|
||||
action = item[1]
|
||||
if tModder.modIsAvailable(text):
|
||||
uButtoner.addButton(str(text), iX,iY+oY,"darkgray", "gray",action,True,10,4,["black",2])
|
||||
oY += uTexter.getRect(str(text)).height+10
|
||||
a += 1
|
||||
if a == 0:
|
||||
uButtoner.addButton("All buildings completed",iX,iY+oY,"darkgray", "gray","uPopper.closePop()",True,10,4,["black",2])
|
||||
p["contents"] = (("All buildings completed",),)
|
||||
self.doneCheck = True
|
||||
self.popButtons = True
|
||||
if self.doneCheck:
|
||||
self.popRect = uTexter.getRect("All buildings completed")
|
||||
self.popRect.x, self.popRect.y = p["x"],p["y"]
|
||||
pygame.draw.rect(screen,(p["defaultColour"]),self.popRect)
|
||||
else:
|
||||
self.popRect = pygame.Rect(p["x"],p["y"],p["w"],p["h"])
|
||||
pygame.draw.rect(screen,(p["defaultColour"]),self.popRect)
|
||||
|
||||
|
||||
def closePop(self):
|
||||
for c in self.pops[self.pop]["contents"]:
|
||||
uButtoner.removeButton(str(c[0]))
|
||||
print(f"Removed {c[0]}")
|
||||
uCommunicator.tileSelectable = True
|
||||
self.doneCheck = False
|
||||
self.popButtons = False
|
||||
self.pop = None
|
||||
self.buttonManager(True)
|
||||
self.buttonManager()
|
||||
|
||||
|
||||
tModder = tileMod()
|
||||
uPopper = uPop()
|
||||
uButtoner = uButtons()
|
||||
uTexter = uText()
|
||||
uCommunicator = uCommunicate()
|
||||
|
||||
def prerenderGraphics():
|
||||
uButtoner.addButton("Start Game", 850, 500, 200, 50, "darkgray", "gray", "uCommunicator.startGame()", True)
|
||||
uButtoner.addButton("Start Game", 850, 500, "darkgray", "gray", "uCommunicator.startGame()", True)
|
||||
prerenderGraphics()
|
||||
|
||||
|
||||
|
|
@ -457,30 +603,31 @@ while running:
|
|||
print(f"MB1 is true")
|
||||
pos = pygame.mouse.get_pos()
|
||||
uButtoner.pressed(pos)
|
||||
if pos[0] < 830 and pos[1] < 580:
|
||||
if pos[0] < 830 and pos[1] < 580 and uCommunicator.tileSelectable == True:
|
||||
tile_pressed = GameMap.findTileAt(pos)
|
||||
if tile_pressed != None:
|
||||
GameMap.paintTileBorder(tile_pressed, map)
|
||||
tModder.cct(tile_pressed)
|
||||
uCommunicator.tileSelected(tile_pressed)
|
||||
|
||||
# fill the screen with a color to wipe away anything from last frame
|
||||
screen.fill("black")
|
||||
|
||||
if uCommunicator.resourceViewActive == False and uCommunicator.resourceView == True and tile_pressed != None:
|
||||
uButtoner.addButton("State", 850, 0, 120, 50, "darkgray", "gray", "uCommunicator.switchResourceView()", True)
|
||||
uButtoner.addButton("State", 850, 0, "darkgray", "gray", "uCommunicator.switchResourceView()", True)
|
||||
|
||||
if tile_pressed != None and uCommunicator.resourceView == False:
|
||||
uTexter.runResourceView(tile_pressed, "t")
|
||||
elif uCommunicator.globalGameState == 1:
|
||||
uTexter.runResourceView("p1", "p")
|
||||
|
||||
if tile_pressed != None:
|
||||
uCommunicator.tileSelected()
|
||||
|
||||
screen.blit(map, maprect)
|
||||
|
||||
uPopper.drawPop()
|
||||
uButtoner.updateHover()
|
||||
uButtoner.drawButtons()
|
||||
uTexter.runText()
|
||||
|
||||
screen.blit(map, maprect)
|
||||
|
||||
# RENDER YOUR GAME HERE
|
||||
|
||||
|
|
|
|||
|
|
@ -159,7 +159,13 @@ class MapManager:
|
|||
tile.paint_pixels(mapObject, int(colour1),int(colour2),int(colour3))
|
||||
tile.findBorder(mapObject)
|
||||
tile.add_resources(self.TileWorker.get_resource_for(terrain))
|
||||
|
||||
|
||||
#### Interactions
|
||||
def buildHouse(self, tile):
|
||||
pass
|
||||
def buildBigHouse(self, tile):
|
||||
pass
|
||||
# Etc etc
|
||||
|
||||
def re_load(self):
|
||||
print("To Be Implomented")
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
|
|
@ -28,6 +28,12 @@ class RealmManager:
|
|||
p = self.players[x]
|
||||
print(f"Player {p.id}/{p.name} with colour {p.borderColour}")
|
||||
|
||||
def tileInPlayer(self, tile, player):
|
||||
for t in self.players[int(player)].heldTiles:
|
||||
if str(tile) == str(t):
|
||||
return True
|
||||
return False
|
||||
|
||||
def getPlayer(self, detail):
|
||||
if detail == "p1":
|
||||
return self.players[0]
|
||||
|
|
@ -72,6 +78,8 @@ class Player:
|
|||
"tools": 0.0,
|
||||
}
|
||||
self.daywiseResourceGain = {
|
||||
"settlers": 0.0,
|
||||
"villagers": 0.0,
|
||||
"wood": 0.0,
|
||||
"stone": 0.0,
|
||||
"food": 0.0,
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue